On 18/08/17 17:47, Paul Burton wrote: > Hi Marc, > > On Friday, 18 August 2017 04:38:50 PDT Marc Zyngier wrote: >> On 13/08/17 05:36, Paul Burton wrote: >>> We don't really need gic_get_usm_range() to abstract discovery of the >>> address of the GIC user-visible section now that we have access to its >>> base address globally. >>> >>> Switch to calculating it ourselves, which will allow us to stop >>> requiring the irqchip driver to care about a counter exposed to userland >>> for use via the VDSO. >>> >>> Signed-off-by: Paul Burton <paul.burton@xxxxxxxxxx> >>> Cc: Jason Cooper <jason@xxxxxxxxxxxxxx> >>> Cc: Marc Zyngier <marc.zyngier@xxxxxxx> >>> Cc: Ralf Baechle <ralf@xxxxxxxxxxxxxx> >>> Cc: Thomas Gleixner <tglx@xxxxxxxxxxxxx> >>> Cc: linux-mips@xxxxxxxxxxxxxx >>> --- >>> >>> arch/mips/kernel/vdso.c | 15 +++++---------- >>> 1 file changed, 5 insertions(+), 10 deletions(-) >>> >>> diff --git a/arch/mips/kernel/vdso.c b/arch/mips/kernel/vdso.c >>> index 093517e85a6c..019035d7225c 100644 >>> --- a/arch/mips/kernel/vdso.c >>> +++ b/arch/mips/kernel/vdso.c >>> @@ -13,13 +13,13 @@ >>> >>> #include <linux/err.h> >>> #include <linux/init.h> >>> #include <linux/ioport.h> >>> >>> -#include <linux/irqchip/mips-gic.h> >>> >>> #include <linux/mm.h> >>> #include <linux/sched.h> >>> #include <linux/slab.h> >>> #include <linux/timekeeper_internal.h> >>> >>> #include <asm/abi.h> >>> >>> +#include <asm/mips-cps.h> >>> >>> #include <asm/vdso.h> >>> >>> /* Kernel-provided data used by the VDSO. */ >>> >>> @@ -99,9 +99,8 @@ int arch_setup_additional_pages(struct linux_binprm >>> *bprm, int uses_interp)> >>> { >>> >>> struct mips_vdso_image *image = current->thread.abi->vdso; >>> struct mm_struct *mm = current->mm; >>> >>> - unsigned long gic_size, vvar_size, size, base, data_addr, vdso_addr; >>> + unsigned long gic_size, vvar_size, size, base, data_addr, vdso_addr, >>> gic_pfn;> >>> struct vm_area_struct *vma; >>> >>> - struct resource gic_res; >>> >>> int ret; >>> >>> if (down_write_killable(&mm->mmap_sem)) >>> >>> @@ -125,7 +124,7 @@ int arch_setup_additional_pages(struct linux_binprm >>> *bprm, int uses_interp)> >>> * only map a page even though the total area is 64K, as we only need >>> * the counter registers at the start. >>> */ >>> >>> - gic_size = gic_present ? PAGE_SIZE : 0; >>> + gic_size = mips_gic_present() ? PAGE_SIZE : 0; >>> >>> vvar_size = gic_size + PAGE_SIZE; >>> size = vvar_size + image->size; >>> >>> @@ -148,13 +147,9 @@ int arch_setup_additional_pages(struct linux_binprm >>> *bprm, int uses_interp)> >>> /* Map GIC user page. */ >>> if (gic_size) { >>> >>> - ret = gic_get_usm_range(&gic_res); >>> - if (ret) >>> - goto out; >>> + gic_pfn = virt_to_phys(mips_gic_base + MIPS_GIC_USER_OFS) >> >>> PAGE_SHIFT; >> >> virt_to_pfn() instead? > > We don't seem to have virt_to_pfn() on MIPS, but I'd be happy to add it & tidy > up a few places that could use it. Would you mind if that cleanup came > separately though? I don't mind either way. This is a fairly common shortcut, but no need to introduce it (and add more dependencies) on this account. Thanks, M. -- Jazz is not dead. It just smells funny...