Re: [PATCH 0/3] move __HAVE_ARCH_PTE_SPECIAL in Kconfig
On Mon, Apr 09, 2018 at 04:07:21PM +0200, Michal Hocko wrote: > On Mon 09-04-18 15:57:06, Laurent Dufour wrote: > > The per architecture __HAVE_ARCH_PTE_SPECIAL is defined statically in the > > per architecture header files. This doesn't allow to make other > > configuration dependent on it. > > > > This series is moving the __HAVE_ARCH_PTE_SPECIAL into the Kconfig files, > > setting it automatically when architectures was already setting it in > > header file. > > > > There is no functional change introduced by this series. > > I would just fold all three patches into a single one. It is much easier > to review that those selects are done properly when you can see that the > define is set for the same architecture. > > In general, I like the patch. It is always quite painful to track per > arch defines. You can also add Reviewed-by: Jérôme Glissemy grep fu showed no place that was forgotten. Cheers, Jérôme -- To unsubscribe from this list: send the line "unsubscribe linux-doc" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH 4/8] Uprobe: Export uprobe_map_info along with uprobe_{build/free}_map_info()
On Tue, Mar 13, 2018 at 06:25:59PM +0530, Ravi Bangoria wrote: > These exported data structure and functions will be used by other > files in later patches. > > No functionality changes. > > Signed-off-by: Ravi BangoriaReviewed-by: Jérôme Glisse > --- > include/linux/uprobes.h | 9 + > kernel/events/uprobes.c | 14 +++--- > 2 files changed, 12 insertions(+), 11 deletions(-) > > diff --git a/include/linux/uprobes.h b/include/linux/uprobes.h > index 0a294e9..7bd2760 100644 > --- a/include/linux/uprobes.h > +++ b/include/linux/uprobes.h > @@ -109,12 +109,19 @@ enum rp_check { > RP_CHECK_RET, > }; > > +struct address_space; > struct xol_area; > > struct uprobes_state { > struct xol_area *xol_area; > }; > > +struct uprobe_map_info { > + struct uprobe_map_info *next; > + struct mm_struct *mm; > + unsigned long vaddr; > +}; > + > extern int set_swbp(struct arch_uprobe *aup, struct mm_struct *mm, unsigned > long vaddr); > extern int set_orig_insn(struct arch_uprobe *aup, struct mm_struct *mm, > unsigned long vaddr); > extern bool is_swbp_insn(uprobe_opcode_t *insn); > @@ -149,6 +156,8 @@ struct uprobes_state { > extern bool arch_uprobe_ignore(struct arch_uprobe *aup, struct pt_regs > *regs); > extern void arch_uprobe_copy_ixol(struct page *page, unsigned long vaddr, >void *src, unsigned long len); > +extern struct uprobe_map_info *uprobe_free_map_info(struct uprobe_map_info > *info); > +extern struct uprobe_map_info *uprobe_build_map_info(struct address_space > *mapping, loff_t offset, bool is_register); > #else /* !CONFIG_UPROBES */ > struct uprobes_state { > }; > diff --git a/kernel/events/uprobes.c b/kernel/events/uprobes.c > index 081b88c1..e7830b8 100644 > --- a/kernel/events/uprobes.c > +++ b/kernel/events/uprobes.c > @@ -695,23 +695,15 @@ static void delete_uprobe(struct uprobe *uprobe) > put_uprobe(uprobe); > } > > -struct uprobe_map_info { > - struct uprobe_map_info *next; > - struct mm_struct *mm; > - unsigned long vaddr; > -}; > - > -static inline struct uprobe_map_info * > -uprobe_free_map_info(struct uprobe_map_info *info) > +struct uprobe_map_info *uprobe_free_map_info(struct uprobe_map_info *info) > { > struct uprobe_map_info *next = info->next; > kfree(info); > return next; > } > > -static struct uprobe_map_info * > -uprobe_build_map_info(struct address_space *mapping, loff_t offset, > - bool is_register) > +struct uprobe_map_info *uprobe_build_map_info(struct address_space *mapping, > + loff_t offset, bool is_register) > { > unsigned long pgoff = offset >> PAGE_SHIFT; > struct vm_area_struct *vma; > -- > 1.8.3.1 > -- To unsubscribe from this list: send the line "unsubscribe linux-doc" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH 3/8] Uprobe: Rename map_info to uprobe_map_info
On Tue, Mar 13, 2018 at 06:25:58PM +0530, Ravi Bangoria wrote: > map_info is very generic name, rename it to uprobe_map_info. > Renaming will help to export this structure outside of the > file. > > Also rename free_map_info() to uprobe_free_map_info() and > build_map_info() to uprobe_build_map_info(). > > No functionality changes. > > Signed-off-by: Ravi BangoriaSame coccinelle comments as previously. Reviewed-by: Jérôme Glisse > --- > kernel/events/uprobes.c | 32 +--- > 1 file changed, 17 insertions(+), 15 deletions(-) > > diff --git a/kernel/events/uprobes.c b/kernel/events/uprobes.c > index 535fd39..081b88c1 100644 > --- a/kernel/events/uprobes.c > +++ b/kernel/events/uprobes.c > @@ -695,27 +695,29 @@ static void delete_uprobe(struct uprobe *uprobe) > put_uprobe(uprobe); > } > > -struct map_info { > - struct map_info *next; > +struct uprobe_map_info { > + struct uprobe_map_info *next; > struct mm_struct *mm; > unsigned long vaddr; > }; > > -static inline struct map_info *free_map_info(struct map_info *info) > +static inline struct uprobe_map_info * > +uprobe_free_map_info(struct uprobe_map_info *info) > { > - struct map_info *next = info->next; > + struct uprobe_map_info *next = info->next; > kfree(info); > return next; > } > > -static struct map_info * > -build_map_info(struct address_space *mapping, loff_t offset, bool > is_register) > +static struct uprobe_map_info * > +uprobe_build_map_info(struct address_space *mapping, loff_t offset, > + bool is_register) > { > unsigned long pgoff = offset >> PAGE_SHIFT; > struct vm_area_struct *vma; > - struct map_info *curr = NULL; > - struct map_info *prev = NULL; > - struct map_info *info; > + struct uprobe_map_info *curr = NULL; > + struct uprobe_map_info *prev = NULL; > + struct uprobe_map_info *info; > int more = 0; > > again: > @@ -729,7 +731,7 @@ static inline struct map_info *free_map_info(struct > map_info *info) >* Needs GFP_NOWAIT to avoid i_mmap_rwsem recursion > through >* reclaim. This is optimistic, no harm done if it > fails. >*/ > - prev = kmalloc(sizeof(struct map_info), > + prev = kmalloc(sizeof(struct uprobe_map_info), > GFP_NOWAIT | __GFP_NOMEMALLOC | > __GFP_NOWARN); > if (prev) > prev->next = NULL; > @@ -762,7 +764,7 @@ static inline struct map_info *free_map_info(struct > map_info *info) > } > > do { > - info = kmalloc(sizeof(struct map_info), GFP_KERNEL); > + info = kmalloc(sizeof(struct uprobe_map_info), GFP_KERNEL); > if (!info) { > curr = ERR_PTR(-ENOMEM); > goto out; > @@ -774,7 +776,7 @@ static inline struct map_info *free_map_info(struct > map_info *info) > goto again; > out: > while (prev) > - prev = free_map_info(prev); > + prev = uprobe_free_map_info(prev); > return curr; > } > > @@ -782,11 +784,11 @@ static inline struct map_info *free_map_info(struct > map_info *info) > register_for_each_vma(struct uprobe *uprobe, struct uprobe_consumer *new) > { > bool is_register = !!new; > - struct map_info *info; > + struct uprobe_map_info *info; > int err = 0; > > percpu_down_write(_mmap_sem); > - info = build_map_info(uprobe->inode->i_mapping, > + info = uprobe_build_map_info(uprobe->inode->i_mapping, > uprobe->offset, is_register); > if (IS_ERR(info)) { > err = PTR_ERR(info); > @@ -825,7 +827,7 @@ static inline struct map_info *free_map_info(struct > map_info *info) > up_write(>mmap_sem); > free: > mmput(mm); > - info = free_map_info(info); > + info = uprobe_free_map_info(info); > } > out: > percpu_up_write(_mmap_sem); > -- > 1.8.3.1 > -- To unsubscribe from this list: send the line "unsubscribe linux-doc" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH 2/8] mm: Prefix vma_ to vaddr_to_offset() and offset_to_vaddr()
On Tue, Mar 13, 2018 at 06:25:57PM +0530, Ravi Bangoria wrote: > No functionality changes. > > Signed-off-by: Ravi BangoriaDoing this with coccinelle would have been nicer but this is small enough to review without too much fatigue :) Reviewed-by: Jérôme Glisse > --- > include/linux/mm.h | 4 ++-- > kernel/events/uprobes.c | 14 +++--- > 2 files changed, 9 insertions(+), 9 deletions(-) > > diff --git a/include/linux/mm.h b/include/linux/mm.h > index 95909f2..d7ee526 100644 > --- a/include/linux/mm.h > +++ b/include/linux/mm.h > @@ -2275,13 +2275,13 @@ struct vm_unmapped_area_info { > } > > static inline unsigned long > -offset_to_vaddr(struct vm_area_struct *vma, loff_t offset) > +vma_offset_to_vaddr(struct vm_area_struct *vma, loff_t offset) > { > return vma->vm_start + offset - ((loff_t)vma->vm_pgoff << PAGE_SHIFT); > } > > static inline loff_t > -vaddr_to_offset(struct vm_area_struct *vma, unsigned long vaddr) > +vma_vaddr_to_offset(struct vm_area_struct *vma, unsigned long vaddr) > { > return ((loff_t)vma->vm_pgoff << PAGE_SHIFT) + (vaddr - vma->vm_start); > } > diff --git a/kernel/events/uprobes.c b/kernel/events/uprobes.c > index bd6f230..535fd39 100644 > --- a/kernel/events/uprobes.c > +++ b/kernel/events/uprobes.c > @@ -748,7 +748,7 @@ static inline struct map_info *free_map_info(struct > map_info *info) > curr = info; > > info->mm = vma->vm_mm; > - info->vaddr = offset_to_vaddr(vma, offset); > + info->vaddr = vma_offset_to_vaddr(vma, offset); > } > i_mmap_unlock_read(mapping); > > @@ -807,7 +807,7 @@ static inline struct map_info *free_map_info(struct > map_info *info) > goto unlock; > > if (vma->vm_start > info->vaddr || > - vaddr_to_offset(vma, info->vaddr) != uprobe->offset) > + vma_vaddr_to_offset(vma, info->vaddr) != uprobe->offset) > goto unlock; > > if (is_register) { > @@ -977,7 +977,7 @@ static int unapply_uprobe(struct uprobe *uprobe, struct > mm_struct *mm) > uprobe->offset >= offset + vma->vm_end - vma->vm_start) > continue; > > - vaddr = offset_to_vaddr(vma, uprobe->offset); > + vaddr = vma_offset_to_vaddr(vma, uprobe->offset); > err |= remove_breakpoint(uprobe, mm, vaddr); > } > up_read(>mmap_sem); > @@ -1023,7 +1023,7 @@ static void build_probe_list(struct inode *inode, > struct uprobe *u; > > INIT_LIST_HEAD(head); > - min = vaddr_to_offset(vma, start); > + min = vma_vaddr_to_offset(vma, start); > max = min + (end - start) - 1; > > spin_lock(_treelock); > @@ -1076,7 +1076,7 @@ int uprobe_mmap(struct vm_area_struct *vma) > list_for_each_entry_safe(uprobe, u, _list, pending_list) { > if (!fatal_signal_pending(current) && > filter_chain(uprobe, UPROBE_FILTER_MMAP, vma->vm_mm)) { > - unsigned long vaddr = offset_to_vaddr(vma, > uprobe->offset); > + unsigned long vaddr = vma_offset_to_vaddr(vma, > uprobe->offset); > install_breakpoint(uprobe, vma->vm_mm, vma, vaddr); > } > put_uprobe(uprobe); > @@ -1095,7 +1095,7 @@ int uprobe_mmap(struct vm_area_struct *vma) > > inode = file_inode(vma->vm_file); > > - min = vaddr_to_offset(vma, start); > + min = vma_vaddr_to_offset(vma, start); > max = min + (end - start) - 1; > > spin_lock(_treelock); > @@ -1730,7 +1730,7 @@ static struct uprobe *find_active_uprobe(unsigned long > bp_vaddr, int *is_swbp) > if (vma && vma->vm_start <= bp_vaddr) { > if (valid_vma(vma, false)) { > struct inode *inode = file_inode(vma->vm_file); > - loff_t offset = vaddr_to_offset(vma, bp_vaddr); > + loff_t offset = vma_vaddr_to_offset(vma, bp_vaddr); > > uprobe = find_uprobe(inode, offset); > } > -- > 1.8.3.1 > -- To unsubscribe from this list: send the line "unsubscribe linux-doc" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH 1/8] Uprobe: Export vaddr <-> offset conversion functions
On Tue, Mar 13, 2018 at 06:25:56PM +0530, Ravi Bangoria wrote: > No functionality changes. > > Signed-off-by: Ravi BangoriaReviewed-by: Jérôme Glisse > --- > include/linux/mm.h | 12 > kernel/events/uprobes.c | 10 -- > 2 files changed, 12 insertions(+), 10 deletions(-) > > diff --git a/include/linux/mm.h b/include/linux/mm.h > index ad06d42..95909f2 100644 > --- a/include/linux/mm.h > +++ b/include/linux/mm.h > @@ -2274,6 +2274,18 @@ struct vm_unmapped_area_info { > return unmapped_area(info); > } > > +static inline unsigned long > +offset_to_vaddr(struct vm_area_struct *vma, loff_t offset) > +{ > + return vma->vm_start + offset - ((loff_t)vma->vm_pgoff << PAGE_SHIFT); > +} > + > +static inline loff_t > +vaddr_to_offset(struct vm_area_struct *vma, unsigned long vaddr) > +{ > + return ((loff_t)vma->vm_pgoff << PAGE_SHIFT) + (vaddr - vma->vm_start); > +} > + > /* truncate.c */ > extern void truncate_inode_pages(struct address_space *, loff_t); > extern void truncate_inode_pages_range(struct address_space *, > diff --git a/kernel/events/uprobes.c b/kernel/events/uprobes.c > index ce6848e..bd6f230 100644 > --- a/kernel/events/uprobes.c > +++ b/kernel/events/uprobes.c > @@ -130,16 +130,6 @@ static bool valid_vma(struct vm_area_struct *vma, bool > is_register) > return vma->vm_file && (vma->vm_flags & flags) == VM_MAYEXEC; > } > > -static unsigned long offset_to_vaddr(struct vm_area_struct *vma, loff_t > offset) > -{ > - return vma->vm_start + offset - ((loff_t)vma->vm_pgoff << PAGE_SHIFT); > -} > - > -static loff_t vaddr_to_offset(struct vm_area_struct *vma, unsigned long > vaddr) > -{ > - return ((loff_t)vma->vm_pgoff << PAGE_SHIFT) + (vaddr - vma->vm_start); > -} > - > /** > * __replace_page - replace page in vma by new page. > * based on replace_page in mm/ksm.c > -- > 1.8.3.1 > -- To unsubscribe from this list: send the line "unsubscribe linux-doc" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html