Re: FAILED: patch "[PATCH] MIPS: VDSO: Match data page cache colouring when D$ aliases" failed to apply to 4.4-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sun, Sep 16, 2018 at 09:48:48PM +0800, SZ Lin (林上智) wrote:
> Hi,
> 
> On Sun, Sep 16, 2018 at 02:11:33PM +0200, gregkh@xxxxxxxxxxxxxxxxxxx wrote:
> > 
> > The patch below does not apply to the 4.4-stable tree.
> > If someone wants it applied there, or to any other stable or longterm
> > tree, then please email the backport, including the original git commit
> > id to <stable@xxxxxxxxxxxxxxx>.
> 
> Please find attached patch 00578cd864d45 ("MIPS: VDSO: Drop gic_get_usm_range() usage")
>  and apply to {4.4,4.9}-stable tree for solving this conflict.
> 
> Thanks!
> 
> SZ Lin (林上智)
> 
> > 
> > thanks,
> > 
> > greg k-h
> > 
> > ------------------ original commit in Linus's tree ------------------
> > 
> > From 0f02cfbc3d9e413d450d8d0fd660077c23f67eff Mon Sep 17 00:00:00 2001
> > From: Paul Burton <paul.burton@xxxxxxxx>
> > Date: Thu, 30 Aug 2018 11:01:21 -0700
> > Subject: [PATCH] MIPS: VDSO: Match data page cache colouring when D$ aliases
> > 
> > When a system suffers from dcache aliasing a user program may observe
> > stale VDSO data from an aliased cache line. Notably this can break the
> > expectation that clock_gettime(CLOCK_MONOTONIC, ...) is, as its name
> > suggests, monotonic.
> > 
> > In order to ensure that users observe updates to the VDSO data page as
> > intended, align the user mappings of the VDSO data page such that their
> > cache colouring matches that of the virtual address range which the
> > kernel will use to update the data page - typically its unmapped address
> > within kseg0.
> > 
> > This ensures that we don't introduce aliasing cache lines for the VDSO
> > data page, and therefore that userland will observe updates without
> > requiring cache invalidation.
> > 
> > Signed-off-by: Paul Burton <paul.burton@xxxxxxxx>
> > Reported-by: Hauke Mehrtens <hauke@xxxxxxxxxx>
> > Reported-by: Rene Nielsen <rene.nielsen@xxxxxxxxxxxxx>
> > Reported-by: Alexandre Belloni <alexandre.belloni@xxxxxxxxxxx>
> > Fixes: ebb5e78cc634 ("MIPS: Initial implementation of a VDSO")
> > Patchwork: https://patchwork.linux-mips.org/patch/20344/
> > Tested-by: Alexandre Belloni <alexandre.belloni@xxxxxxxxxxx>
> > Tested-by: Hauke Mehrtens <hauke@xxxxxxxxxx>
> > Cc: James Hogan <jhogan@xxxxxxxxxx>
> > Cc: linux-mips@xxxxxxxxxxxxxx
> > Cc: stable@xxxxxxxxxxxxxxx # v4.4+
> > 
> > diff --git a/arch/mips/kernel/vdso.c b/arch/mips/kernel/vdso.c
> > index 019035d7225c..8f845f6e5f42 100644
> > --- a/arch/mips/kernel/vdso.c
> > +++ b/arch/mips/kernel/vdso.c
> > @@ -13,6 +13,7 @@
> >  #include <linux/err.h>
> >  #include <linux/init.h>
> >  #include <linux/ioport.h>
> > +#include <linux/kernel.h>
> >  #include <linux/mm.h>
> >  #include <linux/sched.h>
> >  #include <linux/slab.h>
> > @@ -20,6 +21,7 @@
> >  
> >  #include <asm/abi.h>
> >  #include <asm/mips-cps.h>
> > +#include <asm/page.h>
> >  #include <asm/vdso.h>
> >  
> >  /* Kernel-provided data used by the VDSO. */
> > @@ -128,12 +130,30 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp)
> >  	vvar_size = gic_size + PAGE_SIZE;
> >  	size = vvar_size + image->size;
> >  
> > +	/*
> > +	 * Find a region that's large enough for us to perform the
> > +	 * colour-matching alignment below.
> > +	 */
> > +	if (cpu_has_dc_aliases)
> > +		size += shm_align_mask + 1;
> > +
> >  	base = get_unmapped_area(NULL, 0, size, 0, 0);
> >  	if (IS_ERR_VALUE(base)) {
> >  		ret = base;
> >  		goto out;
> >  	}
> >  
> > +	/*
> > +	 * If we suffer from dcache aliasing, ensure that the VDSO data page
> > +	 * mapping is coloured the same as the kernel's mapping of that memory.
> > +	 * This ensures that when the kernel updates the VDSO data userland
> > +	 * will observe it without requiring cache invalidations.
> > +	 */
> > +	if (cpu_has_dc_aliases) {
> > +		base = __ALIGN_MASK(base, shm_align_mask);
> > +		base += ((unsigned long)&vdso_data - gic_size) & shm_align_mask;
> > +	}
> > +
> >  	data_addr = base + gic_size;
> >  	vdso_addr = data_addr + PAGE_SIZE;
> >  
> > 
> 
> -- 
> SZ Lin (林上智) <szlin@xxxxxxxxxx>, http://people.debian.org/~szlin
> 
> Debian Developer, debian.org.tw Administrator
> 
> 4096R/ 178F 8338 B314 01E3 04FC 44BA A959 B38A 9561 F3F9

> >From 890151c23e16a48ad0ba05ff60633234c1934c8b Mon Sep 17 00:00:00 2001
> From: Paul Burton <paul.burton@xxxxxxxxxx>
> Date: Sat, 12 Aug 2017 21:36:30 -0700
> Subject: [PATCH] MIPS: VDSO: Drop gic_get_usm_range() usage
> 
> commit 00578cd864d45ae4b8fa3f684f8d6f783dd8d15d upstream
> 
> 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: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
> Cc: linux-mips@xxxxxxxxxxxxxx
> Patchwork: https://patchwork.linux-mips.org/patch/17040/
> Signed-off-by: Ralf Baechle <ralf@xxxxxxxxxxxxxx>
> Signed-off-by: SZ Lin (林上智) <sz.lin@xxxxxxxx>

I do not understand.  What "bug" is this fixing that this needs to be
backported for?

thanks,

greg k-h



[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux