| Date | Thu, 15 Mar 2018 16:01:57 +0100 | From | Oleg Nesterov <> | Subject | Re: [PATCH 5/8] trace_uprobe: Support SDT markers having reference count (semaphore) |
| |
On 03/13, Ravi Bangoria wrote: > > +sdt_update_ref_ctr(struct mm_struct *mm, unsigned long vaddr, short d) > +{ > + void *kaddr; > + struct page *page; > + struct vm_area_struct *vma; > + int ret = 0; > + unsigned short orig = 0; > + > + if (vaddr == 0) > + return -EINVAL; > + > + ret = get_user_pages_remote(NULL, mm, vaddr, 1, > + FOLL_FORCE | FOLL_WRITE, &page, &vma, NULL); > + if (ret <= 0) > + return ret; > + > + kaddr = kmap_atomic(page); > + memcpy(&orig, kaddr + (vaddr & ~PAGE_MASK), sizeof(orig)); > + orig += d; > + memcpy(kaddr + (vaddr & ~PAGE_MASK), &orig, sizeof(orig)); > + kunmap_atomic(kaddr);
Hmm. Why memcpy? You could simply do
kaddr = kmap_atomic(); unsigned short *ptr = kaddr + (vaddr & ~PAGE_MASK); *ptr += d; kunmap_atomic();
Oleg.
|