Message ID | 20220607125027.44946-3-wangkefeng.wang@huawei.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | arm64: Cleanup ioremap() and support ioremap_prot() | expand |
On 06/07/22 at 08:50pm, Kefeng Wang wrote: > Use more meaningful and sensibly naming phys_addr > instead addr in ioremap_prot(). > > Suggested-by: Andrew Morton <akpm@linux-foundation.org> > Reviewed-by: Anshuman Khandual <anshuman.khandual@arm.com> > Signed-off-by: Kefeng Wang <wangkefeng.wang@huawei.com> > --- > include/asm-generic/io.h | 3 ++- > mm/ioremap.c | 14 ++++++++------ > 2 files changed, 10 insertions(+), 7 deletions(-) > > diff --git a/include/asm-generic/io.h b/include/asm-generic/io.h > index 7ce93aaf69f8..b76379628a02 100644 > --- a/include/asm-generic/io.h > +++ b/include/asm-generic/io.h > @@ -964,7 +964,8 @@ static inline void iounmap(volatile void __iomem *addr) > #elif defined(CONFIG_GENERIC_IOREMAP) > #include <linux/pgtable.h> > > -void __iomem *ioremap_prot(phys_addr_t addr, size_t size, unsigned long prot); > +void __iomem *ioremap_prot(phys_addr_t phys_addr, size_t size, > + unsigned long prot); > void iounmap(volatile void __iomem *addr); > > static inline void __iomem *ioremap(phys_addr_t addr, size_t size) > diff --git a/mm/ioremap.c b/mm/ioremap.c > index 5fe598ecd9b7..2d754b48d230 100644 > --- a/mm/ioremap.c > +++ b/mm/ioremap.c > @@ -11,20 +11,21 @@ > #include <linux/io.h> > #include <linux/export.h> > > -void __iomem *ioremap_prot(phys_addr_t addr, size_t size, unsigned long prot) > +void __iomem *ioremap_prot(phys_addr_t phys_addr, size_t size, > + unsigned long prot) > { > unsigned long offset, vaddr; > phys_addr_t last_addr; > struct vm_struct *area; > > /* Disallow wrap-around or zero size */ > - last_addr = addr + size - 1; > - if (!size || last_addr < addr) > + last_addr = phys_addr + size - 1; > + if (!size || last_addr < phys_addr) > return NULL; > > /* Page-align mappings */ > - offset = addr & (~PAGE_MASK); > - addr -= offset; > + offset = phys_addr & (~PAGE_MASK); ~~~ use offset_in_page() instead? Other than this nitpick, this looks good to me. Reviewed-by: Baoquan He <bhe@redhat.com> > + phys_addr -= offset; > size = PAGE_ALIGN(size + offset); > > area = get_vm_area_caller(size, VM_IOREMAP, > @@ -33,7 +34,8 @@ void __iomem *ioremap_prot(phys_addr_t addr, size_t size, unsigned long prot) > return NULL; > vaddr = (unsigned long)area->addr; > > - if (ioremap_page_range(vaddr, vaddr + size, addr, __pgprot(prot))) { > + if (ioremap_page_range(vaddr, vaddr + size, phys_addr, > + __pgprot(prot))) { > free_vm_area(area); > return NULL; > } > -- > 2.35.3 > >
Looks good:
Reviewed-by: Christoph Hellwig <hch@lst.de>
On 06/07/22 at 08:50pm, Kefeng Wang wrote: > Use more meaningful and sensibly naming phys_addr ~~ sensible, typo and please fix the subject too. > instead addr in ioremap_prot(). > > Suggested-by: Andrew Morton <akpm@linux-foundation.org> > Reviewed-by: Anshuman Khandual <anshuman.khandual@arm.com> > Signed-off-by: Kefeng Wang <wangkefeng.wang@huawei.com> > --- > include/asm-generic/io.h | 3 ++- > mm/ioremap.c | 14 ++++++++------ > 2 files changed, 10 insertions(+), 7 deletions(-) > > diff --git a/include/asm-generic/io.h b/include/asm-generic/io.h > index 7ce93aaf69f8..b76379628a02 100644 > --- a/include/asm-generic/io.h > +++ b/include/asm-generic/io.h > @@ -964,7 +964,8 @@ static inline void iounmap(volatile void __iomem *addr) > #elif defined(CONFIG_GENERIC_IOREMAP) > #include <linux/pgtable.h> > > -void __iomem *ioremap_prot(phys_addr_t addr, size_t size, unsigned long prot); > +void __iomem *ioremap_prot(phys_addr_t phys_addr, size_t size, > + unsigned long prot); > void iounmap(volatile void __iomem *addr); > > static inline void __iomem *ioremap(phys_addr_t addr, size_t size) > diff --git a/mm/ioremap.c b/mm/ioremap.c > index 5fe598ecd9b7..2d754b48d230 100644 > --- a/mm/ioremap.c > +++ b/mm/ioremap.c > @@ -11,20 +11,21 @@ > #include <linux/io.h> > #include <linux/export.h> > > -void __iomem *ioremap_prot(phys_addr_t addr, size_t size, unsigned long prot) > +void __iomem *ioremap_prot(phys_addr_t phys_addr, size_t size, > + unsigned long prot) > { > unsigned long offset, vaddr; > phys_addr_t last_addr; > struct vm_struct *area; > > /* Disallow wrap-around or zero size */ > - last_addr = addr + size - 1; > - if (!size || last_addr < addr) > + last_addr = phys_addr + size - 1; > + if (!size || last_addr < phys_addr) > return NULL; > > /* Page-align mappings */ > - offset = addr & (~PAGE_MASK); > - addr -= offset; > + offset = phys_addr & (~PAGE_MASK); > + phys_addr -= offset; > size = PAGE_ALIGN(size + offset); > > area = get_vm_area_caller(size, VM_IOREMAP, > @@ -33,7 +34,8 @@ void __iomem *ioremap_prot(phys_addr_t addr, size_t size, unsigned long prot) > return NULL; > vaddr = (unsigned long)area->addr; > > - if (ioremap_page_range(vaddr, vaddr + size, addr, __pgprot(prot))) { > + if (ioremap_page_range(vaddr, vaddr + size, phys_addr, > + __pgprot(prot))) { > free_vm_area(area); > return NULL; > } > -- > 2.35.3 > >
On 06/08/22 at 12:16pm, Baoquan He wrote: > On 06/07/22 at 08:50pm, Kefeng Wang wrote: > > Use more meaningful and sensibly naming phys_addr > > instead addr in ioremap_prot(). > > > > Suggested-by: Andrew Morton <akpm@linux-foundation.org> > > Reviewed-by: Anshuman Khandual <anshuman.khandual@arm.com> > > Signed-off-by: Kefeng Wang <wangkefeng.wang@huawei.com> > > --- > > include/asm-generic/io.h | 3 ++- > > mm/ioremap.c | 14 ++++++++------ > > 2 files changed, 10 insertions(+), 7 deletions(-) > > > > diff --git a/include/asm-generic/io.h b/include/asm-generic/io.h > > index 7ce93aaf69f8..b76379628a02 100644 > > --- a/include/asm-generic/io.h > > +++ b/include/asm-generic/io.h > > @@ -964,7 +964,8 @@ static inline void iounmap(volatile void __iomem *addr) > > #elif defined(CONFIG_GENERIC_IOREMAP) > > #include <linux/pgtable.h> > > > > -void __iomem *ioremap_prot(phys_addr_t addr, size_t size, unsigned long prot); > > +void __iomem *ioremap_prot(phys_addr_t phys_addr, size_t size, > > + unsigned long prot); > > void iounmap(volatile void __iomem *addr); > > > > static inline void __iomem *ioremap(phys_addr_t addr, size_t size) > > diff --git a/mm/ioremap.c b/mm/ioremap.c > > index 5fe598ecd9b7..2d754b48d230 100644 > > --- a/mm/ioremap.c > > +++ b/mm/ioremap.c > > @@ -11,20 +11,21 @@ > > #include <linux/io.h> > > #include <linux/export.h> > > > > -void __iomem *ioremap_prot(phys_addr_t addr, size_t size, unsigned long prot) > > +void __iomem *ioremap_prot(phys_addr_t phys_addr, size_t size, > > + unsigned long prot) > > { > > unsigned long offset, vaddr; > > phys_addr_t last_addr; > > struct vm_struct *area; > > > > /* Disallow wrap-around or zero size */ > > - last_addr = addr + size - 1; > > - if (!size || last_addr < addr) > > + last_addr = phys_addr + size - 1; > > + if (!size || last_addr < phys_addr) > > return NULL; > > > > /* Page-align mappings */ > > - offset = addr & (~PAGE_MASK); > > - addr -= offset; > > + offset = phys_addr & (~PAGE_MASK); > ~~~ use offset_in_page() instead? Sorry, this patch only does s/addr/phys_addr/, please ignore this comment. > > Other than this nitpick, this looks good to me. > > Reviewed-by: Baoquan He <bhe@redhat.com> > > > + phys_addr -= offset; > > size = PAGE_ALIGN(size + offset); > > > > area = get_vm_area_caller(size, VM_IOREMAP, > > @@ -33,7 +34,8 @@ void __iomem *ioremap_prot(phys_addr_t addr, size_t size, unsigned long prot) > > return NULL; > > vaddr = (unsigned long)area->addr; > > > > - if (ioremap_page_range(vaddr, vaddr + size, addr, __pgprot(prot))) { > > + if (ioremap_page_range(vaddr, vaddr + size, phys_addr, > > + __pgprot(prot))) { > > free_vm_area(area); > > return NULL; > > } > > -- > > 2.35.3 > > > > >
diff --git a/include/asm-generic/io.h b/include/asm-generic/io.h index 7ce93aaf69f8..b76379628a02 100644 --- a/include/asm-generic/io.h +++ b/include/asm-generic/io.h @@ -964,7 +964,8 @@ static inline void iounmap(volatile void __iomem *addr) #elif defined(CONFIG_GENERIC_IOREMAP) #include <linux/pgtable.h> -void __iomem *ioremap_prot(phys_addr_t addr, size_t size, unsigned long prot); +void __iomem *ioremap_prot(phys_addr_t phys_addr, size_t size, + unsigned long prot); void iounmap(volatile void __iomem *addr); static inline void __iomem *ioremap(phys_addr_t addr, size_t size) diff --git a/mm/ioremap.c b/mm/ioremap.c index 5fe598ecd9b7..2d754b48d230 100644 --- a/mm/ioremap.c +++ b/mm/ioremap.c @@ -11,20 +11,21 @@ #include <linux/io.h> #include <linux/export.h> -void __iomem *ioremap_prot(phys_addr_t addr, size_t size, unsigned long prot) +void __iomem *ioremap_prot(phys_addr_t phys_addr, size_t size, + unsigned long prot) { unsigned long offset, vaddr; phys_addr_t last_addr; struct vm_struct *area; /* Disallow wrap-around or zero size */ - last_addr = addr + size - 1; - if (!size || last_addr < addr) + last_addr = phys_addr + size - 1; + if (!size || last_addr < phys_addr) return NULL; /* Page-align mappings */ - offset = addr & (~PAGE_MASK); - addr -= offset; + offset = phys_addr & (~PAGE_MASK); + phys_addr -= offset; size = PAGE_ALIGN(size + offset); area = get_vm_area_caller(size, VM_IOREMAP, @@ -33,7 +34,8 @@ void __iomem *ioremap_prot(phys_addr_t addr, size_t size, unsigned long prot) return NULL; vaddr = (unsigned long)area->addr; - if (ioremap_page_range(vaddr, vaddr + size, addr, __pgprot(prot))) { + if (ioremap_page_range(vaddr, vaddr + size, phys_addr, + __pgprot(prot))) { free_vm_area(area); return NULL; }