Re: [OS-BUILD PATCH 2/2] Merge branch 'os-build' into '2-Makefile-GIT-macro'

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

 



Hi Ben,

I think you refreshed this patch incorrectly.  You should have 'rebased' on
top of the latest os-build branch instead of merging it in.  Can you do that
and git push -f again?

Cheers,
Don

On Wed, Sep 30, 2020 at 03:13:49PM -0000, GitLab Bridge on behalf of bcrocker wrote:
> From: Tianjia Zhang <tianjia.zhang@xxxxxxxxxxxxxxxxx>
> 
> In the init function, if the call to of_iomap() fails, the return
> value is ENXIO instead of -ENXIO.
> 
> Change to the right negative errno.
> 
> Fixes: 691f8f878290f ("clocksource/drivers/h8300_timer8: Convert init function to return error")
> Cc: Daniel Lezcano <daniel.lezcano@xxxxxxxxxx>
> Signed-off-by: Tianjia Zhang <tianjia.zhang@xxxxxxxxxxxxxxxxx>
> Signed-off-by: Daniel Lezcano <daniel.lezcano@xxxxxxxxxx>
> Link: https://lore.kernel.org/r/20200802111541.5429-1-tianjia.zhang@xxxxxxxxxxxxxxxxx
> ---
>  drivers/clocksource/h8300_timer8.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/clocksource/h8300_timer8.c b/drivers/clocksource/h8300_timer8.c
> index 1d740a8c42ab..47114c2a7cb5 100644
> --- a/drivers/clocksource/h8300_timer8.c
> +++ b/drivers/clocksource/h8300_timer8.c
> @@ -169,7 +169,7 @@ static int __init h8300_8timer_init(struct device_node *node)
>  		return PTR_ERR(clk);
>  	}
>  
> -	ret = ENXIO;
> +	ret = -ENXIO;
>  	base = of_iomap(node, 0);
>  	if (!base) {
>  		pr_err("failed to map registers for clockevent\n");
> -- 
> GitLab
> 
> 
> From 164805157f3c6834670afbaff563353c773131f1 Mon Sep 17 00:00:00 2001
> From: Tony Lindgren <tony@xxxxxxxxxxx>
> Date: Mon, 17 Aug 2020 12:24:28 +0300
> Subject: [PATCH 002/126] clocksource/drivers/timer-ti-dm: Do reset before
>  enable
> 
> Commit 6cfcd5563b4f ("clocksource/drivers/timer-ti-dm: Fix suspend and
> resume for am3 and am4") exposed a new issue for type2 dual mode timers
> on at least omap5 where the clockevent will stop when the SoC starts
> entering idle states during the boot.
> 
> Turns out we are wrongly first enabling the system timer and then
> resetting it, while we must also re-enable it after reset. The current
> sequence leaves the timer module in a partially initialized state. This
> issue went unnoticed earlier with ti-sysc driver reconfiguring the timer
> module until we fixed the issue of ti-sysc reconfiguring system timers.
> 
> Let's fix the issue by calling dmtimer_systimer_enable() from reset for
> both type1 and type2 timers, and switch the order of reset and enable in
> dmtimer_systimer_setup(). Let's also move dmtimer_systimer_enable() and
> dmtimer_systimer_disable() to do this without adding forward declarations.
> 
> Fixes: 6cfcd5563b4f ("clocksource/drivers/timer-ti-dm: Fix suspend and resume for am3 and am4")
> Reported-by: H. Nikolaus Schaller" <hns@xxxxxxxxxxxxx>
> Signed-off-by: Tony Lindgren <tony@xxxxxxxxxxx>
> Signed-off-by: Daniel Lezcano <daniel.lezcano@xxxxxxxxxx>
> Link: https://lore.kernel.org/r/20200817092428.6176-1-tony@xxxxxxxxxxx
> ---
>  drivers/clocksource/timer-ti-dm-systimer.c | 44 +++++++++++-----------
>  1 file changed, 23 insertions(+), 21 deletions(-)
> 
> diff --git a/drivers/clocksource/timer-ti-dm-systimer.c b/drivers/clocksource/timer-ti-dm-systimer.c
> index f6fd1c1cc527..33b3e8aa2cc5 100644
> --- a/drivers/clocksource/timer-ti-dm-systimer.c
> +++ b/drivers/clocksource/timer-ti-dm-systimer.c
> @@ -69,12 +69,33 @@ static bool dmtimer_systimer_revision1(struct dmtimer_systimer *t)
>  	return !(tidr >> 16);
>  }
>  
> +static void dmtimer_systimer_enable(struct dmtimer_systimer *t)
> +{
> +	u32 val;
> +
> +	if (dmtimer_systimer_revision1(t))
> +		val = DMTIMER_TYPE1_ENABLE;
> +	else
> +		val = DMTIMER_TYPE2_ENABLE;
> +
> +	writel_relaxed(val, t->base + t->sysc);
> +}
> +
> +static void dmtimer_systimer_disable(struct dmtimer_systimer *t)
> +{
> +	if (!dmtimer_systimer_revision1(t))
> +		return;
> +
> +	writel_relaxed(DMTIMER_TYPE1_DISABLE, t->base + t->sysc);
> +}
> +
>  static int __init dmtimer_systimer_type1_reset(struct dmtimer_systimer *t)
>  {
>  	void __iomem *syss = t->base + OMAP_TIMER_V1_SYS_STAT_OFFSET;
>  	int ret;
>  	u32 l;
>  
> +	dmtimer_systimer_enable(t);
>  	writel_relaxed(BIT(1) | BIT(2), t->base + t->ifctrl);
>  	ret = readl_poll_timeout_atomic(syss, l, l & BIT(0), 100,
>  					DMTIMER_RESET_WAIT);
> @@ -88,6 +109,7 @@ static int __init dmtimer_systimer_type2_reset(struct dmtimer_systimer *t)
>  	void __iomem *sysc = t->base + t->sysc;
>  	u32 l;
>  
> +	dmtimer_systimer_enable(t);
>  	l = readl_relaxed(sysc);
>  	l |= BIT(0);
>  	writel_relaxed(l, sysc);
> @@ -336,26 +358,6 @@ static int __init dmtimer_systimer_init_clock(struct dmtimer_systimer *t,
>  	return 0;
>  }
>  
> -static void dmtimer_systimer_enable(struct dmtimer_systimer *t)
> -{
> -	u32 val;
> -
> -	if (dmtimer_systimer_revision1(t))
> -		val = DMTIMER_TYPE1_ENABLE;
> -	else
> -		val = DMTIMER_TYPE2_ENABLE;
> -
> -	writel_relaxed(val, t->base + t->sysc);
> -}
> -
> -static void dmtimer_systimer_disable(struct dmtimer_systimer *t)
> -{
> -	if (!dmtimer_systimer_revision1(t))
> -		return;
> -
> -	writel_relaxed(DMTIMER_TYPE1_DISABLE, t->base + t->sysc);
> -}
> -
>  static int __init dmtimer_systimer_setup(struct device_node *np,
>  					 struct dmtimer_systimer *t)
>  {
> @@ -409,8 +411,8 @@ static int __init dmtimer_systimer_setup(struct device_node *np,
>  	t->wakeup = regbase + _OMAP_TIMER_WAKEUP_EN_OFFSET;
>  	t->ifctrl = regbase + _OMAP_TIMER_IF_CTRL_OFFSET;
>  
> -	dmtimer_systimer_enable(t);
>  	dmtimer_systimer_reset(t);
> +	dmtimer_systimer_enable(t);
>  	pr_debug("dmtimer rev %08x sysc %08x\n", readl_relaxed(t->base),
>  		 readl_relaxed(t->base + t->sysc));
>  
> -- 
> GitLab
> 
> 
> From bc6717d55d07110d8f3c6d31ec2af50c11b07091 Mon Sep 17 00:00:00 2001
> From: Guo Ren <guoren@xxxxxxxxxxxxxxxxx>
> Date: Tue, 18 Aug 2020 07:31:17 +0000
> Subject: [PATCH 003/126] clocksource/drivers/timer-gx6605s: Fixup counter
>  reload
> 
> When the timer counts to the upper limit, an overflow interrupt is
> generated, and the count is reset with the value in the TIME_INI
> register. But the software expects to start counting from 0 when
> the count overflows, so it forces TIME_INI to 0 to solve the
> potential interrupt storm problem.
> 
> Signed-off-by: Guo Ren <guoren@xxxxxxxxxxxxxxxxx>
> Tested-by: Xu Kai <xukai@xxxxxxxxxxxxxxxx>
> Cc: Daniel Lezcano <daniel.lezcano@xxxxxxxxxx>
> Cc: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
> Signed-off-by: Daniel Lezcano <daniel.lezcano@xxxxxxxxxx>
> Link: https://lore.kernel.org/r/1597735877-71115-1-git-send-email-guoren@xxxxxxxxxx
> ---
>  drivers/clocksource/timer-gx6605s.c | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/drivers/clocksource/timer-gx6605s.c b/drivers/clocksource/timer-gx6605s.c
> index 80d0939d040b..8d386adbe800 100644
> --- a/drivers/clocksource/timer-gx6605s.c
> +++ b/drivers/clocksource/timer-gx6605s.c
> @@ -28,6 +28,7 @@ static irqreturn_t gx6605s_timer_interrupt(int irq, void *dev)
>  	void __iomem *base = timer_of_base(to_timer_of(ce));
>  
>  	writel_relaxed(GX6605S_STATUS_CLR, base + TIMER_STATUS);
> +	writel_relaxed(0, base + TIMER_INI);
>  
>  	ce->event_handler(ce);
>  
> -- 
> GitLab
> 
> 
> From d89a80ddbfd86d04d0901e576ca2016d324bcb85 Mon Sep 17 00:00:00 2001
> From: Tero Kristo <t-kristo@xxxxxx>
> Date: Tue, 25 Aug 2020 16:31:05 +0300
> Subject: [PATCH 004/126] dt-bindings: crypto: sa2ul: fix a DT binding check
>  warning
> 
> DT binding check produces a warning about bad cell size:
> 
> Documentation/devicetree/bindings/crypto/ti,sa2ul.example.dt.yaml: example-0: crypto@4e00000:reg:0: [0, 81788928, 0, 4608] is too long
> 	From schema: python3.6/site-packages/dtschema/schemas/reg.yaml
> 
> Fix this by reducing the address sizes for the example to 1 cell from
> current 2.
> 
> Fixes: 2ce9a7299bf6 ("dt-bindings: crypto: Add TI SA2UL crypto accelerator documentation")
> Reported-by: Rob Herring <robh@xxxxxxxxxx>
> Cc: Rob Herring <robh@xxxxxxxxxx>
> Cc: devicetree@xxxxxxxxxxxxxxx
> Signed-off-by: Tero Kristo <t-kristo@xxxxxx>
> Link: https://lore.kernel.org/r/20200825133106.21542-2-t-kristo@xxxxxx
> Signed-off-by: Rob Herring <robh@xxxxxxxxxx>
> ---
>  Documentation/devicetree/bindings/crypto/ti,sa2ul.yaml | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/Documentation/devicetree/bindings/crypto/ti,sa2ul.yaml b/Documentation/devicetree/bindings/crypto/ti,sa2ul.yaml
> index 85ef69ffebed..1465c9ebaf93 100644
> --- a/Documentation/devicetree/bindings/crypto/ti,sa2ul.yaml
> +++ b/Documentation/devicetree/bindings/crypto/ti,sa2ul.yaml
> @@ -67,7 +67,7 @@ examples:
>  
>      main_crypto: crypto@4e00000 {
>          compatible = "ti,j721-sa2ul";
> -        reg = <0x0 0x4e00000 0x0 0x1200>;
> +        reg = <0x4e00000 0x1200>;
>          power-domains = <&k3_pds 264 TI_SCI_PD_EXCLUSIVE>;
>          dmas = <&main_udmap 0xc000>, <&main_udmap 0x4000>,
>                 <&main_udmap 0x4001>;
> -- 
> GitLab
> 
> 
> From ec653df2a0cbc306a4bfcb0e3484d318fa779002 Mon Sep 17 00:00:00 2001
> From: Marek Szyprowski <m.szyprowski@xxxxxxxxxxx>
> Date: Wed, 1 Jul 2020 09:39:49 +0200
> Subject: [PATCH 005/126] drm/vc4/vc4_hdmi: fill ASoC card owner
> 
> card->owner is a required property and since commit 81033c6b584b ("ALSA:
> core: Warn on empty module") a warning is issued if it is empty. Fix lack
> of it. This fixes following warning observed on RaspberryPi 3B board
> with ARM 32bit kernel and multi_v7_defconfig:
> 
> ------------[ cut here ]------------
> WARNING: CPU: 1 PID: 210 at sound/core/init.c:207 snd_card_new+0x378/0x398 [snd]
> Modules linked in: vc4(+) snd_soc_core ac97_bus snd_pcm_dmaengine bluetooth snd_pcm snd_timer crc32_arm_ce raspberrypi_hwmon snd soundcore ecdh_generic ecc bcm2835_thermal phy_generic
> CPU: 1 PID: 210 Comm: systemd-udevd Not tainted 5.8.0-rc1-00027-g81033c6b584b #1087
> Hardware name: BCM2835
> [<c03113c0>] (unwind_backtrace) from [<c030bcb4>] (show_stack+0x10/0x14)
> [<c030bcb4>] (show_stack) from [<c071cef8>] (dump_stack+0xd4/0xe8)
> [<c071cef8>] (dump_stack) from [<c0345bfc>] (__warn+0xdc/0xf4)
> [<c0345bfc>] (__warn) from [<c0345cc4>] (warn_slowpath_fmt+0xb0/0xb8)
> [<c0345cc4>] (warn_slowpath_fmt) from [<bf02ff74>] (snd_card_new+0x378/0x398 [snd])
> [<bf02ff74>] (snd_card_new [snd]) from [<bf11f0b4>] (snd_soc_bind_card+0x280/0x99c [snd_soc_core])
> [<bf11f0b4>] (snd_soc_bind_card [snd_soc_core]) from [<bf12f000>] (devm_snd_soc_register_card+0x34/0x6c [snd_soc_core])
> [<bf12f000>] (devm_snd_soc_register_card [snd_soc_core]) from [<bf165654>] (vc4_hdmi_bind+0x43c/0x5f4 [vc4])
> [<bf165654>] (vc4_hdmi_bind [vc4]) from [<c09d660c>] (component_bind_all+0xec/0x24c)
> [<c09d660c>] (component_bind_all) from [<bf15c44c>] (vc4_drm_bind+0xd4/0x174 [vc4])
> [<bf15c44c>] (vc4_drm_bind [vc4]) from [<c09d6ac0>] (try_to_bring_up_master+0x160/0x1b0)
> [<c09d6ac0>] (try_to_bring_up_master) from [<c09d6f38>] (component_master_add_with_match+0xd0/0x104)
> [<c09d6f38>] (component_master_add_with_match) from [<bf15c588>] (vc4_platform_drm_probe+0x9c/0xbc [vc4])
> [<bf15c588>] (vc4_platform_drm_probe [vc4]) from [<c09df740>] (platform_drv_probe+0x6c/0xa4)
> [<c09df740>] (platform_drv_probe) from [<c09dd6f0>] (really_probe+0x210/0x350)
> [<c09dd6f0>] (really_probe) from [<c09dd940>] (driver_probe_device+0x5c/0xb4)
> [<c09dd940>] (driver_probe_device) from [<c09ddb38>] (device_driver_attach+0x58/0x60)
> [<c09ddb38>] (device_driver_attach) from [<c09ddbc0>] (__driver_attach+0x80/0xbc)
> [<c09ddbc0>] (__driver_attach) from [<c09db820>] (bus_for_each_dev+0x68/0xb4)
> [<c09db820>] (bus_for_each_dev) from [<c09dc9f8>] (bus_add_driver+0x130/0x1e8)
> [<c09dc9f8>] (bus_add_driver) from [<c09de648>] (driver_register+0x78/0x110)
> [<c09de648>] (driver_register) from [<c0302038>] (do_one_initcall+0x50/0x220)
> [<c0302038>] (do_one_initcall) from [<c03db544>] (do_init_module+0x60/0x210)
> [<c03db544>] (do_init_module) from [<c03da4f8>] (load_module+0x1e34/0x2338)
> [<c03da4f8>] (load_module) from [<c03dac00>] (sys_finit_module+0xac/0xbc)
> [<c03dac00>] (sys_finit_module) from [<c03000c0>] (ret_fast_syscall+0x0/0x54)
> Exception stack(0xeded9fa8 to 0xeded9ff0)
> ...
> ---[ end trace 6414689569c2bc08 ]---
> 
> Fixes: bb7d78568814 ("drm/vc4: Add HDMI audio support")
> Suggested-by: Takashi Iwai <tiwai@xxxxxxx>
> Signed-off-by: Marek Szyprowski <m.szyprowski@xxxxxxxxxxx>
> Tested-by: Stefan Wahren <stefan.wahren@xxxxxxxx>
> Signed-off-by: Maxime Ripard <maxime@xxxxxxxxxx>
> Link: https://patchwork.freedesktop.org/patch/msgid/20200701073949.28941-1-m.szyprowski@xxxxxxxxxxx
> ---
>  drivers/gpu/drm/vc4/vc4_hdmi.c | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c
> index 15a11cd4de25..6339c6f0f571 100644
> --- a/drivers/gpu/drm/vc4/vc4_hdmi.c
> +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
> @@ -1117,6 +1117,7 @@ static int vc4_hdmi_audio_init(struct vc4_hdmi *hdmi)
>  	card->num_links = 1;
>  	card->name = "vc4-hdmi";
>  	card->dev = dev;
> +	card->owner = THIS_MODULE;
>  
>  	/*
>  	 * Be careful, snd_soc_register_card() calls dev_set_drvdata() and
> -- 
> GitLab
> 
> 
> From cab4c03b4ba54c8d9378298cacb8bc0fd74ceece Mon Sep 17 00:00:00 2001
> From: Martin Cerveny <m.cerveny@xxxxxxxxxxxx>
> Date: Sun, 6 Sep 2020 18:21:39 +0200
> Subject: [PATCH 006/126] drm/sun4i: sun8i-csc: Secondary CSC register
>  correction
> 
> "Allwinner V3s" has secondary video layer (VI).
> Decoded video is displayed in wrong colors until
> secondary CSC registers are programmed correctly.
> 
> Fixes: 883029390550 ("drm/sun4i: Add DE2 CSC library")
> Signed-off-by: Martin Cerveny <m.cerveny@xxxxxxxxxxxx>
> Reviewed-by: Jernej Skrabec <jernej.skrabec@xxxxxxxx>
> Signed-off-by: Maxime Ripard <maxime@xxxxxxxxxx>
> Link: https://patchwork.freedesktop.org/patch/msgid/20200906162140.5584-2-m.cerveny@xxxxxxxxxxxx
> ---
>  drivers/gpu/drm/sun4i/sun8i_csc.h | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/sun4i/sun8i_csc.h b/drivers/gpu/drm/sun4i/sun8i_csc.h
> index f42441b1b14d..a55a38ad849c 100644
> --- a/drivers/gpu/drm/sun4i/sun8i_csc.h
> +++ b/drivers/gpu/drm/sun4i/sun8i_csc.h
> @@ -12,7 +12,7 @@ struct sun8i_mixer;
>  
>  /* VI channel CSC units offsets */
>  #define CCSC00_OFFSET 0xAA050
> -#define CCSC01_OFFSET 0xFA000
> +#define CCSC01_OFFSET 0xFA050
>  #define CCSC10_OFFSET 0xA0000
>  #define CCSC11_OFFSET 0xF0000
>  
> -- 
> GitLab
> 
> 
> From 74ea06164cda81dc80e97790164ca533fd7e3087 Mon Sep 17 00:00:00 2001
> From: Martin Cerveny <m.cerveny@xxxxxxxxxxxx>
> Date: Sun, 6 Sep 2020 18:21:40 +0200
> Subject: [PATCH 007/126] drm/sun4i: mixer: Extend regmap max_register
> 
> Better guess. Secondary CSC registers are from 0xF0000.
> 
> Signed-off-by: Martin Cerveny <m.cerveny@xxxxxxxxxxxx>
> Reviewed-by: Jernej Skrabec <jernej.skrabec@xxxxxxxx>
> Signed-off-by: Maxime Ripard <maxime@xxxxxxxxxx>
> Link: https://patchwork.freedesktop.org/patch/msgid/20200906162140.5584-3-m.cerveny@xxxxxxxxxxxx
> ---
>  drivers/gpu/drm/sun4i/sun8i_mixer.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/sun4i/sun8i_mixer.c b/drivers/gpu/drm/sun4i/sun8i_mixer.c
> index cc4fb916318f..c3304028e3dc 100644
> --- a/drivers/gpu/drm/sun4i/sun8i_mixer.c
> +++ b/drivers/gpu/drm/sun4i/sun8i_mixer.c
> @@ -307,7 +307,7 @@ static struct regmap_config sun8i_mixer_regmap_config = {
>  	.reg_bits	= 32,
>  	.val_bits	= 32,
>  	.reg_stride	= 4,
> -	.max_register	= 0xbfffc, /* guessed */
> +	.max_register	= 0xffffc, /* guessed */
>  };
>  
>  static int sun8i_mixer_of_get_id(struct device_node *node)
> -- 
> GitLab
> 
> 
> From 288eceb0858323d66bff03cf386630a797b248ad Mon Sep 17 00:00:00 2001
> From: Hans Verkuil <hverkuil-cisco@xxxxxxxxx>
> Date: Tue, 8 Sep 2020 12:02:53 +0200
> Subject: [PATCH 008/126] media: cec-adap.c: don't use flush_scheduled_work()
> 
> For some inexplicable reason I decided to call flush_scheduled_work()
> instead of cancel_delayed_work_sync(). The problem with that is that
> flush_scheduled_work() waits for *all* queued scheduled work to be
> completed instead of just the work itself.
> 
> This can cause a deadlock if a CEC driver also schedules work that
> takes the same lock. See the comments for flush_scheduled_work() in
> linux/workqueue.h.
> 
> This is exactly what has been observed a few times.
> 
> This patch simply replaces flush_scheduled_work() by
> cancel_delayed_work_sync().
> 
> Signed-off-by: Hans Verkuil <hverkuil-cisco@xxxxxxxxx>
> Cc: <stable@xxxxxxxxxxxxxxx>      # for v5.8 and up
> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@xxxxxxxxxx>
> ---
>  drivers/media/cec/core/cec-adap.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/media/cec/core/cec-adap.c b/drivers/media/cec/core/cec-adap.c
> index 4efe8014445e..926d65db6d3e 100644
> --- a/drivers/media/cec/core/cec-adap.c
> +++ b/drivers/media/cec/core/cec-adap.c
> @@ -1199,7 +1199,7 @@ void cec_received_msg_ts(struct cec_adapter *adap,
>  			/* Cancel the pending timeout work */
>  			if (!cancel_delayed_work(&data->work)) {
>  				mutex_unlock(&adap->lock);
> -				flush_scheduled_work();
> +				cancel_delayed_work_sync(&data->work);
>  				mutex_lock(&adap->lock);
>  			}
>  			/*
> -- 
> GitLab
> 
> 
> From 505623a2be48b36de533951ced130876a76a2d55 Mon Sep 17 00:00:00 2001
> From: Vladimir Oltean <vladimir.oltean@xxxxxxx>
> Date: Thu, 10 Sep 2020 15:15:32 +0300
> Subject: [PATCH 009/126] spi: spi-fsl-dspi: use XSPI mode instead of DMA for
>  DPAA2 SoCs
> 
> The arch/arm64/boot/dts/freescale/fsl-ls208xa.dtsi device tree lacks DMA
> channels for DSPI, so naturally, the driver fails to probe:
> 
> [ 2.945302] fsl-dspi 2100000.spi: rx dma channel not available
> [ 2.951134] fsl-dspi 2100000.spi: can't get dma channels
> 
> In retrospect, this should have been obvious, because LS2080A, LS2085A
> LS2088A and LX2160A don't appear to have an eDMA module at all. Looking
> again at their datasheets, the CTARE register (which is specific to XSPI
> functionality) seems to be documented, so switch them to XSPI mode
> instead.
> 
> Fixes: 0feaf8f5afe0 ("spi: spi-fsl-dspi: Convert the instantiations that support it to DMA")
> Reported-by: Qiang Zhao <qiang.zhao@xxxxxxx>
> Tested-by: Qiang Zhao <qiang.zhao@xxxxxxx>
> Signed-off-by: Vladimir Oltean <vladimir.oltean@xxxxxxx>
> Link: https://lore.kernel.org/r/20200910121532.1138596-1-olteanv@xxxxxxxxx
> Signed-off-by: Mark Brown <broonie@xxxxxxxxxx>
> ---
>  drivers/spi/spi-fsl-dspi.c | 6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/spi/spi-fsl-dspi.c b/drivers/spi/spi-fsl-dspi.c
> index 91c6affe139c..283f2468a2f4 100644
> --- a/drivers/spi/spi-fsl-dspi.c
> +++ b/drivers/spi/spi-fsl-dspi.c
> @@ -174,17 +174,17 @@ static const struct fsl_dspi_devtype_data devtype_data[] = {
>  		.fifo_size		= 16,
>  	},
>  	[LS2080A] = {
> -		.trans_mode		= DSPI_DMA_MODE,
> +		.trans_mode		= DSPI_XSPI_MODE,
>  		.max_clock_factor	= 8,
>  		.fifo_size		= 4,
>  	},
>  	[LS2085A] = {
> -		.trans_mode		= DSPI_DMA_MODE,
> +		.trans_mode		= DSPI_XSPI_MODE,
>  		.max_clock_factor	= 8,
>  		.fifo_size		= 4,
>  	},
>  	[LX2160A] = {
> -		.trans_mode		= DSPI_DMA_MODE,
> +		.trans_mode		= DSPI_XSPI_MODE,
>  		.max_clock_factor	= 8,
>  		.fifo_size		= 4,
>  	},
> -- 
> GitLab
> 
> 
> From 28284943ac94014767ecc2f7b3c5747c4a5617a0 Mon Sep 17 00:00:00 2001
> From: Zhenyu Wang <zhenyuw@xxxxxxxxxxxxxxx>
> Date: Mon, 14 Sep 2020 11:03:02 +0800
> Subject: [PATCH 010/126] drm/i915/gvt: Fix port number for BDW on EDID region
>  setup
> 
> Current BDW virtual display port is initialized as PORT_B, so need
> to use same port for VFIO EDID region, otherwise invalid EDID blob
> pointer is assigned which caused kernel null pointer reference. We
> might evaluate actual display hotplug for BDW to make this function
> work as expected, anyway this is always required to be fixed first.
> 
> Reported-by: Alejandro Sior <aho@xxxxxxx>
> Cc: Alejandro Sior <aho@xxxxxxx>
> Fixes: 0178f4ce3c3b ("drm/i915/gvt: Enable vfio edid for all GVT supported platform")
> Reviewed-by: Hang Yuan <hang.yuan@xxxxxxxxx>
> Signed-off-by: Zhenyu Wang <zhenyuw@xxxxxxxxxxxxxxx>
> Link: http://patchwork.freedesktop.org/patch/msgid/20200914030302.2775505-1-zhenyuw@xxxxxxxxxxxxxxx
> ---
>  drivers/gpu/drm/i915/gvt/vgpu.c | 6 +++++-
>  1 file changed, 5 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/i915/gvt/vgpu.c b/drivers/gpu/drm/i915/gvt/vgpu.c
> index 7d361623ff67..041f601b07d0 100644
> --- a/drivers/gpu/drm/i915/gvt/vgpu.c
> +++ b/drivers/gpu/drm/i915/gvt/vgpu.c
> @@ -367,6 +367,7 @@ void intel_gvt_destroy_idle_vgpu(struct intel_vgpu *vgpu)
>  static struct intel_vgpu *__intel_gvt_create_vgpu(struct intel_gvt *gvt,
>  		struct intel_vgpu_creation_params *param)
>  {
> +	struct drm_i915_private *dev_priv = gvt->gt->i915;
>  	struct intel_vgpu *vgpu;
>  	int ret;
>  
> @@ -434,7 +435,10 @@ static struct intel_vgpu *__intel_gvt_create_vgpu(struct intel_gvt *gvt,
>  	if (ret)
>  		goto out_clean_sched_policy;
>  
> -	ret = intel_gvt_hypervisor_set_edid(vgpu, PORT_D);
> +	if (IS_BROADWELL(dev_priv))
> +		ret = intel_gvt_hypervisor_set_edid(vgpu, PORT_B);
> +	else
> +		ret = intel_gvt_hypervisor_set_edid(vgpu, PORT_D);
>  	if (ret)
>  		goto out_clean_sched_policy;
>  
> -- 
> GitLab
> 
> 
> From 14801c624066a55139c2c57963eb1b859d0a316a Mon Sep 17 00:00:00 2001
> From: Geert Uytterhoeven <geert@xxxxxxxxxxxxxx>
> Date: Mon, 14 Sep 2020 11:42:43 +0200
> Subject: [PATCH 011/126] mmc: mmc_spi: Fix mmc_spi_dma_alloc() return type for
>  !HAS_DMA
> MIME-Version: 1.0
> Content-Type: text/plain; charset=UTF-8
> Content-Transfer-Encoding: 8bit
> 
> If CONFIG_NO_DMA=y (e.g. Sun-3 allmodconfig):
> 
>     drivers/mmc/host/mmc_spi.c:1323:15: warning: return type defaults to ‘int’ [-Wreturn-type]
>      static inline mmc_spi_dma_alloc(struct mmc_spi_host *host) { return 0; }
> 		   ^~~~~~~~~~~~~~~~~
> 
> Fix this by adding the missing return type.
> 
> Fixes: a395acf0f6dc6409 ("mmc: mmc_spi: Allow the driver to be built when CONFIG_HAS_DMA is unset")
> Signed-off-by: Geert Uytterhoeven <geert@xxxxxxxxxxxxxx>
> Link: https://lore.kernel.org/r/20200914094243.3912-1-geert@xxxxxxxxxxxxxx
> Signed-off-by: Ulf Hansson <ulf.hansson@xxxxxxxxxx>
> ---
>  drivers/mmc/host/mmc_spi.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/mmc/host/mmc_spi.c b/drivers/mmc/host/mmc_spi.c
> index 5055a7eb134a..18a850f37ddc 100644
> --- a/drivers/mmc/host/mmc_spi.c
> +++ b/drivers/mmc/host/mmc_spi.c
> @@ -1320,7 +1320,7 @@ static void mmc_spi_dma_free(struct mmc_spi_host *host)
>  			 DMA_BIDIRECTIONAL);
>  }
>  #else
> -static inline mmc_spi_dma_alloc(struct mmc_spi_host *host) { return 0; }
> +static inline int mmc_spi_dma_alloc(struct mmc_spi_host *host) { return 0; }
>  static inline void mmc_spi_dma_free(struct mmc_spi_host *host) {}
>  #endif
>  
> -- 
> GitLab
> 
> 
> From 129134e5415d46f38b9978b3809af94ed649b57d Mon Sep 17 00:00:00 2001
> From: Sergey Senozhatsky <sergey.senozhatsky@xxxxxxxxx>
> Date: Fri, 11 Sep 2020 05:07:58 +0200
> Subject: [PATCH 012/126] media: media/v4l2: remove
>  V4L2_FLAG_MEMORY_NON_CONSISTENT flag
> 
> The patch partially reverts some of the UAPI bits of the buffer
> cache management hints. Namely, the queue consistency (memory
> coherency) user-space hint because, as it turned out, the kernel
> implementation of this feature was misusing DMA_ATTR_NON_CONSISTENT.
> 
> The patch reverts both kernel and user space parts: removes the
> DMA consistency attr functions, rolls back changes to v4l2_requestbuffers,
> v4l2_create_buffers structures and corresponding UAPI functions
> (plus compat32 layer) and cleans up the documentation.
> 
> [hverkuil: fixed a few typos in the commit log]
> [hverkuil: fixed vb2_core_reqbufs call in drivers/media/dvb-core/dvb_vb2.c]
> [mchehab: fixed a typo in the commit log: revers->reverts]
> 
> Signed-off-by: Christoph Hellwig <hch@xxxxxx>
> Signed-off-by: Sergey Senozhatsky <sergey.senozhatsky@xxxxxxxxx>
> Signed-off-by: Hans Verkuil <hverkuil-cisco@xxxxxxxxx>
> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@xxxxxxxxxx>
> ---
>  .../userspace-api/media/v4l/buffer.rst        | 17 -------
>  .../media/v4l/vidioc-create-bufs.rst          |  6 +--
>  .../media/v4l/vidioc-reqbufs.rst              | 12 +----
>  .../media/common/videobuf2/videobuf2-core.c   | 46 +++----------------
>  .../common/videobuf2/videobuf2-dma-contig.c   | 19 --------
>  .../media/common/videobuf2/videobuf2-dma-sg.c |  3 +-
>  .../media/common/videobuf2/videobuf2-v4l2.c   | 18 +-------
>  drivers/media/dvb-core/dvb_vb2.c              |  2 +-
>  drivers/media/v4l2-core/v4l2-compat-ioctl32.c | 10 +---
>  drivers/media/v4l2-core/v4l2-ioctl.c          |  5 +-
>  include/media/videobuf2-core.h                |  7 +--
>  include/uapi/linux/videodev2.h                | 13 +-----
>  12 files changed, 23 insertions(+), 135 deletions(-)
> 
> diff --git a/Documentation/userspace-api/media/v4l/buffer.rst b/Documentation/userspace-api/media/v4l/buffer.rst
> index 57e752aaf414..2044ed13cd9d 100644
> --- a/Documentation/userspace-api/media/v4l/buffer.rst
> +++ b/Documentation/userspace-api/media/v4l/buffer.rst
> @@ -701,23 +701,6 @@ Memory Consistency Flags
>      :stub-columns: 0
>      :widths:       3 1 4
>  
> -    * .. _`V4L2-FLAG-MEMORY-NON-CONSISTENT`:
> -
> -      - ``V4L2_FLAG_MEMORY_NON_CONSISTENT``
> -      - 0x00000001
> -      - A buffer is allocated either in consistent (it will be automatically
> -	coherent between the CPU and the bus) or non-consistent memory. The
> -	latter can provide performance gains, for instance the CPU cache
> -	sync/flush operations can be avoided if the buffer is accessed by the
> -	corresponding device only and the CPU does not read/write to/from that
> -	buffer. However, this requires extra care from the driver -- it must
> -	guarantee memory consistency by issuing a cache flush/sync when
> -	consistency is needed. If this flag is set V4L2 will attempt to
> -	allocate the buffer in non-consistent memory. The flag takes effect
> -	only if the buffer is used for :ref:`memory mapping <mmap>` I/O and the
> -	queue reports the :ref:`V4L2_BUF_CAP_SUPPORTS_MMAP_CACHE_HINTS
> -	<V4L2-BUF-CAP-SUPPORTS-MMAP-CACHE-HINTS>` capability.
> -
>  .. c:type:: v4l2_memory
>  
>  enum v4l2_memory
> diff --git a/Documentation/userspace-api/media/v4l/vidioc-create-bufs.rst b/Documentation/userspace-api/media/v4l/vidioc-create-bufs.rst
> index f2a702870fad..12cf6b44f414 100644
> --- a/Documentation/userspace-api/media/v4l/vidioc-create-bufs.rst
> +++ b/Documentation/userspace-api/media/v4l/vidioc-create-bufs.rst
> @@ -120,13 +120,9 @@ than the number requested.
>  	If you want to just query the capabilities without making any
>  	other changes, then set ``count`` to 0, ``memory`` to
>  	``V4L2_MEMORY_MMAP`` and ``format.type`` to the buffer type.
> -    * - __u32
> -      - ``flags``
> -      - Specifies additional buffer management attributes.
> -	See :ref:`memory-flags`.
>  
>      * - __u32
> -      - ``reserved``\ [6]
> +      - ``reserved``\ [7]
>        - A place holder for future extensions. Drivers and applications
>  	must set the array to zero.
>  
> diff --git a/Documentation/userspace-api/media/v4l/vidioc-reqbufs.rst b/Documentation/userspace-api/media/v4l/vidioc-reqbufs.rst
> index 75d894d9c36c..0e3e2fde65e8 100644
> --- a/Documentation/userspace-api/media/v4l/vidioc-reqbufs.rst
> +++ b/Documentation/userspace-api/media/v4l/vidioc-reqbufs.rst
> @@ -112,17 +112,10 @@ aborting or finishing any DMA in progress, an implicit
>  	``V4L2_MEMORY_MMAP`` and ``type`` set to the buffer type. This will
>  	free any previously allocated buffers, so this is typically something
>  	that will be done at the start of the application.
> -    * - union {
> -      - (anonymous)
> -    * - __u32
> -      - ``flags``
> -      - Specifies additional buffer management attributes.
> -	See :ref:`memory-flags`.
>      * - __u32
>        - ``reserved``\ [1]
> -      - Kept for backwards compatibility. Use ``flags`` instead.
> -    * - }
> -      -
> +      - A place holder for future extensions. Drivers and applications
> +	must set the array to zero.
>  
>  .. tabularcolumns:: |p{6.1cm}|p{2.2cm}|p{8.7cm}|
>  
> @@ -169,7 +162,6 @@ aborting or finishing any DMA in progress, an implicit
>        - This capability is set by the driver to indicate that the queue supports
>          cache and memory management hints. However, it's only valid when the
>          queue is used for :ref:`memory mapping <mmap>` streaming I/O. See
> -        :ref:`V4L2_FLAG_MEMORY_NON_CONSISTENT <V4L2-FLAG-MEMORY-NON-CONSISTENT>`,
>          :ref:`V4L2_BUF_FLAG_NO_CACHE_INVALIDATE <V4L2-BUF-FLAG-NO-CACHE-INVALIDATE>` and
>          :ref:`V4L2_BUF_FLAG_NO_CACHE_CLEAN <V4L2-BUF-FLAG-NO-CACHE-CLEAN>`.
>  
> diff --git a/drivers/media/common/videobuf2/videobuf2-core.c b/drivers/media/common/videobuf2/videobuf2-core.c
> index f544d3393e9d..4eab6d81cce1 100644
> --- a/drivers/media/common/videobuf2/videobuf2-core.c
> +++ b/drivers/media/common/videobuf2/videobuf2-core.c
> @@ -721,39 +721,14 @@ int vb2_verify_memory_type(struct vb2_queue *q,
>  }
>  EXPORT_SYMBOL(vb2_verify_memory_type);
>  
> -static void set_queue_consistency(struct vb2_queue *q, bool consistent_mem)
> -{
> -	q->dma_attrs &= ~DMA_ATTR_NON_CONSISTENT;
> -
> -	if (!vb2_queue_allows_cache_hints(q))
> -		return;
> -	if (!consistent_mem)
> -		q->dma_attrs |= DMA_ATTR_NON_CONSISTENT;
> -}
> -
> -static bool verify_consistency_attr(struct vb2_queue *q, bool consistent_mem)
> -{
> -	bool queue_is_consistent = !(q->dma_attrs & DMA_ATTR_NON_CONSISTENT);
> -
> -	if (consistent_mem != queue_is_consistent) {
> -		dprintk(q, 1, "memory consistency model mismatch\n");
> -		return false;
> -	}
> -	return true;
> -}
> -
>  int vb2_core_reqbufs(struct vb2_queue *q, enum vb2_memory memory,
> -		     unsigned int flags, unsigned int *count)
> +		     unsigned int *count)
>  {
>  	unsigned int num_buffers, allocated_buffers, num_planes = 0;
>  	unsigned plane_sizes[VB2_MAX_PLANES] = { };
> -	bool consistent_mem = true;
>  	unsigned int i;
>  	int ret;
>  
> -	if (flags & V4L2_FLAG_MEMORY_NON_CONSISTENT)
> -		consistent_mem = false;
> -
>  	if (q->streaming) {
>  		dprintk(q, 1, "streaming active\n");
>  		return -EBUSY;
> @@ -765,8 +740,7 @@ int vb2_core_reqbufs(struct vb2_queue *q, enum vb2_memory memory,
>  	}
>  
>  	if (*count == 0 || q->num_buffers != 0 ||
> -	    (q->memory != VB2_MEMORY_UNKNOWN && q->memory != memory) ||
> -	    !verify_consistency_attr(q, consistent_mem)) {
> +	    (q->memory != VB2_MEMORY_UNKNOWN && q->memory != memory)) {
>  		/*
>  		 * We already have buffers allocated, so first check if they
>  		 * are not in use and can be freed.
> @@ -803,7 +777,6 @@ int vb2_core_reqbufs(struct vb2_queue *q, enum vb2_memory memory,
>  	num_buffers = min_t(unsigned int, num_buffers, VB2_MAX_FRAME);
>  	memset(q->alloc_devs, 0, sizeof(q->alloc_devs));
>  	q->memory = memory;
> -	set_queue_consistency(q, consistent_mem);
>  
>  	/*
>  	 * Ask the driver how many buffers and planes per buffer it requires.
> @@ -888,18 +861,14 @@ int vb2_core_reqbufs(struct vb2_queue *q, enum vb2_memory memory,
>  EXPORT_SYMBOL_GPL(vb2_core_reqbufs);
>  
>  int vb2_core_create_bufs(struct vb2_queue *q, enum vb2_memory memory,
> -			 unsigned int flags, unsigned int *count,
> +			 unsigned int *count,
>  			 unsigned int requested_planes,
>  			 const unsigned int requested_sizes[])
>  {
>  	unsigned int num_planes = 0, num_buffers, allocated_buffers;
>  	unsigned plane_sizes[VB2_MAX_PLANES] = { };
> -	bool consistent_mem = true;
>  	int ret;
>  
> -	if (flags & V4L2_FLAG_MEMORY_NON_CONSISTENT)
> -		consistent_mem = false;
> -
>  	if (q->num_buffers == VB2_MAX_FRAME) {
>  		dprintk(q, 1, "maximum number of buffers already allocated\n");
>  		return -ENOBUFS;
> @@ -912,15 +881,12 @@ int vb2_core_create_bufs(struct vb2_queue *q, enum vb2_memory memory,
>  		}
>  		memset(q->alloc_devs, 0, sizeof(q->alloc_devs));
>  		q->memory = memory;
> -		set_queue_consistency(q, consistent_mem);
>  		q->waiting_for_buffers = !q->is_output;
>  	} else {
>  		if (q->memory != memory) {
>  			dprintk(q, 1, "memory model mismatch\n");
>  			return -EINVAL;
>  		}
> -		if (!verify_consistency_attr(q, consistent_mem))
> -			return -EINVAL;
>  	}
>  
>  	num_buffers = min(*count, VB2_MAX_FRAME - q->num_buffers);
> @@ -2581,7 +2547,7 @@ static int __vb2_init_fileio(struct vb2_queue *q, int read)
>  	fileio->memory = VB2_MEMORY_MMAP;
>  	fileio->type = q->type;
>  	q->fileio = fileio;
> -	ret = vb2_core_reqbufs(q, fileio->memory, 0, &fileio->count);
> +	ret = vb2_core_reqbufs(q, fileio->memory, &fileio->count);
>  	if (ret)
>  		goto err_kfree;
>  
> @@ -2638,7 +2604,7 @@ static int __vb2_init_fileio(struct vb2_queue *q, int read)
>  
>  err_reqbufs:
>  	fileio->count = 0;
> -	vb2_core_reqbufs(q, fileio->memory, 0, &fileio->count);
> +	vb2_core_reqbufs(q, fileio->memory, &fileio->count);
>  
>  err_kfree:
>  	q->fileio = NULL;
> @@ -2658,7 +2624,7 @@ static int __vb2_cleanup_fileio(struct vb2_queue *q)
>  		vb2_core_streamoff(q, q->type);
>  		q->fileio = NULL;
>  		fileio->count = 0;
> -		vb2_core_reqbufs(q, fileio->memory, 0, &fileio->count);
> +		vb2_core_reqbufs(q, fileio->memory, &fileio->count);
>  		kfree(fileio);
>  		dprintk(q, 3, "file io emulator closed\n");
>  	}
> diff --git a/drivers/media/common/videobuf2/videobuf2-dma-contig.c b/drivers/media/common/videobuf2/videobuf2-dma-contig.c
> index ec3446cc45b8..7b1b86ec942d 100644
> --- a/drivers/media/common/videobuf2/videobuf2-dma-contig.c
> +++ b/drivers/media/common/videobuf2/videobuf2-dma-contig.c
> @@ -42,11 +42,6 @@ struct vb2_dc_buf {
>  	struct dma_buf_attachment	*db_attach;
>  };
>  
> -static inline bool vb2_dc_buffer_consistent(unsigned long attr)
> -{
> -	return !(attr & DMA_ATTR_NON_CONSISTENT);
> -}
> -
>  /*********************************************/
>  /*        scatterlist table functions        */
>  /*********************************************/
> @@ -341,13 +336,6 @@ static int
>  vb2_dc_dmabuf_ops_begin_cpu_access(struct dma_buf *dbuf,
>  				   enum dma_data_direction direction)
>  {
> -	struct vb2_dc_buf *buf = dbuf->priv;
> -	struct sg_table *sgt = buf->dma_sgt;
> -
> -	if (vb2_dc_buffer_consistent(buf->attrs))
> -		return 0;
> -
> -	dma_sync_sg_for_cpu(buf->dev, sgt->sgl, sgt->nents, buf->dma_dir);
>  	return 0;
>  }
>  
> @@ -355,13 +343,6 @@ static int
>  vb2_dc_dmabuf_ops_end_cpu_access(struct dma_buf *dbuf,
>  				 enum dma_data_direction direction)
>  {
> -	struct vb2_dc_buf *buf = dbuf->priv;
> -	struct sg_table *sgt = buf->dma_sgt;
> -
> -	if (vb2_dc_buffer_consistent(buf->attrs))
> -		return 0;
> -
> -	dma_sync_sg_for_device(buf->dev, sgt->sgl, sgt->nents, buf->dma_dir);
>  	return 0;
>  }
>  
> diff --git a/drivers/media/common/videobuf2/videobuf2-dma-sg.c b/drivers/media/common/videobuf2/videobuf2-dma-sg.c
> index 0a40e00f0d7e..a86fce5d8ea8 100644
> --- a/drivers/media/common/videobuf2/videobuf2-dma-sg.c
> +++ b/drivers/media/common/videobuf2/videobuf2-dma-sg.c
> @@ -123,8 +123,7 @@ static void *vb2_dma_sg_alloc(struct device *dev, unsigned long dma_attrs,
>  	/*
>  	 * NOTE: dma-sg allocates memory using the page allocator directly, so
>  	 * there is no memory consistency guarantee, hence dma-sg ignores DMA
> -	 * attributes passed from the upper layer. That means that
> -	 * V4L2_FLAG_MEMORY_NON_CONSISTENT has no effect on dma-sg buffers.
> +	 * attributes passed from the upper layer.
>  	 */
>  	buf->pages = kvmalloc_array(buf->num_pages, sizeof(struct page *),
>  				    GFP_KERNEL | __GFP_ZERO);
> diff --git a/drivers/media/common/videobuf2/videobuf2-v4l2.c b/drivers/media/common/videobuf2/videobuf2-v4l2.c
> index 30caad27281e..cfe197df970d 100644
> --- a/drivers/media/common/videobuf2/videobuf2-v4l2.c
> +++ b/drivers/media/common/videobuf2/videobuf2-v4l2.c
> @@ -722,22 +722,12 @@ static void fill_buf_caps(struct vb2_queue *q, u32 *caps)
>  #endif
>  }
>  
> -static void clear_consistency_attr(struct vb2_queue *q,
> -				   int memory,
> -				   unsigned int *flags)
> -{
> -	if (!q->allow_cache_hints || memory != V4L2_MEMORY_MMAP)
> -		*flags &= ~V4L2_FLAG_MEMORY_NON_CONSISTENT;
> -}
> -
>  int vb2_reqbufs(struct vb2_queue *q, struct v4l2_requestbuffers *req)
>  {
>  	int ret = vb2_verify_memory_type(q, req->memory, req->type);
>  
>  	fill_buf_caps(q, &req->capabilities);
> -	clear_consistency_attr(q, req->memory, &req->flags);
> -	return ret ? ret : vb2_core_reqbufs(q, req->memory,
> -					    req->flags, &req->count);
> +	return ret ? ret : vb2_core_reqbufs(q, req->memory, &req->count);
>  }
>  EXPORT_SYMBOL_GPL(vb2_reqbufs);
>  
> @@ -769,7 +759,6 @@ int vb2_create_bufs(struct vb2_queue *q, struct v4l2_create_buffers *create)
>  	unsigned i;
>  
>  	fill_buf_caps(q, &create->capabilities);
> -	clear_consistency_attr(q, create->memory, &create->flags);
>  	create->index = q->num_buffers;
>  	if (create->count == 0)
>  		return ret != -EBUSY ? ret : 0;
> @@ -813,7 +802,6 @@ int vb2_create_bufs(struct vb2_queue *q, struct v4l2_create_buffers *create)
>  		if (requested_sizes[i] == 0)
>  			return -EINVAL;
>  	return ret ? ret : vb2_core_create_bufs(q, create->memory,
> -						create->flags,
>  						&create->count,
>  						requested_planes,
>  						requested_sizes);
> @@ -998,12 +986,11 @@ int vb2_ioctl_reqbufs(struct file *file, void *priv,
>  	int res = vb2_verify_memory_type(vdev->queue, p->memory, p->type);
>  
>  	fill_buf_caps(vdev->queue, &p->capabilities);
> -	clear_consistency_attr(vdev->queue, p->memory, &p->flags);
>  	if (res)
>  		return res;
>  	if (vb2_queue_is_busy(vdev, file))
>  		return -EBUSY;
> -	res = vb2_core_reqbufs(vdev->queue, p->memory, p->flags, &p->count);
> +	res = vb2_core_reqbufs(vdev->queue, p->memory, &p->count);
>  	/* If count == 0, then the owner has released all buffers and he
>  	   is no longer owner of the queue. Otherwise we have a new owner. */
>  	if (res == 0)
> @@ -1021,7 +1008,6 @@ int vb2_ioctl_create_bufs(struct file *file, void *priv,
>  
>  	p->index = vdev->queue->num_buffers;
>  	fill_buf_caps(vdev->queue, &p->capabilities);
> -	clear_consistency_attr(vdev->queue, p->memory, &p->flags);
>  	/*
>  	 * If count == 0, then just check if memory and type are valid.
>  	 * Any -EBUSY result from vb2_verify_memory_type can be mapped to 0.
> diff --git a/drivers/media/dvb-core/dvb_vb2.c b/drivers/media/dvb-core/dvb_vb2.c
> index 959d110407a4..6974f1731529 100644
> --- a/drivers/media/dvb-core/dvb_vb2.c
> +++ b/drivers/media/dvb-core/dvb_vb2.c
> @@ -342,7 +342,7 @@ int dvb_vb2_reqbufs(struct dvb_vb2_ctx *ctx, struct dmx_requestbuffers *req)
>  
>  	ctx->buf_siz = req->size;
>  	ctx->buf_cnt = req->count;
> -	ret = vb2_core_reqbufs(&ctx->vb_q, VB2_MEMORY_MMAP, 0, &req->count);
> +	ret = vb2_core_reqbufs(&ctx->vb_q, VB2_MEMORY_MMAP, &req->count);
>  	if (ret) {
>  		ctx->state = DVB_VB2_STATE_NONE;
>  		dprintk(1, "[%s] count=%d size=%d errno=%d\n", ctx->name,
> diff --git a/drivers/media/v4l2-core/v4l2-compat-ioctl32.c b/drivers/media/v4l2-core/v4l2-compat-ioctl32.c
> index 593bcf6c3735..a99e82ec9ab6 100644
> --- a/drivers/media/v4l2-core/v4l2-compat-ioctl32.c
> +++ b/drivers/media/v4l2-core/v4l2-compat-ioctl32.c
> @@ -246,9 +246,6 @@ struct v4l2_format32 {
>   * @memory:	buffer memory type
>   * @format:	frame format, for which buffers are requested
>   * @capabilities: capabilities of this buffer type.
> - * @flags:	additional buffer management attributes (ignored unless the
> - *		queue has V4L2_BUF_CAP_SUPPORTS_MMAP_CACHE_HINTS capability and
> - *		configured for MMAP streaming I/O).
>   * @reserved:	future extensions
>   */
>  struct v4l2_create_buffers32 {
> @@ -257,8 +254,7 @@ struct v4l2_create_buffers32 {
>  	__u32			memory;	/* enum v4l2_memory */
>  	struct v4l2_format32	format;
>  	__u32			capabilities;
> -	__u32			flags;
> -	__u32			reserved[6];
> +	__u32			reserved[7];
>  };
>  
>  static int __bufsize_v4l2_format(struct v4l2_format32 __user *p32, u32 *size)
> @@ -359,8 +355,7 @@ static int get_v4l2_create32(struct v4l2_create_buffers __user *p64,
>  {
>  	if (!access_ok(p32, sizeof(*p32)) ||
>  	    copy_in_user(p64, p32,
> -			 offsetof(struct v4l2_create_buffers32, format)) ||
> -	    assign_in_user(&p64->flags, &p32->flags))
> +			 offsetof(struct v4l2_create_buffers32, format)))
>  		return -EFAULT;
>  	return __get_v4l2_format32(&p64->format, &p32->format,
>  				   aux_buf, aux_space);
> @@ -422,7 +417,6 @@ static int put_v4l2_create32(struct v4l2_create_buffers __user *p64,
>  	    copy_in_user(p32, p64,
>  			 offsetof(struct v4l2_create_buffers32, format)) ||
>  	    assign_in_user(&p32->capabilities, &p64->capabilities) ||
> -	    assign_in_user(&p32->flags, &p64->flags) ||
>  	    copy_in_user(p32->reserved, p64->reserved, sizeof(p64->reserved)))
>  		return -EFAULT;
>  	return __put_v4l2_format32(&p64->format, &p32->format);
> diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c
> index e3a25ea913ac..ccf947632a3b 100644
> --- a/drivers/media/v4l2-core/v4l2-ioctl.c
> +++ b/drivers/media/v4l2-core/v4l2-ioctl.c
> @@ -2044,6 +2044,9 @@ static int v4l_reqbufs(const struct v4l2_ioctl_ops *ops,
>  
>  	if (ret)
>  		return ret;
> +
> +	CLEAR_AFTER_FIELD(p, capabilities);
> +
>  	return ops->vidioc_reqbufs(file, fh, p);
>  }
>  
> @@ -2083,7 +2086,7 @@ static int v4l_create_bufs(const struct v4l2_ioctl_ops *ops,
>  	if (ret)
>  		return ret;
>  
> -	CLEAR_AFTER_FIELD(create, flags);
> +	CLEAR_AFTER_FIELD(create, capabilities);
>  
>  	v4l_sanitize_format(&create->format);
>  
> diff --git a/include/media/videobuf2-core.h b/include/media/videobuf2-core.h
> index 52ef92049073..bbb3f26fbde9 100644
> --- a/include/media/videobuf2-core.h
> +++ b/include/media/videobuf2-core.h
> @@ -744,8 +744,6 @@ void vb2_core_querybuf(struct vb2_queue *q, unsigned int index, void *pb);
>   * vb2_core_reqbufs() - Initiate streaming.
>   * @q:		pointer to &struct vb2_queue with videobuf2 queue.
>   * @memory:	memory type, as defined by &enum vb2_memory.
> - * @flags:	auxiliary queue/buffer management flags. Currently, the only
> - *		used flag is %V4L2_FLAG_MEMORY_NON_CONSISTENT.
>   * @count:	requested buffer count.
>   *
>   * Videobuf2 core helper to implement VIDIOC_REQBUF() operation. It is called
> @@ -770,13 +768,12 @@ void vb2_core_querybuf(struct vb2_queue *q, unsigned int index, void *pb);
>   * Return: returns zero on success; an error code otherwise.
>   */
>  int vb2_core_reqbufs(struct vb2_queue *q, enum vb2_memory memory,
> -		    unsigned int flags, unsigned int *count);
> +		    unsigned int *count);
>  
>  /**
>   * vb2_core_create_bufs() - Allocate buffers and any required auxiliary structs
>   * @q: pointer to &struct vb2_queue with videobuf2 queue.
>   * @memory: memory type, as defined by &enum vb2_memory.
> - * @flags: auxiliary queue/buffer management flags.
>   * @count: requested buffer count.
>   * @requested_planes: number of planes requested.
>   * @requested_sizes: array with the size of the planes.
> @@ -794,7 +791,7 @@ int vb2_core_reqbufs(struct vb2_queue *q, enum vb2_memory memory,
>   * Return: returns zero on success; an error code otherwise.
>   */
>  int vb2_core_create_bufs(struct vb2_queue *q, enum vb2_memory memory,
> -			 unsigned int flags, unsigned int *count,
> +			 unsigned int *count,
>  			 unsigned int requested_planes,
>  			 const unsigned int requested_sizes[]);
>  
> diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
> index c7b70ff53bc1..235db7754606 100644
> --- a/include/uapi/linux/videodev2.h
> +++ b/include/uapi/linux/videodev2.h
> @@ -191,8 +191,6 @@ enum v4l2_memory {
>  	V4L2_MEMORY_DMABUF           = 4,
>  };
>  
> -#define V4L2_FLAG_MEMORY_NON_CONSISTENT		(1 << 0)
> -
>  /* see also http://vektor.theorem.ca/graphics/ycbcr/ */
>  enum v4l2_colorspace {
>  	/*
> @@ -949,10 +947,7 @@ struct v4l2_requestbuffers {
>  	__u32			type;		/* enum v4l2_buf_type */
>  	__u32			memory;		/* enum v4l2_memory */
>  	__u32			capabilities;
> -	union {
> -		__u32		flags;
> -		__u32		reserved[1];
> -	};
> +	__u32			reserved[1];
>  };
>  
>  /* capabilities for struct v4l2_requestbuffers and v4l2_create_buffers */
> @@ -2456,9 +2451,6 @@ struct v4l2_dbg_chip_info {
>   * @memory:	enum v4l2_memory; buffer memory type
>   * @format:	frame format, for which buffers are requested
>   * @capabilities: capabilities of this buffer type.
> - * @flags:	additional buffer management attributes (ignored unless the
> - *		queue has V4L2_BUF_CAP_SUPPORTS_MMAP_CACHE_HINTS capability
> - *		and configured for MMAP streaming I/O).
>   * @reserved:	future extensions
>   */
>  struct v4l2_create_buffers {
> @@ -2467,8 +2459,7 @@ struct v4l2_create_buffers {
>  	__u32			memory;
>  	struct v4l2_format	format;
>  	__u32			capabilities;
> -	__u32			flags;
> -	__u32			reserved[6];
> +	__u32			reserved[7];
>  };
>  
>  /*
> -- 
> GitLab
> 
> 
> From 4aa1615268a8ac2b20096211d3f9ac53874067d7 Mon Sep 17 00:00:00 2001
> From: Jason Gunthorpe <jgg@xxxxxxxxxx>
> Date: Mon, 14 Sep 2020 15:20:18 -0300
> Subject: [PATCH 013/126] RDMA/core: Fix ordering of CQ pool destruction
> 
> rxe will hold a refcount on the IB device as long as CQ objects exist,
> this causes destruction of a rxe device to hang if the CQ pool has any
> cached CQs since they are being destroyed after the refcount must go to
> zero.
> 
> Treat the CQ pool like a client and create/destroy it before/after all
> other clients. No users of CQ pool can exist past a client remove call.
> 
> Link: https://lore.kernel.org/r/e8a240aa-9e9b-3dca-062f-9130b787f29b@xxxxxxx
> Fixes: c7ff819aefea ("RDMA/core: Introduce shared CQ pool API")
> Tested-by: Bart Van Assche <bvanassche@xxxxxxx>
> Tested-by: Yi Zhang <yi.zhang@xxxxxxxxxx>
> Signed-off-by: Bart Van Assche <bvanassche@xxxxxxx>
> Signed-off-by: Jason Gunthorpe <jgg@xxxxxxxxxx>
> ---
>  drivers/infiniband/core/device.c | 6 ++++--
>  1 file changed, 4 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/infiniband/core/device.c b/drivers/infiniband/core/device.c
> index c36b4d2b61e0..23ee65a9185f 100644
> --- a/drivers/infiniband/core/device.c
> +++ b/drivers/infiniband/core/device.c
> @@ -1285,6 +1285,8 @@ static void disable_device(struct ib_device *device)
>  		remove_client_context(device, cid);
>  	}
>  
> +	ib_cq_pool_destroy(device);
> +
>  	/* Pairs with refcount_set in enable_device */
>  	ib_device_put(device);
>  	wait_for_completion(&device->unreg_completion);
> @@ -1328,6 +1330,8 @@ static int enable_device_and_get(struct ib_device *device)
>  			goto out;
>  	}
>  
> +	ib_cq_pool_init(device);
> +
>  	down_read(&clients_rwsem);
>  	xa_for_each_marked (&clients, index, client, CLIENT_REGISTERED) {
>  		ret = add_client_context(device, client);
> @@ -1400,7 +1404,6 @@ int ib_register_device(struct ib_device *device, const char *name)
>  		goto dev_cleanup;
>  	}
>  
> -	ib_cq_pool_init(device);
>  	ret = enable_device_and_get(device);
>  	dev_set_uevent_suppress(&device->dev, false);
>  	/* Mark for userspace that device is ready */
> @@ -1455,7 +1458,6 @@ static void __ib_unregister_device(struct ib_device *ib_dev)
>  		goto out;
>  
>  	disable_device(ib_dev);
> -	ib_cq_pool_destroy(ib_dev);
>  
>  	/* Expedite removing unregistered pointers from the hash table */
>  	free_netdevs(ib_dev);
> -- 
> GitLab
> 
> 
> From 50851f5033a34fb9f2ecefa57fc9efd862634416 Mon Sep 17 00:00:00 2001
> From: Jason Yan <yanaijie@xxxxxxxxxx>
> Date: Sat, 12 Sep 2020 15:22:11 +0800
> Subject: [PATCH 014/126] spi: bcm2835: Make polling_limit_us static
> 
> This eliminates the following sparse warning:
> 
> drivers/spi/spi-bcm2835.c:78:14: warning: symbol 'polling_limit_us' was
> not declared. Should it be static?
> 
> Reported-by: Hulk Robot <hulkci@xxxxxxxxxx>
> Signed-off-by: Jason Yan <yanaijie@xxxxxxxxxx>
> Link: https://lore.kernel.org/r/20200912072211.602735-1-yanaijie@xxxxxxxxxx
> Signed-off-by: Mark Brown <broonie@xxxxxxxxxx>
> ---
>  drivers/spi/spi-bcm2835.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/spi/spi-bcm2835.c b/drivers/spi/spi-bcm2835.c
> index c45d76c848c8..41986ac0fbfb 100644
> --- a/drivers/spi/spi-bcm2835.c
> +++ b/drivers/spi/spi-bcm2835.c
> @@ -75,7 +75,7 @@
>  #define DRV_NAME	"spi-bcm2835"
>  
>  /* define polling limits */
> -unsigned int polling_limit_us = 30;
> +static unsigned int polling_limit_us = 30;
>  module_param(polling_limit_us, uint, 0664);
>  MODULE_PARM_DESC(polling_limit_us,
>  		 "time in us to run a transfer in polling mode\n");
> -- 
> GitLab
> 
> 
> From 7f04839ec4483563f38062b4dd90253e45447198 Mon Sep 17 00:00:00 2001
> From: James Smart <james.smart@xxxxxxxxxxxx>
> Date: Fri, 11 Sep 2020 13:01:47 -0700
> Subject: [PATCH 015/126] scsi: lpfc: Fix initial FLOGI failure due to BBSCN
>  not supported
> 
> Initial FLOGIs are failing with the following message:
> 
>  lpfc 0000:13:00.1: 1:(0):0820 FLOGI Failed (x300). BBCredit Not Supported
> 
> In a prior patch, the READ_SPARAM command was re-ordered to post after
> CONFIG_LINK as the driver is expected to update the driver's copy of the
> service parameters for the FLOGI payload. If the bb-credit recovery feature
> is enabled, this is fine. But on adapters were bb-credit recovery isn't
> enabled, it would cause the FLOGI to fail.
> 
> Fix by restoring the original command order (READ_SPARAM before
> CONFIG_LINK), and after issuing CONFIG_LINK, detect bb-credit recovery
> support and reissuing READ_SPARAM to obtain the updated service parameters
> (effectively adding in the fix command order).
> 
> [mkp: corrected SHA]
> 
> Link: https://lore.kernel.org/r/20200911200147.110826-1-james.smart@xxxxxxxxxxxx
> Fixes: 835214f5d5f5 ("scsi: lpfc: Fix broken Credit Recovery after driver load")
> CC: <stable@xxxxxxxxxxxxxxx> # v5.7+
> Co-developed-by: Dick Kennedy <dick.kennedy@xxxxxxxxxxxx>
> Signed-off-by: Dick Kennedy <dick.kennedy@xxxxxxxxxxxx>
> Signed-off-by: James Smart <james.smart@xxxxxxxxxxxx>
> Signed-off-by: Martin K. Petersen <martin.petersen@xxxxxxxxxx>
> ---
>  drivers/scsi/lpfc/lpfc_hbadisc.c | 76 ++++++++++++++++++++++----------
>  1 file changed, 52 insertions(+), 24 deletions(-)
> 
> diff --git a/drivers/scsi/lpfc/lpfc_hbadisc.c b/drivers/scsi/lpfc/lpfc_hbadisc.c
> index 142a02114479..bf06d8549bd3 100644
> --- a/drivers/scsi/lpfc/lpfc_hbadisc.c
> +++ b/drivers/scsi/lpfc/lpfc_hbadisc.c
> @@ -71,6 +71,7 @@ static void lpfc_disc_timeout_handler(struct lpfc_vport *);
>  static void lpfc_disc_flush_list(struct lpfc_vport *vport);
>  static void lpfc_unregister_fcfi_cmpl(struct lpfc_hba *, LPFC_MBOXQ_t *);
>  static int lpfc_fcf_inuse(struct lpfc_hba *);
> +static void lpfc_mbx_cmpl_read_sparam(struct lpfc_hba *, LPFC_MBOXQ_t *);
>  
>  void
>  lpfc_terminate_rport_io(struct fc_rport *rport)
> @@ -1138,11 +1139,13 @@ lpfc_mbx_cmpl_clear_la(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb)
>  	return;
>  }
>  
> -
>  void
>  lpfc_mbx_cmpl_local_config_link(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb)
>  {
>  	struct lpfc_vport *vport = pmb->vport;
> +	LPFC_MBOXQ_t *sparam_mb;
> +	struct lpfc_dmabuf *sparam_mp;
> +	int rc;
>  
>  	if (pmb->u.mb.mbxStatus)
>  		goto out;
> @@ -1167,12 +1170,42 @@ lpfc_mbx_cmpl_local_config_link(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb)
>  	}
>  
>  	/* Start discovery by sending a FLOGI. port_state is identically
> -	 * LPFC_FLOGI while waiting for FLOGI cmpl. Check if sending
> -	 * the FLOGI is being deferred till after MBX_READ_SPARAM completes.
> +	 * LPFC_FLOGI while waiting for FLOGI cmpl.
>  	 */
>  	if (vport->port_state != LPFC_FLOGI) {
> -		if (!(phba->hba_flag & HBA_DEFER_FLOGI))
> +		/* Issue MBX_READ_SPARAM to update CSPs before FLOGI if
> +		 * bb-credit recovery is in place.
> +		 */
> +		if (phba->bbcredit_support && phba->cfg_enable_bbcr &&
> +		    !(phba->link_flag & LS_LOOPBACK_MODE)) {
> +			sparam_mb = mempool_alloc(phba->mbox_mem_pool,
> +						  GFP_KERNEL);
> +			if (!sparam_mb)
> +				goto sparam_out;
> +
> +			rc = lpfc_read_sparam(phba, sparam_mb, 0);
> +			if (rc) {
> +				mempool_free(sparam_mb, phba->mbox_mem_pool);
> +				goto sparam_out;
> +			}
> +			sparam_mb->vport = vport;
> +			sparam_mb->mbox_cmpl = lpfc_mbx_cmpl_read_sparam;
> +			rc = lpfc_sli_issue_mbox(phba, sparam_mb, MBX_NOWAIT);
> +			if (rc == MBX_NOT_FINISHED) {
> +				sparam_mp = (struct lpfc_dmabuf *)
> +						sparam_mb->ctx_buf;
> +				lpfc_mbuf_free(phba, sparam_mp->virt,
> +					       sparam_mp->phys);
> +				kfree(sparam_mp);
> +				sparam_mb->ctx_buf = NULL;
> +				mempool_free(sparam_mb, phba->mbox_mem_pool);
> +				goto sparam_out;
> +			}
> +
> +			phba->hba_flag |= HBA_DEFER_FLOGI;
> +		}  else {
>  			lpfc_initial_flogi(vport);
> +		}
>  	} else {
>  		if (vport->fc_flag & FC_PT2PT)
>  			lpfc_disc_start(vport);
> @@ -1184,6 +1217,7 @@ lpfc_mbx_cmpl_local_config_link(struct lpfc_hba *phba, LPFC_MBOXQ_t *pmb)
>  			 "0306 CONFIG_LINK mbxStatus error x%x "
>  			 "HBA state x%x\n",
>  			 pmb->u.mb.mbxStatus, vport->port_state);
> +sparam_out:
>  	mempool_free(pmb, phba->mbox_mem_pool);
>  
>  	lpfc_linkdown(phba);
> @@ -3239,21 +3273,6 @@ lpfc_mbx_process_link_up(struct lpfc_hba *phba, struct lpfc_mbx_read_top *la)
>  	lpfc_linkup(phba);
>  	sparam_mbox = NULL;
>  
> -	if (!(phba->hba_flag & HBA_FCOE_MODE)) {
> -		cfglink_mbox = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL);
> -		if (!cfglink_mbox)
> -			goto out;
> -		vport->port_state = LPFC_LOCAL_CFG_LINK;
> -		lpfc_config_link(phba, cfglink_mbox);
> -		cfglink_mbox->vport = vport;
> -		cfglink_mbox->mbox_cmpl = lpfc_mbx_cmpl_local_config_link;
> -		rc = lpfc_sli_issue_mbox(phba, cfglink_mbox, MBX_NOWAIT);
> -		if (rc == MBX_NOT_FINISHED) {
> -			mempool_free(cfglink_mbox, phba->mbox_mem_pool);
> -			goto out;
> -		}
> -	}
> -
>  	sparam_mbox = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL);
>  	if (!sparam_mbox)
>  		goto out;
> @@ -3274,7 +3293,20 @@ lpfc_mbx_process_link_up(struct lpfc_hba *phba, struct lpfc_mbx_read_top *la)
>  		goto out;
>  	}
>  
> -	if (phba->hba_flag & HBA_FCOE_MODE) {
> +	if (!(phba->hba_flag & HBA_FCOE_MODE)) {
> +		cfglink_mbox = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL);
> +		if (!cfglink_mbox)
> +			goto out;
> +		vport->port_state = LPFC_LOCAL_CFG_LINK;
> +		lpfc_config_link(phba, cfglink_mbox);
> +		cfglink_mbox->vport = vport;
> +		cfglink_mbox->mbox_cmpl = lpfc_mbx_cmpl_local_config_link;
> +		rc = lpfc_sli_issue_mbox(phba, cfglink_mbox, MBX_NOWAIT);
> +		if (rc == MBX_NOT_FINISHED) {
> +			mempool_free(cfglink_mbox, phba->mbox_mem_pool);
> +			goto out;
> +		}
> +	} else {
>  		vport->port_state = LPFC_VPORT_UNKNOWN;
>  		/*
>  		 * Add the driver's default FCF record at FCF index 0 now. This
> @@ -3331,10 +3363,6 @@ lpfc_mbx_process_link_up(struct lpfc_hba *phba, struct lpfc_mbx_read_top *la)
>  		}
>  		/* Reset FCF roundrobin bmask for new discovery */
>  		lpfc_sli4_clear_fcf_rr_bmask(phba);
> -	} else {
> -		if (phba->bbcredit_support && phba->cfg_enable_bbcr &&
> -		    !(phba->link_flag & LS_LOOPBACK_MODE))
> -			phba->hba_flag |= HBA_DEFER_FLOGI;
>  	}
>  
>  	/* Prepare for LINK up registrations */
> -- 
> GitLab
> 
> 
> From 27ba3e8ff3ab86449e63d38a8d623053591e65fa Mon Sep 17 00:00:00 2001
> From: Damien Le Moal <damien.lemoal@xxxxxxx>
> Date: Tue, 15 Sep 2020 16:33:46 +0900
> Subject: [PATCH 016/126] scsi: sd: sd_zbc: Fix handling of host-aware ZBC
>  disks
> 
> When CONFIG_BLK_DEV_ZONED is disabled, allow using host-aware ZBC disks as
> regular disks. In this case, ensure that command completion is correctly
> executed by changing sd_zbc_complete() to return good_bytes instead of 0
> and causing a hang during device probe (endless retries).
> 
> When CONFIG_BLK_DEV_ZONED is enabled and a host-aware disk is detected to
> have partitions, it will be used as a regular disk. In this case, make sure
> to not do anything in sd_zbc_revalidate_zones() as that triggers warnings.
> 
> Since all these different cases result in subtle settings of the disk queue
> zoned model, introduce the block layer helper function
> blk_queue_set_zoned() to generically implement setting up the effective
> zoned model according to the disk type, the presence of partitions on the
> disk and CONFIG_BLK_DEV_ZONED configuration.
> 
> Link: https://lore.kernel.org/r/20200915073347.832424-2-damien.lemoal@xxxxxxx
> Fixes: b72053072c0b ("block: allow partitions on host aware zone devices")
> Cc: <stable@xxxxxxxxxxxxxxx>
> Reported-by: Borislav Petkov <bp@xxxxxxxxx>
> Suggested-by: Christoph Hellwig <hch@xxxxxxxxxxxxx>
> Reviewed-by: Christoph Hellwig <hch@xxxxxx>
> Reviewed-by: Johannes Thumshirn <johannes.thumshirn@xxxxxxx>
> Signed-off-by: Damien Le Moal <damien.lemoal@xxxxxxx>
> Signed-off-by: Martin K. Petersen <martin.petersen@xxxxxxxxxx>
> ---
>  block/blk-settings.c   | 46 ++++++++++++++++++++++++++++++++++++++++++
>  drivers/scsi/sd.c      | 30 ++++++++++++++++-----------
>  drivers/scsi/sd.h      |  2 +-
>  drivers/scsi/sd_zbc.c  |  6 +++++-
>  include/linux/blkdev.h |  2 ++
>  5 files changed, 72 insertions(+), 14 deletions(-)
> 
> diff --git a/block/blk-settings.c b/block/blk-settings.c
> index 76a7e03bcd6c..34b721a2743a 100644
> --- a/block/blk-settings.c
> +++ b/block/blk-settings.c
> @@ -801,6 +801,52 @@ bool blk_queue_can_use_dma_map_merging(struct request_queue *q,
>  }
>  EXPORT_SYMBOL_GPL(blk_queue_can_use_dma_map_merging);
>  
> +/**
> + * blk_queue_set_zoned - configure a disk queue zoned model.
> + * @disk:	the gendisk of the queue to configure
> + * @model:	the zoned model to set
> + *
> + * Set the zoned model of the request queue of @disk according to @model.
> + * When @model is BLK_ZONED_HM (host managed), this should be called only
> + * if zoned block device support is enabled (CONFIG_BLK_DEV_ZONED option).
> + * If @model specifies BLK_ZONED_HA (host aware), the effective model used
> + * depends on CONFIG_BLK_DEV_ZONED settings and on the existence of partitions
> + * on the disk.
> + */
> +void blk_queue_set_zoned(struct gendisk *disk, enum blk_zoned_model model)
> +{
> +	switch (model) {
> +	case BLK_ZONED_HM:
> +		/*
> +		 * Host managed devices are supported only if
> +		 * CONFIG_BLK_DEV_ZONED is enabled.
> +		 */
> +		WARN_ON_ONCE(!IS_ENABLED(CONFIG_BLK_DEV_ZONED));
> +		break;
> +	case BLK_ZONED_HA:
> +		/*
> +		 * Host aware devices can be treated either as regular block
> +		 * devices (similar to drive managed devices) or as zoned block
> +		 * devices to take advantage of the zone command set, similarly
> +		 * to host managed devices. We try the latter if there are no
> +		 * partitions and zoned block device support is enabled, else
> +		 * we do nothing special as far as the block layer is concerned.
> +		 */
> +		if (!IS_ENABLED(CONFIG_BLK_DEV_ZONED) ||
> +		    disk_has_partitions(disk))
> +			model = BLK_ZONED_NONE;
> +		break;
> +	case BLK_ZONED_NONE:
> +	default:
> +		if (WARN_ON_ONCE(model != BLK_ZONED_NONE))
> +			model = BLK_ZONED_NONE;
> +		break;
> +	}
> +
> +	disk->queue->limits.zoned = model;
> +}
> +EXPORT_SYMBOL_GPL(blk_queue_set_zoned);
> +
>  static int __init blk_settings_init(void)
>  {
>  	blk_max_low_pfn = max_low_pfn - 1;
> diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
> index 95018e650f2d..06286b6aeaec 100644
> --- a/drivers/scsi/sd.c
> +++ b/drivers/scsi/sd.c
> @@ -2964,26 +2964,32 @@ static void sd_read_block_characteristics(struct scsi_disk *sdkp)
>  
>  	if (sdkp->device->type == TYPE_ZBC) {
>  		/* Host-managed */
> -		q->limits.zoned = BLK_ZONED_HM;
> +		blk_queue_set_zoned(sdkp->disk, BLK_ZONED_HM);
>  	} else {
>  		sdkp->zoned = (buffer[8] >> 4) & 3;
> -		if (sdkp->zoned == 1 && !disk_has_partitions(sdkp->disk)) {
> +		if (sdkp->zoned == 1) {
>  			/* Host-aware */
> -			q->limits.zoned = BLK_ZONED_HA;
> +			blk_queue_set_zoned(sdkp->disk, BLK_ZONED_HA);
>  		} else {
> -			/*
> -			 * Treat drive-managed devices and host-aware devices
> -			 * with partitions as regular block devices.
> -			 */
> -			q->limits.zoned = BLK_ZONED_NONE;
> -			if (sdkp->zoned == 2 && sdkp->first_scan)
> -				sd_printk(KERN_NOTICE, sdkp,
> -					  "Drive-managed SMR disk\n");
> +			/* Regular disk or drive managed disk */
> +			blk_queue_set_zoned(sdkp->disk, BLK_ZONED_NONE);
>  		}
>  	}
> -	if (blk_queue_is_zoned(q) && sdkp->first_scan)
> +
> +	if (!sdkp->first_scan)
> +		goto out;
> +
> +	if (blk_queue_is_zoned(q)) {
>  		sd_printk(KERN_NOTICE, sdkp, "Host-%s zoned block device\n",
>  		      q->limits.zoned == BLK_ZONED_HM ? "managed" : "aware");
> +	} else {
> +		if (sdkp->zoned == 1)
> +			sd_printk(KERN_NOTICE, sdkp,
> +				  "Host-aware SMR disk used as regular disk\n");
> +		else if (sdkp->zoned == 2)
> +			sd_printk(KERN_NOTICE, sdkp,
> +				  "Drive-managed SMR disk\n");
> +	}
>  
>   out:
>  	kfree(buffer);
> diff --git a/drivers/scsi/sd.h b/drivers/scsi/sd.h
> index 4933e7daf17d..7251434100e6 100644
> --- a/drivers/scsi/sd.h
> +++ b/drivers/scsi/sd.h
> @@ -259,7 +259,7 @@ static inline blk_status_t sd_zbc_setup_zone_mgmt_cmnd(struct scsi_cmnd *cmd,
>  static inline unsigned int sd_zbc_complete(struct scsi_cmnd *cmd,
>  			unsigned int good_bytes, struct scsi_sense_hdr *sshdr)
>  {
> -	return 0;
> +	return good_bytes;
>  }
>  
>  static inline blk_status_t sd_zbc_prepare_zone_append(struct scsi_cmnd *cmd,
> diff --git a/drivers/scsi/sd_zbc.c b/drivers/scsi/sd_zbc.c
> index 0e94ff056bff..a739456dea02 100644
> --- a/drivers/scsi/sd_zbc.c
> +++ b/drivers/scsi/sd_zbc.c
> @@ -667,7 +667,11 @@ int sd_zbc_revalidate_zones(struct scsi_disk *sdkp)
>  	u32 max_append;
>  	int ret = 0;
>  
> -	if (!sd_is_zoned(sdkp))
> +	/*
> +	 * There is nothing to do for regular disks, including host-aware disks
> +	 * that have partitions.
> +	 */
> +	if (!blk_queue_is_zoned(q))
>  		return 0;
>  
>  	/*
> diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
> index bb5636cc17b9..868e11face00 100644
> --- a/include/linux/blkdev.h
> +++ b/include/linux/blkdev.h
> @@ -352,6 +352,8 @@ struct queue_limits {
>  typedef int (*report_zones_cb)(struct blk_zone *zone, unsigned int idx,
>  			       void *data);
>  
> +void blk_queue_set_zoned(struct gendisk *disk, enum blk_zoned_model model);
> +
>  #ifdef CONFIG_BLK_DEV_ZONED
>  
>  #define BLK_ALL_ZONES  ((unsigned int)-1)
> -- 
> GitLab
> 
> 
> From 6c5dee18756b4721ac8518c69b22ee8ac0c9c442 Mon Sep 17 00:00:00 2001
> From: Damien Le Moal <damien.lemoal@xxxxxxx>
> Date: Tue, 15 Sep 2020 16:33:47 +0900
> Subject: [PATCH 017/126] scsi: sd: sd_zbc: Fix ZBC disk initialization
> 
> Make sure to call sd_zbc_init_disk() when the sdkp->zoned field is known,
> that is, once sd_read_block_characteristics() is executed in
> sd_revalidate_disk(), so that host-aware disks also get initialized.  To do
> so, move sd_zbc_init_disk() call in sd_zbc_revalidate_zones() and make sure
> to execute it for all zoned disks, including for host-aware disks used as
> regular disks as these disk zoned model may be changed back to BLK_ZONED_HA
> when partitions are deleted.
> 
> Link: https://lore.kernel.org/r/20200915073347.832424-3-damien.lemoal@xxxxxxx
> Fixes: 5795eb443060 ("scsi: sd_zbc: emulate ZONE_APPEND commands")
> Cc: <stable@xxxxxxxxxxxxxxx> # v5.8+
> Reported-by: Borislav Petkov <bp@xxxxxxxxx>
> Tested-by: Borislav Petkov <bp@xxxxxxx>
> Reviewed-by: Johannes Thumshirn <johannes.thumshirn@xxxxxxx>
> Reviewed-by: Christoph Hellwig <hch@xxxxxx>
> Signed-off-by: Damien Le Moal <damien.lemoal@xxxxxxx>
> Signed-off-by: Martin K. Petersen <martin.petersen@xxxxxxxxxx>
> ---
>  drivers/scsi/sd.c     |  4 ---
>  drivers/scsi/sd.h     |  6 -----
>  drivers/scsi/sd_zbc.c | 60 +++++++++++++++++++++++++------------------
>  3 files changed, 35 insertions(+), 35 deletions(-)
> 
> diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
> index 06286b6aeaec..16503e22691e 100644
> --- a/drivers/scsi/sd.c
> +++ b/drivers/scsi/sd.c
> @@ -3410,10 +3410,6 @@ static int sd_probe(struct device *dev)
>  	sdkp->first_scan = 1;
>  	sdkp->max_medium_access_timeouts = SD_MAX_MEDIUM_TIMEOUTS;
>  
> -	error = sd_zbc_init_disk(sdkp);
> -	if (error)
> -		goto out_free_index;
> -
>  	sd_revalidate_disk(gd);
>  
>  	gd->flags = GENHD_FL_EXT_DEVT;
> diff --git a/drivers/scsi/sd.h b/drivers/scsi/sd.h
> index 7251434100e6..a3aad608bc38 100644
> --- a/drivers/scsi/sd.h
> +++ b/drivers/scsi/sd.h
> @@ -215,7 +215,6 @@ static inline int sd_is_zoned(struct scsi_disk *sdkp)
>  
>  #ifdef CONFIG_BLK_DEV_ZONED
>  
> -int sd_zbc_init_disk(struct scsi_disk *sdkp);
>  void sd_zbc_release_disk(struct scsi_disk *sdkp);
>  int sd_zbc_read_zones(struct scsi_disk *sdkp, unsigned char *buffer);
>  int sd_zbc_revalidate_zones(struct scsi_disk *sdkp);
> @@ -231,11 +230,6 @@ blk_status_t sd_zbc_prepare_zone_append(struct scsi_cmnd *cmd, sector_t *lba,
>  
>  #else /* CONFIG_BLK_DEV_ZONED */
>  
> -static inline int sd_zbc_init_disk(struct scsi_disk *sdkp)
> -{
> -	return 0;
> -}
> -
>  static inline void sd_zbc_release_disk(struct scsi_disk *sdkp) {}
>  
>  static inline int sd_zbc_read_zones(struct scsi_disk *sdkp,
> diff --git a/drivers/scsi/sd_zbc.c b/drivers/scsi/sd_zbc.c
> index a739456dea02..cf07b7f93579 100644
> --- a/drivers/scsi/sd_zbc.c
> +++ b/drivers/scsi/sd_zbc.c
> @@ -651,6 +651,28 @@ static void sd_zbc_print_zones(struct scsi_disk *sdkp)
>  			  sdkp->zone_blocks);
>  }
>  
> +static int sd_zbc_init_disk(struct scsi_disk *sdkp)
> +{
> +	sdkp->zones_wp_offset = NULL;
> +	spin_lock_init(&sdkp->zones_wp_offset_lock);
> +	sdkp->rev_wp_offset = NULL;
> +	mutex_init(&sdkp->rev_mutex);
> +	INIT_WORK(&sdkp->zone_wp_offset_work, sd_zbc_update_wp_offset_workfn);
> +	sdkp->zone_wp_update_buf = kzalloc(SD_BUF_SIZE, GFP_KERNEL);
> +	if (!sdkp->zone_wp_update_buf)
> +		return -ENOMEM;
> +
> +	return 0;
> +}
> +
> +void sd_zbc_release_disk(struct scsi_disk *sdkp)
> +{
> +	kvfree(sdkp->zones_wp_offset);
> +	sdkp->zones_wp_offset = NULL;
> +	kfree(sdkp->zone_wp_update_buf);
> +	sdkp->zone_wp_update_buf = NULL;
> +}
> +
>  static void sd_zbc_revalidate_zones_cb(struct gendisk *disk)
>  {
>  	struct scsi_disk *sdkp = scsi_disk(disk);
> @@ -667,6 +689,19 @@ int sd_zbc_revalidate_zones(struct scsi_disk *sdkp)
>  	u32 max_append;
>  	int ret = 0;
>  
> +	/*
> +	 * For all zoned disks, initialize zone append emulation data if not
> +	 * already done. This is necessary also for host-aware disks used as
> +	 * regular disks due to the presence of partitions as these partitions
> +	 * may be deleted and the disk zoned model changed back from
> +	 * BLK_ZONED_NONE to BLK_ZONED_HA.
> +	 */
> +	if (sd_is_zoned(sdkp) && !sdkp->zone_wp_update_buf) {
> +		ret = sd_zbc_init_disk(sdkp);
> +		if (ret)
> +			return ret;
> +	}
> +
>  	/*
>  	 * There is nothing to do for regular disks, including host-aware disks
>  	 * that have partitions.
> @@ -768,28 +803,3 @@ int sd_zbc_read_zones(struct scsi_disk *sdkp, unsigned char *buf)
>  
>  	return ret;
>  }
> -
> -int sd_zbc_init_disk(struct scsi_disk *sdkp)
> -{
> -	if (!sd_is_zoned(sdkp))
> -		return 0;
> -
> -	sdkp->zones_wp_offset = NULL;
> -	spin_lock_init(&sdkp->zones_wp_offset_lock);
> -	sdkp->rev_wp_offset = NULL;
> -	mutex_init(&sdkp->rev_mutex);
> -	INIT_WORK(&sdkp->zone_wp_offset_work, sd_zbc_update_wp_offset_workfn);
> -	sdkp->zone_wp_update_buf = kzalloc(SD_BUF_SIZE, GFP_KERNEL);
> -	if (!sdkp->zone_wp_update_buf)
> -		return -ENOMEM;
> -
> -	return 0;
> -}
> -
> -void sd_zbc_release_disk(struct scsi_disk *sdkp)
> -{
> -	kvfree(sdkp->zones_wp_offset);
> -	sdkp->zones_wp_offset = NULL;
> -	kfree(sdkp->zone_wp_update_buf);
> -	sdkp->zone_wp_update_buf = NULL;
> -}
> -- 
> GitLab
> 
> 
> From e5467b672bd99f0c1904900013e778e3a5ce30b7 Mon Sep 17 00:00:00 2001
> From: =?UTF-8?q?Marek=20Beh=C3=BAn?= <marek.behun@xxxxxx>
> Date: Tue, 15 Sep 2020 02:54:26 +0200
> Subject: [PATCH 018/126] dt-bindings: leds: cznic,turris-omnia-leds: fix error
>  in binding
> MIME-Version: 1.0
> Content-Type: text/plain; charset=UTF-8
> Content-Transfer-Encoding: 8bit
> 
> There is a bug in the device tree binding for cznic,turris-omnia-leds
> which causes make dt_binding_check to complain.
> 
> The reason is that the multi-led property binding's regular expression
> does not contain the `@` character, while the example nodes do.
> 
> Fix this, and also adjust the maximum address to 'b' as there are 12
> LEDs.
> 
> Cc: Rob Herring <robh+dt@xxxxxxxxxx>
> Cc: devicetree@xxxxxxxxxxxxxxx
> Cc: Pavel Machek <pavel@xxxxxx>
> Signed-off-by: Marek Behún <marek.behun@xxxxxx>
> Link: https://lore.kernel.org/r/20200915005426.15957-1-marek.behun@xxxxxx
> Signed-off-by: Rob Herring <robh@xxxxxxxxxx>
> ---
>  .../devicetree/bindings/leds/cznic,turris-omnia-leds.yaml       | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/Documentation/devicetree/bindings/leds/cznic,turris-omnia-leds.yaml b/Documentation/devicetree/bindings/leds/cznic,turris-omnia-leds.yaml
> index 24ad1446445e..fe7fa25877fd 100644
> --- a/Documentation/devicetree/bindings/leds/cznic,turris-omnia-leds.yaml
> +++ b/Documentation/devicetree/bindings/leds/cznic,turris-omnia-leds.yaml
> @@ -30,7 +30,7 @@ properties:
>      const: 0
>  
>  patternProperties:
> -  "^multi-led[0-9a-f]$":
> +  "^multi-led@[0-9a-b]$":
>      type: object
>      allOf:
>        - $ref: leds-class-multicolor.yaml#
> -- 
> GitLab
> 
> 
> From d33030e2ee3508d65db5644551435310df86010e Mon Sep 17 00:00:00 2001
> From: Jeffrey Mitchell <jeffrey.mitchell@xxxxxxxxxx>
> Date: Tue, 15 Sep 2020 16:42:52 -0500
> Subject: [PATCH 019/126] nfs: Fix security label length not being reset
> 
> nfs_readdir_page_filler() iterates over entries in a directory, reusing
> the same security label buffer, but does not reset the buffer's length.
> This causes decode_attr_security_label() to return -ERANGE if an entry's
> security label is longer than the previous one's. This error, in
> nfs4_decode_dirent(), only gets passed up as -EAGAIN, which causes another
> failed attempt to copy into the buffer. The second error is ignored and
> the remaining entries do not show up in ls, specifically the getdents64()
> syscall.
> 
> Reproduce by creating multiple files in NFS and giving one of the later
> files a longer security label. ls will not see that file nor any that are
> added afterwards, though they will exist on the backend.
> 
> In nfs_readdir_page_filler(), reset security label buffer length before
> every reuse
> 
> Signed-off-by: Jeffrey Mitchell <jeffrey.mitchell@xxxxxxxxxx>
> Fixes: b4487b935452 ("nfs: Fix getxattr kernel panic and memory overflow")
> Signed-off-by: Trond Myklebust <trond.myklebust@xxxxxxxxxxxxxxx>
> ---
>  fs/nfs/dir.c | 3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c
> index e732580fe47b..cb52db9a0cfb 100644
> --- a/fs/nfs/dir.c
> +++ b/fs/nfs/dir.c
> @@ -579,6 +579,9 @@ int nfs_readdir_page_filler(nfs_readdir_descriptor_t *desc, struct nfs_entry *en
>  	xdr_set_scratch_buffer(&stream, page_address(scratch), PAGE_SIZE);
>  
>  	do {
> +		if (entry->label)
> +			entry->label->len = NFS4_MAXLABELLEN;
> +
>  		status = xdr_decode(desc, entry, &stream);
>  		if (status != 0) {
>  			if (status == -EAGAIN)
> -- 
> GitLab
> 
> 
> From 16abd2a0c124a6c3543c88ca4c53c997c9fb4114 Mon Sep 17 00:00:00 2001
> From: Olga Kornievskaia <kolga@xxxxxxxxxx>
> Date: Wed, 16 Sep 2020 09:07:54 -0400
> Subject: [PATCH 020/126] NFSv4.2: fix client's attribute cache management for
>  copy_file_range
> 
> After client is done with the COPY operation, it needs to invalidate
> its pagecache (as it did no reading or writing of the data locally)
> and it needs to invalidate it's attributes just like it would have
> for a read on the source file and write on the destination file.
> 
> Once the linux server started giving out read delegations to
> read+write opens, the destination file of the copy_file range
> started having delegations and not doing syncup on close of the
> file leading to xfstest failures for generic/430,431,432,433,565.
> 
> v2: changing cache_validity needs to be protected by the i_lock.
> 
> Reported-by: Murphy Zhou <jencce.kernel@xxxxxxxxx>
> Fixes: 2e72448b07dc ("NFS: Add COPY nfs operation")
> Signed-off-by: Olga Kornievskaia <kolga@xxxxxxxxxx>
> Signed-off-by: Trond Myklebust <trond.myklebust@xxxxxxxxxxxxxxx>
> ---
>  fs/nfs/nfs42proc.c | 10 +++++++++-
>  1 file changed, 9 insertions(+), 1 deletion(-)
> 
> diff --git a/fs/nfs/nfs42proc.c b/fs/nfs/nfs42proc.c
> index 142225f0af59..2b2211d1234e 100644
> --- a/fs/nfs/nfs42proc.c
> +++ b/fs/nfs/nfs42proc.c
> @@ -356,7 +356,15 @@ static ssize_t _nfs42_proc_copy(struct file *src,
>  
>  	truncate_pagecache_range(dst_inode, pos_dst,
>  				 pos_dst + res->write_res.count);
> -
> +	spin_lock(&dst_inode->i_lock);
> +	NFS_I(dst_inode)->cache_validity |= (NFS_INO_REVAL_PAGECACHE |
> +			NFS_INO_REVAL_FORCED | NFS_INO_INVALID_SIZE |
> +			NFS_INO_INVALID_ATTR | NFS_INO_INVALID_DATA);
> +	spin_unlock(&dst_inode->i_lock);
> +	spin_lock(&src_inode->i_lock);
> +	NFS_I(src_inode)->cache_validity |= (NFS_INO_REVAL_PAGECACHE |
> +			NFS_INO_REVAL_FORCED | NFS_INO_INVALID_ATIME);
> +	spin_unlock(&src_inode->i_lock);
>  	status = res->write_res.count;
>  out:
>  	if (args->sync)
> -- 
> GitLab
> 
> 
> From 8bb283e93dd98b27e2a88c623c2f6be889c82ad1 Mon Sep 17 00:00:00 2001
> From: Prarit Bhargava <prarit@xxxxxxxxxx>
> Date: Thu, 10 Sep 2020 13:34:03 -0400
> Subject: [PATCH 021/126] RHMAINTAINERS: update for unassigned kernel areas
> 
> These areas are unassigned in the kernel
> 
> - lib/
> - drivers/phy
> - init/
> - drivers/input
> - drivers/clk
> - drivers/tty
> - drivers/misc
> - drivers/soc
> - mm/
> 
> Also fix an out-of-order entry (MMC).
> 
> v2: Remove darcari from SYSTEM ON CHIP (darcari)
> v3: Helps to actually send the right version of the patch.
> 
> RH-Acked-by: David Arcari <darcari@xxxxxxxxxx>
> RH-Acked-by: John W. Linville <linville@xxxxxxxxxx>
> RH-Acked-by: Tony Camuso <tcamuso@xxxxxxxxxx>
> 
> Signed-off-by: Prarit Bhargava <prarit@xxxxxxxxxx>
> Cc: prarit@xxxxxxxxxx
> Cc: linville@xxxxxxxxxx
> Cc: darcari@xxxxxxxxxx
> Cc: tcamuso@xxxxxxxxxx
> Cc: msalter@xxxxxxxxxx
> Cc: aquini@xxxxxxxxxx
> ---
>  redhat/rhdocs/MAINTAINERS/RHMAINTAINERS | 78 +++++++++++++++++++++++--
>  1 file changed, 73 insertions(+), 5 deletions(-)
> 
> diff --git a/redhat/rhdocs/MAINTAINERS/RHMAINTAINERS b/redhat/rhdocs/MAINTAINERS/RHMAINTAINERS
> index ccc77ee4679d..a7bf575a4d1d 100644
> --- a/redhat/rhdocs/MAINTAINERS/RHMAINTAINERS
> +++ b/redhat/rhdocs/MAINTAINERS/RHMAINTAINERS
> @@ -440,6 +440,13 @@ S:	Maintained
>  F:	Documentation/filesystems/ceph.txt
>  F:	fs/ceph/
>  
> +CHAR and MISC DRIVERS
> +M:	John Linville <linville@xxxxxxxxxx>
> +S:	Maintained
> +F:	drivers/char/
> +F:	drivers/misc/
> +F:	include/linux/miscdevice.h
> +
>  CIFS FILESYSTEM
>  L:	kernel-patches@xxxxxxxxxx
>  S:	Maintained
> @@ -455,6 +462,15 @@ M:	Chris Leech <cleech@xxxxxxxxxx>
>  S:	Maintained
>  F:	drivers/scsi/fnic/
>  
> +COMMON CLK FRAMEWORK
> +M:	Mark Salter <msalter@xxxxxxxxxx>
> +S:	Maintained
> +F:	Documentation/devicetree/bindings/clock/
> +F:	drivers/clk/
> +F:	include/linux/clk-pr*
> +F:	include/linux/clk/
> +F:	include/linux/of_clk.h
> +
>  CONFIGFS
>  M:	Bob Peterson <rpeterso@xxxxxxxxxx>
>  F:	fs/configfs/
> @@ -654,6 +670,13 @@ F:	kernel/futex.c
>  F:	tools/perf/bench/futex*
>  F:	tools/testing/selftests/futex/
>  
> +GENERIC PHY FRAMEWORK
> +M:	John Linville <linville@xxxxxxxxxx>
> +S:	Maintained
> +F:	Documentation/devicetree/bindings/phy/
> +F:	drivers/phy
> +F:	include/linux/phy
> +
>  GFS2 FILE SYSTEM
>  M:	Bob Peterson <rpeterso@xxxxxxxxxx>
>  M:	Andreas Gruenbacher <agruenba@xxxxxxxxxx>
> @@ -682,6 +705,23 @@ F:	include/linux/i2c-*.h
>  F:	include/uapi/linux/i2c.h
>  F:	include/uapi/linux/i2c-*.h
>  
> +INIT
> +M:	Prarit Bhargava <prarit@xxxxxxxxxx>
> +S:	Maintained
> +F:	init/
> +
> +INPUT (KEYBOARD, MOUSE, JOYSTICK, TOUCHSCREEN) DRIVERS
> +M:	Tony Camuso <tcamuso@xxxxxxxxxx>
> +S:	Maintained
> +F:	Documentation/devicetree/bindings/input/
> +F:	Documentation/devicetree/bindings/serio/
> +F:	Documentation/input/
> +F:	drivers/input/
> +F:	include/linux/input.h
> +F:	include/linux/input/
> +F:	include/uapi/linux/input-event-codes.h
> +F:	include/uapi/linux/input.h
> +
>  INTEGRITY SUBSYSTEM
>  M:	Bruno Meneguele <bmeneg@xxxxxxxxxx>
>  S:	Maintained
> @@ -927,12 +967,10 @@ M:	Tony Camuso <tcamuso@xxxxxxxxxx>
>  S:	Maintained
>  F:	drivers/i2c/busses/i2c-ismt.c
>  
> -MMC LAYER
> -M:	Gopal Tiwari <gtiwari@xxxxxxxxxx>
> +LIB
> +M:	Prarit Bhargava <prarit@xxxxxxxxxx>
>  S:	Maintained
> -F:	Documentation/mmc/
> -F:	include/linux/mmc/
> -F:	drivers/mmc/
> +F:	lib/
>  
>  LIVE PATCHING / KPATCH
>  M:	Josh Poimboeuf <jpoimboe@xxxxxxxxxx>
> @@ -999,6 +1037,11 @@ MEMORY MANAGEMENT
>  M:	Rafael Aquini <aquini@xxxxxxxxxx>
>  S:	Maintained
>  F:	include/linux/mm.h
> +F:	include/linux/gfp.h
> +F:	include/linux/memory_hotplug.h
> +F:	include/linux/mm.h
> +F:	include/linux/mmzone.h
> +F:	include/linux/vmalloc.h
>  F:	mm/
>  
>  MEMORY HOTPLUG
> @@ -1011,6 +1054,13 @@ S:	Maintained
>  F:	drivers/block/mtip32xx/mtip32xx.c
>  F:	drivers/block/mtip32xx/mtip32xx.h
>  
> +MMC LAYER
> +M:	Gopal Tiwari <gtiwari@xxxxxxxxxx>
> +S:	Maintained
> +F:	Documentation/mmc/
> +F:	include/linux/mmc/
> +F:	drivers/mmc/
> +
>  MYRICOM MYRI-10G 10GbE DRIVER (MYRI10GE)
>  M:	Jarod Wilson <jarod@xxxxxxxxxx>
>  S:	Maintained
> @@ -1428,6 +1478,12 @@ F:	Documentation/networking/switchdev.txt
>  F:	include/net/switchdev.h
>  F:	net/switchdev/
>  
> +SYSTEM ON CHIP
> +M:	Mark Salter <msalter@xxxxxxxxxx>
> +S:	Maintained
> +F:	drivers/soc/
> +F:	include/linux/soc
> +
>  TC subsystem
>  M:	Ivan Vecera <ivecera@xxxxxxxxxx>
>  S:	Maintained
> @@ -1459,6 +1515,18 @@ F:	include/uapi/linux/tipc_netlink.h
>  F:	include/uapi/linux/tipc_config.h
>  F:	include/uapi/linux/tipc_socket_diag.h
>  
> +TTY LAYER
> +M:	John Linville <linville@xxxxxxxxxx>
> +S:	Supported
> +F:	drivers/tty/
> +F:	drivers/tty/serial/serial_core.c
> +F:	include/linux/serial.h
> +F:	include/linux/serial_core.h
> +F:	include/linux/tty.h
> +F:	include/uapi/linux/serial.h
> +F:	include/uapi/linux/serial_core.h
> +F:	include/uapi/linux/tty.h
> +
>  X86 ARCHITECTURE
>  M:	David Arcari <darcari@xxxxxxxxxx>
>  M:	Prarit Bhargava <prarit@xxxxxxxxxx>
> -- 
> GitLab
> 
> 
> From 94cc89eb8fa5039fcb6e3e3d50f929ddcccee095 Mon Sep 17 00:00:00 2001
> From: Charles Keepax <ckeepax@xxxxxxxxxxxxxxxxxxxxx>
> Date: Thu, 17 Sep 2020 13:08:28 +0100
> Subject: [PATCH 022/126] regmap: debugfs: Fix handling of name string for
>  debugfs init delays
> 
> In regmap_debugfs_init the initialisation of the debugfs is delayed
> if the root node isn't ready yet. Most callers of regmap_debugfs_init
> pass the name from the regmap_config, which is considered temporary
> ie. may be unallocated after the regmap_init call returns. This leads
> to a potential use after free, where config->name has been freed by
> the time it is used in regmap_debugfs_initcall.
> 
> This situation can be seen on Zynq, where the architecture init_irq
> callback registers a syscon device, using a local variable for the
> regmap_config. As init_irq is very early in the platform bring up the
> regmap debugfs root isn't ready yet. Although this doesn't crash it
> does result in the debugfs entry not having the correct name.
> 
> Regmap already sets map->name from config->name on the regmap_init
> path and the fact that a separate field is used to pass the name
> to regmap_debugfs_init appears to be an artifact of the debugfs
> name being added before the map name. As such this patch updates
> regmap_debugfs_init to use map->name, which is already duplicated from
> the config avoiding the issue.
> 
> This does however leave two lose ends, both regmap_attach_dev and
> regmap_reinit_cache can be called after a regmap is registered and
> would have had the effect of applying a new name to the debugfs
> entries. In both of these cases it was chosen to update the map
> name. In the case of regmap_attach_dev there are 3 users that
> currently use this function to update the name, thus doing so avoids
> changes for those users and it seems reasonable that attaching
> a device would want to set the name of the map. In the case of
> regmap_reinit_cache the primary use-case appears to be devices that
> need some register access to identify the device (for example devices
> in the same family) and then update the cache to match the exact
> hardware. Whilst no users do currently update the name here, given the
> use-case it seemed reasonable the name might want to be updated once
> the device is better identified.
> 
> Signed-off-by: Charles Keepax <ckeepax@xxxxxxxxxxxxxxxxxxxxx>
> Link: https://lore.kernel.org/r/20200917120828.12987-1-ckeepax@xxxxxxxxxxxxxxxxxxxxx
> Signed-off-by: Mark Brown <broonie@xxxxxxxxxx>
> ---
>  drivers/base/regmap/internal.h       |  4 +--
>  drivers/base/regmap/regmap-debugfs.c |  7 ++---
>  drivers/base/regmap/regmap.c         | 44 +++++++++++++++++++++-------
>  3 files changed, 38 insertions(+), 17 deletions(-)
> 
> diff --git a/drivers/base/regmap/internal.h b/drivers/base/regmap/internal.h
> index 3d80c4b43f72..e0ff8e90ebdc 100644
> --- a/drivers/base/regmap/internal.h
> +++ b/drivers/base/regmap/internal.h
> @@ -217,7 +217,7 @@ struct regmap_field {
>  
>  #ifdef CONFIG_DEBUG_FS
>  extern void regmap_debugfs_initcall(void);
> -extern void regmap_debugfs_init(struct regmap *map, const char *name);
> +extern void regmap_debugfs_init(struct regmap *map);
>  extern void regmap_debugfs_exit(struct regmap *map);
>  
>  static inline void regmap_debugfs_disable(struct regmap *map)
> @@ -227,7 +227,7 @@ static inline void regmap_debugfs_disable(struct regmap *map)
>  
>  #else
>  static inline void regmap_debugfs_initcall(void) { }
> -static inline void regmap_debugfs_init(struct regmap *map, const char *name) { }
> +static inline void regmap_debugfs_init(struct regmap *map) { }
>  static inline void regmap_debugfs_exit(struct regmap *map) { }
>  static inline void regmap_debugfs_disable(struct regmap *map) { }
>  #endif
> diff --git a/drivers/base/regmap/regmap-debugfs.c b/drivers/base/regmap/regmap-debugfs.c
> index f58baff2be0a..b6d63ef16b44 100644
> --- a/drivers/base/regmap/regmap-debugfs.c
> +++ b/drivers/base/regmap/regmap-debugfs.c
> @@ -17,7 +17,6 @@
>  
>  struct regmap_debugfs_node {
>  	struct regmap *map;
> -	const char *name;
>  	struct list_head link;
>  };
>  
> @@ -544,11 +543,12 @@ static const struct file_operations regmap_cache_bypass_fops = {
>  	.write = regmap_cache_bypass_write_file,
>  };
>  
> -void regmap_debugfs_init(struct regmap *map, const char *name)
> +void regmap_debugfs_init(struct regmap *map)
>  {
>  	struct rb_node *next;
>  	struct regmap_range_node *range_node;
>  	const char *devname = "dummy";
> +	const char *name = map->name;
>  
>  	/*
>  	 * Userspace can initiate reads from the hardware over debugfs.
> @@ -569,7 +569,6 @@ void regmap_debugfs_init(struct regmap *map, const char *name)
>  		if (!node)
>  			return;
>  		node->map = map;
> -		node->name = name;
>  		mutex_lock(&regmap_debugfs_early_lock);
>  		list_add(&node->link, &regmap_debugfs_early_list);
>  		mutex_unlock(&regmap_debugfs_early_lock);
> @@ -679,7 +678,7 @@ void regmap_debugfs_initcall(void)
>  
>  	mutex_lock(&regmap_debugfs_early_lock);
>  	list_for_each_entry_safe(node, tmp, &regmap_debugfs_early_list, link) {
> -		regmap_debugfs_init(node->map, node->name);
> +		regmap_debugfs_init(node->map);
>  		list_del(&node->link);
>  		kfree(node);
>  	}
> diff --git a/drivers/base/regmap/regmap.c b/drivers/base/regmap/regmap.c
> index e93700af7e6e..e22c21affebd 100644
> --- a/drivers/base/regmap/regmap.c
> +++ b/drivers/base/regmap/regmap.c
> @@ -581,14 +581,34 @@ static void regmap_range_exit(struct regmap *map)
>  	kfree(map->selector_work_buf);
>  }
>  
> +static int regmap_set_name(struct regmap *map, const struct regmap_config *config)
> +{
> +	if (config->name) {
> +		const char *name = kstrdup_const(config->name, GFP_KERNEL);
> +
> +		if (!name)
> +			return -ENOMEM;
> +
> +		kfree_const(map->name);
> +		map->name = name;
> +	}
> +
> +	return 0;
> +}
> +
>  int regmap_attach_dev(struct device *dev, struct regmap *map,
>  		      const struct regmap_config *config)
>  {
>  	struct regmap **m;
> +	int ret;
>  
>  	map->dev = dev;
>  
> -	regmap_debugfs_init(map, config->name);
> +	ret = regmap_set_name(map, config);
> +	if (ret)
> +		return ret;
> +
> +	regmap_debugfs_init(map);
>  
>  	/* Add a devres resource for dev_get_regmap() */
>  	m = devres_alloc(dev_get_regmap_release, sizeof(*m), GFP_KERNEL);
> @@ -674,9 +694,9 @@ struct regmap *__regmap_init(struct device *dev,
>  			     const char *lock_name)
>  {
>  	struct regmap *map;
> -	int ret = -EINVAL;
>  	enum regmap_endian reg_endian, val_endian;
>  	int i, j;
> +	int ret;
>  
>  	if (!config)
>  		goto err;
> @@ -687,13 +707,9 @@ struct regmap *__regmap_init(struct device *dev,
>  		goto err;
>  	}
>  
> -	if (config->name) {
> -		map->name = kstrdup_const(config->name, GFP_KERNEL);
> -		if (!map->name) {
> -			ret = -ENOMEM;
> -			goto err_map;
> -		}
> -	}
> +	ret = regmap_set_name(map, config);
> +	if (ret)
> +		goto err_map;
>  
>  	if (config->disable_locking) {
>  		map->lock = map->unlock = regmap_lock_unlock_none;
> @@ -1137,7 +1153,7 @@ struct regmap *__regmap_init(struct device *dev,
>  		if (ret != 0)
>  			goto err_regcache;
>  	} else {
> -		regmap_debugfs_init(map, config->name);
> +		regmap_debugfs_init(map);
>  	}
>  
>  	return map;
> @@ -1297,6 +1313,8 @@ EXPORT_SYMBOL_GPL(regmap_field_free);
>   */
>  int regmap_reinit_cache(struct regmap *map, const struct regmap_config *config)
>  {
> +	int ret;
> +
>  	regcache_exit(map);
>  	regmap_debugfs_exit(map);
>  
> @@ -1309,7 +1327,11 @@ int regmap_reinit_cache(struct regmap *map, const struct regmap_config *config)
>  	map->readable_noinc_reg = config->readable_noinc_reg;
>  	map->cache_type = config->cache_type;
>  
> -	regmap_debugfs_init(map, config->name);
> +	ret = regmap_set_name(map, config);
> +	if (ret)
> +		return ret;
> +
> +	regmap_debugfs_init(map);
>  
>  	map->cache_bypass = false;
>  	map->cache_only = false;
> -- 
> GitLab
> 
> 
> From d36cb0205f034e943aa29e35b59c6a441f0056b5 Mon Sep 17 00:00:00 2001
> From: Charles Keepax <ckeepax@xxxxxxxxxxxxxxxxxxxxx>
> Date: Fri, 18 Sep 2020 12:20:02 +0100
> Subject: [PATCH 023/126] regmap: debugfs: Add back in erroneously removed
>  initialisation of ret
> 
> Fixes: 94cc89eb8fa5 ("regmap: debugfs: Fix handling of name string for debugfs init delays")
> Reported-by: kernel test robot <lkp@xxxxxxxxx>
> Reported-by: Dan Carpenter <dan.carpenter@xxxxxxxxxx>
> Signed-off-by: Charles Keepax <ckeepax@xxxxxxxxxxxxxxxxxxxxx>
> Link: https://lore.kernel.org/r/20200918112002.15216-1-ckeepax@xxxxxxxxxxxxxxxxxxxxx
> Signed-off-by: Mark Brown <broonie@xxxxxxxxxx>
> ---
>  drivers/base/regmap/regmap.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/base/regmap/regmap.c b/drivers/base/regmap/regmap.c
> index e22c21affebd..388ff8a6816c 100644
> --- a/drivers/base/regmap/regmap.c
> +++ b/drivers/base/regmap/regmap.c
> @@ -694,9 +694,9 @@ struct regmap *__regmap_init(struct device *dev,
>  			     const char *lock_name)
>  {
>  	struct regmap *map;
> +	int ret = -EINVAL;
>  	enum regmap_endian reg_endian, val_endian;
>  	int i, j;
> -	int ret;
>  
>  	if (!config)
>  		goto err;
> -- 
> GitLab
> 
> 
> From ee15c7b53e52fb04583f734461244c4dcca828fa Mon Sep 17 00:00:00 2001
> From: Trond Myklebust <trond.myklebust@xxxxxxxxxxxxxxx>
> Date: Fri, 18 Sep 2020 08:58:58 -0400
> Subject: [PATCH 024/126] pNFS/flexfiles: Ensure we initialise the mirror
>  bsizes correctly on read
> 
> While it is true that reading from an unmirrored source always uses
> index 0, that is no longer true for mirrored sources when we fail over.
> 
> Fixes: 563c53e73b8b ("NFS: Fix flexfiles read failover")
> Signed-off-by: Trond Myklebust <trond.myklebust@xxxxxxxxxxxxxxx>
> ---
>  fs/nfs/flexfilelayout/flexfilelayout.c | 11 ++++++-----
>  1 file changed, 6 insertions(+), 5 deletions(-)
> 
> diff --git a/fs/nfs/flexfilelayout/flexfilelayout.c b/fs/nfs/flexfilelayout/flexfilelayout.c
> index ff8965d1a4d4..1edeebd51937 100644
> --- a/fs/nfs/flexfilelayout/flexfilelayout.c
> +++ b/fs/nfs/flexfilelayout/flexfilelayout.c
> @@ -838,6 +838,7 @@ ff_layout_pg_init_read(struct nfs_pageio_descriptor *pgio,
>  	struct nfs4_ff_layout_mirror *mirror;
>  	struct nfs4_pnfs_ds *ds;
>  	int ds_idx;
> +	u32 i;
>  
>  retry:
>  	ff_layout_pg_check_layout(pgio, req);
> @@ -863,14 +864,14 @@ ff_layout_pg_init_read(struct nfs_pageio_descriptor *pgio,
>  		goto retry;
>  	}
>  
> -	mirror = FF_LAYOUT_COMP(pgio->pg_lseg, ds_idx);
> +	for (i = 0; i < pgio->pg_mirror_count; i++) {
> +		mirror = FF_LAYOUT_COMP(pgio->pg_lseg, i);
> +		pgm = &pgio->pg_mirrors[i];
> +		pgm->pg_bsize = mirror->mirror_ds->ds_versions[0].rsize;
> +	}
>  
>  	pgio->pg_mirror_idx = ds_idx;
>  
> -	/* read always uses only one mirror - idx 0 for pgio layer */
> -	pgm = &pgio->pg_mirrors[0];
> -	pgm->pg_bsize = mirror->mirror_ds->ds_versions[0].rsize;
> -
>  	if (NFS_SERVER(pgio->pg_inode)->flags &
>  			(NFS_MOUNT_SOFT|NFS_MOUNT_SOFTERR))
>  		pgio->pg_maxretrans = io_maxretrans;
> -- 
> GitLab
> 
> 
> From b9df46d08a8d098ea2124cb9e3b84458a474b4d4 Mon Sep 17 00:00:00 2001
> From: Trond Myklebust <trond.myklebust@xxxxxxxxxxxxxxx>
> Date: Fri, 18 Sep 2020 09:19:43 -0400
> Subject: [PATCH 025/126] pNFS/flexfiles: Be consistent about mirror index
>  types
> 
> A mirror index is always of type u32.
> 
> Signed-off-by: Trond Myklebust <trond.myklebust@xxxxxxxxxxxxxxx>
> ---
>  fs/nfs/flexfilelayout/flexfilelayout.c | 34 +++++++++++++-------------
>  include/linux/nfs_xdr.h                |  4 +--
>  2 files changed, 19 insertions(+), 19 deletions(-)
> 
> diff --git a/fs/nfs/flexfilelayout/flexfilelayout.c b/fs/nfs/flexfilelayout/flexfilelayout.c
> index 1edeebd51937..a163533446fa 100644
> --- a/fs/nfs/flexfilelayout/flexfilelayout.c
> +++ b/fs/nfs/flexfilelayout/flexfilelayout.c
> @@ -715,7 +715,7 @@ nfs4_ff_layout_stat_io_end_write(struct rpc_task *task,
>  }
>  
>  static void
> -ff_layout_mark_ds_unreachable(struct pnfs_layout_segment *lseg, int idx)
> +ff_layout_mark_ds_unreachable(struct pnfs_layout_segment *lseg, u32 idx)
>  {
>  	struct nfs4_deviceid_node *devid = FF_LAYOUT_DEVID_NODE(lseg, idx);
>  
> @@ -724,7 +724,7 @@ ff_layout_mark_ds_unreachable(struct pnfs_layout_segment *lseg, int idx)
>  }
>  
>  static void
> -ff_layout_mark_ds_reachable(struct pnfs_layout_segment *lseg, int idx)
> +ff_layout_mark_ds_reachable(struct pnfs_layout_segment *lseg, u32 idx)
>  {
>  	struct nfs4_deviceid_node *devid = FF_LAYOUT_DEVID_NODE(lseg, idx);
>  
> @@ -734,14 +734,14 @@ ff_layout_mark_ds_reachable(struct pnfs_layout_segment *lseg, int idx)
>  
>  static struct nfs4_pnfs_ds *
>  ff_layout_choose_ds_for_read(struct pnfs_layout_segment *lseg,
> -			     int start_idx, int *best_idx,
> +			     u32 start_idx, u32 *best_idx,
>  			     bool check_device)
>  {
>  	struct nfs4_ff_layout_segment *fls = FF_LAYOUT_LSEG(lseg);
>  	struct nfs4_ff_layout_mirror *mirror;
>  	struct nfs4_pnfs_ds *ds;
>  	bool fail_return = false;
> -	int idx;
> +	u32 idx;
>  
>  	/* mirrors are initially sorted by efficiency */
>  	for (idx = start_idx; idx < fls->mirror_array_cnt; idx++) {
> @@ -766,21 +766,21 @@ ff_layout_choose_ds_for_read(struct pnfs_layout_segment *lseg,
>  
>  static struct nfs4_pnfs_ds *
>  ff_layout_choose_any_ds_for_read(struct pnfs_layout_segment *lseg,
> -				 int start_idx, int *best_idx)
> +				 u32 start_idx, u32 *best_idx)
>  {
>  	return ff_layout_choose_ds_for_read(lseg, start_idx, best_idx, false);
>  }
>  
>  static struct nfs4_pnfs_ds *
>  ff_layout_choose_valid_ds_for_read(struct pnfs_layout_segment *lseg,
> -				   int start_idx, int *best_idx)
> +				   u32 start_idx, u32 *best_idx)
>  {
>  	return ff_layout_choose_ds_for_read(lseg, start_idx, best_idx, true);
>  }
>  
>  static struct nfs4_pnfs_ds *
>  ff_layout_choose_best_ds_for_read(struct pnfs_layout_segment *lseg,
> -				  int start_idx, int *best_idx)
> +				  u32 start_idx, u32 *best_idx)
>  {
>  	struct nfs4_pnfs_ds *ds;
>  
> @@ -791,7 +791,8 @@ ff_layout_choose_best_ds_for_read(struct pnfs_layout_segment *lseg,
>  }
>  
>  static struct nfs4_pnfs_ds *
> -ff_layout_get_ds_for_read(struct nfs_pageio_descriptor *pgio, int *best_idx)
> +ff_layout_get_ds_for_read(struct nfs_pageio_descriptor *pgio,
> +			  u32 *best_idx)
>  {
>  	struct pnfs_layout_segment *lseg = pgio->pg_lseg;
>  	struct nfs4_pnfs_ds *ds;
> @@ -837,8 +838,7 @@ ff_layout_pg_init_read(struct nfs_pageio_descriptor *pgio,
>  	struct nfs_pgio_mirror *pgm;
>  	struct nfs4_ff_layout_mirror *mirror;
>  	struct nfs4_pnfs_ds *ds;
> -	int ds_idx;
> -	u32 i;
> +	u32 ds_idx, i;
>  
>  retry:
>  	ff_layout_pg_check_layout(pgio, req);
> @@ -895,7 +895,7 @@ ff_layout_pg_init_write(struct nfs_pageio_descriptor *pgio,
>  	struct nfs4_ff_layout_mirror *mirror;
>  	struct nfs_pgio_mirror *pgm;
>  	struct nfs4_pnfs_ds *ds;
> -	int i;
> +	u32 i;
>  
>  retry:
>  	ff_layout_pg_check_layout(pgio, req);
> @@ -1039,7 +1039,7 @@ static void ff_layout_reset_write(struct nfs_pgio_header *hdr, bool retry_pnfs)
>  static void ff_layout_resend_pnfs_read(struct nfs_pgio_header *hdr)
>  {
>  	u32 idx = hdr->pgio_mirror_idx + 1;
> -	int new_idx = 0;
> +	u32 new_idx = 0;
>  
>  	if (ff_layout_choose_any_ds_for_read(hdr->lseg, idx + 1, &new_idx))
>  		ff_layout_send_layouterror(hdr->lseg);
> @@ -1076,7 +1076,7 @@ static int ff_layout_async_handle_error_v4(struct rpc_task *task,
>  					   struct nfs4_state *state,
>  					   struct nfs_client *clp,
>  					   struct pnfs_layout_segment *lseg,
> -					   int idx)
> +					   u32 idx)
>  {
>  	struct pnfs_layout_hdr *lo = lseg->pls_layout;
>  	struct inode *inode = lo->plh_inode;
> @@ -1150,7 +1150,7 @@ static int ff_layout_async_handle_error_v4(struct rpc_task *task,
>  /* Retry all errors through either pNFS or MDS except for -EJUKEBOX */
>  static int ff_layout_async_handle_error_v3(struct rpc_task *task,
>  					   struct pnfs_layout_segment *lseg,
> -					   int idx)
> +					   u32 idx)
>  {
>  	struct nfs4_deviceid_node *devid = FF_LAYOUT_DEVID_NODE(lseg, idx);
>  
> @@ -1185,7 +1185,7 @@ static int ff_layout_async_handle_error(struct rpc_task *task,
>  					struct nfs4_state *state,
>  					struct nfs_client *clp,
>  					struct pnfs_layout_segment *lseg,
> -					int idx)
> +					u32 idx)
>  {
>  	int vers = clp->cl_nfs_mod->rpc_vers->number;
>  
> @@ -1212,7 +1212,7 @@ static int ff_layout_async_handle_error(struct rpc_task *task,
>  }
>  
>  static void ff_layout_io_track_ds_error(struct pnfs_layout_segment *lseg,
> -					int idx, u64 offset, u64 length,
> +					u32 idx, u64 offset, u64 length,
>  					u32 *op_status, int opnum, int error)
>  {
>  	struct nfs4_ff_layout_mirror *mirror;
> @@ -1810,7 +1810,7 @@ ff_layout_write_pagelist(struct nfs_pgio_header *hdr, int sync)
>  	loff_t offset = hdr->args.offset;
>  	int vers;
>  	struct nfs_fh *fh;
> -	int idx = hdr->pgio_mirror_idx;
> +	u32 idx = hdr->pgio_mirror_idx;
>  
>  	mirror = FF_LAYOUT_COMP(lseg, idx);
>  	ds = nfs4_ff_layout_prepare_ds(lseg, mirror, true);
> diff --git a/include/linux/nfs_xdr.h b/include/linux/nfs_xdr.h
> index 9408f3252c8e..69cb46f7b8d2 100644
> --- a/include/linux/nfs_xdr.h
> +++ b/include/linux/nfs_xdr.h
> @@ -1611,8 +1611,8 @@ struct nfs_pgio_header {
>  	__u64			mds_offset;	/* Filelayout dense stripe */
>  	struct nfs_page_array	page_array;
>  	struct nfs_client	*ds_clp;	/* pNFS data server */
> -	int			ds_commit_idx;	/* ds index if ds_clp is set */
> -	int			pgio_mirror_idx;/* mirror index in pgio layer */
> +	u32			ds_commit_idx;	/* ds index if ds_clp is set */
> +	u32			pgio_mirror_idx;/* mirror index in pgio layer */
>  };
>  
>  struct nfs_mds_commit_info {
> -- 
> GitLab
> 
> 
> From 472eb39103e885f302fd8fd6eff104fcf5503f1b Mon Sep 17 00:00:00 2001
> From: Tom Rix <trix@xxxxxxxxxx>
> Date: Sun, 13 Sep 2020 09:52:30 -0700
> Subject: [PATCH 026/126] ALSA: asihpi: fix iounmap in error handler
> 
> clang static analysis flags this problem
> hpioctl.c:513:7: warning: Branch condition evaluates to
>   a garbage value
>                 if (pci.ap_mem_base[idx]) {
>                     ^~~~~~~~~~~~~~~~~~~~
> 
> If there is a failure in the middle of the memory space loop,
> only some of the memory spaces need to be cleaned up.
> 
> At the error handler, idx holds the number of successful
> memory spaces mapped.  So rework the handler loop to use the
> old idx.
> 
> There is a second problem, the memory space loop conditionally
> iomaps()/sets the mem_base so it is necessay to initize pci.
> 
> Fixes: 719f82d3987a ("ALSA: Add support of AudioScience ASI boards")
> Signed-off-by: Tom Rix <trix@xxxxxxxxxx>
> Link: https://lore.kernel.org/r/20200913165230.17166-1-trix@xxxxxxxxxx
> Signed-off-by: Takashi Iwai <tiwai@xxxxxxx>
> ---
>  sound/pci/asihpi/hpioctl.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/sound/pci/asihpi/hpioctl.c b/sound/pci/asihpi/hpioctl.c
> index 496dcde9715d..9790f5108a16 100644
> --- a/sound/pci/asihpi/hpioctl.c
> +++ b/sound/pci/asihpi/hpioctl.c
> @@ -343,7 +343,7 @@ int asihpi_adapter_probe(struct pci_dev *pci_dev,
>  	struct hpi_message hm;
>  	struct hpi_response hr;
>  	struct hpi_adapter adapter;
> -	struct hpi_pci pci;
> +	struct hpi_pci pci = { 0 };
>  
>  	memset(&adapter, 0, sizeof(adapter));
>  
> @@ -499,7 +499,7 @@ int asihpi_adapter_probe(struct pci_dev *pci_dev,
>  	return 0;
>  
>  err:
> -	for (idx = 0; idx < HPI_MAX_ADAPTER_MEM_SPACES; idx++) {
> +	while (--idx >= 0) {
>  		if (pci.ap_mem_base[idx]) {
>  			iounmap(pci.ap_mem_base[idx]);
>  			pci.ap_mem_base[idx] = NULL;
> -- 
> GitLab
> 
> 
> From 3f74249057827c5f6676c41c18f6be12ce1469ce Mon Sep 17 00:00:00 2001
> From: Hui Wang <hui.wang@xxxxxxxxxxxxx>
> Date: Mon, 14 Sep 2020 14:51:18 +0800
> Subject: [PATCH 027/126] ALSA: hda/realtek - Couldn't detect Mic if booting
>  with headset plugged
> 
> We found a Mic detection issue on many Lenovo laptops, those laptops
> belong to differnt models and they have different audio design like
> internal mic connects to the codec or PCH, they all have this problem,
> the problem is if plugging a headset before powerup/reboot the
> machine, after booting up, the headphone could be detected but Mic
> couldn't. If we plug out and plug in the headset, both headphone and
> Mic could be detected then.
> 
> Through debugging we found the codec on those laptops are same, it is
> alc257, and if we don't disable the 3k pulldown in alc256_shutup(),
> the issue will be fixed. So far there is no pop noise or power
> consumption regression on those laptops after this change.
> 
> Cc: Kailang Yang <kailang@xxxxxxxxxxx>
> Cc: <stable@xxxxxxxxxxxxxxx>
> Signed-off-by: Hui Wang <hui.wang@xxxxxxxxxxxxx>
> Link: https://lore.kernel.org/r/20200914065118.19238-1-hui.wang@xxxxxxxxxxxxx
> Signed-off-by: Takashi Iwai <tiwai@xxxxxxx>
> ---
>  sound/pci/hda/patch_realtek.c | 6 +++++-
>  1 file changed, 5 insertions(+), 1 deletion(-)
> 
> diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
> index 85e207173f5d..b6dc47da1d7b 100644
> --- a/sound/pci/hda/patch_realtek.c
> +++ b/sound/pci/hda/patch_realtek.c
> @@ -3428,7 +3428,11 @@ static void alc256_shutup(struct hda_codec *codec)
>  
>  	/* 3k pull low control for Headset jack. */
>  	/* NOTE: call this before clearing the pin, otherwise codec stalls */
> -	alc_update_coef_idx(codec, 0x46, 0, 3 << 12);
> +	/* If disable 3k pulldown control for alc257, the Mic detection will not work correctly
> +	 * when booting with headset plugged. So skip setting it for the codec alc257
> +	 */
> +	if (codec->core.vendor_id != 0x10ec0257)
> +		alc_update_coef_idx(codec, 0x46, 0, 3 << 12);
>  
>  	if (!spec->no_shutup_pins)
>  		snd_hda_codec_write(codec, hp_pin, 0,
> -- 
> GitLab
> 
> 
> From f73bbf639b32acb6b409e188fdde5644b301978f Mon Sep 17 00:00:00 2001
> From: Kai-Heng Feng <kai.heng.feng@xxxxxxxxxxxxx>
> Date: Mon, 14 Sep 2020 15:02:29 +0800
> Subject: [PATCH 028/126] ALSA: hda/realtek: Enable front panel headset LED on
>  Lenovo ThinkStation P520
> 
> On Lenovo P520, the front panel headset LED isn't lit up right now.
> 
> Realtek states that the LED needs to be enabled by ALC233's GPIO2, so
> let's do it accordingly to light the LED up.
> 
> Signed-off-by: Kai-Heng Feng <kai.heng.feng@xxxxxxxxxxxxx>
> Acked-by: Hui Wang <hui.wang@xxxxxxxxxxxxx>
> Cc: <stable@xxxxxxxxxxxxxxx>
> Link: https://lore.kernel.org/r/20200914070231.13192-1-kai.heng.feng@xxxxxxxxxxxxx
> Signed-off-by: Takashi Iwai <tiwai@xxxxxxx>
> ---
>  sound/pci/hda/patch_realtek.c | 7 +++++++
>  1 file changed, 7 insertions(+)
> 
> diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
> index b6dc47da1d7b..c4d615cf8de1 100644
> --- a/sound/pci/hda/patch_realtek.c
> +++ b/sound/pci/hda/patch_realtek.c
> @@ -6055,6 +6055,7 @@ static void alc_fixup_thinkpad_acpi(struct hda_codec *codec,
>  #include "hp_x360_helper.c"
>  
>  enum {
> +	ALC269_FIXUP_GPIO2,
>  	ALC269_FIXUP_SONY_VAIO,
>  	ALC275_FIXUP_SONY_VAIO_GPIO2,
>  	ALC269_FIXUP_DELL_M101Z,
> @@ -6236,6 +6237,10 @@ enum {
>  };
>  
>  static const struct hda_fixup alc269_fixups[] = {
> +	[ALC269_FIXUP_GPIO2] = {
> +		.type = HDA_FIXUP_FUNC,
> +		.v.func = alc_fixup_gpio2,
> +	},
>  	[ALC269_FIXUP_SONY_VAIO] = {
>  		.type = HDA_FIXUP_PINCTLS,
>  		.v.pins = (const struct hda_pintbl[]) {
> @@ -7055,6 +7060,8 @@ static const struct hda_fixup alc269_fixups[] = {
>  	[ALC233_FIXUP_LENOVO_MULTI_CODECS] = {
>  		.type = HDA_FIXUP_FUNC,
>  		.v.func = alc233_alc662_fixup_lenovo_dual_codecs,
> +		.chained = true,
> +		.chain_id = ALC269_FIXUP_GPIO2
>  	},
>  	[ALC233_FIXUP_ACER_HEADSET_MIC] = {
>  		.type = HDA_FIXUP_VERBS,
> -- 
> GitLab
> 
> 
> From 315c7ad7a701baba28c628c4c5426b3d9617ceed Mon Sep 17 00:00:00 2001
> From: Joakim Tjernlund <joakim.tjernlund@xxxxxxxxxxxx>
> Date: Thu, 10 Sep 2020 10:53:28 +0200
> Subject: [PATCH 029/126] ALSA: usb-audio: Add delay quirk for H570e USB
>  headsets
> 
> Needs the same delay as H650e
> 
> Signed-off-by: Joakim Tjernlund <joakim.tjernlund@xxxxxxxxxxxx>
> Cc: stable@xxxxxxxxxxxxxxx
> Link: https://lore.kernel.org/r/20200910085328.19188-1-joakim.tjernlund@xxxxxxxxxxxx
> Signed-off-by: Takashi Iwai <tiwai@xxxxxxx>
> ---
>  sound/usb/quirks.c | 7 ++++---
>  1 file changed, 4 insertions(+), 3 deletions(-)
> 
> diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c
> index 75bbdc691243..892296df131d 100644
> --- a/sound/usb/quirks.c
> +++ b/sound/usb/quirks.c
> @@ -1678,12 +1678,13 @@ void snd_usb_ctl_msg_quirk(struct usb_device *dev, unsigned int pipe,
>  	    && (requesttype & USB_TYPE_MASK) == USB_TYPE_CLASS)
>  		msleep(20);
>  
> -	/* Zoom R16/24, Logitech H650e, Jabra 550a, Kingston HyperX needs a tiny
> -	 * delay here, otherwise requests like get/set frequency return as
> -	 * failed despite actually succeeding.
> +	/* Zoom R16/24, Logitech H650e/H570e, Jabra 550a, Kingston HyperX
> +	 *  needs a tiny delay here, otherwise requests like get/set
> +	 *  frequency return as failed despite actually succeeding.
>  	 */
>  	if ((chip->usb_id == USB_ID(0x1686, 0x00dd) ||
>  	     chip->usb_id == USB_ID(0x046d, 0x0a46) ||
> +	     chip->usb_id == USB_ID(0x046d, 0x0a56) ||
>  	     chip->usb_id == USB_ID(0x0b0e, 0x0349) ||
>  	     chip->usb_id == USB_ID(0x0951, 0x16ad)) &&
>  	    (requesttype & USB_TYPE_MASK) == USB_TYPE_CLASS)
> -- 
> GitLab
> 
> 
> From 19a508bd1ad8e444de86873bf2f2b2ab8edd6552 Mon Sep 17 00:00:00 2001
> From: Charan Teja Reddy <charante@xxxxxxxxxxxxxx>
> Date: Fri, 18 Sep 2020 16:02:31 +0530
> Subject: [PATCH 030/126] dmabuf: fix NULL pointer dereference in
>  dma_buf_release()
> MIME-Version: 1.0
> Content-Type: text/plain; charset=UTF-8
> Content-Transfer-Encoding: 8bit
> 
> NULL pointer dereference is observed while exporting the dmabuf but
> failed to allocate the 'struct file' which results into the dropping of
> the allocated dentry corresponding to this file in the dmabuf fs, which
> is ending up in dma_buf_release() and accessing the uninitialzed
> dentry->d_fsdata.
> 
> Call stack on 5.4 is below:
>  dma_buf_release+0x2c/0x254 drivers/dma-buf/dma-buf.c:88
>  __dentry_kill+0x294/0x31c fs/dcache.c:584
>  dentry_kill fs/dcache.c:673 [inline]
>  dput+0x250/0x380 fs/dcache.c:859
>  path_put+0x24/0x40 fs/namei.c:485
>  alloc_file_pseudo+0x1a4/0x200 fs/file_table.c:235
>  dma_buf_getfile drivers/dma-buf/dma-buf.c:473 [inline]
>  dma_buf_export+0x25c/0x3ec drivers/dma-buf/dma-buf.c:585
> 
> Fix this by checking for the valid pointer in the dentry->d_fsdata.
> 
> Fixes: 4ab59c3c638c ("dma-buf: Move dma_buf_release() from fops to dentry_ops")
> Cc: <stable@xxxxxxxxxxxxxxx> [5.7+]
> Signed-off-by: Charan Teja Reddy <charante@xxxxxxxxxxxxxx>
> Reviewed-by: Christian König <christian.koenig@xxxxxxx>
> Link: https://patchwork.freedesktop.org/patch/391319/
> Signed-off-by: Christian König <christian.koenig@xxxxxxx>
> ---
>  drivers/dma-buf/dma-buf.c | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c
> index 58564d82a3a2..844967f98866 100644
> --- a/drivers/dma-buf/dma-buf.c
> +++ b/drivers/dma-buf/dma-buf.c
> @@ -59,6 +59,8 @@ static void dma_buf_release(struct dentry *dentry)
>  	struct dma_buf *dmabuf;
>  
>  	dmabuf = dentry->d_fsdata;
> +	if (unlikely(!dmabuf))
> +		return;
>  
>  	BUG_ON(dmabuf->vmapping_counter);
>  
> -- 
> GitLab
> 
> 
> From 8f8bf00b1c00b37ef5c32a642e5c3e0a364182b6 Mon Sep 17 00:00:00 2001
> From: Takashi Iwai <tiwai@xxxxxxx>
> Date: Mon, 21 Sep 2020 12:26:32 +0200
> Subject: [PATCH 031/126] Revert "ALSA: hda - Fix silent audio output and
>  corrupted input on MSI X570-A PRO"
> 
> This reverts commit 15cbff3fbbc6 ("ALSA: hda - Fix silent audio output
> and corrupted input on MSI X570-A PRO").
> 
> A regression reported by a Fedora user for MSI X570-A PRO mobo.
> Until the correct solution is found out, let's revert the quirk as a
> quick workaround.
> 
> Fixes: 15cbff3fbbc6 ("ALSA: hda - Fix silent audio output and corrupted input on MSI X570-A PRO")
> Reported-by: Hans de Goede <hdegoede@xxxxxxxxxx>
> Cc: <stable@xxxxxxxxxxxxxxx>
> Cc: Dan Crawford <dnlcrwfrd@xxxxxxxxx>
> BugLink: https://bugzilla.redhat.com/show_bug.cgi?id=1879277
> Link: https://lore.kernel.org/r/7efd2fe5-bf38-7f85-891a-eee3845d1493@xxxxxxxxxx
> Link: https://lore.kernel.org/r/20200921102632.31139-1-tiwai@xxxxxxx
> Signed-off-by: Takashi Iwai <tiwai@xxxxxxx>
> ---
>  sound/pci/hda/patch_realtek.c | 1 -
>  1 file changed, 1 deletion(-)
> 
> diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
> index c4d615cf8de1..d4f17b465892 100644
> --- a/sound/pci/hda/patch_realtek.c
> +++ b/sound/pci/hda/patch_realtek.c
> @@ -2475,7 +2475,6 @@ static const struct snd_pci_quirk alc882_fixup_tbl[] = {
>  	SND_PCI_QUIRK(0x1462, 0x1276, "MSI-GL73", ALC1220_FIXUP_CLEVO_P950),
>  	SND_PCI_QUIRK(0x1462, 0x1293, "MSI-GP65", ALC1220_FIXUP_CLEVO_P950),
>  	SND_PCI_QUIRK(0x1462, 0x7350, "MSI-7350", ALC889_FIXUP_CD),
> -	SND_PCI_QUIRK(0x1462, 0x9c37, "MSI X570-A PRO", ALC1220_FIXUP_CLEVO_P950),
>  	SND_PCI_QUIRK(0x1462, 0xda57, "MSI Z270-Gaming", ALC1220_FIXUP_GB_DUAL_CODECS),
>  	SND_PCI_QUIRK_VENDOR(0x1462, "MSI", ALC882_FIXUP_GPIO3),
>  	SND_PCI_QUIRK(0x147b, 0x107a, "Abit AW9D-MAX", ALC882_FIXUP_ABIT_AW9D_MAX),
> -- 
> GitLab
> 
> 
> From 35be8851d172c6e3db836c0f28c19087b10c9e00 Mon Sep 17 00:00:00 2001
> From: Johannes Thumshirn <johannes.thumshirn@xxxxxxx>
> Date: Mon, 21 Sep 2020 16:57:14 +0900
> Subject: [PATCH 032/126] btrfs: fix overflow when copying corrupt csums for a
>  message
> 
> Syzkaller reported a buffer overflow in btree_readpage_end_io_hook()
> when loop mounting a crafted image:
> 
>   detected buffer overflow in memcpy
>   ------------[ cut here ]------------
>   kernel BUG at lib/string.c:1129!
>   invalid opcode: 0000 [#1] PREEMPT SMP KASAN
>   CPU: 1 PID: 26 Comm: kworker/u4:2 Not tainted 5.9.0-rc4-syzkaller #0
>   Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
>   Workqueue: btrfs-endio-meta btrfs_work_helper
>   RIP: 0010:fortify_panic+0xf/0x20 lib/string.c:1129
>   RSP: 0018:ffffc90000e27980 EFLAGS: 00010286
>   RAX: 0000000000000022 RBX: ffff8880a80dca64 RCX: 0000000000000000
>   RDX: ffff8880a90860c0 RSI: ffffffff815dba07 RDI: fffff520001c4f22
>   RBP: ffff8880a80dca00 R08: 0000000000000022 R09: ffff8880ae7318e7
>   R10: 0000000000000000 R11: 0000000000077578 R12: 00000000ffffff6e
>   R13: 0000000000000008 R14: ffffc90000e27a40 R15: 1ffff920001c4f3c
>   FS:  0000000000000000(0000) GS:ffff8880ae700000(0000) knlGS:0000000000000000
>   CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
>   CR2: 0000557335f440d0 CR3: 000000009647d000 CR4: 00000000001506e0
>   DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
>   DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
>   Call Trace:
>    memcpy include/linux/string.h:405 [inline]
>    btree_readpage_end_io_hook.cold+0x206/0x221 fs/btrfs/disk-io.c:642
>    end_bio_extent_readpage+0x4de/0x10c0 fs/btrfs/extent_io.c:2854
>    bio_endio+0x3cf/0x7f0 block/bio.c:1449
>    end_workqueue_fn+0x114/0x170 fs/btrfs/disk-io.c:1695
>    btrfs_work_helper+0x221/0xe20 fs/btrfs/async-thread.c:318
>    process_one_work+0x94c/0x1670 kernel/workqueue.c:2269
>    worker_thread+0x64c/0x1120 kernel/workqueue.c:2415
>    kthread+0x3b5/0x4a0 kernel/kthread.c:292
>    ret_from_fork+0x1f/0x30 arch/x86/entry/entry_64.S:294
>   Modules linked in:
>   ---[ end trace b68924293169feef ]---
>   RIP: 0010:fortify_panic+0xf/0x20 lib/string.c:1129
>   RSP: 0018:ffffc90000e27980 EFLAGS: 00010286
>   RAX: 0000000000000022 RBX: ffff8880a80dca64 RCX: 0000000000000000
>   RDX: ffff8880a90860c0 RSI: ffffffff815dba07 RDI: fffff520001c4f22
>   RBP: ffff8880a80dca00 R08: 0000000000000022 R09: ffff8880ae7318e7
>   R10: 0000000000000000 R11: 0000000000077578 R12: 00000000ffffff6e
>   R13: 0000000000000008 R14: ffffc90000e27a40 R15: 1ffff920001c4f3c
>   FS:  0000000000000000(0000) GS:ffff8880ae700000(0000) knlGS:0000000000000000
>   CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
>   CR2: 00007f95b7c4d008 CR3: 000000009647d000 CR4: 00000000001506e0
>   DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
>   DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
> 
> The overflow happens, because in btree_readpage_end_io_hook() we assume
> that we have found a 4 byte checksum instead of the real possible 32
> bytes we have for the checksums.
> 
> With the fix applied:
> 
> [   35.726623] BTRFS: device fsid 815caf9a-dc43-4d2a-ac54-764b8333d765 devid 1 transid 5 /dev/loop0 scanned by syz-repro (215)
> [   35.738994] BTRFS info (device loop0): disk space caching is enabled
> [   35.738998] BTRFS info (device loop0): has skinny extents
> [   35.743337] BTRFS warning (device loop0): loop0 checksum verify failed on 1052672 wanted 0xf9c035fc8d239a54 found 0x67a25c14b7eabcf9 level 0
> [   35.743420] BTRFS error (device loop0): failed to read chunk root
> [   35.745899] BTRFS error (device loop0): open_ctree failed
> 
> Reported-by: syzbot+e864a35d361e1d4e29a5@xxxxxxxxxxxxxxxxxxxxxxxxx
> Fixes: d5178578bcd4 ("btrfs: directly call into crypto framework for checksumming")
> CC: stable@xxxxxxxxxxxxxxx # 5.4+
> Signed-off-by: Johannes Thumshirn <johannes.thumshirn@xxxxxxx>
> Signed-off-by: David Sterba <dsterba@xxxxxxxx>
> ---
>  fs/btrfs/disk-io.c | 11 +++++------
>  1 file changed, 5 insertions(+), 6 deletions(-)
> 
> diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c
> index 9fe9ec6aab71..93d3bb8989df 100644
> --- a/fs/btrfs/disk-io.c
> +++ b/fs/btrfs/disk-io.c
> @@ -636,16 +636,15 @@ static int btree_readpage_end_io_hook(struct btrfs_io_bio *io_bio,
>  	csum_tree_block(eb, result);
>  
>  	if (memcmp_extent_buffer(eb, result, 0, csum_size)) {
> -		u32 val;
> -		u32 found = 0;
> -
> -		memcpy(&found, result, csum_size);
> +		u8 val[BTRFS_CSUM_SIZE] = { 0 };
>  
>  		read_extent_buffer(eb, &val, 0, csum_size);
>  		btrfs_warn_rl(fs_info,
> -		"%s checksum verify failed on %llu wanted %x found %x level %d",
> +	"%s checksum verify failed on %llu wanted " CSUM_FMT " found " CSUM_FMT " level %d",
>  			      fs_info->sb->s_id, eb->start,
> -			      val, found, btrfs_header_level(eb));
> +			      CSUM_FMT_VALUE(csum_size, val),
> +			      CSUM_FMT_VALUE(csum_size, result),
> +			      btrfs_header_level(eb));
>  		ret = -EUCLEAN;
>  		goto err;
>  	}
> -- 
> GitLab
> 
> 
> From 3ad1c8ef083bef96ec922688966484be1039e6b5 Mon Sep 17 00:00:00 2001
> From: Borislav Petkov <bp@xxxxxxx>
> Date: Mon, 21 Sep 2020 12:31:36 +0200
> Subject: [PATCH 033/126] rcu/tree: Export rcu_idle_{enter,exit} to modules
> 
> Fix this link error:
> 
>   ERROR: modpost: "rcu_idle_enter" [drivers/acpi/processor.ko] undefined!
>   ERROR: modpost: "rcu_idle_exit" [drivers/acpi/processor.ko] undefined!
> 
> when CONFIG_ACPI_PROCESSOR is built as module. PeterZ says that in light
> of ARM needing those soon too, they should simply be exported.
> 
> Fixes: 1fecfdbb7acc ("ACPI: processor: Take over RCU-idle for C3-BM idle")
> Reported-by: Sven Joachim <svenjoac@xxxxxx>
> Suggested-by: Peter Zijlstra <peterz@xxxxxxxxxxxxx>
> Signed-off-by: Borislav Petkov <bp@xxxxxxx>
> Reviewed-by: Paul E. McKenney <paulmckrcu@xxxxxxxxxx>
> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx>
> ---
>  kernel/rcu/tree.c | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c
> index 8ce77d9ac716..f78ee759af9c 100644
> --- a/kernel/rcu/tree.c
> +++ b/kernel/rcu/tree.c
> @@ -673,6 +673,7 @@ void rcu_idle_enter(void)
>  	lockdep_assert_irqs_disabled();
>  	rcu_eqs_enter(false);
>  }
> +EXPORT_SYMBOL_GPL(rcu_idle_enter);
>  
>  #ifdef CONFIG_NO_HZ_FULL
>  /**
> @@ -886,6 +887,7 @@ void rcu_idle_exit(void)
>  	rcu_eqs_exit(false);
>  	local_irq_restore(flags);
>  }
> +EXPORT_SYMBOL_GPL(rcu_idle_exit);
>  
>  #ifdef CONFIG_NO_HZ_FULL
>  /**
> -- 
> GitLab
> 
> 
> From 36050d8984ab743f9990a2eb97a0062fdc3d7bbd Mon Sep 17 00:00:00 2001
> From: Ulf Hansson <ulf.hansson@xxxxxxxxxx>
> Date: Fri, 4 Sep 2020 08:47:05 +0200
> Subject: [PATCH 034/126] cpuidle: psci: Fix suspicious RCU usage
> 
> The commit eb1f00237aca ("lockdep,trace: Expose tracepoints"), started to
> expose us for tracepoints. This lead to the following RCU splat on an ARM64
> Qcom board.
> 
> [    5.529634] WARNING: suspicious RCU usage
> [    5.537307] sdhci-pltfm: SDHCI platform and OF driver helper
> [    5.541092] 5.9.0-rc3 #86 Not tainted
> [    5.541098] -----------------------------
> [    5.541105] ../include/trace/events/lock.h:37 suspicious rcu_dereference_check() usage!
> [    5.541110]
> [    5.541110] other info that might help us debug this:
> [    5.541110]
> [    5.541116]
> [    5.541116] rcu_scheduler_active = 2, debug_locks = 1
> [    5.541122] RCU used illegally from extended quiescent state!
> [    5.541129] no locks held by swapper/0/0.
> [    5.541134]
> [    5.541134] stack backtrace:
> [    5.541143] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 5.9.0-rc3 #86
> [    5.541149] Hardware name: Qualcomm Technologies, Inc. APQ 8016 SBC (DT)
> [    5.541157] Call trace:
> [    5.568185] sdhci_msm 7864900.sdhci: Got CD GPIO
> [    5.574186]  dump_backtrace+0x0/0x1c8
> [    5.574206]  show_stack+0x14/0x20
> [    5.574229]  dump_stack+0xe8/0x154
> [    5.574250]  lockdep_rcu_suspicious+0xd4/0xf8
> [    5.574269]  lock_acquire+0x3f0/0x460
> [    5.574292]  _raw_spin_lock_irqsave+0x80/0xb0
> [    5.574314]  __pm_runtime_suspend+0x4c/0x188
> [    5.574341]  psci_enter_domain_idle_state+0x40/0xa0
> [    5.574362]  cpuidle_enter_state+0xc0/0x610
> [    5.646487]  cpuidle_enter+0x38/0x50
> [    5.650651]  call_cpuidle+0x18/0x40
> [    5.654467]  do_idle+0x228/0x278
> [    5.657678]  cpu_startup_entry+0x24/0x70
> [    5.661153]  rest_init+0x1a4/0x278
> [    5.665061]  arch_call_rest_init+0xc/0x14
> [    5.668272]  start_kernel+0x508/0x540
> 
> Following the path in pm_runtime_put_sync_suspend() from
> psci_enter_domain_idle_state(), it seems like we end up using the RCU.
> Therefore, let's simply silence the splat by informing the RCU about it
> with RCU_NONIDLE.
> 
> Note that, this is a temporary solution. Instead we should strive to avoid
> using RCU_NONIDLE (and similar), but rather push rcu_idle_enter|exit()
> further down, closer to the arch specific code. However, as the CPU PM
> notifiers are also using the RCU, additional rework is needed.
> 
> Reported-by: Naresh Kamboju <naresh.kamboju@xxxxxxxxxx>
> Signed-off-by: Ulf Hansson <ulf.hansson@xxxxxxxxxx>
> Acked-by: Paul E. McKenney <paulmck@xxxxxxxxxx>
> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx>
> ---
>  drivers/cpuidle/cpuidle-psci.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/cpuidle/cpuidle-psci.c b/drivers/cpuidle/cpuidle-psci.c
> index 74463841805f..d928b37718bd 100644
> --- a/drivers/cpuidle/cpuidle-psci.c
> +++ b/drivers/cpuidle/cpuidle-psci.c
> @@ -66,7 +66,7 @@ static int psci_enter_domain_idle_state(struct cpuidle_device *dev,
>  		return -1;
>  
>  	/* Do runtime PM to manage a hierarchical CPU toplogy. */
> -	pm_runtime_put_sync_suspend(pd_dev);
> +	RCU_NONIDLE(pm_runtime_put_sync_suspend(pd_dev));
>  
>  	state = psci_get_domain_state();
>  	if (!state)
> @@ -74,7 +74,7 @@ static int psci_enter_domain_idle_state(struct cpuidle_device *dev,
>  
>  	ret = psci_cpu_suspend_enter(state) ? -1 : idx;
>  
> -	pm_runtime_get_sync(pd_dev);
> +	RCU_NONIDLE(pm_runtime_get_sync(pd_dev));
>  
>  	cpu_pm_exit();
>  
> -- 
> GitLab
> 
> 
> From 13a9a9d74d4d9689ad65938966dbc66386063648 Mon Sep 17 00:00:00 2001
> From: Chuck Lever <chuck.lever@xxxxxxxxxx>
> Date: Sun, 20 Sep 2020 13:46:25 -0400
> Subject: [PATCH 035/126] SUNRPC: Fix svc_flush_dcache()
> 
> On platforms that implement flush_dcache_page(), a large NFS WRITE
> triggers the WARN_ONCE in bvec_iter_advance():
> 
> Sep 20 14:01:05 klimt.1015granger.net kernel: Attempted to advance past end of bvec iter
> Sep 20 14:01:05 klimt.1015granger.net kernel: WARNING: CPU: 0 PID: 1032 at include/linux/bvec.h:101 bvec_iter_advance.isra.0+0xa7/0x158 [sunrpc]
> 
> Sep 20 14:01:05 klimt.1015granger.net kernel: Call Trace:
> Sep 20 14:01:05 klimt.1015granger.net kernel:  svc_tcp_recvfrom+0x60c/0x12c7 [sunrpc]
> Sep 20 14:01:05 klimt.1015granger.net kernel:  ? bvec_iter_advance.isra.0+0x158/0x158 [sunrpc]
> Sep 20 14:01:05 klimt.1015granger.net kernel:  ? del_timer_sync+0x4b/0x55
> Sep 20 14:01:05 klimt.1015granger.net kernel:  ? test_bit+0x1d/0x27 [sunrpc]
> Sep 20 14:01:05 klimt.1015granger.net kernel:  svc_recv+0x1193/0x15e4 [sunrpc]
> Sep 20 14:01:05 klimt.1015granger.net kernel:  ? try_to_freeze.isra.0+0x6f/0x6f [sunrpc]
> Sep 20 14:01:05 klimt.1015granger.net kernel:  ? refcount_sub_and_test.constprop.0+0x13/0x40 [sunrpc]
> Sep 20 14:01:05 klimt.1015granger.net kernel:  ? svc_xprt_put+0x1e/0x29f [sunrpc]
> Sep 20 14:01:05 klimt.1015granger.net kernel:  ? svc_send+0x39f/0x3c1 [sunrpc]
> Sep 20 14:01:05 klimt.1015granger.net kernel:  nfsd+0x282/0x345 [nfsd]
> Sep 20 14:01:05 klimt.1015granger.net kernel:  ? __kthread_parkme+0x74/0xba
> Sep 20 14:01:05 klimt.1015granger.net kernel:  kthread+0x2ad/0x2bc
> Sep 20 14:01:05 klimt.1015granger.net kernel:  ? nfsd_destroy+0x124/0x124 [nfsd]
> Sep 20 14:01:05 klimt.1015granger.net kernel:  ? test_bit+0x1d/0x27
> Sep 20 14:01:05 klimt.1015granger.net kernel:  ? kthread_mod_delayed_work+0x115/0x115
> Sep 20 14:01:05 klimt.1015granger.net kernel:  ret_from_fork+0x22/0x30
> 
> Reported-by: He Zhe <zhe.he@xxxxxxxxxxxxx>
> Fixes: ca07eda33e01 ("SUNRPC: Refactor svc_recvfrom()")
> Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx>
> ---
>  net/sunrpc/svcsock.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/net/sunrpc/svcsock.c b/net/sunrpc/svcsock.c
> index d5805fa1d066..c2752e2b9ce3 100644
> --- a/net/sunrpc/svcsock.c
> +++ b/net/sunrpc/svcsock.c
> @@ -228,7 +228,7 @@ static int svc_one_sock_name(struct svc_sock *svsk, char *buf, int remaining)
>  static void svc_flush_bvec(const struct bio_vec *bvec, size_t size, size_t seek)
>  {
>  	struct bvec_iter bi = {
> -		.bi_size	= size,
> +		.bi_size	= size + seek,
>  	};
>  	struct bio_vec bv;
>  
> -- 
> GitLab
> 
> 
> From 4003324856311faebb46cbd56a1616bd3f3b67c2 Mon Sep 17 00:00:00 2001
> From: Dmitry Baryshkov <dmitry.baryshkov@xxxxxxxxxx>
> Date: Thu, 17 Sep 2020 18:34:04 +0300
> Subject: [PATCH 036/126] regmap: fix page selection for noinc reads
> 
> Non-incrementing reads can fail if register + length crosses page
> border. However for non-incrementing reads we should not check for page
> border crossing. Fix this by passing additional flag to _regmap_raw_read
> and passing length to _regmap_select_page basing on the flag.
> 
> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@xxxxxxxxxx>
> Fixes: 74fe7b551f33 ("regmap: Add regmap_noinc_read API")
> Link: https://lore.kernel.org/r/20200917153405.3139200-1-dmitry.baryshkov@xxxxxxxxxx
> Signed-off-by: Mark Brown <broonie@xxxxxxxxxx>
> ---
>  drivers/base/regmap/regmap.c | 12 ++++++------
>  1 file changed, 6 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/base/regmap/regmap.c b/drivers/base/regmap/regmap.c
> index 388ff8a6816c..e2822dc21022 100644
> --- a/drivers/base/regmap/regmap.c
> +++ b/drivers/base/regmap/regmap.c
> @@ -2472,7 +2472,7 @@ int regmap_raw_write_async(struct regmap *map, unsigned int reg,
>  EXPORT_SYMBOL_GPL(regmap_raw_write_async);
>  
>  static int _regmap_raw_read(struct regmap *map, unsigned int reg, void *val,
> -			    unsigned int val_len)
> +			    unsigned int val_len, bool noinc)
>  {
>  	struct regmap_range_node *range;
>  	int ret;
> @@ -2485,7 +2485,7 @@ static int _regmap_raw_read(struct regmap *map, unsigned int reg, void *val,
>  	range = _regmap_range_lookup(map, reg);
>  	if (range) {
>  		ret = _regmap_select_page(map, &reg, range,
> -					  val_len / map->format.val_bytes);
> +					  noinc ? 1 : val_len / map->format.val_bytes);
>  		if (ret != 0)
>  			return ret;
>  	}
> @@ -2523,7 +2523,7 @@ static int _regmap_bus_read(void *context, unsigned int reg,
>  	if (!map->format.parse_val)
>  		return -EINVAL;
>  
> -	ret = _regmap_raw_read(map, reg, work_val, map->format.val_bytes);
> +	ret = _regmap_raw_read(map, reg, work_val, map->format.val_bytes, false);
>  	if (ret == 0)
>  		*val = map->format.parse_val(work_val);
>  
> @@ -2639,7 +2639,7 @@ int regmap_raw_read(struct regmap *map, unsigned int reg, void *val,
>  
>  		/* Read bytes that fit into whole chunks */
>  		for (i = 0; i < chunk_count; i++) {
> -			ret = _regmap_raw_read(map, reg, val, chunk_bytes);
> +			ret = _regmap_raw_read(map, reg, val, chunk_bytes, false);
>  			if (ret != 0)
>  				goto out;
>  
> @@ -2650,7 +2650,7 @@ int regmap_raw_read(struct regmap *map, unsigned int reg, void *val,
>  
>  		/* Read remaining bytes */
>  		if (val_len) {
> -			ret = _regmap_raw_read(map, reg, val, val_len);
> +			ret = _regmap_raw_read(map, reg, val, val_len, false);
>  			if (ret != 0)
>  				goto out;
>  		}
> @@ -2725,7 +2725,7 @@ int regmap_noinc_read(struct regmap *map, unsigned int reg,
>  			read_len = map->max_raw_read;
>  		else
>  			read_len = val_len;
> -		ret = _regmap_raw_read(map, reg, val, read_len);
> +		ret = _regmap_raw_read(map, reg, val, read_len, true);
>  		if (ret)
>  			goto out_unlock;
>  		val = ((u8 *)val) + read_len;
> -- 
> GitLab
> 
> 
> From 05669b63170771d554854c0e465b76dc98fc7c84 Mon Sep 17 00:00:00 2001
> From: Dmitry Baryshkov <dmitry.baryshkov@xxxxxxxxxx>
> Date: Thu, 17 Sep 2020 18:34:05 +0300
> Subject: [PATCH 037/126] regmap: fix page selection for noinc writes
> 
> Non-incrementing writes can fail if register + length crosses page
> border. However for non-incrementing writes we should not check for page
> border crossing. Fix this by passing additional flag to _regmap_raw_write
> and passing length to _regmap_select_page basing on the flag.
> 
> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@xxxxxxxxxx>
> Fixes: cdf6b11daa77 ("regmap: Add regmap_noinc_write API")
> Link: https://lore.kernel.org/r/20200917153405.3139200-2-dmitry.baryshkov@xxxxxxxxxx
> Signed-off-by: Mark Brown <broonie@xxxxxxxxxx>
> ---
>  drivers/base/regmap/internal.h |  2 +-
>  drivers/base/regmap/regcache.c |  2 +-
>  drivers/base/regmap/regmap.c   | 21 +++++++++++----------
>  3 files changed, 13 insertions(+), 12 deletions(-)
> 
> diff --git a/drivers/base/regmap/internal.h b/drivers/base/regmap/internal.h
> index e0ff8e90ebdc..7be2fcfeea52 100644
> --- a/drivers/base/regmap/internal.h
> +++ b/drivers/base/regmap/internal.h
> @@ -259,7 +259,7 @@ bool regcache_set_val(struct regmap *map, void *base, unsigned int idx,
>  int regcache_lookup_reg(struct regmap *map, unsigned int reg);
>  
>  int _regmap_raw_write(struct regmap *map, unsigned int reg,
> -		      const void *val, size_t val_len);
> +		      const void *val, size_t val_len, bool noinc);
>  
>  void regmap_async_complete_cb(struct regmap_async *async, int ret);
>  
> diff --git a/drivers/base/regmap/regcache.c b/drivers/base/regmap/regcache.c
> index a93cafd7be4f..7f4b3b62492c 100644
> --- a/drivers/base/regmap/regcache.c
> +++ b/drivers/base/regmap/regcache.c
> @@ -717,7 +717,7 @@ static int regcache_sync_block_raw_flush(struct regmap *map, const void **data,
>  
>  	map->cache_bypass = true;
>  
> -	ret = _regmap_raw_write(map, base, *data, count * val_bytes);
> +	ret = _regmap_raw_write(map, base, *data, count * val_bytes, false);
>  	if (ret)
>  		dev_err(map->dev, "Unable to sync registers %#x-%#x. %d\n",
>  			base, cur - map->reg_stride, ret);
> diff --git a/drivers/base/regmap/regmap.c b/drivers/base/regmap/regmap.c
> index e2822dc21022..b71f9ecddff5 100644
> --- a/drivers/base/regmap/regmap.c
> +++ b/drivers/base/regmap/regmap.c
> @@ -1486,7 +1486,7 @@ static void regmap_set_work_buf_flag_mask(struct regmap *map, int max_bytes,
>  }
>  
>  static int _regmap_raw_write_impl(struct regmap *map, unsigned int reg,
> -				  const void *val, size_t val_len)
> +				  const void *val, size_t val_len, bool noinc)
>  {
>  	struct regmap_range_node *range;
>  	unsigned long flags;
> @@ -1545,7 +1545,7 @@ static int _regmap_raw_write_impl(struct regmap *map, unsigned int reg,
>  				win_residue, val_len / map->format.val_bytes);
>  			ret = _regmap_raw_write_impl(map, reg, val,
>  						     win_residue *
> -						     map->format.val_bytes);
> +						     map->format.val_bytes, noinc);
>  			if (ret != 0)
>  				return ret;
>  
> @@ -1559,7 +1559,7 @@ static int _regmap_raw_write_impl(struct regmap *map, unsigned int reg,
>  			win_residue = range->window_len - win_offset;
>  		}
>  
> -		ret = _regmap_select_page(map, &reg, range, val_num);
> +		ret = _regmap_select_page(map, &reg, range, noinc ? 1 : val_num);
>  		if (ret != 0)
>  			return ret;
>  	}
> @@ -1767,7 +1767,8 @@ static int _regmap_bus_raw_write(void *context, unsigned int reg,
>  				      map->work_buf +
>  				      map->format.reg_bytes +
>  				      map->format.pad_bytes,
> -				      map->format.val_bytes);
> +				      map->format.val_bytes,
> +				      false);
>  }
>  
>  static inline void *_regmap_map_get_context(struct regmap *map)
> @@ -1861,7 +1862,7 @@ int regmap_write_async(struct regmap *map, unsigned int reg, unsigned int val)
>  EXPORT_SYMBOL_GPL(regmap_write_async);
>  
>  int _regmap_raw_write(struct regmap *map, unsigned int reg,
> -		      const void *val, size_t val_len)
> +		      const void *val, size_t val_len, bool noinc)
>  {
>  	size_t val_bytes = map->format.val_bytes;
>  	size_t val_count = val_len / val_bytes;
> @@ -1882,7 +1883,7 @@ int _regmap_raw_write(struct regmap *map, unsigned int reg,
>  
>  	/* Write as many bytes as possible with chunk_size */
>  	for (i = 0; i < chunk_count; i++) {
> -		ret = _regmap_raw_write_impl(map, reg, val, chunk_bytes);
> +		ret = _regmap_raw_write_impl(map, reg, val, chunk_bytes, noinc);
>  		if (ret)
>  			return ret;
>  
> @@ -1893,7 +1894,7 @@ int _regmap_raw_write(struct regmap *map, unsigned int reg,
>  
>  	/* Write remaining bytes */
>  	if (val_len)
> -		ret = _regmap_raw_write_impl(map, reg, val, val_len);
> +		ret = _regmap_raw_write_impl(map, reg, val, val_len, noinc);
>  
>  	return ret;
>  }
> @@ -1926,7 +1927,7 @@ int regmap_raw_write(struct regmap *map, unsigned int reg,
>  
>  	map->lock(map->lock_arg);
>  
> -	ret = _regmap_raw_write(map, reg, val, val_len);
> +	ret = _regmap_raw_write(map, reg, val, val_len, false);
>  
>  	map->unlock(map->lock_arg);
>  
> @@ -1984,7 +1985,7 @@ int regmap_noinc_write(struct regmap *map, unsigned int reg,
>  			write_len = map->max_raw_write;
>  		else
>  			write_len = val_len;
> -		ret = _regmap_raw_write(map, reg, val, write_len);
> +		ret = _regmap_raw_write(map, reg, val, write_len, true);
>  		if (ret)
>  			goto out_unlock;
>  		val = ((u8 *)val) + write_len;
> @@ -2461,7 +2462,7 @@ int regmap_raw_write_async(struct regmap *map, unsigned int reg,
>  
>  	map->async = true;
>  
> -	ret = _regmap_raw_write(map, reg, val, val_len);
> +	ret = _regmap_raw_write(map, reg, val, val_len, false);
>  
>  	map->async = false;
>  
> -- 
> GitLab
> 
> 
> From b867eef4cf548cd9541225aadcdcee644669b9e1 Mon Sep 17 00:00:00 2001
> From: Chris Packham <chris.packham@xxxxxxxxxxxxxxxxxxx>
> Date: Fri, 4 Sep 2020 12:28:12 +1200
> Subject: [PATCH 038/126] spi: fsl-espi: Only process interrupts for expected
>  events
> 
> The SPIE register contains counts for the TX FIFO so any time the irq
> handler was invoked we would attempt to process the RX/TX fifos. Use the
> SPIM value to mask the events so that we only process interrupts that
> were expected.
> 
> This was a latent issue exposed by commit 3282a3da25bd ("powerpc/64:
> Implement soft interrupt replay in C").
> 
> Signed-off-by: Chris Packham <chris.packham@xxxxxxxxxxxxxxxxxxx>
> Link: https://lore.kernel.org/r/20200904002812.7300-1-chris.packham@xxxxxxxxxxxxxxxxxxx
> Signed-off-by: Mark Brown <broonie@xxxxxxxxxx>
> ---
>  drivers/spi/spi-fsl-espi.c | 5 +++--
>  1 file changed, 3 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/spi/spi-fsl-espi.c b/drivers/spi/spi-fsl-espi.c
> index e60581283a24..6d148ab70b93 100644
> --- a/drivers/spi/spi-fsl-espi.c
> +++ b/drivers/spi/spi-fsl-espi.c
> @@ -564,13 +564,14 @@ static void fsl_espi_cpu_irq(struct fsl_espi *espi, u32 events)
>  static irqreturn_t fsl_espi_irq(s32 irq, void *context_data)
>  {
>  	struct fsl_espi *espi = context_data;
> -	u32 events;
> +	u32 events, mask;
>  
>  	spin_lock(&espi->lock);
>  
>  	/* Get interrupt events(tx/rx) */
>  	events = fsl_espi_read_reg(espi, ESPI_SPIE);
> -	if (!events) {
> +	mask = fsl_espi_read_reg(espi, ESPI_SPIM);
> +	if (!(events & mask)) {
>  		spin_unlock(&espi->lock);
>  		return IRQ_NONE;
>  	}
> -- 
> GitLab
> 
> 
> From ee1dfad5325ff1cfb2239e564cd411b3bfe8667a Mon Sep 17 00:00:00 2001
> From: Mike Snitzer <snitzer@xxxxxxxxxx>
> Date: Mon, 14 Sep 2020 13:04:19 -0400
> Subject: [PATCH 039/126] dm: fix bio splitting and its bio completion order
>  for regular IO
> 
> dm_queue_split() is removed because __split_and_process_bio() _must_
> handle splitting bios to ensure proper bio submission and completion
> ordering as a bio is split.
> 
> Otherwise, multiple recursive calls to ->submit_bio will cause multiple
> split bios to be allocated from the same ->bio_split mempool at the same
> time. This would result in deadlock in low memory conditions because no
> progress could be made (only one bio is available in ->bio_split
> mempool).
> 
> This fix has been verified to still fix the loss of performance, due
> to excess splitting, that commit 120c9257f5f1 provided.
> 
> Fixes: 120c9257f5f1 ("Revert "dm: always call blk_queue_split() in dm_process_bio()"")
> Cc: stable@xxxxxxxxxxxxxxx # 5.0+, requires custom backport due to 5.9 changes
> Reported-by: Ming Lei <ming.lei@xxxxxxxxxx>
> Signed-off-by: Mike Snitzer <snitzer@xxxxxxxxxx>
> ---
>  drivers/md/dm.c | 23 ++---------------------
>  1 file changed, 2 insertions(+), 21 deletions(-)
> 
> diff --git a/drivers/md/dm.c b/drivers/md/dm.c
> index 4a40df8af7d3..d948cd522431 100644
> --- a/drivers/md/dm.c
> +++ b/drivers/md/dm.c
> @@ -1724,23 +1724,6 @@ static blk_qc_t __process_bio(struct mapped_device *md, struct dm_table *map,
>  	return ret;
>  }
>  
> -static void dm_queue_split(struct mapped_device *md, struct dm_target *ti, struct bio **bio)
> -{
> -	unsigned len, sector_count;
> -
> -	sector_count = bio_sectors(*bio);
> -	len = min_t(sector_t, max_io_len((*bio)->bi_iter.bi_sector, ti), sector_count);
> -
> -	if (sector_count > len) {
> -		struct bio *split = bio_split(*bio, len, GFP_NOIO, &md->queue->bio_split);
> -
> -		bio_chain(split, *bio);
> -		trace_block_split(md->queue, split, (*bio)->bi_iter.bi_sector);
> -		submit_bio_noacct(*bio);
> -		*bio = split;
> -	}
> -}
> -
>  static blk_qc_t dm_process_bio(struct mapped_device *md,
>  			       struct dm_table *map, struct bio *bio)
>  {
> @@ -1768,14 +1751,12 @@ static blk_qc_t dm_process_bio(struct mapped_device *md,
>  	if (current->bio_list) {
>  		if (is_abnormal_io(bio))
>  			blk_queue_split(&bio);
> -		else
> -			dm_queue_split(md, ti, &bio);
> +		/* regular IO is split by __split_and_process_bio */
>  	}
>  
>  	if (dm_get_md_type(md) == DM_TYPE_NVME_BIO_BASED)
>  		return __process_bio(md, map, bio, ti);
> -	else
> -		return __split_and_process_bio(md, map, bio);
> +	return __split_and_process_bio(md, map, bio);
>  }
>  
>  static blk_qc_t dm_submit_bio(struct bio *bio)
> -- 
> GitLab
> 
> 
> From cf9c37865557d39292d82da29e9ebda1dbc584b3 Mon Sep 17 00:00:00 2001
> From: Mike Snitzer <snitzer@xxxxxxxxxx>
> Date: Mon, 21 Sep 2020 19:08:30 -0400
> Subject: [PATCH 040/126] dm: fix comment in dm_process_bio()
> 
> Refer to the correct function (->submit_bio instead of ->queue_bio).
> Also, add details about why using blk_queue_split() isn't needed for
> dm_wq_work()'s call to dm_process_bio().
> 
> Fixes: c62b37d96b6eb ("block: move ->make_request_fn to struct block_device_operations")
> Signed-off-by: Mike Snitzer <snitzer@xxxxxxxxxx>
> ---
>  drivers/md/dm.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/md/dm.c b/drivers/md/dm.c
> index d948cd522431..6ed05ca65a0f 100644
> --- a/drivers/md/dm.c
> +++ b/drivers/md/dm.c
> @@ -1744,9 +1744,11 @@ static blk_qc_t dm_process_bio(struct mapped_device *md,
>  	}
>  
>  	/*
> -	 * If in ->queue_bio we need to use blk_queue_split(), otherwise
> +	 * If in ->submit_bio we need to use blk_queue_split(), otherwise
>  	 * queue_limits for abnormal requests (e.g. discard, writesame, etc)
>  	 * won't be imposed.
> +	 * If called from dm_wq_work() for deferred bio processing, bio
> +	 * was already handled by following code with previous ->submit_bio.
>  	 */
>  	if (current->bio_list) {
>  		if (is_abnormal_io(bio))
> -- 
> GitLab
> 
> 
> From ead1e19ad905b97261f0ad7a98bb64abb9323b2b Mon Sep 17 00:00:00 2001
> From: Masami Hiramatsu <mhiramat@xxxxxxxxxx>
> Date: Mon, 21 Sep 2020 18:44:42 +0900
> Subject: [PATCH 041/126] lib/bootconfig: Fix a bug of breaking existing tree
>  nodes
> 
> Fix a bug of breaking existing tree nodes by parsing the second
> and subsequent braces. Since the bootconfig parser uses the
> node.next field as a flag of current parent node, but this will
> break the existing tree if the same key node is specified again
> in the bootconfig.
> 
> For example, the following bootconfig should be foo.buz and bar.
> 
> foo
> bar
> foo { buz }
> 
> However, when parsing the brace "{", it breaks foo->bar link
> by marking open-brace node. So the bootconfig unlinks bar
> from the bootconfig internal tree.
> 
> This introduces a stack outside of the tree and record the
> last open-brace on the stack instead of using node.next field.
> 
> Link: https://lkml.kernel.org/r/160068148267.1088739.8264704338030168660.stgit@devnote2
> 
> Fixes: 76db5a27a827 ("bootconfig: Add Extra Boot Config support")
> Cc: Ingo Molnar <mingo@xxxxxxxxxx>
> Cc: stable@xxxxxxxxxxxxxxx
> Signed-off-by: Masami Hiramatsu <mhiramat@xxxxxxxxxx>
> Signed-off-by: Steven Rostedt (VMware) <rostedt@xxxxxxxxxxx>
> ---
>  lib/bootconfig.c | 36 +++++++++++++++++++++++-------------
>  1 file changed, 23 insertions(+), 13 deletions(-)
> 
> diff --git a/lib/bootconfig.c b/lib/bootconfig.c
> index 2c905a91d4eb..b44bba0f1583 100644
> --- a/lib/bootconfig.c
> +++ b/lib/bootconfig.c
> @@ -31,6 +31,8 @@ static size_t xbc_data_size __initdata;
>  static struct xbc_node *last_parent __initdata;
>  static const char *xbc_err_msg __initdata;
>  static int xbc_err_pos __initdata;
> +static int open_brace[XBC_DEPTH_MAX] __initdata;
> +static int brace_index __initdata;
>  
>  static int __init xbc_parse_error(const char *msg, const char *p)
>  {
> @@ -431,27 +433,27 @@ static char *skip_spaces_until_newline(char *p)
>  	return p;
>  }
>  
> -static int __init __xbc_open_brace(void)
> +static int __init __xbc_open_brace(char *p)
>  {
> -	/* Mark the last key as open brace */
> -	last_parent->next = XBC_NODE_MAX;
> +	/* Push the last key as open brace */
> +	open_brace[brace_index++] = xbc_node_index(last_parent);
> +	if (brace_index >= XBC_DEPTH_MAX)
> +		return xbc_parse_error("Exceed max depth of braces", p);
>  
>  	return 0;
>  }
>  
>  static int __init __xbc_close_brace(char *p)
>  {
> -	struct xbc_node *node;
> -
> -	if (!last_parent || last_parent->next != XBC_NODE_MAX)
> +	brace_index--;
> +	if (!last_parent || brace_index < 0 ||
> +	    (open_brace[brace_index] != xbc_node_index(last_parent)))
>  		return xbc_parse_error("Unexpected closing brace", p);
>  
> -	node = last_parent;
> -	node->next = 0;
> -	do {
> -		node = xbc_node_get_parent(node);
> -	} while (node && node->next != XBC_NODE_MAX);
> -	last_parent = node;
> +	if (brace_index == 0)
> +		last_parent = NULL;
> +	else
> +		last_parent = &xbc_nodes[open_brace[brace_index - 1]];
>  
>  	return 0;
>  }
> @@ -661,7 +663,7 @@ static int __init xbc_open_brace(char **k, char *n)
>  		return ret;
>  	*k = n;
>  
> -	return __xbc_open_brace();
> +	return __xbc_open_brace(n - 1);
>  }
>  
>  static int __init xbc_close_brace(char **k, char *n)
> @@ -681,6 +683,13 @@ static int __init xbc_verify_tree(void)
>  	int i, depth, len, wlen;
>  	struct xbc_node *n, *m;
>  
> +	/* Brace closing */
> +	if (brace_index) {
> +		n = &xbc_nodes[open_brace[brace_index]];
> +		return xbc_parse_error("Brace is not closed",
> +					xbc_node_get_data(n));
> +	}
> +
>  	/* Empty tree */
>  	if (xbc_node_num == 0) {
>  		xbc_parse_error("Empty config", xbc_data);
> @@ -745,6 +754,7 @@ void __init xbc_destroy_all(void)
>  	xbc_node_num = 0;
>  	memblock_free(__pa(xbc_nodes), sizeof(struct xbc_node) * XBC_NODE_MAX);
>  	xbc_nodes = NULL;
> +	brace_index = 0;
>  }
>  
>  /**
> -- 
> GitLab
> 
> 
> From c7af4ecdffe1537ba8aeed0ac12c3326f908df43 Mon Sep 17 00:00:00 2001
> From: Masami Hiramatsu <mhiramat@xxxxxxxxxx>
> Date: Mon, 21 Sep 2020 18:44:51 +0900
> Subject: [PATCH 042/126] lib/bootconfig: Fix to remove tailing spaces after
>  value
> 
> Fix to remove tailing spaces after value. If there is a space
> after value, the bootconfig failed to remove it because it
> applies strim() before replacing the delimiter with null.
> 
> For example,
> 
> foo = var    # comment
> 
> was parsed as below.
> 
> foo="var    "
> 
> but user will expect
> 
> foo="var"
> 
> This fixes it by applying strim() after removing the delimiter.
> 
> Link: https://lkml.kernel.org/r/160068149134.1088739.8868306567670058853.stgit@devnote2
> 
> Fixes: 76db5a27a827 ("bootconfig: Add Extra Boot Config support")
> Cc: Ingo Molnar <mingo@xxxxxxxxxx>
> Cc: stable@xxxxxxxxxxxxxxx
> Signed-off-by: Masami Hiramatsu <mhiramat@xxxxxxxxxx>
> Signed-off-by: Steven Rostedt (VMware) <rostedt@xxxxxxxxxxx>
> ---
>  lib/bootconfig.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/lib/bootconfig.c b/lib/bootconfig.c
> index b44bba0f1583..649ed44f199c 100644
> --- a/lib/bootconfig.c
> +++ b/lib/bootconfig.c
> @@ -494,8 +494,8 @@ static int __init __xbc_parse_value(char **__v, char **__n)
>  			break;
>  		}
>  		if (strchr(",;\n#}", c)) {
> -			v = strim(v);
>  			*p++ = '\0';
> +			v = strim(v);
>  			break;
>  		}
>  	}
> -- 
> GitLab
> 
> 
> From 1d210c166b693c3a659abbac4b58385c2d4cf887 Mon Sep 17 00:00:00 2001
> From: Masami Hiramatsu <mhiramat@xxxxxxxxxx>
> Date: Mon, 21 Sep 2020 18:45:02 +0900
> Subject: [PATCH 043/126] tools/bootconfig: Add testcases for repeated key with
>  brace
> 
> Add a testcase for repeated key with brace parsing issue.
> 
> Link: https://lkml.kernel.org/r/160068150176.1088739.409481347784771987.stgit@devnote2
> 
> Signed-off-by: Masami Hiramatsu <mhiramat@xxxxxxxxxx>
> Signed-off-by: Steven Rostedt (VMware) <rostedt@xxxxxxxxxxx>
> ---
>  tools/bootconfig/test-bootconfig.sh | 12 ++++++++++++
>  1 file changed, 12 insertions(+)
> 
> diff --git a/tools/bootconfig/test-bootconfig.sh b/tools/bootconfig/test-bootconfig.sh
> index 56284b98d8f0..95eec768b503 100755
> --- a/tools/bootconfig/test-bootconfig.sh
> +++ b/tools/bootconfig/test-bootconfig.sh
> @@ -137,6 +137,18 @@ $BOOTCONF $INITRD > $TEMPCONF
>  cat $TEMPCONF
>  xpass grep \'\"string\"\' $TEMPCONF
>  
> +echo "Repeat same-key tree"
> +cat > $TEMPCONF << EOF
> +foo
> +bar
> +foo { buz }
> +EOF
> +echo > $INITRD
> +
> +xpass $BOOTCONF -a $TEMPCONF $INITRD
> +$BOOTCONF $INITRD > $OUTFILE
> +xpass grep -q "bar" $OUTFILE
> +
>  echo "=== expected failure cases ==="
>  for i in samples/bad-* ; do
>    xfail $BOOTCONF -a $i $INITRD
> -- 
> GitLab
> 
> 
> From 2f5fb555637eff4a3e5579f2323cd358c77efdc8 Mon Sep 17 00:00:00 2001
> From: Masami Hiramatsu <mhiramat@xxxxxxxxxx>
> Date: Mon, 21 Sep 2020 18:45:11 +0900
> Subject: [PATCH 044/126] tools/bootconfig: Add testcase for tailing space
> 
> Add testcases for removing/keeping tailing space
> in the value.
> 
> Link: https://lkml.kernel.org/r/160068151151.1088739.3469541807296024227.stgit@devnote2
> 
> Signed-off-by: Masami Hiramatsu <mhiramat@xxxxxxxxxx>
> Signed-off-by: Steven Rostedt (VMware) <rostedt@xxxxxxxxxxx>
> ---
>  tools/bootconfig/test-bootconfig.sh | 13 +++++++++++++
>  1 file changed, 13 insertions(+)
> 
> diff --git a/tools/bootconfig/test-bootconfig.sh b/tools/bootconfig/test-bootconfig.sh
> index 95eec768b503..d295e406a756 100755
> --- a/tools/bootconfig/test-bootconfig.sh
> +++ b/tools/bootconfig/test-bootconfig.sh
> @@ -149,6 +149,19 @@ xpass $BOOTCONF -a $TEMPCONF $INITRD
>  $BOOTCONF $INITRD > $OUTFILE
>  xpass grep -q "bar" $OUTFILE
>  
> +
> +echo "Remove/keep tailing spaces"
> +cat > $TEMPCONF << EOF
> +foo = val     # comment
> +bar = "val2 " # comment
> +EOF
> +echo > $INITRD
> +
> +xpass $BOOTCONF -a $TEMPCONF $INITRD
> +$BOOTCONF $INITRD > $OUTFILE
> +xfail grep -q val[[:space:]] $OUTFILE
> +xpass grep -q val2[[:space:]] $OUTFILE
> +
>  echo "=== expected failure cases ==="
>  for i in samples/bad-* ; do
>    xfail $BOOTCONF -a $i $INITRD
> -- 
> GitLab
> 
> 
> From d0254f82d702a1d0d92e42f87676111de88846cf Mon Sep 17 00:00:00 2001
> From: Jacopo Mondi <jacopo+renesas@xxxxxxxxxx>
> Date: Sat, 12 Sep 2020 12:30:45 +0200
> Subject: [PATCH 045/126] media: dt-bindings: media: imx274: Convert to
>  json-schema
> 
> Convert the imx274 bindings document to json-schema and update
> the MAINTAINERS file accordingly.
> 
> Reviewed-by: Luca Ceresoli <luca@xxxxxxxxxxxxxxxx>
> Reviewed-by: Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx>
> Signed-off-by: Jacopo Mondi <jacopo+renesas@xxxxxxxxxx>
> Reviewed-by: Rob Herring <robh@xxxxxxxxxx>
> Signed-off-by: Sakari Ailus <sakari.ailus@xxxxxxxxxxxxxxx>
> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@xxxxxxxxxx>
> ---
>  .../devicetree/bindings/media/i2c/imx274.txt  | 38 ----------
>  .../bindings/media/i2c/sony,imx274.yaml       | 76 +++++++++++++++++++
>  MAINTAINERS                                   |  2 +-
>  3 files changed, 77 insertions(+), 39 deletions(-)
>  delete mode 100644 Documentation/devicetree/bindings/media/i2c/imx274.txt
>  create mode 100644 Documentation/devicetree/bindings/media/i2c/sony,imx274.yaml
> 
> diff --git a/Documentation/devicetree/bindings/media/i2c/imx274.txt b/Documentation/devicetree/bindings/media/i2c/imx274.txt
> deleted file mode 100644
> index 0727079d2410..000000000000
> --- a/Documentation/devicetree/bindings/media/i2c/imx274.txt
> +++ /dev/null
> @@ -1,38 +0,0 @@
> -* Sony 1/2.5-Inch 8.51Mp CMOS Digital Image Sensor
> -
> -The Sony imx274 is a 1/2.5-inch CMOS active pixel digital image sensor with
> -an active array size of 3864H x 2202V. It is programmable through I2C
> -interface. The I2C address is fixed to 0x1a as per sensor data sheet.
> -Image data is sent through MIPI CSI-2, which is configured as 4 lanes
> -at 1440 Mbps.
> -
> -
> -Required Properties:
> -- compatible: value should be "sony,imx274" for imx274 sensor
> -- reg: I2C bus address of the device
> -
> -Optional Properties:
> -- reset-gpios: Sensor reset GPIO
> -- clocks: Reference to the input clock.
> -- clock-names: Should be "inck".
> -- VANA-supply: Sensor 2.8v analog supply.
> -- VDIG-supply: Sensor 1.8v digital core supply.
> -- VDDL-supply: Sensor digital IO 1.2v supply.
> -
> -The imx274 device node should contain one 'port' child node with
> -an 'endpoint' subnode. For further reading on port node refer to
> -Documentation/devicetree/bindings/media/video-interfaces.txt.
> -
> -Example:
> -	sensor@1a {
> -		compatible = "sony,imx274";
> -		reg = <0x1a>;
> -		#address-cells = <1>;
> -		#size-cells = <0>;
> -		reset-gpios = <&gpio_sensor 0 0>;
> -		port {
> -			sensor_out: endpoint {
> -				remote-endpoint = <&csiss_in>;
> -			};
> -		};
> -	};
> diff --git a/Documentation/devicetree/bindings/media/i2c/sony,imx274.yaml b/Documentation/devicetree/bindings/media/i2c/sony,imx274.yaml
> new file mode 100644
> index 000000000000..f697e1a20beb
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/media/i2c/sony,imx274.yaml
> @@ -0,0 +1,76 @@
> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/media/i2c/sony,imx274.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: Sony 1/2.5-Inch 8.51MP CMOS Digital Image Sensor
> +
> +maintainers:
> +  - Leon Luo <leonl@xxxxxxxxxxxxxxxxxx>
> +
> +description: |
> +  The Sony IMX274 is a 1/2.5-inch CMOS active pixel digital image sensor with an
> +  active array size of 3864H x 2202V. It is programmable through I2C interface.
> +  Image data is sent through MIPI CSI-2, which is configured as 4 lanes at 1440
> +  Mbps.
> +
> +properties:
> +  compatible:
> +    const: sony,imx274
> +
> +  reg:
> +    const: 0x1a
> +
> +  reset-gpios:
> +    maxItems: 1
> +
> +  clocks:
> +    maxItems: 1
> +
> +  clock-names:
> +    const: inck
> +
> +  vana-supply:
> +    description: Sensor 2.8 V analog supply.
> +    maxItems: 1
> +
> +  vdig-supply:
> +    description: Sensor 1.8 V digital core supply.
> +    maxItems: 1
> +
> +  vddl-supply:
> +    description: Sensor digital IO 1.2 V supply.
> +    maxItems: 1
> +
> +  port:
> +    type: object
> +    description: Output video port. See ../video-interfaces.txt.
> +
> +required:
> +  - compatible
> +  - reg
> +  - port
> +
> +additionalProperties: false
> +
> +examples:
> +  - |
> +    i2c0 {
> +        #address-cells = <1>;
> +        #size-cells = <0>;
> +
> +        imx274: camera-sensor@1a {
> +            compatible = "sony,imx274";
> +            reg = <0x1a>;
> +            reset-gpios = <&gpio_sensor 0 0>;
> +
> +            port {
> +                sensor_out: endpoint {
> +                    remote-endpoint = <&csiss_in>;
> +                };
> +            };
> +        };
> +    };
> +
> +...
> diff --git a/MAINTAINERS b/MAINTAINERS
> index f0068bceeb61..ba1a4d2238cc 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -16125,7 +16125,7 @@ M:	Leon Luo <leonl@xxxxxxxxxxxxxxxxxx>
>  L:	linux-media@xxxxxxxxxxxxxxx
>  S:	Maintained
>  T:	git git://linuxtv.org/media_tree.git
> -F:	Documentation/devicetree/bindings/media/i2c/imx274.txt
> +F:	Documentation/devicetree/bindings/media/i2c/sony,imx274.yaml
>  F:	drivers/media/i2c/imx274.c
>  
>  SONY IMX290 SENSOR DRIVER
> -- 
> GitLab
> 
> 
> From 01ce6d4d2c8157b076425e3dd8319948652583c5 Mon Sep 17 00:00:00 2001
> From: Huacai Chen <chenhc@xxxxxxxxxx>
> Date: Mon, 24 Aug 2020 15:44:03 +0800
> Subject: [PATCH 046/126] MIPS: Loongson-3: Fix fp register access if MSA
>  enabled
> 
> If MSA is enabled, FPU_REG_WIDTH is 128 rather than 64, then get_fpr64()
> /set_fpr64() in the original unaligned instruction emulation code access
> the wrong fp registers. This is because the current code doesn't specify
> the correct index field, so fix it.
> 
> Fixes: f83e4f9896eff614d0f2547a ("MIPS: Loongson-3: Add some unaligned instructions emulation")
> Signed-off-by: Huacai Chen <chenhc@xxxxxxxxxx>
> Signed-off-by: Pei Huang <huangpei@xxxxxxxxxxx>
> Signed-off-by: Thomas Bogendoerfer <tsbogend@xxxxxxxxxxxxxxxx>
> ---
>  arch/mips/loongson64/cop2-ex.c | 24 ++++++++----------------
>  1 file changed, 8 insertions(+), 16 deletions(-)
> 
> diff --git a/arch/mips/loongson64/cop2-ex.c b/arch/mips/loongson64/cop2-ex.c
> index f130f62129b8..00055d4b6042 100644
> --- a/arch/mips/loongson64/cop2-ex.c
> +++ b/arch/mips/loongson64/cop2-ex.c
> @@ -95,10 +95,8 @@ static int loongson_cu2_call(struct notifier_block *nfb, unsigned long action,
>  			if (res)
>  				goto fault;
>  
> -			set_fpr64(current->thread.fpu.fpr,
> -				insn.loongson3_lswc2_format.rt, value);
> -			set_fpr64(current->thread.fpu.fpr,
> -				insn.loongson3_lswc2_format.rq, value_next);
> +			set_fpr64(&current->thread.fpu.fpr[insn.loongson3_lswc2_format.rt], 0, value);
> +			set_fpr64(&current->thread.fpu.fpr[insn.loongson3_lswc2_format.rq], 0, value_next);
>  			compute_return_epc(regs);
>  			own_fpu(1);
>  		}
> @@ -130,15 +128,13 @@ static int loongson_cu2_call(struct notifier_block *nfb, unsigned long action,
>  				goto sigbus;
>  
>  			lose_fpu(1);
> -			value_next = get_fpr64(current->thread.fpu.fpr,
> -					insn.loongson3_lswc2_format.rq);
> +			value_next = get_fpr64(&current->thread.fpu.fpr[insn.loongson3_lswc2_format.rq], 0);
>  
>  			StoreDW(addr + 8, value_next, res);
>  			if (res)
>  				goto fault;
>  
> -			value = get_fpr64(current->thread.fpu.fpr,
> -					insn.loongson3_lswc2_format.rt);
> +			value = get_fpr64(&current->thread.fpu.fpr[insn.loongson3_lswc2_format.rt], 0);
>  
>  			StoreDW(addr, value, res);
>  			if (res)
> @@ -204,8 +200,7 @@ static int loongson_cu2_call(struct notifier_block *nfb, unsigned long action,
>  			if (res)
>  				goto fault;
>  
> -			set_fpr64(current->thread.fpu.fpr,
> -					insn.loongson3_lsdc2_format.rt, value);
> +			set_fpr64(&current->thread.fpu.fpr[insn.loongson3_lsdc2_format.rt], 0, value);
>  			compute_return_epc(regs);
>  			own_fpu(1);
>  
> @@ -221,8 +216,7 @@ static int loongson_cu2_call(struct notifier_block *nfb, unsigned long action,
>  			if (res)
>  				goto fault;
>  
> -			set_fpr64(current->thread.fpu.fpr,
> -					insn.loongson3_lsdc2_format.rt, value);
> +			set_fpr64(&current->thread.fpu.fpr[insn.loongson3_lsdc2_format.rt], 0, value);
>  			compute_return_epc(regs);
>  			own_fpu(1);
>  			break;
> @@ -286,8 +280,7 @@ static int loongson_cu2_call(struct notifier_block *nfb, unsigned long action,
>  				goto sigbus;
>  
>  			lose_fpu(1);
> -			value = get_fpr64(current->thread.fpu.fpr,
> -					insn.loongson3_lsdc2_format.rt);
> +			value = get_fpr64(&current->thread.fpu.fpr[insn.loongson3_lsdc2_format.rt], 0);
>  
>  			StoreW(addr, value, res);
>  			if (res)
> @@ -305,8 +298,7 @@ static int loongson_cu2_call(struct notifier_block *nfb, unsigned long action,
>  				goto sigbus;
>  
>  			lose_fpu(1);
> -			value = get_fpr64(current->thread.fpu.fpr,
> -					insn.loongson3_lsdc2_format.rt);
> +			value = get_fpr64(&current->thread.fpu.fpr[insn.loongson3_lsdc2_format.rt], 0);
>  
>  			StoreDW(addr, value, res);
>  			if (res)
> -- 
> GitLab
> 
> 
> From b5ddcffa37778244d5e786fe32f778edf2bfc93e Mon Sep 17 00:00:00 2001
> From: Anand Jain <anand.jain@xxxxxxxxxx>
> Date: Sat, 5 Sep 2020 01:34:21 +0800
> Subject: [PATCH 047/126] btrfs: fix put of uninitialized kobject after seed
>  device delete
> 
> The following test case leads to NULL kobject free error:
> 
>   mount seed /mnt
>   add sprout to /mnt
>   umount /mnt
>   mount sprout to /mnt
>   delete seed
> 
>   kobject: '(null)' (00000000dd2b87e4): is not initialized, yet kobject_put() is being called.
>   WARNING: CPU: 1 PID: 15784 at lib/kobject.c:736 kobject_put+0x80/0x350
>   RIP: 0010:kobject_put+0x80/0x350
>   ::
>   Call Trace:
>   btrfs_sysfs_remove_devices_dir+0x6e/0x160 [btrfs]
>   btrfs_rm_device.cold+0xa8/0x298 [btrfs]
>   btrfs_ioctl+0x206c/0x22a0 [btrfs]
>   ksys_ioctl+0xe2/0x140
>   __x64_sys_ioctl+0x1e/0x29
>   do_syscall_64+0x96/0x150
>   entry_SYSCALL_64_after_hwframe+0x44/0xa9
>   RIP: 0033:0x7f4047c6288b
>   ::
> 
> This is because, at the end of the seed device-delete, we try to remove
> the seed's devid sysfs entry. But for the seed devices under the sprout
> fs, we don't initialize the devid kobject yet. So add a kobject state
> check, which takes care of the bug.
> 
> Fixes: 668e48af7a94 ("btrfs: sysfs, add devid/dev_state kobject and device attributes")
> CC: stable@xxxxxxxxxxxxxxx # 5.6+
> Signed-off-by: Anand Jain <anand.jain@xxxxxxxxxx>
> Reviewed-by: David Sterba <dsterba@xxxxxxxx>
> Signed-off-by: David Sterba <dsterba@xxxxxxxx>
> ---
>  fs/btrfs/sysfs.c | 16 ++++++++++------
>  1 file changed, 10 insertions(+), 6 deletions(-)
> 
> diff --git a/fs/btrfs/sysfs.c b/fs/btrfs/sysfs.c
> index c8df2edafd85..5be30066563c 100644
> --- a/fs/btrfs/sysfs.c
> +++ b/fs/btrfs/sysfs.c
> @@ -1170,10 +1170,12 @@ int btrfs_sysfs_remove_devices_dir(struct btrfs_fs_devices *fs_devices,
>  					  disk_kobj->name);
>  		}
>  
> -		kobject_del(&one_device->devid_kobj);
> -		kobject_put(&one_device->devid_kobj);
> +		if (one_device->devid_kobj.state_initialized) {
> +			kobject_del(&one_device->devid_kobj);
> +			kobject_put(&one_device->devid_kobj);
>  
> -		wait_for_completion(&one_device->kobj_unregister);
> +			wait_for_completion(&one_device->kobj_unregister);
> +		}
>  
>  		return 0;
>  	}
> @@ -1186,10 +1188,12 @@ int btrfs_sysfs_remove_devices_dir(struct btrfs_fs_devices *fs_devices,
>  			sysfs_remove_link(fs_devices->devices_kobj,
>  					  disk_kobj->name);
>  		}
> -		kobject_del(&one_device->devid_kobj);
> -		kobject_put(&one_device->devid_kobj);
> +		if (one_device->devid_kobj.state_initialized) {
> +			kobject_del(&one_device->devid_kobj);
> +			kobject_put(&one_device->devid_kobj);
>  
> -		wait_for_completion(&one_device->kobj_unregister);
> +			wait_for_completion(&one_device->kobj_unregister);
> +		}
>  	}
>  
>  	return 0;
> -- 
> GitLab
> 
> 
> From ce65d55f92a67e247f4d799e581cf9fed677871c Mon Sep 17 00:00:00 2001
> From: Vladimir Murzin <vladimir.murzin@xxxxxxx>
> Date: Tue, 22 Sep 2020 14:58:45 +0300
> Subject: [PATCH 048/126] dmaengine: dmatest: Prevent to run on misconfigured
>  channel
> 
> Andy reported that commit 6b41030fdc79 ("dmaengine: dmatest:
> Restore default for channel") broke his scripts for the case
> where "busy" channel is used for configuration with expectation
> that run command would do nothing. Instead, behavior was
> (unintentionally) changed to treat such case as under-configuration
> and progress with defaults, i.e. run command would start a test
> with default setting for channel (which would use all channels).
> 
> Restore original behavior with tracking status of channel setter
> so we can distinguish between misconfigured and under-configured
> cases in run command and act accordingly.
> 
> Fixes: 6b41030fdc79 ("dmaengine: dmatest: Restore default for channel")
> Reported-by: Andy Shevchenko <andriy.shevchenko@xxxxxxxxxxxxxxx>
> Tested-by: Andy Shevchenko <andriy.shevchenko@xxxxxxxxxxxxxxx>
> Signed-off-by: Vladimir Murzin <vladimir.murzin@xxxxxxx>
> Tested-by: Peter Ujfalusi <peter.ujfalusi@xxxxxx>
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@xxxxxxxxxxxxxxx>
> Link: https://lore.kernel.org/r/20200922115847.30100-1-andriy.shevchenko@xxxxxxxxxxxxxxx
> Signed-off-by: Vinod Koul <vkoul@xxxxxxxxxx>
> ---
>  drivers/dma/dmatest.c | 26 +++++++++++++++++++++-----
>  1 file changed, 21 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/dma/dmatest.c b/drivers/dma/dmatest.c
> index 45d4d92e91db..a819611b8892 100644
> --- a/drivers/dma/dmatest.c
> +++ b/drivers/dma/dmatest.c
> @@ -129,6 +129,7 @@ struct dmatest_params {
>   * @nr_channels:	number of channels under test
>   * @lock:		access protection to the fields of this structure
>   * @did_init:		module has been initialized completely
> + * @last_error:		test has faced configuration issues
>   */
>  static struct dmatest_info {
>  	/* Test parameters */
> @@ -137,6 +138,7 @@ static struct dmatest_info {
>  	/* Internal state */
>  	struct list_head	channels;
>  	unsigned int		nr_channels;
> +	int			last_error;
>  	struct mutex		lock;
>  	bool			did_init;
>  } test_info = {
> @@ -1184,10 +1186,22 @@ static int dmatest_run_set(const char *val, const struct kernel_param *kp)
>  		return ret;
>  	} else if (dmatest_run) {
>  		if (!is_threaded_test_pending(info)) {
> -			pr_info("No channels configured, continue with any\n");
> -			if (!is_threaded_test_run(info))
> -				stop_threaded_test(info);
> -			add_threaded_test(info);
> +			/*
> +			 * We have nothing to run. This can be due to:
> +			 */
> +			ret = info->last_error;
> +			if (ret) {
> +				/* 1) Misconfiguration */
> +				pr_err("Channel misconfigured, can't continue\n");
> +				mutex_unlock(&info->lock);
> +				return ret;
> +			} else {
> +				/* 2) We rely on defaults */
> +				pr_info("No channels configured, continue with any\n");
> +				if (!is_threaded_test_run(info))
> +					stop_threaded_test(info);
> +				add_threaded_test(info);
> +			}
>  		}
>  		start_threaded_tests(info);
>  	} else {
> @@ -1204,7 +1218,7 @@ static int dmatest_chan_set(const char *val, const struct kernel_param *kp)
>  	struct dmatest_info *info = &test_info;
>  	struct dmatest_chan *dtc;
>  	char chan_reset_val[20];
> -	int ret = 0;
> +	int ret;
>  
>  	mutex_lock(&info->lock);
>  	ret = param_set_copystring(val, kp);
> @@ -1259,12 +1273,14 @@ static int dmatest_chan_set(const char *val, const struct kernel_param *kp)
>  		goto add_chan_err;
>  	}
>  
> +	info->last_error = ret;
>  	mutex_unlock(&info->lock);
>  
>  	return ret;
>  
>  add_chan_err:
>  	param_set_copystring(chan_reset_val, kp);
> +	info->last_error = ret;
>  	mutex_unlock(&info->lock);
>  
>  	return ret;
> -- 
> GitLab
> 
> 
> From c413c3102703a453c1312ce2160c6b7ffd55403e Mon Sep 17 00:00:00 2001
> From: Kai-Heng Feng <kai.heng.feng@xxxxxxxxxxxxx>
> Date: Tue, 15 Sep 2020 18:39:23 +0800
> Subject: [PATCH 049/126] Revert "ALSA: usb-audio: Disable Lenovo P620 Rear
>  line-in volume control"
> 
> This reverts commit 34dedd2a83b241ba6aeb290260313c65dc58660e.
> 
> According to Realtek, volume FU works for line-in.
> 
> I can confirm volume control works after device firmware is updated.
> 
> Fixes: 34dedd2a83b2 ("ALSA: usb-audio: Disable Lenovo P620 Rear line-in volume control")
> Signed-off-by: Kai-Heng Feng <kai.heng.feng@xxxxxxxxxxxxx>
> Link: https://lore.kernel.org/r/20200915103925.12777-1-kai.heng.feng@xxxxxxxxxxxxx
> Signed-off-by: Takashi Iwai <tiwai@xxxxxxx>
> ---
>  sound/usb/mixer_maps.c | 1 -
>  1 file changed, 1 deletion(-)
> 
> diff --git a/sound/usb/mixer_maps.c b/sound/usb/mixer_maps.c
> index 5b43e9e40e49..c369c81e74c4 100644
> --- a/sound/usb/mixer_maps.c
> +++ b/sound/usb/mixer_maps.c
> @@ -371,7 +371,6 @@ static const struct usbmix_name_map asus_rog_map[] = {
>  };
>  
>  static const struct usbmix_name_map lenovo_p620_rear_map[] = {
> -	{ 19, NULL, 2 }, /* FU, Volume */
>  	{ 19, NULL, 12 }, /* FU, Input Gain Pad */
>  	{}
>  };
> -- 
> GitLab
> 
> 
> From 59e330f8ff7ada7aa64fa422f6adf22a45152a7e Mon Sep 17 00:00:00 2001
> From: Keith Busch <kbusch@xxxxxxxxxx>
> Date: Thu, 17 Sep 2020 08:50:25 -0700
> Subject: [PATCH 050/126] nvme: return errors for hwmon init
> 
> Initializing the nvme hwmon retrieves a log from the controller. If the
> controller is broken, we need to return the appropriate error so that
> subsequent initialization doesn't attempt to continue.
> 
> Reported-by: Tong Zhang <ztong0001@xxxxxxxxx>
> Signed-off-by: Keith Busch <kbusch@xxxxxxxxxx>
> Signed-off-by: Christoph Hellwig <hch@xxxxxx>
> ---
>  drivers/nvme/host/core.c  |  7 +++++--
>  drivers/nvme/host/hwmon.c | 14 ++++++--------
>  drivers/nvme/host/nvme.h  |  7 +++++--
>  3 files changed, 16 insertions(+), 12 deletions(-)
> 
> diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
> index c013eb52fdc8..4cea14c18a6d 100644
> --- a/drivers/nvme/host/core.c
> +++ b/drivers/nvme/host/core.c
> @@ -3236,8 +3236,11 @@ int nvme_init_identify(struct nvme_ctrl *ctrl)
>  	if (ret < 0)
>  		return ret;
>  
> -	if (!ctrl->identified)
> -		nvme_hwmon_init(ctrl);
> +	if (!ctrl->identified) {
> +		ret = nvme_hwmon_init(ctrl);
> +		if (ret < 0)
> +			return ret;
> +	}
>  
>  	ctrl->identified = true;
>  
> diff --git a/drivers/nvme/host/hwmon.c b/drivers/nvme/host/hwmon.c
> index 412a6c97c0d8..552dbc04567b 100644
> --- a/drivers/nvme/host/hwmon.c
> +++ b/drivers/nvme/host/hwmon.c
> @@ -59,12 +59,8 @@ static int nvme_set_temp_thresh(struct nvme_ctrl *ctrl, int sensor, bool under,
>  
>  static int nvme_hwmon_get_smart_log(struct nvme_hwmon_data *data)
>  {
> -	int ret;
> -
> -	ret = nvme_get_log(data->ctrl, NVME_NSID_ALL, NVME_LOG_SMART, 0,
> +	return nvme_get_log(data->ctrl, NVME_NSID_ALL, NVME_LOG_SMART, 0,
>  			   NVME_CSI_NVM, &data->log, sizeof(data->log), 0);
> -
> -	return ret <= 0 ? ret : -EIO;
>  }
>  
>  static int nvme_hwmon_read(struct device *dev, enum hwmon_sensor_types type,
> @@ -225,7 +221,7 @@ static const struct hwmon_chip_info nvme_hwmon_chip_info = {
>  	.info	= nvme_hwmon_info,
>  };
>  
> -void nvme_hwmon_init(struct nvme_ctrl *ctrl)
> +int nvme_hwmon_init(struct nvme_ctrl *ctrl)
>  {
>  	struct device *dev = ctrl->dev;
>  	struct nvme_hwmon_data *data;
> @@ -234,7 +230,7 @@ void nvme_hwmon_init(struct nvme_ctrl *ctrl)
>  
>  	data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL);
>  	if (!data)
> -		return;
> +		return 0;
>  
>  	data->ctrl = ctrl;
>  	mutex_init(&data->read_lock);
> @@ -244,7 +240,7 @@ void nvme_hwmon_init(struct nvme_ctrl *ctrl)
>  		dev_warn(ctrl->device,
>  			"Failed to read smart log (error %d)\n", err);
>  		devm_kfree(dev, data);
> -		return;
> +		return err;
>  	}
>  
>  	hwmon = devm_hwmon_device_register_with_info(dev, "nvme", data,
> @@ -254,4 +250,6 @@ void nvme_hwmon_init(struct nvme_ctrl *ctrl)
>  		dev_warn(dev, "Failed to instantiate hwmon device\n");
>  		devm_kfree(dev, data);
>  	}
> +
> +	return 0;
>  }
> diff --git a/drivers/nvme/host/nvme.h b/drivers/nvme/host/nvme.h
> index 9fd45ff656da..2aaedfa43ed8 100644
> --- a/drivers/nvme/host/nvme.h
> +++ b/drivers/nvme/host/nvme.h
> @@ -827,9 +827,12 @@ static inline struct nvme_ns *nvme_get_ns_from_dev(struct device *dev)
>  }
>  
>  #ifdef CONFIG_NVME_HWMON
> -void nvme_hwmon_init(struct nvme_ctrl *ctrl);
> +int nvme_hwmon_init(struct nvme_ctrl *ctrl);
>  #else
> -static inline void nvme_hwmon_init(struct nvme_ctrl *ctrl) { }
> +static inline int nvme_hwmon_init(struct nvme_ctrl *ctrl)
> +{
> +	return 0;
> +}
>  #endif
>  
>  u32 nvme_command_effects(struct nvme_ctrl *ctrl, struct nvme_ns *ns,
> -- 
> GitLab
> 
> 
> From 50b7c24390a53c78de546215282fb52980f1d7b7 Mon Sep 17 00:00:00 2001
> From: Xianting Tian <tian.xianting@xxxxxxx>
> Date: Tue, 22 Sep 2020 14:25:17 +0800
> Subject: [PATCH 051/126] nvme-pci: fix NULL req in completion handler
> 
> Currently, we use nvmeq->q_depth as the upper limit for a valid tag in
> nvme_handle_cqe(), it is not correct. Because the available tag number
> is recorded in tagset, which is not equal to nvmeq->q_depth.
> 
> The nvme driver registers interrupts for queues before initializing the
> tagset, because it uses the number of successful request_irq() calls to
> configure the tagset parameters. This allows a race condition with the
> current tag validity check if the controller happens to produce an
> interrupt with a corrupted CQE before the tagset is initialized.
> 
> Replace the driver's indirect tag check with the one already provided by
> the block layer.
> 
> Signed-off-by: Xianting Tian <tian.xianting@xxxxxxx>
> Reviewed-by: Keith Busch <kbusch@xxxxxxxxxx>
> Signed-off-by: Christoph Hellwig <hch@xxxxxx>
> ---
>  drivers/nvme/host/pci.c | 14 +++++++-------
>  1 file changed, 7 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c
> index d31e298669a9..d286c267869d 100644
> --- a/drivers/nvme/host/pci.c
> +++ b/drivers/nvme/host/pci.c
> @@ -940,13 +940,6 @@ static inline void nvme_handle_cqe(struct nvme_queue *nvmeq, u16 idx)
>  	struct nvme_completion *cqe = &nvmeq->cqes[idx];
>  	struct request *req;
>  
> -	if (unlikely(cqe->command_id >= nvmeq->q_depth)) {
> -		dev_warn(nvmeq->dev->ctrl.device,
> -			"invalid id %d completed on queue %d\n",
> -			cqe->command_id, le16_to_cpu(cqe->sq_id));
> -		return;
> -	}
> -
>  	/*
>  	 * AEN requests are special as they don't time out and can
>  	 * survive any kind of queue freeze and often don't respond to
> @@ -960,6 +953,13 @@ static inline void nvme_handle_cqe(struct nvme_queue *nvmeq, u16 idx)
>  	}
>  
>  	req = blk_mq_tag_to_rq(nvme_queue_tagset(nvmeq), cqe->command_id);
> +	if (unlikely(!req)) {
> +		dev_warn(nvmeq->dev->ctrl.device,
> +			"invalid id %d completed on queue %d\n",
> +			cqe->command_id, le16_to_cpu(cqe->sq_id));
> +		return;
> +	}
> +
>  	trace_nvme_sq(req, cqe->sq_head, nvmeq->sq_tail);
>  	if (!nvme_try_complete_req(req, cqe->status, cqe->result))
>  		nvme_pci_complete_rq(req);
> -- 
> GitLab
> 
> 
> From 9e0e8dac985d4bd07d9e62922b9d189d3ca2fccf Mon Sep 17 00:00:00 2001
> From: James Smart <james.smart@xxxxxxxxxxxx>
> Date: Thu, 17 Sep 2020 13:33:22 -0700
> Subject: [PATCH 052/126] nvme-fc: fail new connections to a deleted host or
>  remote port
> 
> The lldd may have made calls to delete a remote port or local port and
> the delete is in progress when the cli then attempts to create a new
> controller. Currently, this proceeds without error although it can't be
> very successful.
> 
> Fix this by validating that both the host port and remote port are
> present when a new controller is to be created.
> 
> Signed-off-by: James Smart <james.smart@xxxxxxxxxxxx>
> Reviewed-by: Himanshu Madhani <himanshu.madhani@xxxxxxxxxx>
> Signed-off-by: Christoph Hellwig <hch@xxxxxx>
> ---
>  drivers/nvme/host/fc.c | 6 ++++--
>  1 file changed, 4 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/nvme/host/fc.c b/drivers/nvme/host/fc.c
> index e8ef42b9d50c..e2e09e25c056 100644
> --- a/drivers/nvme/host/fc.c
> +++ b/drivers/nvme/host/fc.c
> @@ -3671,12 +3671,14 @@ nvme_fc_create_ctrl(struct device *dev, struct nvmf_ctrl_options *opts)
>  	spin_lock_irqsave(&nvme_fc_lock, flags);
>  	list_for_each_entry(lport, &nvme_fc_lport_list, port_list) {
>  		if (lport->localport.node_name != laddr.nn ||
> -		    lport->localport.port_name != laddr.pn)
> +		    lport->localport.port_name != laddr.pn ||
> +		    lport->localport.port_state != FC_OBJSTATE_ONLINE)
>  			continue;
>  
>  		list_for_each_entry(rport, &lport->endp_list, endp_list) {
>  			if (rport->remoteport.node_name != raddr.nn ||
> -			    rport->remoteport.port_name != raddr.pn)
> +			    rport->remoteport.port_name != raddr.pn ||
> +			    rport->remoteport.port_state != FC_OBJSTATE_ONLINE)
>  				continue;
>  
>  			/* if fail to get reference fall through. Will error */
> -- 
> GitLab
> 
> 
> From 4a5caa4af0df5cd8f1c7f0c2f871d382662b022e Mon Sep 17 00:00:00 2001
> From: Milan Broz <gmazyland@xxxxxxxxx>
> Date: Thu, 20 Aug 2020 19:45:38 +0200
> Subject: [PATCH 053/126] dm crypt: document new no_workqueue flags
> 
> Commit 39d42fa96ba1 ("dm crypt: add flags to optionally bypass kcryptd
> workqueues") introduced new dm-crypt 'no_read_workqueue' and
> 'no_write_workqueue' flags.
> 
> Add documentation to admin guide for them.
> 
> Fixes: 39d42fa96ba1 ("dm crypt: add flags to optionally bypass kcryptd workqueues")
> Signed-off-by: Milan Broz <gmazyland@xxxxxxxxx>
> Signed-off-by: Mike Snitzer <snitzer@xxxxxxxxxx>
> ---
>  Documentation/admin-guide/device-mapper/dm-crypt.rst | 8 ++++++++
>  1 file changed, 8 insertions(+)
> 
> diff --git a/Documentation/admin-guide/device-mapper/dm-crypt.rst b/Documentation/admin-guide/device-mapper/dm-crypt.rst
> index 8f4a3f889d43..40dc2df58cd5 100644
> --- a/Documentation/admin-guide/device-mapper/dm-crypt.rst
> +++ b/Documentation/admin-guide/device-mapper/dm-crypt.rst
> @@ -121,6 +121,14 @@ submit_from_crypt_cpus
>      thread because it benefits CFQ to have writes submitted using the
>      same context.
>  
> +no_read_workqueue
> +    Bypass dm-crypt internal workqueue and process read requests synchronously.
> +
> +no_write_workqueue
> +    Bypass dm-crypt internal workqueue and process write requests synchronously.
> +    This option is automatically enabled for host-managed zoned block devices
> +    (e.g. host-managed SMR hard-disks).
> +
>  integrity:<bytes>:<type>
>      The device requires additional <bytes> metadata per-sector stored
>      in per-bio integrity structure. This metadata must by provided
> -- 
> GitLab
> 
> 
> From 4c07ae0ad493b7b2d3dd3e53870e594f136ce8a5 Mon Sep 17 00:00:00 2001
> From: Milan Broz <gmazyland@xxxxxxxxx>
> Date: Thu, 20 Aug 2020 21:20:26 +0200
> Subject: [PATCH 054/126] dm crypt: document encrypted keyring key option
> 
> Commit 27f5411a718c4 ("dm crypt: support using encrypted keys")
> introduced support for encrypted keyring type.
> 
> Fix documentation in admin guide to mention this type.
> 
> Fixes: 27f5411a718c4 ("dm crypt: support using encrypted keys")
> Signed-off-by: Milan Broz <gmazyland@xxxxxxxxx>
> Signed-off-by: Mike Snitzer <snitzer@xxxxxxxxxx>
> ---
>  Documentation/admin-guide/device-mapper/dm-crypt.rst | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/Documentation/admin-guide/device-mapper/dm-crypt.rst b/Documentation/admin-guide/device-mapper/dm-crypt.rst
> index 40dc2df58cd5..bc28a9527ee5 100644
> --- a/Documentation/admin-guide/device-mapper/dm-crypt.rst
> +++ b/Documentation/admin-guide/device-mapper/dm-crypt.rst
> @@ -67,7 +67,7 @@ Parameters::
>      the value passed in <key_size>.
>  
>  <key_type>
> -    Either 'logon' or 'user' kernel key type.
> +    Either 'logon', 'user' or 'encrypted' kernel key type.
>  
>  <key_description>
>      The kernel keyring key description crypt target should look for
> -- 
> GitLab
> 
> 
> From bd805274577457f301bf826f86543f550cf5c1ef Mon Sep 17 00:00:00 2001
> From: Ulf Hansson <ulf.hansson@xxxxxxxxxx>
> Date: Tue, 22 Sep 2020 11:15:50 +0200
> Subject: [PATCH 055/126] cpuidle: Drop misleading comments about RCU usage
> 
> The commit 1098582a0f6c ("sched,idle,rcu: Push rcu_idle deeper into the
> idle path"), moved the calls rcu_idle_enter|exit() into the cpuidle core.
> 
> However, it forgot to remove a couple of comments in enter_s2idle_proper()
> about why RCU_NONIDLE earlier was needed. So, let's drop them as they have
> become a bit misleading.
> 
> Fixes: 1098582a0f6c ("sched,idle,rcu: Push rcu_idle deeper into the idle path")
> Signed-off-by: Ulf Hansson <ulf.hansson@xxxxxxxxxx>
> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx>
> ---
>  drivers/cpuidle/cpuidle.c | 10 ----------
>  1 file changed, 10 deletions(-)
> 
> diff --git a/drivers/cpuidle/cpuidle.c b/drivers/cpuidle/cpuidle.c
> index 6c7e5621cf9a..29e84687f3c3 100644
> --- a/drivers/cpuidle/cpuidle.c
> +++ b/drivers/cpuidle/cpuidle.c
> @@ -142,11 +142,6 @@ static void enter_s2idle_proper(struct cpuidle_driver *drv,
>  
>  	time_start = ns_to_ktime(local_clock());
>  
> -	/*
> -	 * trace_suspend_resume() called by tick_freeze() for the last CPU
> -	 * executing it contains RCU usage regarded as invalid in the idle
> -	 * context, so tell RCU about that.
> -	 */
>  	tick_freeze();
>  	/*
>  	 * The state used here cannot be a "coupled" one, because the "coupled"
> @@ -159,11 +154,6 @@ static void enter_s2idle_proper(struct cpuidle_driver *drv,
>  	target_state->enter_s2idle(dev, drv, index);
>  	if (WARN_ON_ONCE(!irqs_disabled()))
>  		local_irq_disable();
> -	/*
> -	 * timekeeping_resume() that will be called by tick_unfreeze() for the
> -	 * first CPU executing it calls functions containing RCU read-side
> -	 * critical sections, so tell RCU about that.
> -	 */
>  	if (!(target_state->flags & CPUIDLE_FLAG_RCU_IDLE))
>  		rcu_idle_exit();
>  	tick_unfreeze();
> -- 
> GitLab
> 
> 
> From a7b3474cbb2864d5500d5e4f48dd57c903975cab Mon Sep 17 00:00:00 2001
> From: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
> Date: Tue, 22 Sep 2020 09:58:52 +0200
> Subject: [PATCH 056/126] x86/irq: Make run_on_irqstack_cond() typesafe
> 
> Sami reported that run_on_irqstack_cond() requires the caller to cast
> functions to mismatching types, which trips indirect call Control-Flow
> Integrity (CFI) in Clang.
> 
> Instead of disabling CFI on that function, provide proper helpers for
> the three call variants. The actual ASM code stays the same as that is
> out of reach.
> 
>  [ bp: Fix __run_on_irqstack() prototype to match. ]
> 
> Fixes: 931b94145981 ("x86/entry: Provide helpers for executing on the irqstack")
> Reported-by: Nathan Chancellor <natechancellor@xxxxxxxxx>
> Reported-by: Sami Tolvanen <samitolvanen@xxxxxxxxxx>
> Signed-off-by: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
> Signed-off-by: Borislav Petkov <bp@xxxxxxx>
> Tested-by: Sami Tolvanen <samitolvanen@xxxxxxxxxx>
> Cc: <stable@xxxxxxxxxxxxxxx>
> Link: https://github.com/ClangBuiltLinux/linux/issues/1052
> Link: https://lkml.kernel.org/r/87pn6eb5tv.fsf@xxxxxxxxxxxxxxxxxxxxxxx
> ---
>  arch/x86/entry/common.c          |  2 +-
>  arch/x86/entry/entry_64.S        |  2 +
>  arch/x86/include/asm/idtentry.h  |  2 +-
>  arch/x86/include/asm/irq_stack.h | 69 ++++++++++++++++++++++++++++----
>  arch/x86/kernel/irq.c            |  2 +-
>  arch/x86/kernel/irq_64.c         |  2 +-
>  6 files changed, 67 insertions(+), 12 deletions(-)
> 
> diff --git a/arch/x86/entry/common.c b/arch/x86/entry/common.c
> index 2f84c7ca74ea..870efeec8bda 100644
> --- a/arch/x86/entry/common.c
> +++ b/arch/x86/entry/common.c
> @@ -299,7 +299,7 @@ __visible noinstr void xen_pv_evtchn_do_upcall(struct pt_regs *regs)
>  	old_regs = set_irq_regs(regs);
>  
>  	instrumentation_begin();
> -	run_on_irqstack_cond(__xen_pv_evtchn_do_upcall, NULL, regs);
> +	run_on_irqstack_cond(__xen_pv_evtchn_do_upcall, regs);
>  	instrumentation_begin();
>  
>  	set_irq_regs(old_regs);
> diff --git a/arch/x86/entry/entry_64.S b/arch/x86/entry/entry_64.S
> index 70dea9337816..d977079a7d02 100644
> --- a/arch/x86/entry/entry_64.S
> +++ b/arch/x86/entry/entry_64.S
> @@ -682,6 +682,8 @@ SYM_CODE_END(.Lbad_gs)
>   * rdx: Function argument (can be NULL if none)
>   */
>  SYM_FUNC_START(asm_call_on_stack)
> +SYM_INNER_LABEL(asm_call_sysvec_on_stack, SYM_L_GLOBAL)
> +SYM_INNER_LABEL(asm_call_irq_on_stack, SYM_L_GLOBAL)
>  	/*
>  	 * Save the frame pointer unconditionally. This allows the ORC
>  	 * unwinder to handle the stack switch.
> diff --git a/arch/x86/include/asm/idtentry.h b/arch/x86/include/asm/idtentry.h
> index a43366191212..a0638640f1ed 100644
> --- a/arch/x86/include/asm/idtentry.h
> +++ b/arch/x86/include/asm/idtentry.h
> @@ -242,7 +242,7 @@ __visible noinstr void func(struct pt_regs *regs)			\
>  	instrumentation_begin();					\
>  	irq_enter_rcu();						\
>  	kvm_set_cpu_l1tf_flush_l1d();					\
> -	run_on_irqstack_cond(__##func, regs, regs);			\
> +	run_sysvec_on_irqstack_cond(__##func, regs);			\
>  	irq_exit_rcu();							\
>  	instrumentation_end();						\
>  	irqentry_exit(regs, state);					\
> diff --git a/arch/x86/include/asm/irq_stack.h b/arch/x86/include/asm/irq_stack.h
> index 4ae66f097101..775816965c6a 100644
> --- a/arch/x86/include/asm/irq_stack.h
> +++ b/arch/x86/include/asm/irq_stack.h
> @@ -12,20 +12,50 @@ static __always_inline bool irqstack_active(void)
>  	return __this_cpu_read(irq_count) != -1;
>  }
>  
> -void asm_call_on_stack(void *sp, void *func, void *arg);
> +void asm_call_on_stack(void *sp, void (*func)(void), void *arg);
> +void asm_call_sysvec_on_stack(void *sp, void (*func)(struct pt_regs *regs),
> +			      struct pt_regs *regs);
> +void asm_call_irq_on_stack(void *sp, void (*func)(struct irq_desc *desc),
> +			   struct irq_desc *desc);
>  
> -static __always_inline void __run_on_irqstack(void *func, void *arg)
> +static __always_inline void __run_on_irqstack(void (*func)(void))
>  {
>  	void *tos = __this_cpu_read(hardirq_stack_ptr);
>  
>  	__this_cpu_add(irq_count, 1);
> -	asm_call_on_stack(tos - 8, func, arg);
> +	asm_call_on_stack(tos - 8, func, NULL);
> +	__this_cpu_sub(irq_count, 1);
> +}
> +
> +static __always_inline void
> +__run_sysvec_on_irqstack(void (*func)(struct pt_regs *regs),
> +			 struct pt_regs *regs)
> +{
> +	void *tos = __this_cpu_read(hardirq_stack_ptr);
> +
> +	__this_cpu_add(irq_count, 1);
> +	asm_call_sysvec_on_stack(tos - 8, func, regs);
> +	__this_cpu_sub(irq_count, 1);
> +}
> +
> +static __always_inline void
> +__run_irq_on_irqstack(void (*func)(struct irq_desc *desc),
> +		      struct irq_desc *desc)
> +{
> +	void *tos = __this_cpu_read(hardirq_stack_ptr);
> +
> +	__this_cpu_add(irq_count, 1);
> +	asm_call_irq_on_stack(tos - 8, func, desc);
>  	__this_cpu_sub(irq_count, 1);
>  }
>  
>  #else /* CONFIG_X86_64 */
>  static inline bool irqstack_active(void) { return false; }
> -static inline void __run_on_irqstack(void *func, void *arg) { }
> +static inline void __run_on_irqstack(void (*func)(void)) { }
> +static inline void __run_sysvec_on_irqstack(void (*func)(struct pt_regs *regs),
> +					    struct pt_regs *regs) { }
> +static inline void __run_irq_on_irqstack(void (*func)(struct irq_desc *desc),
> +					 struct irq_desc *desc) { }
>  #endif /* !CONFIG_X86_64 */
>  
>  static __always_inline bool irq_needs_irq_stack(struct pt_regs *regs)
> @@ -37,17 +67,40 @@ static __always_inline bool irq_needs_irq_stack(struct pt_regs *regs)
>  	return !user_mode(regs) && !irqstack_active();
>  }
>  
> -static __always_inline void run_on_irqstack_cond(void *func, void *arg,
> +
> +static __always_inline void run_on_irqstack_cond(void (*func)(void),
>  						 struct pt_regs *regs)
>  {
> -	void (*__func)(void *arg) = func;
> +	lockdep_assert_irqs_disabled();
> +
> +	if (irq_needs_irq_stack(regs))
> +		__run_on_irqstack(func);
> +	else
> +		func();
> +}
> +
> +static __always_inline void
> +run_sysvec_on_irqstack_cond(void (*func)(struct pt_regs *regs),
> +			    struct pt_regs *regs)
> +{
> +	lockdep_assert_irqs_disabled();
>  
> +	if (irq_needs_irq_stack(regs))
> +		__run_sysvec_on_irqstack(func, regs);
> +	else
> +		func(regs);
> +}
> +
> +static __always_inline void
> +run_irq_on_irqstack_cond(void (*func)(struct irq_desc *desc), struct irq_desc *desc,
> +			 struct pt_regs *regs)
> +{
>  	lockdep_assert_irqs_disabled();
>  
>  	if (irq_needs_irq_stack(regs))
> -		__run_on_irqstack(__func, arg);
> +		__run_irq_on_irqstack(func, desc);
>  	else
> -		__func(arg);
> +		func(desc);
>  }
>  
>  #endif
> diff --git a/arch/x86/kernel/irq.c b/arch/x86/kernel/irq.c
> index 181060247e3c..c5dd50369e2f 100644
> --- a/arch/x86/kernel/irq.c
> +++ b/arch/x86/kernel/irq.c
> @@ -227,7 +227,7 @@ static __always_inline void handle_irq(struct irq_desc *desc,
>  				       struct pt_regs *regs)
>  {
>  	if (IS_ENABLED(CONFIG_X86_64))
> -		run_on_irqstack_cond(desc->handle_irq, desc, regs);
> +		run_irq_on_irqstack_cond(desc->handle_irq, desc, regs);
>  	else
>  		__handle_irq(desc, regs);
>  }
> diff --git a/arch/x86/kernel/irq_64.c b/arch/x86/kernel/irq_64.c
> index 1b4fe93a86c5..440eed558558 100644
> --- a/arch/x86/kernel/irq_64.c
> +++ b/arch/x86/kernel/irq_64.c
> @@ -74,5 +74,5 @@ int irq_init_percpu_irqstack(unsigned int cpu)
>  
>  void do_softirq_own_stack(void)
>  {
> -	run_on_irqstack_cond(__do_softirq, NULL, NULL);
> +	run_on_irqstack_cond(__do_softirq, NULL);
>  }
> -- 
> GitLab
> 
> 
> From 0c309ed17c50e7eeaf3c66102b475198064e80da Mon Sep 17 00:00:00 2001
> From: Chanwoo Choi <cw00.choi@xxxxxxxxxxx>
> Date: Tue, 8 Sep 2020 19:57:07 +0900
> Subject: [PATCH 057/126] PM / devfreq: Add timer type to devfreq_summary
>  debugfs
> 
> The commit 4dc3bab8687f ("PM / devfreq: Add support delayed timer for
> polling mode") supports the delayed timer but this commit missed
> the adding the timer type to devfreq_summary debugfs node.
> Add the timer type to devfreq_summary debugfs.
> 
> Fixes: 4dc3bab8687f ("PM / devfreq: Add support delayed timer for polling mode")
> Signed-off-by: Chanwoo Choi <cw00.choi@xxxxxxxxxxx>
> ---
>  drivers/devfreq/devfreq.c | 11 ++++++++---
>  1 file changed, 8 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/devfreq/devfreq.c b/drivers/devfreq/devfreq.c
> index 561d91b2d3bf..071b59fe84d2 100644
> --- a/drivers/devfreq/devfreq.c
> +++ b/drivers/devfreq/devfreq.c
> @@ -1766,20 +1766,23 @@ static int devfreq_summary_show(struct seq_file *s, void *data)
>  	struct devfreq *p_devfreq = NULL;
>  	unsigned long cur_freq, min_freq, max_freq;
>  	unsigned int polling_ms;
> +	unsigned int timer;
>  
> -	seq_printf(s, "%-30s %-30s %-15s %10s %12s %12s %12s\n",
> +	seq_printf(s, "%-30s %-30s %-15s %-10s %10s %12s %12s %12s\n",
>  			"dev",
>  			"parent_dev",
>  			"governor",
> +			"timer",
>  			"polling_ms",
>  			"cur_freq_Hz",
>  			"min_freq_Hz",
>  			"max_freq_Hz");
> -	seq_printf(s, "%30s %30s %15s %10s %12s %12s %12s\n",
> +	seq_printf(s, "%30s %30s %15s %10s %10s %12s %12s %12s\n",
>  			"------------------------------",
>  			"------------------------------",
>  			"---------------",
>  			"----------",
> +			"----------",
>  			"------------",
>  			"------------",
>  			"------------");
> @@ -1803,13 +1806,15 @@ static int devfreq_summary_show(struct seq_file *s, void *data)
>  		cur_freq = devfreq->previous_freq;
>  		get_freq_range(devfreq, &min_freq, &max_freq);
>  		polling_ms = devfreq->profile->polling_ms;
> +		timer = devfreq->profile->timer;
>  		mutex_unlock(&devfreq->lock);
>  
>  		seq_printf(s,
> -			"%-30s %-30s %-15s %10d %12ld %12ld %12ld\n",
> +			"%-30s %-30s %-15s %-10s %10d %12ld %12ld %12ld\n",
>  			dev_name(&devfreq->dev),
>  			p_devfreq ? dev_name(&p_devfreq->dev) : "null",
>  			devfreq->governor_name,
> +			polling_ms ? timer_name[timer] : "null",
>  			polling_ms,
>  			cur_freq,
>  			min_freq,
> -- 
> GitLab
> 
> 
> From 6bf560766a8ef5afe4faa3244220cf5b3a934549 Mon Sep 17 00:00:00 2001
> From: Dan Carpenter <dan.carpenter@xxxxxxxxxx>
> Date: Tue, 8 Sep 2020 10:25:57 +0300
> Subject: [PATCH 058/126] PM / devfreq: tegra30: Disable clock on error in
>  probe
> 
> This error path needs to call clk_disable_unprepare().
> 
> Fixes: 7296443b900e ("PM / devfreq: tegra30: Handle possible round-rate error")
> Signed-off-by: Dan Carpenter <dan.carpenter@xxxxxxxxxx>
> Reviewed-by: Dmitry Osipenko <digetx@xxxxxxxxx>
> Signed-off-by: Dan Carpenter <dan.carpenter@xxxxxxxxxx>
> Signed-off-by: Chanwoo Choi <cw00.choi@xxxxxxxxxxx>
> ---
>  drivers/devfreq/tegra30-devfreq.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/devfreq/tegra30-devfreq.c b/drivers/devfreq/tegra30-devfreq.c
> index e94a27804c20..dedd39de7367 100644
> --- a/drivers/devfreq/tegra30-devfreq.c
> +++ b/drivers/devfreq/tegra30-devfreq.c
> @@ -836,7 +836,8 @@ static int tegra_devfreq_probe(struct platform_device *pdev)
>  	rate = clk_round_rate(tegra->emc_clock, ULONG_MAX);
>  	if (rate < 0) {
>  		dev_err(&pdev->dev, "Failed to round clock rate: %ld\n", rate);
> -		return rate;
> +		err = rate;
> +		goto disable_clk;
>  	}
>  
>  	tegra->max_freq = rate / KHZ;
> @@ -897,6 +898,7 @@ static int tegra_devfreq_probe(struct platform_device *pdev)
>  	dev_pm_opp_remove_all_dynamic(&pdev->dev);
>  
>  	reset_control_reset(tegra->reset);
> +disable_clk:
>  	clk_disable_unprepare(tegra->clock);
>  
>  	return err;
> -- 
> GitLab
> 
> 
> From 16cce04cdb200ba905d1241b425ac48da5a9ace5 Mon Sep 17 00:00:00 2001
> From: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx>
> Date: Wed, 16 Sep 2020 11:50:22 +0100
> Subject: [PATCH 059/126] drm/i915/selftests: Push the fake iommu device from
>  the stack to data
> 
> Since we store a pointer to the fake iommu device that is allocated on
> the stack, as soon as we leave the function it goes out of scope and any
> future dereference is undefined behaviour. Just in case we may need to
> look at the fake iommu device after initialiation, move the allocation
> from the stack into the data.
> 
> Fixes: 01b9d4e21148 ("iommu/vt-d: Use dev_iommu_priv_get/set()")
> Signed-off-by: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx>
> Reviewed-by: Matthew Auld <matthew.auld@xxxxxxxxx>
> Link: https://patchwork.freedesktop.org/patch/msgid/20200916105022.28316-2-chris@xxxxxxxxxxxxxxxxxx
> (cherry picked from commit 9f9f4101fc98db56714e71676d5a1e2d27e01f7e)
> Signed-off-by: Jani Nikula <jani.nikula@xxxxxxxxx>
> ---
>  drivers/gpu/drm/i915/selftests/mock_gem_device.c | 12 +++++-------
>  1 file changed, 5 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/selftests/mock_gem_device.c b/drivers/gpu/drm/i915/selftests/mock_gem_device.c
> index f127e633f7ca..397c313a8b69 100644
> --- a/drivers/gpu/drm/i915/selftests/mock_gem_device.c
> +++ b/drivers/gpu/drm/i915/selftests/mock_gem_device.c
> @@ -118,11 +118,11 @@ static struct dev_pm_domain pm_domain = {
>  
>  struct drm_i915_private *mock_gem_device(void)
>  {
> -	struct drm_i915_private *i915;
> -	struct pci_dev *pdev;
>  #if IS_ENABLED(CONFIG_IOMMU_API) && defined(CONFIG_INTEL_IOMMU)
> -	struct dev_iommu iommu;
> +	static struct dev_iommu fake_iommu = { .priv = (void *)-1 };
>  #endif
> +	struct drm_i915_private *i915;
> +	struct pci_dev *pdev;
>  	int err;
>  
>  	pdev = kzalloc(sizeof(*pdev), GFP_KERNEL);
> @@ -141,10 +141,8 @@ struct drm_i915_private *mock_gem_device(void)
>  	dma_coerce_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64));
>  
>  #if IS_ENABLED(CONFIG_IOMMU_API) && defined(CONFIG_INTEL_IOMMU)
> -	/* HACK HACK HACK to disable iommu for the fake device; force identity mapping */
> -	memset(&iommu, 0, sizeof(iommu));
> -	iommu.priv = (void *)-1;
> -	pdev->dev.iommu = &iommu;
> +	/* HACK to disable iommu for the fake device; force identity mapping */
> +	pdev->dev.iommu = &fake_iommu;
>  #endif
>  
>  	pci_set_drvdata(pdev, i915);
> -- 
> GitLab
> 
> 
> From 955921289dcdbc49b46a731ec07978fb7d4e1fc7 Mon Sep 17 00:00:00 2001
> From: "Rafael J. Wysocki" <rafael.j.wysocki@xxxxxxxxx>
> Date: Wed, 23 Sep 2020 13:50:12 +0200
> Subject: [PATCH 060/126] ACPI: processor: Fix build for
>  ARCH_APICTIMER_STOPS_ON_C3 unset
> 
> Fix the lapic_timer_needs_broadcast() stub for
> ARCH_APICTIMER_STOPS_ON_C3 unset to actually return
> a value.
> 
> Fixes: aa6b43d57f99 ("ACPI: processor: Use CPUIDLE_FLAG_TIMER_STOP")
> Reported-by: Guenter Roeck <linux@xxxxxxxxxxxx>
> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx>
> ---
>  drivers/acpi/processor_idle.c | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/drivers/acpi/processor_idle.c b/drivers/acpi/processor_idle.c
> index 7ecb90e90afd..f66236cff69b 100644
> --- a/drivers/acpi/processor_idle.c
> +++ b/drivers/acpi/processor_idle.c
> @@ -176,6 +176,7 @@ static void lapic_timer_propagate_broadcast(struct acpi_processor *pr) { }
>  static bool lapic_timer_needs_broadcast(struct acpi_processor *pr,
>  					struct acpi_processor_cx *cx)
>  {
> +	return false;
>  }
>  
>  #endif
> -- 
> GitLab
> 
> 
> From b13812ddea615b6507beef24f76540c0c1143c5c Mon Sep 17 00:00:00 2001
> From: Jiaxun Yang <jiaxun.yang@xxxxxxxxxxx>
> Date: Wed, 23 Sep 2020 18:33:12 +0800
> Subject: [PATCH 061/126] MIPS: Loongson2ef: Disable Loongson MMI instructions
> 
> It was missed when I was forking Loongson2ef from Loongson64 but
> should be applied to Loongson2ef as march=loongson2f
> will also enable Loongson MMI in GCC-9+.
> 
> Signed-off-by: Jiaxun Yang <jiaxun.yang@xxxxxxxxxxx>
> Fixes: 71e2f4dd5a65 ("MIPS: Fork loongson2ef from loongson64")
> Reported-by: Thomas Bogendoerfer <tsbogend@xxxxxxxxxxxxxxxx>
> Cc: stable@xxxxxxxxxxxxxxx # v5.8+
> Signed-off-by: Thomas Bogendoerfer <tsbogend@xxxxxxxxxxxxxxxx>
> ---
>  arch/mips/loongson2ef/Platform | 4 ++++
>  1 file changed, 4 insertions(+)
> 
> diff --git a/arch/mips/loongson2ef/Platform b/arch/mips/loongson2ef/Platform
> index 4ab55f1123a0..ae023b9a1c51 100644
> --- a/arch/mips/loongson2ef/Platform
> +++ b/arch/mips/loongson2ef/Platform
> @@ -44,6 +44,10 @@ ifdef CONFIG_CPU_LOONGSON2F_WORKAROUNDS
>    endif
>  endif
>  
> +# Some -march= flags enable MMI instructions, and GCC complains about that
> +# support being enabled alongside -msoft-float. Thus explicitly disable MMI.
> +cflags-y += $(call cc-option,-mno-loongson-mmi)
> +
>  #
>  # Loongson Machines' Support
>  #
> -- 
> GitLab
> 
> 
> From e393fbe6fa27af23f78df6e16a8fd2963578a8c4 Mon Sep 17 00:00:00 2001
> From: Wei Li <liwei391@xxxxxxxxxx>
> Date: Wed, 23 Sep 2020 14:53:12 +0800
> Subject: [PATCH 062/126] MIPS: Add the missing 'CPU_1074K' into
>  __get_cpu_type()
> 
> Commit 442e14a2c55e ("MIPS: Add 1074K CPU support explicitly.") split
> 1074K from the 74K as an unique CPU type, while it missed to add the
> 'CPU_1074K' in __get_cpu_type(). So let's add it back.
> 
> Fixes: 442e14a2c55e ("MIPS: Add 1074K CPU support explicitly.")
> Signed-off-by: Wei Li <liwei391@xxxxxxxxxx>
> Signed-off-by: Thomas Bogendoerfer <tsbogend@xxxxxxxxxxxxxxxx>
> ---
>  arch/mips/include/asm/cpu-type.h | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/arch/mips/include/asm/cpu-type.h b/arch/mips/include/asm/cpu-type.h
> index 75a7a382da09..3288cef4b168 100644
> --- a/arch/mips/include/asm/cpu-type.h
> +++ b/arch/mips/include/asm/cpu-type.h
> @@ -47,6 +47,7 @@ static inline int __pure __get_cpu_type(const int cpu_type)
>  	case CPU_34K:
>  	case CPU_1004K:
>  	case CPU_74K:
> +	case CPU_1074K:
>  	case CPU_M14KC:
>  	case CPU_M14KEC:
>  	case CPU_INTERAPTIV:
> -- 
> GitLab
> 
> 
> From be090fa62080d8501a5651a73cb954721966b125 Mon Sep 17 00:00:00 2001
> From: Wei Li <liwei391@xxxxxxxxxx>
> Date: Wed, 23 Sep 2020 14:53:26 +0800
> Subject: [PATCH 063/126] MIPS: BCM47XX: Remove the needless check with the
>  1074K
> MIME-Version: 1.0
> Content-Type: text/plain; charset=UTF-8
> Content-Transfer-Encoding: 8bit
> 
> As there is no known soc powered by mips 1074K in bcm47xx series,
> the check with 1074K is needless. So just remove it.
> 
> Link: https://wireless.wiki.kernel.org/en/users/Drivers/b43/soc
> Fixes: 442e14a2c55e ("MIPS: Add 1074K CPU support explicitly.")
> Signed-off-by: Wei Li <liwei391@xxxxxxxxxx>
> Acked-by: Rafał Miłecki <rafal@xxxxxxxxxx>
> Signed-off-by: Thomas Bogendoerfer <tsbogend@xxxxxxxxxxxxxxxx>
> ---
>  arch/mips/bcm47xx/setup.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/arch/mips/bcm47xx/setup.c b/arch/mips/bcm47xx/setup.c
> index 82627c264964..01427bde2397 100644
> --- a/arch/mips/bcm47xx/setup.c
> +++ b/arch/mips/bcm47xx/setup.c
> @@ -148,7 +148,7 @@ void __init plat_mem_setup(void)
>  {
>  	struct cpuinfo_mips *c = &current_cpu_data;
>  
> -	if ((c->cputype == CPU_74K) || (c->cputype == CPU_1074K)) {
> +	if (c->cputype == CPU_74K) {
>  		pr_info("Using bcma bus\n");
>  #ifdef CONFIG_BCM47XX_BCMA
>  		bcm47xx_bus_type = BCM47XX_BUS_TYPE_BCMA;
> -- 
> GitLab
> 
> 
> From b96e6506c2ea7c8e3ef0860169b6d0ba2f1aca9f Mon Sep 17 00:00:00 2001
> From: Mohammed Gamal <mgamal@xxxxxxxxxx>
> Date: Thu, 3 Sep 2020 16:11:22 +0200
> Subject: [PATCH 064/126] KVM: x86: VMX: Make smaller physical guest address
>  space support user-configurable
> 
> This patch exposes allow_smaller_maxphyaddr to the user as a module parameter.
> Since smaller physical address spaces are only supported on VMX, the
> parameter is only exposed in the kvm_intel module.
> 
> For now disable support by default, and let the user decide if they want
> to enable it.
> 
> Modifications to VMX page fault and EPT violation handling will depend
> on whether that parameter is enabled.
> 
> Signed-off-by: Mohammed Gamal <mgamal@xxxxxxxxxx>
> Message-Id: <20200903141122.72908-1-mgamal@xxxxxxxxxx>
> Signed-off-by: Paolo Bonzini <pbonzini@xxxxxxxxxx>
> ---
>  arch/x86/kvm/vmx/vmx.c | 15 ++++++++++-----
>  arch/x86/kvm/vmx/vmx.h |  5 ++++-
>  arch/x86/kvm/x86.c     |  2 +-
>  3 files changed, 15 insertions(+), 7 deletions(-)
> 
> diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c
> index 75cd720c9e8c..f0384e93548a 100644
> --- a/arch/x86/kvm/vmx/vmx.c
> +++ b/arch/x86/kvm/vmx/vmx.c
> @@ -129,6 +129,9 @@ static bool __read_mostly enable_preemption_timer = 1;
>  module_param_named(preemption_timer, enable_preemption_timer, bool, S_IRUGO);
>  #endif
>  
> +extern bool __read_mostly allow_smaller_maxphyaddr;
> +module_param(allow_smaller_maxphyaddr, bool, S_IRUGO);
> +
>  #define KVM_VM_CR0_ALWAYS_OFF (X86_CR0_NW | X86_CR0_CD)
>  #define KVM_VM_CR0_ALWAYS_ON_UNRESTRICTED_GUEST X86_CR0_NE
>  #define KVM_VM_CR0_ALWAYS_ON				\
> @@ -4803,6 +4806,7 @@ static int handle_exception_nmi(struct kvm_vcpu *vcpu)
>  			 * EPT will cause page fault only if we need to
>  			 * detect illegal GPAs.
>  			 */
> +			WARN_ON_ONCE(!allow_smaller_maxphyaddr);
>  			kvm_fixup_and_inject_pf_error(vcpu, cr2, error_code);
>  			return 1;
>  		} else
> @@ -5331,7 +5335,7 @@ static int handle_ept_violation(struct kvm_vcpu *vcpu)
>  	 * would also use advanced VM-exit information for EPT violations to
>  	 * reconstruct the page fault error code.
>  	 */
> -	if (unlikely(kvm_mmu_is_illegal_gpa(vcpu, gpa)))
> +	if (unlikely(allow_smaller_maxphyaddr && kvm_mmu_is_illegal_gpa(vcpu, gpa)))
>  		return kvm_emulate_instruction(vcpu, 0);
>  
>  	return kvm_mmu_page_fault(vcpu, gpa, error_code, NULL, 0);
> @@ -8305,11 +8309,12 @@ static int __init vmx_init(void)
>  	vmx_check_vmcs12_offsets();
>  
>  	/*
> -	 * Intel processors don't have problems with
> -	 * GUEST_MAXPHYADDR < HOST_MAXPHYADDR so enable
> -	 * it for VMX by default
> +	 * Shadow paging doesn't have a (further) performance penalty
> +	 * from GUEST_MAXPHYADDR < HOST_MAXPHYADDR so enable it
> +	 * by default
>  	 */
> -	allow_smaller_maxphyaddr = true;
> +	if (!enable_ept)
> +		allow_smaller_maxphyaddr = true;
>  
>  	return 0;
>  }
> diff --git a/arch/x86/kvm/vmx/vmx.h b/arch/x86/kvm/vmx/vmx.h
> index a2f82127c170..a0e47720f60c 100644
> --- a/arch/x86/kvm/vmx/vmx.h
> +++ b/arch/x86/kvm/vmx/vmx.h
> @@ -552,7 +552,10 @@ static inline bool vmx_has_waitpkg(struct vcpu_vmx *vmx)
>  
>  static inline bool vmx_need_pf_intercept(struct kvm_vcpu *vcpu)
>  {
> -	return !enable_ept || cpuid_maxphyaddr(vcpu) < boot_cpu_data.x86_phys_bits;
> +	if (!enable_ept)
> +		return true;
> +
> +	return allow_smaller_maxphyaddr && cpuid_maxphyaddr(vcpu) < boot_cpu_data.x86_phys_bits;
>  }
>  
>  void dump_vmcs(void);
> diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
> index e3de0fe5af37..67362607e396 100644
> --- a/arch/x86/kvm/x86.c
> +++ b/arch/x86/kvm/x86.c
> @@ -188,7 +188,7 @@ static struct kvm_shared_msrs __percpu *shared_msrs;
>  u64 __read_mostly host_efer;
>  EXPORT_SYMBOL_GPL(host_efer);
>  
> -bool __read_mostly allow_smaller_maxphyaddr;
> +bool __read_mostly allow_smaller_maxphyaddr = 0;
>  EXPORT_SYMBOL_GPL(allow_smaller_maxphyaddr);
>  
>  static u64 __read_mostly host_xss;
> -- 
> GitLab
> 
> 
> From 18391e5e9cf59226354a864e5befa3c764eb8903 Mon Sep 17 00:00:00 2001
> From: Yang Weijiang <weijiang.yang@xxxxxxxxx>
> Date: Wed, 26 Aug 2020 09:55:24 +0800
> Subject: [PATCH 065/126] selftests: kvm: Fix assert failure in single-step
>  test
> 
> This is a follow-up patch to fix an issue left in commit:
> 98b0bf02738004829d7e26d6cb47b2e469aaba86
> selftests: kvm: Use a shorter encoding to clear RAX
> 
> With the change in the commit, we also need to modify "xor" instruction
> length from 3 to 2 in array ss_size accordingly to pass below check:
> 
> for (i = 0; i < (sizeof(ss_size) / sizeof(ss_size[0])); i++) {
>         target_rip += ss_size[i];
>         CLEAR_DEBUG();
>         debug.control = KVM_GUESTDBG_ENABLE | KVM_GUESTDBG_SINGLESTEP;
>         debug.arch.debugreg[7] = 0x00000400;
>         APPLY_DEBUG();
>         vcpu_run(vm, VCPU_ID);
>         TEST_ASSERT(run->exit_reason == KVM_EXIT_DEBUG &&
>                     run->debug.arch.exception == DB_VECTOR &&
>                     run->debug.arch.pc == target_rip &&
>                     run->debug.arch.dr6 == target_dr6,
>                     "SINGLE_STEP[%d]: exit %d exception %d rip 0x%llx "
>                     "(should be 0x%llx) dr6 0x%llx (should be 0x%llx)",
>                     i, run->exit_reason, run->debug.arch.exception,
>                     run->debug.arch.pc, target_rip, run->debug.arch.dr6,
>                     target_dr6);
> }
> 
> Reported-by: kernel test robot <rong.a.chen@xxxxxxxxx>
> Signed-off-by: Yang Weijiang <weijiang.yang@xxxxxxxxx>
> Message-Id: <20200826015524.13251-1-weijiang.yang@xxxxxxxxx>
> Signed-off-by: Paolo Bonzini <pbonzini@xxxxxxxxxx>
> ---
>  tools/testing/selftests/kvm/x86_64/debug_regs.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/tools/testing/selftests/kvm/x86_64/debug_regs.c b/tools/testing/selftests/kvm/x86_64/debug_regs.c
> index b8d14f9db5f9..2fc6b3af81a1 100644
> --- a/tools/testing/selftests/kvm/x86_64/debug_regs.c
> +++ b/tools/testing/selftests/kvm/x86_64/debug_regs.c
> @@ -73,7 +73,7 @@ int main(void)
>  	int i;
>  	/* Instruction lengths starting at ss_start */
>  	int ss_size[4] = {
> -		3,		/* xor */
> +		2,		/* xor */
>  		2,		/* cpuid */
>  		5,		/* mov */
>  		2,		/* rdmsr */
> -- 
> GitLab
> 
> 
> From fbb5a79d2fe7b01c6424fbbc04368373b1672d61 Mon Sep 17 00:00:00 2001
> From: Icenowy Zheng <icenowy@xxxxxxx>
> Date: Wed, 23 Sep 2020 08:51:42 +0800
> Subject: [PATCH 066/126] regulator: axp20x: fix LDO2/4 description
> 
> Currently we wrongly set the mask of value of LDO2/4 both to the mask of
> LDO2, and the LDO4 voltage configuration is left untouched. This leads
> to conflict when LDO2/4 are both in use.
> 
> Fix this issue by setting different vsel_mask to both regulators.
> 
> Fixes: db4a555f7c4c ("regulator: axp20x: use defines for masks")
> Signed-off-by: Icenowy Zheng <icenowy@xxxxxxx>
> Link: https://lore.kernel.org/r/20200923005142.147135-1-icenowy@xxxxxxx
> Signed-off-by: Mark Brown <broonie@xxxxxxxxxx>
> ---
>  drivers/regulator/axp20x-regulator.c | 7 ++++---
>  1 file changed, 4 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/regulator/axp20x-regulator.c b/drivers/regulator/axp20x-regulator.c
> index fbc95cadaf53..126649c172e1 100644
> --- a/drivers/regulator/axp20x-regulator.c
> +++ b/drivers/regulator/axp20x-regulator.c
> @@ -42,8 +42,9 @@
>  
>  #define AXP20X_DCDC2_V_OUT_MASK		GENMASK(5, 0)
>  #define AXP20X_DCDC3_V_OUT_MASK		GENMASK(7, 0)
> -#define AXP20X_LDO24_V_OUT_MASK		GENMASK(7, 4)
> +#define AXP20X_LDO2_V_OUT_MASK		GENMASK(7, 4)
>  #define AXP20X_LDO3_V_OUT_MASK		GENMASK(6, 0)
> +#define AXP20X_LDO4_V_OUT_MASK		GENMASK(3, 0)
>  #define AXP20X_LDO5_V_OUT_MASK		GENMASK(7, 4)
>  
>  #define AXP20X_PWR_OUT_EXTEN_MASK	BIT_MASK(0)
> @@ -542,14 +543,14 @@ static const struct regulator_desc axp20x_regulators[] = {
>  		 AXP20X_PWR_OUT_CTRL, AXP20X_PWR_OUT_DCDC3_MASK),
>  	AXP_DESC_FIXED(AXP20X, LDO1, "ldo1", "acin", 1300),
>  	AXP_DESC(AXP20X, LDO2, "ldo2", "ldo24in", 1800, 3300, 100,
> -		 AXP20X_LDO24_V_OUT, AXP20X_LDO24_V_OUT_MASK,
> +		 AXP20X_LDO24_V_OUT, AXP20X_LDO2_V_OUT_MASK,
>  		 AXP20X_PWR_OUT_CTRL, AXP20X_PWR_OUT_LDO2_MASK),
>  	AXP_DESC(AXP20X, LDO3, "ldo3", "ldo3in", 700, 3500, 25,
>  		 AXP20X_LDO3_V_OUT, AXP20X_LDO3_V_OUT_MASK,
>  		 AXP20X_PWR_OUT_CTRL, AXP20X_PWR_OUT_LDO3_MASK),
>  	AXP_DESC_RANGES(AXP20X, LDO4, "ldo4", "ldo24in",
>  			axp20x_ldo4_ranges, AXP20X_LDO4_V_OUT_NUM_VOLTAGES,
> -			AXP20X_LDO24_V_OUT, AXP20X_LDO24_V_OUT_MASK,
> +			AXP20X_LDO24_V_OUT, AXP20X_LDO4_V_OUT_MASK,
>  			AXP20X_PWR_OUT_CTRL, AXP20X_PWR_OUT_LDO4_MASK),
>  	AXP_DESC_IO(AXP20X, LDO5, "ldo5", "ldo5in", 1800, 3300, 100,
>  		    AXP20X_LDO5_V_OUT, AXP20X_LDO5_V_OUT_MASK,
> -- 
> GitLab
> 
> 
> From 530b5affc675ade5db4a03f04ed7cd66806c8a1a Mon Sep 17 00:00:00 2001
> From: Sascha Hauer <s.hauer@xxxxxxxxxxxxxx>
> Date: Wed, 23 Sep 2020 15:10:26 +0200
> Subject: [PATCH 067/126] spi: fsl-dspi: fix use-after-free in remove path
> 
> spi_unregister_controller() not only unregisters the controller, but
> also frees the controller. This will free the driver data with it, so
> we must not access it later dspi_remove().
> 
> Solve this by allocating the driver data separately from the SPI
> controller.
> 
> Signed-off-by: Sascha Hauer <s.hauer@xxxxxxxxxxxxxx>
> Link: https://lore.kernel.org/r/20200923131026.20707-1-s.hauer@xxxxxxxxxxxxxx
> Signed-off-by: Mark Brown <broonie@xxxxxxxxxx>
> ---
>  drivers/spi/spi-fsl-dspi.c | 12 +++++++-----
>  1 file changed, 7 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/spi/spi-fsl-dspi.c b/drivers/spi/spi-fsl-dspi.c
> index 283f2468a2f4..127323a4b27c 100644
> --- a/drivers/spi/spi-fsl-dspi.c
> +++ b/drivers/spi/spi-fsl-dspi.c
> @@ -1273,11 +1273,14 @@ static int dspi_probe(struct platform_device *pdev)
>  	void __iomem *base;
>  	bool big_endian;
>  
> -	ctlr = spi_alloc_master(&pdev->dev, sizeof(struct fsl_dspi));
> +	dspi = devm_kzalloc(&pdev->dev, sizeof(*dspi), GFP_KERNEL);
> +	if (!dspi)
> +		return -ENOMEM;
> +
> +	ctlr = spi_alloc_master(&pdev->dev, 0);
>  	if (!ctlr)
>  		return -ENOMEM;
>  
> -	dspi = spi_controller_get_devdata(ctlr);
>  	dspi->pdev = pdev;
>  	dspi->ctlr = ctlr;
>  
> @@ -1414,7 +1417,7 @@ static int dspi_probe(struct platform_device *pdev)
>  	if (dspi->devtype_data->trans_mode != DSPI_DMA_MODE)
>  		ctlr->ptp_sts_supported = true;
>  
> -	platform_set_drvdata(pdev, ctlr);
> +	platform_set_drvdata(pdev, dspi);
>  
>  	ret = spi_register_controller(ctlr);
>  	if (ret != 0) {
> @@ -1437,8 +1440,7 @@ static int dspi_probe(struct platform_device *pdev)
>  
>  static int dspi_remove(struct platform_device *pdev)
>  {
> -	struct spi_controller *ctlr = platform_get_drvdata(pdev);
> -	struct fsl_dspi *dspi = spi_controller_get_devdata(ctlr);
> +	struct fsl_dspi *dspi = platform_get_drvdata(pdev);
>  
>  	/* Disconnect from the SPI framework */
>  	spi_unregister_controller(dspi->ctlr);
> -- 
> GitLab
> 
> 
> From df3a57d1f6072d07978bafa7dbd9904cdf8f3e13 Mon Sep 17 00:00:00 2001
> From: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>
> Date: Wed, 23 Sep 2020 09:56:59 -0700
> Subject: [PATCH 068/126] mm: split out the non-present case from
>  copy_one_pte()
> 
> This is a purely mechanical split of the copy_one_pte() function.  It's
> not immediately obvious when looking at the diff because of the
> indentation change, but the way to see what is going on in this commit
> is to use the "-w" flag to not show pure whitespace changes, and you see
> how the first part of copy_one_pte() is simply lifted out into a
> separate function.
> 
> And since the non-present case is marked unlikely, don't make the new
> function be inlined.  Not that gcc really seems to care, since it looks
> like it will inline it anyway due to the whole "single callsite for
> static function" logic.  In fact, code generation with the function
> split is almost identical to before.  But not marking it inline is the
> right thing to do.
> 
> This is pure prep-work and cleanup for subsequent changes.
> 
> Signed-off-by: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>
> ---
>  mm/memory.c | 146 ++++++++++++++++++++++++++++------------------------
>  1 file changed, 79 insertions(+), 67 deletions(-)
> 
> diff --git a/mm/memory.c b/mm/memory.c
> index 469af373ae76..31a3ab7d9aa3 100644
> --- a/mm/memory.c
> +++ b/mm/memory.c
> @@ -695,85 +695,98 @@ struct page *vm_normal_page_pmd(struct vm_area_struct *vma, unsigned long addr,
>   * covered by this vma.
>   */
>  
> -static inline unsigned long
> -copy_one_pte(struct mm_struct *dst_mm, struct mm_struct *src_mm,
> +static unsigned long
> +copy_nonpresent_pte(struct mm_struct *dst_mm, struct mm_struct *src_mm,
>  		pte_t *dst_pte, pte_t *src_pte, struct vm_area_struct *vma,
>  		unsigned long addr, int *rss)
>  {
>  	unsigned long vm_flags = vma->vm_flags;
>  	pte_t pte = *src_pte;
>  	struct page *page;
> +	swp_entry_t entry = pte_to_swp_entry(pte);
> +
> +	if (likely(!non_swap_entry(entry))) {
> +		if (swap_duplicate(entry) < 0)
> +			return entry.val;
> +
> +		/* make sure dst_mm is on swapoff's mmlist. */
> +		if (unlikely(list_empty(&dst_mm->mmlist))) {
> +			spin_lock(&mmlist_lock);
> +			if (list_empty(&dst_mm->mmlist))
> +				list_add(&dst_mm->mmlist,
> +						&src_mm->mmlist);
> +			spin_unlock(&mmlist_lock);
> +		}
> +		rss[MM_SWAPENTS]++;
> +	} else if (is_migration_entry(entry)) {
> +		page = migration_entry_to_page(entry);
>  
> -	/* pte contains position in swap or file, so copy. */
> -	if (unlikely(!pte_present(pte))) {
> -		swp_entry_t entry = pte_to_swp_entry(pte);
> -
> -		if (likely(!non_swap_entry(entry))) {
> -			if (swap_duplicate(entry) < 0)
> -				return entry.val;
> -
> -			/* make sure dst_mm is on swapoff's mmlist. */
> -			if (unlikely(list_empty(&dst_mm->mmlist))) {
> -				spin_lock(&mmlist_lock);
> -				if (list_empty(&dst_mm->mmlist))
> -					list_add(&dst_mm->mmlist,
> -							&src_mm->mmlist);
> -				spin_unlock(&mmlist_lock);
> -			}
> -			rss[MM_SWAPENTS]++;
> -		} else if (is_migration_entry(entry)) {
> -			page = migration_entry_to_page(entry);
> -
> -			rss[mm_counter(page)]++;
> -
> -			if (is_write_migration_entry(entry) &&
> -					is_cow_mapping(vm_flags)) {
> -				/*
> -				 * COW mappings require pages in both
> -				 * parent and child to be set to read.
> -				 */
> -				make_migration_entry_read(&entry);
> -				pte = swp_entry_to_pte(entry);
> -				if (pte_swp_soft_dirty(*src_pte))
> -					pte = pte_swp_mksoft_dirty(pte);
> -				if (pte_swp_uffd_wp(*src_pte))
> -					pte = pte_swp_mkuffd_wp(pte);
> -				set_pte_at(src_mm, addr, src_pte, pte);
> -			}
> -		} else if (is_device_private_entry(entry)) {
> -			page = device_private_entry_to_page(entry);
> +		rss[mm_counter(page)]++;
>  
> +		if (is_write_migration_entry(entry) &&
> +				is_cow_mapping(vm_flags)) {
>  			/*
> -			 * Update rss count even for unaddressable pages, as
> -			 * they should treated just like normal pages in this
> -			 * respect.
> -			 *
> -			 * We will likely want to have some new rss counters
> -			 * for unaddressable pages, at some point. But for now
> -			 * keep things as they are.
> +			 * COW mappings require pages in both
> +			 * parent and child to be set to read.
>  			 */
> -			get_page(page);
> -			rss[mm_counter(page)]++;
> -			page_dup_rmap(page, false);
> +			make_migration_entry_read(&entry);
> +			pte = swp_entry_to_pte(entry);
> +			if (pte_swp_soft_dirty(*src_pte))
> +				pte = pte_swp_mksoft_dirty(pte);
> +			if (pte_swp_uffd_wp(*src_pte))
> +				pte = pte_swp_mkuffd_wp(pte);
> +			set_pte_at(src_mm, addr, src_pte, pte);
> +		}
> +	} else if (is_device_private_entry(entry)) {
> +		page = device_private_entry_to_page(entry);
>  
> -			/*
> -			 * We do not preserve soft-dirty information, because so
> -			 * far, checkpoint/restore is the only feature that
> -			 * requires that. And checkpoint/restore does not work
> -			 * when a device driver is involved (you cannot easily
> -			 * save and restore device driver state).
> -			 */
> -			if (is_write_device_private_entry(entry) &&
> -			    is_cow_mapping(vm_flags)) {
> -				make_device_private_entry_read(&entry);
> -				pte = swp_entry_to_pte(entry);
> -				if (pte_swp_uffd_wp(*src_pte))
> -					pte = pte_swp_mkuffd_wp(pte);
> -				set_pte_at(src_mm, addr, src_pte, pte);
> -			}
> +		/*
> +		 * Update rss count even for unaddressable pages, as
> +		 * they should treated just like normal pages in this
> +		 * respect.
> +		 *
> +		 * We will likely want to have some new rss counters
> +		 * for unaddressable pages, at some point. But for now
> +		 * keep things as they are.
> +		 */
> +		get_page(page);
> +		rss[mm_counter(page)]++;
> +		page_dup_rmap(page, false);
> +
> +		/*
> +		 * We do not preserve soft-dirty information, because so
> +		 * far, checkpoint/restore is the only feature that
> +		 * requires that. And checkpoint/restore does not work
> +		 * when a device driver is involved (you cannot easily
> +		 * save and restore device driver state).
> +		 */
> +		if (is_write_device_private_entry(entry) &&
> +		    is_cow_mapping(vm_flags)) {
> +			make_device_private_entry_read(&entry);
> +			pte = swp_entry_to_pte(entry);
> +			if (pte_swp_uffd_wp(*src_pte))
> +				pte = pte_swp_mkuffd_wp(pte);
> +			set_pte_at(src_mm, addr, src_pte, pte);
>  		}
> -		goto out_set_pte;
>  	}
> +	set_pte_at(dst_mm, addr, dst_pte, pte);
> +	return 0;
> +}
> +
> +static inline unsigned long
> +copy_one_pte(struct mm_struct *dst_mm, struct mm_struct *src_mm,
> +		pte_t *dst_pte, pte_t *src_pte, struct vm_area_struct *vma,
> +		unsigned long addr, int *rss)
> +{
> +	unsigned long vm_flags = vma->vm_flags;
> +	pte_t pte = *src_pte;
> +	struct page *page;
> +
> +	/* pte contains position in swap or file, so copy. */
> +	if (unlikely(!pte_present(pte)))
> +		return copy_nonpresent_pte(dst_mm, src_mm,
> +					   dst_pte, src_pte, vma,
> +					   addr, rss);
>  
>  	/*
>  	 * If it's a COW mapping, write protect it both
> @@ -807,7 +820,6 @@ copy_one_pte(struct mm_struct *dst_mm, struct mm_struct *src_mm,
>  		rss[mm_counter(page)]++;
>  	}
>  
> -out_set_pte:
>  	set_pte_at(dst_mm, addr, dst_pte, pte);
>  	return 0;
>  }
> -- 
> GitLab
> 
> 
> From 79a1971c5f14ea3a6e2b0c4caf73a1760db7cab8 Mon Sep 17 00:00:00 2001
> From: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>
> Date: Wed, 23 Sep 2020 10:04:16 -0700
> Subject: [PATCH 069/126] mm: move the copy_one_pte() pte_present check into
>  the caller
> 
> This completes the split of the non-present and present pte cases by
> moving the check for the source pte being present into the single
> caller, which also means that we clearly separate out the very different
> return value case for a non-present pte.
> 
> The present pte case currently always succeeds.
> 
> This is a pure code re-organization with no semantic change: the intent
> is to make it much easier to add a new return case to the present pte
> case for when we do early COW at page table copy time.
> 
> This was split out from the previous commit simply to make it easy to
> visually see that there were no semantic changes from this code
> re-organization.
> 
> Signed-off-by: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>
> ---
>  mm/memory.c | 24 ++++++++++++------------
>  1 file changed, 12 insertions(+), 12 deletions(-)
> 
> diff --git a/mm/memory.c b/mm/memory.c
> index 31a3ab7d9aa3..e315b1f1ef08 100644
> --- a/mm/memory.c
> +++ b/mm/memory.c
> @@ -773,8 +773,8 @@ copy_nonpresent_pte(struct mm_struct *dst_mm, struct mm_struct *src_mm,
>  	return 0;
>  }
>  
> -static inline unsigned long
> -copy_one_pte(struct mm_struct *dst_mm, struct mm_struct *src_mm,
> +static inline void
> +copy_present_pte(struct mm_struct *dst_mm, struct mm_struct *src_mm,
>  		pte_t *dst_pte, pte_t *src_pte, struct vm_area_struct *vma,
>  		unsigned long addr, int *rss)
>  {
> @@ -782,12 +782,6 @@ copy_one_pte(struct mm_struct *dst_mm, struct mm_struct *src_mm,
>  	pte_t pte = *src_pte;
>  	struct page *page;
>  
> -	/* pte contains position in swap or file, so copy. */
> -	if (unlikely(!pte_present(pte)))
> -		return copy_nonpresent_pte(dst_mm, src_mm,
> -					   dst_pte, src_pte, vma,
> -					   addr, rss);
> -
>  	/*
>  	 * If it's a COW mapping, write protect it both
>  	 * in the parent and the child
> @@ -821,7 +815,6 @@ copy_one_pte(struct mm_struct *dst_mm, struct mm_struct *src_mm,
>  	}
>  
>  	set_pte_at(dst_mm, addr, dst_pte, pte);
> -	return 0;
>  }
>  
>  static int copy_pte_range(struct mm_struct *dst_mm, struct mm_struct *src_mm,
> @@ -863,10 +856,17 @@ static int copy_pte_range(struct mm_struct *dst_mm, struct mm_struct *src_mm,
>  			progress++;
>  			continue;
>  		}
> -		entry.val = copy_one_pte(dst_mm, src_mm, dst_pte, src_pte,
> +		if (unlikely(!pte_present(*src_pte))) {
> +			entry.val = copy_nonpresent_pte(dst_mm, src_mm,
> +							dst_pte, src_pte,
>  							vma, addr, rss);
> -		if (entry.val)
> -			break;
> +			if (entry.val)
> +				break;
> +			progress += 8;
> +			continue;
> +		}
> +		copy_present_pte(dst_mm, src_mm, dst_pte, src_pte,
> +				 vma, addr, rss);
>  		progress += 8;
>  	} while (dst_pte++, src_pte++, addr += PAGE_SIZE, addr != end);
>  
> -- 
> GitLab
> 
> 
> From 46d2613eae51d527ecaf0e8248a9bfcc0b92aa7e Mon Sep 17 00:00:00 2001
> From: Chaitanya Kulkarni <chaitanya.kulkarni@xxxxxxx>
> Date: Tue, 22 Sep 2020 12:49:38 -0700
> Subject: [PATCH 070/126] nvme-core: don't use NVME_NSID_ALL for command
>  effects and supported log
> 
> In the function nvme_get_effects_log() it uses NVME_NSID_ALL which has
> namespace scope. The command effect log page is controller specific.
> 
> Replace NVME_NSID_ALL with 0x00 which specifies the controller scope
> instead of namespace scope.
> 
> Fixes: 84fef62d135b ("nvme: check admin passthru command effects")
> Link: https://bugzilla.kernel.org/show_bug.cgi?id=209287
> Reported-by: Huai-Cheng Kuo <hh81478072@xxxxxxxxx>
> Signed-off-by: Chaitanya Kulkarni <chaitanya.kulkarni@xxxxxxx>
> Signed-off-by: Christoph Hellwig <hch@xxxxxx>
> ---
>  drivers/nvme/host/core.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
> index 4cea14c18a6d..53c93836c7c6 100644
> --- a/drivers/nvme/host/core.c
> +++ b/drivers/nvme/host/core.c
> @@ -3041,7 +3041,7 @@ static int nvme_get_effects_log(struct nvme_ctrl *ctrl, u8 csi,
>  	if (!cel)
>  		return -ENOMEM;
>  
> -	ret = nvme_get_log(ctrl, NVME_NSID_ALL, NVME_LOG_CMD_EFFECTS, 0, csi,
> +	ret = nvme_get_log(ctrl, 0x00, NVME_LOG_CMD_EFFECTS, 0, csi,
>  			&cel->log, sizeof(cel->log), 0);
>  	if (ret) {
>  		kfree(cel);
> -- 
> GitLab
> 
> 
> From 86a82ae0b5095ea24c55898a3f025791e7958b21 Mon Sep 17 00:00:00 2001
> From: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
> Date: Wed, 23 Sep 2020 17:46:20 +0200
> Subject: [PATCH 071/126] x86/ioapic: Unbreak check_timer()
> 
> Several people reported in the kernel bugzilla that between v4.12 and v4.13
> the magic which works around broken hardware and BIOSes to find the proper
> timer interrupt delivery mode stopped working for some older affected
> platforms which need to fall back to ExtINT delivery mode.
> 
> The reason is that the core code changed to keep track of the masked and
> disabled state of an interrupt line more accurately to avoid the expensive
> hardware operations.
> 
> That broke an assumption in i8259_make_irq() which invokes
> 
>      disable_irq_nosync();
>      irq_set_chip_and_handler();
>      enable_irq();
> 
> Up to v4.12 this worked because enable_irq() unconditionally unmasked the
> interrupt line, but after the state tracking improvements this is not
> longer the case because the IO/APIC uses lazy disabling. So the line state
> is unmasked which means that enable_irq() does not call into the new irq
> chip to unmask it.
> 
> In principle this is a shortcoming of the core code, but it's more than
> unclear whether the core code should try to reset state. At least this
> cannot be done unconditionally as that would break other existing use cases
> where the chip type is changed, e.g. when changing the trigger type, but
> the callers expect the state to be preserved.
> 
> As the way how check_timer() is switching the delivery modes is truly
> unique, the obvious fix is to simply unmask the i8259 manually after
> changing the mode to ExtINT delivery and switching the irq chip to the
> legacy PIC.
> 
> Note, that the fixes tag is not really precise, but identifies the commit
> which broke the assumptions in the IO/APIC and i8259 code and that's the
> kernel version to which this needs to be backported.
> 
> Fixes: bf22ff45bed6 ("genirq: Avoid unnecessary low level irq function calls")
> Reported-by: p_c_chan@xxxxxxxxxxx
> Reported-by: ecm4@xxxxxxxx
> Reported-by: perdigao1@xxxxxxxxx
> Reported-by: matzes@xxxxxxxxxxxxxxxxxxxxx
> Reported-by: rvelascog@xxxxxxxxx
> Signed-off-by: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
> Tested-by: p_c_chan@xxxxxxxxxxx
> Tested-by: matzes@xxxxxxxxxxxxxxxxxxxxx
> Cc: stable@xxxxxxxxxxxxxxx
> Link: https://bugzilla.kernel.org/show_bug.cgi?id=197769
> ---
>  arch/x86/kernel/apic/io_apic.c | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c
> index 779a89e31c4c..21f9c7f11779 100644
> --- a/arch/x86/kernel/apic/io_apic.c
> +++ b/arch/x86/kernel/apic/io_apic.c
> @@ -2243,6 +2243,7 @@ static inline void __init check_timer(void)
>  	legacy_pic->init(0);
>  	legacy_pic->make_irq(0);
>  	apic_write(APIC_LVT0, APIC_DM_EXTINT);
> +	legacy_pic->unmask(0);
>  
>  	unlock_ExtINT_logic();
>  
> -- 
> GitLab
> 
> 
> From 8bedc98f668110019c7c8aa13fe2faa189d5f8b8 Mon Sep 17 00:00:00 2001
> From: Fedora Kernel Team <kernel-team@xxxxxxxxxxxxxxxxx>
> Date: Thu, 24 Sep 2020 04:28:20 +0000
> Subject: [PATCH 072/126] [redhat]
>  kernel-5.9.0-0.rc6.20200924gitc9c9e6a49f89.14.test
> 
> Signed-off-by: Fedora Kernel Team <kernel-team@xxxxxxxxxxxxxxxxx>
> ---
>  Makefile.rhelver             |  2 +-
>  redhat/kernel.changelog-8.99 | 16 ++++++++++++++++
>  redhat/marker                |  2 +-
>  3 files changed, 18 insertions(+), 2 deletions(-)
> 
> diff --git a/Makefile.rhelver b/Makefile.rhelver
> index e4f22ec46f1e..c11ed05e1444 100644
> --- a/Makefile.rhelver
> +++ b/Makefile.rhelver
> @@ -12,7 +12,7 @@ RHEL_MINOR = 99
>  #
>  # Use this spot to avoid future merge conflicts.
>  # Do not trim this comment.
> -RHEL_RELEASE = 14
> +RHEL_RELEASE = 15
>  
>  #
>  # Early y+1 numbering
> diff --git a/redhat/kernel.changelog-8.99 b/redhat/kernel.changelog-8.99
> index fcc8bb116141..33240850fc7e 100644
> --- a/redhat/kernel.changelog-8.99
> +++ b/redhat/kernel.changelog-8.99
> @@ -1,3 +1,19 @@
> +* Thu Sep 24 2020 Fedora Kernel Team <kernel-team@xxxxxxxxxxxxxxxxx> [5.9.0-0.rc6.20200924gitc9c9e6a49f89.14.test]
> +- c9c9e6a49f89 rebase
> +- mm: move the copy_one_pte() pte_present check into the caller (Linus Torvalds)
> +- mm: split out the non-present case from copy_one_pte() (Linus Torvalds)
> +- Updated changelog for the release based on 805c6d3c1921 (Fedora Kernel Team)
> +- dm crypt: document encrypted keyring key option (Milan Broz)
> +- dm crypt: document new no_workqueue flags (Milan Broz)
> +- btrfs: fix put of uninitialized kobject after seed device delete (Anand Jain)
> +- tools/bootconfig: Add testcase for tailing space (Masami Hiramatsu)
> +- tools/bootconfig: Add testcases for repeated key with brace (Masami Hiramatsu)
> +- lib/bootconfig: Fix to remove tailing spaces after value (Masami Hiramatsu)
> +- lib/bootconfig: Fix a bug of breaking existing tree nodes (Masami Hiramatsu)
> +- dm: fix comment in dm_process_bio() (Mike Snitzer)
> +- dm: fix bio splitting and its bio completion order for regular IO (Mike Snitzer)
> +- btrfs: fix overflow when copying corrupt csums for a message (Johannes Thumshirn)
> +
>  * Wed Sep 23 2020 Fedora Kernel Team <kernel-team@xxxxxxxxxxxxxxxxx> [5.9.0-0.rc6.20200923git805c6d3c1921.14]
>  - Merge ark-patches
>  
> diff --git a/redhat/marker b/redhat/marker
> index 00b038405d0a..68954b9460d2 100644
> --- a/redhat/marker
> +++ b/redhat/marker
> @@ -1 +1 @@
> -805c6d3c1921
> +c9c9e6a49f89
> -- 
> GitLab
> 
> 
> From b7c8976585b780595f02e861b847c19ff9b580b4 Mon Sep 17 00:00:00 2001
> From: Fedora Kernel Team <kernel-team@xxxxxxxxxxxxxxxxx>
> Date: Thu, 24 Sep 2020 04:32:58 +0000
> Subject: [PATCH 073/126] Updated changelog for the release based on
>  c9c9e6a49f89
> 
> ---
>  redhat/kernel.changelog-8.99 | 3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/redhat/kernel.changelog-8.99 b/redhat/kernel.changelog-8.99
> index 33240850fc7e..b7e1d20b422f 100644
> --- a/redhat/kernel.changelog-8.99
> +++ b/redhat/kernel.changelog-8.99
> @@ -1,3 +1,6 @@
> +* Thu Sep 24 2020 Fedora Kernel Team <kernel-team@xxxxxxxxxxxxxxxxx> [5.9.0-0.rc6.20200924gitc9c9e6a49f89.15]
> +- Merge ark-patches
> +
>  * Thu Sep 24 2020 Fedora Kernel Team <kernel-team@xxxxxxxxxxxxxxxxx> [5.9.0-0.rc6.20200924gitc9c9e6a49f89.14.test]
>  - c9c9e6a49f89 rebase
>  - mm: move the copy_one_pte() pte_present check into the caller (Linus Torvalds)
> -- 
> GitLab
> 
> 
> From f7e80983f0cf470bb82036e73bff4d5a7daf8fc2 Mon Sep 17 00:00:00 2001
> From: Christian Borntraeger <borntraeger@xxxxxxxxxx>
> Date: Mon, 21 Sep 2020 12:48:36 +0200
> Subject: [PATCH 074/126] s390/zcrypt: Fix ZCRYPT_PERDEV_REQCNT ioctl
> 
> reqcnt is an u32 pointer but we do copy sizeof(reqcnt) which is the
> size of the pointer. This means we only copy 8 byte. Let us copy
> the full monty.
> 
> Signed-off-by: Christian Borntraeger <borntraeger@xxxxxxxxxx>
> Cc: Harald Freudenberger <freude@xxxxxxxxxxxxx>
> Cc: stable@xxxxxxxxxxxxxxx
> Fixes: af4a72276d49 ("s390/zcrypt: Support up to 256 crypto adapters.")
> Reviewed-by: Harald Freudenberger <freude@xxxxxxxxxxxxx>
> Signed-off-by: Vasily Gorbik <gor@xxxxxxxxxxxxx>
> ---
>  drivers/s390/crypto/zcrypt_api.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/s390/crypto/zcrypt_api.c b/drivers/s390/crypto/zcrypt_api.c
> index 4dbbfd88262c..f314936b5462 100644
> --- a/drivers/s390/crypto/zcrypt_api.c
> +++ b/drivers/s390/crypto/zcrypt_api.c
> @@ -1449,7 +1449,8 @@ static long zcrypt_unlocked_ioctl(struct file *filp, unsigned int cmd,
>  		if (!reqcnt)
>  			return -ENOMEM;
>  		zcrypt_perdev_reqcnt(reqcnt, AP_DEVICES);
> -		if (copy_to_user((int __user *) arg, reqcnt, sizeof(reqcnt)))
> +		if (copy_to_user((int __user *) arg, reqcnt,
> +				 sizeof(u32) * AP_DEVICES))
>  			rc = -EFAULT;
>  		kfree(reqcnt);
>  		return rc;
> -- 
> GitLab
> 
> 
> From 71c548c26de20334cf0d52217de0b02471442e6a Mon Sep 17 00:00:00 2001
> From: Eli Cohen <eli@xxxxxxxxxxxx>
> Date: Tue, 30 Jun 2020 08:29:25 +0300
> Subject: [PATCH 075/126] vhost: Fix documentation
> 
> Fix documentation to match actual function prototypes
> 
> "end" used instead of "last". Fix that.
> 
> Signed-off-by: Eli Cohen <eli@xxxxxxxxxxxx>
> Link: https://lore.kernel.org/r/20200630052925.GA157062@xxxxxxxxxxxxxxxxxxxxxxxxx
> Signed-off-by: Michael S. Tsirkin <mst@xxxxxxxxxx>
> ---
>  drivers/vhost/iotlb.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/vhost/iotlb.c b/drivers/vhost/iotlb.c
> index 34aec4ba331e..0fd3f87e913c 100644
> --- a/drivers/vhost/iotlb.c
> +++ b/drivers/vhost/iotlb.c
> @@ -149,7 +149,7 @@ EXPORT_SYMBOL_GPL(vhost_iotlb_free);
>   * vhost_iotlb_itree_first - return the first overlapped range
>   * @iotlb: the IOTLB
>   * @start: start of IOVA range
> - * @end: end of IOVA range
> + * @last: last byte in IOVA range
>   */
>  struct vhost_iotlb_map *
>  vhost_iotlb_itree_first(struct vhost_iotlb *iotlb, u64 start, u64 last)
> @@ -162,7 +162,7 @@ EXPORT_SYMBOL_GPL(vhost_iotlb_itree_first);
>   * vhost_iotlb_itree_next - return the next overlapped range
>   * @map: the starting map node
>   * @start: start of IOVA range
> - * @end: end of IOVA range
> + * @last: last byte IOVA range
>   */
>  struct vhost_iotlb_map *
>  vhost_iotlb_itree_next(struct vhost_iotlb_map *map, u64 start, u64 last)
> -- 
> GitLab
> 
> 
> From a127c5bbb6a8eee851cbdec254424c480b8edd75 Mon Sep 17 00:00:00 2001
> From: Jason Wang <jasowang@xxxxxxxxxx>
> Date: Mon, 7 Sep 2020 18:43:43 +0800
> Subject: [PATCH 076/126] vhost-vdpa: fix backend feature ioctls
> 
> Commit 653055b9acd4 ("vhost-vdpa: support get/set backend features")
> introduces two malfunction backend features ioctls:
> 
> 1) the ioctls was blindly added to vring ioctl instead of vdpa device
>    ioctl
> 2) vhost_set_backend_features() was called when dev mutex has already
>    been held which will lead a deadlock
> 
> This patch fixes the above issues.
> 
> Cc: Eli Cohen <elic@xxxxxxxxxx>
> Reported-by: Zhu Lingshan <lingshan.zhu@xxxxxxxxx>
> Fixes: 653055b9acd4 ("vhost-vdpa: support get/set backend features")
> Signed-off-by: Jason Wang <jasowang@xxxxxxxxxx>
> Link: https://lore.kernel.org/r/20200907104343.31141-1-jasowang@xxxxxxxxxx
> Signed-off-by: Michael S. Tsirkin <mst@xxxxxxxxxx>
> ---
>  drivers/vhost/vdpa.c | 30 ++++++++++++++++--------------
>  1 file changed, 16 insertions(+), 14 deletions(-)
> 
> diff --git a/drivers/vhost/vdpa.c b/drivers/vhost/vdpa.c
> index 3fab94f88894..796fe979f997 100644
> --- a/drivers/vhost/vdpa.c
> +++ b/drivers/vhost/vdpa.c
> @@ -353,8 +353,6 @@ static long vhost_vdpa_vring_ioctl(struct vhost_vdpa *v, unsigned int cmd,
>  	struct vdpa_callback cb;
>  	struct vhost_virtqueue *vq;
>  	struct vhost_vring_state s;
> -	u64 __user *featurep = argp;
> -	u64 features;
>  	u32 idx;
>  	long r;
>  
> @@ -381,18 +379,6 @@ static long vhost_vdpa_vring_ioctl(struct vhost_vdpa *v, unsigned int cmd,
>  
>  		vq->last_avail_idx = vq_state.avail_index;
>  		break;
> -	case VHOST_GET_BACKEND_FEATURES:
> -		features = VHOST_VDPA_BACKEND_FEATURES;
> -		if (copy_to_user(featurep, &features, sizeof(features)))
> -			return -EFAULT;
> -		return 0;
> -	case VHOST_SET_BACKEND_FEATURES:
> -		if (copy_from_user(&features, featurep, sizeof(features)))
> -			return -EFAULT;
> -		if (features & ~VHOST_VDPA_BACKEND_FEATURES)
> -			return -EOPNOTSUPP;
> -		vhost_set_backend_features(&v->vdev, features);
> -		return 0;
>  	}
>  
>  	r = vhost_vring_ioctl(&v->vdev, cmd, argp);
> @@ -440,8 +426,20 @@ static long vhost_vdpa_unlocked_ioctl(struct file *filep,
>  	struct vhost_vdpa *v = filep->private_data;
>  	struct vhost_dev *d = &v->vdev;
>  	void __user *argp = (void __user *)arg;
> +	u64 __user *featurep = argp;
> +	u64 features;
>  	long r;
>  
> +	if (cmd == VHOST_SET_BACKEND_FEATURES) {
> +		r = copy_from_user(&features, featurep, sizeof(features));
> +		if (r)
> +			return r;
> +		if (features & ~VHOST_VDPA_BACKEND_FEATURES)
> +			return -EOPNOTSUPP;
> +		vhost_set_backend_features(&v->vdev, features);
> +		return 0;
> +	}
> +
>  	mutex_lock(&d->mutex);
>  
>  	switch (cmd) {
> @@ -476,6 +474,10 @@ static long vhost_vdpa_unlocked_ioctl(struct file *filep,
>  	case VHOST_VDPA_SET_CONFIG_CALL:
>  		r = vhost_vdpa_set_config_call(v, argp);
>  		break;
> +	case VHOST_GET_BACKEND_FEATURES:
> +		features = VHOST_VDPA_BACKEND_FEATURES;
> +		r = copy_to_user(featurep, &features, sizeof(features));
> +		break;
>  	default:
>  		r = vhost_dev_ioctl(&v->vdev, cmd, argp);
>  		if (r == -ENOIOCTLCMD)
> -- 
> GitLab
> 
> 
> From 00fb259c618ea1198fc51b53a6167aa0d78672a9 Mon Sep 17 00:00:00 2001
> From: Ray Jui <ray.jui@xxxxxxxxxxxx>
> Date: Thu, 10 Sep 2020 08:25:38 -0700
> Subject: [PATCH 077/126] spi: bcm-qspi: Fix probe regression on iProc
>  platforms
> 
> iProc chips have QSPI controller that does not have the MSPI_REV
> offset. Reading from that offset will cause a bus error. Fix it by
> having MSPI_REV query disabled in the generic compatible string.
> 
> Fixes: 3a01f04d74ef ("spi: bcm-qspi: Handle lack of MSPI_REV offset")
> Link: https://lore.kernel.org/linux-arm-kernel/20200909211857.4144718-1-f.fainelli@xxxxxxxxx/T/#u
> Signed-off-by: Ray Jui <ray.jui@xxxxxxxxxxxx>
> Acked-by: Florian Fainelli <f.fainelli@xxxxxxxxx>
> Link: https://lore.kernel.org/r/20200910152539.45584-3-ray.jui@xxxxxxxxxxxx
> Signed-off-by: Mark Brown <broonie@xxxxxxxxxx>
> ---
>  drivers/spi/spi-bcm-qspi.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/spi/spi-bcm-qspi.c b/drivers/spi/spi-bcm-qspi.c
> index 681d09085175..9cfa15ec8b08 100644
> --- a/drivers/spi/spi-bcm-qspi.c
> +++ b/drivers/spi/spi-bcm-qspi.c
> @@ -1295,7 +1295,7 @@ static const struct of_device_id bcm_qspi_of_match[] = {
>  	},
>  	{
>  		.compatible = "brcm,spi-bcm-qspi",
> -		.data = &bcm_qspi_rev_data,
> +		.data = &bcm_qspi_no_rev_data,
>  	},
>  	{
>  		.compatible = "brcm,spi-bcm7216-qspi",
> -- 
> GitLab
> 
> 
> From be068f29034fb00530a053d18b8cf140c32b12b3 Mon Sep 17 00:00:00 2001
> From: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>
> Date: Thu, 24 Sep 2020 08:41:32 -0700
> Subject: [PATCH 078/126] mm: fix misplaced unlock_page in do_wp_page()
> 
> Commit 09854ba94c6a ("mm: do_wp_page() simplification") reorganized all
> the code around the page re-use vs copy, but in the process also moved
> the final unlock_page() around to after the wp_page_reuse() call.
> 
> That normally doesn't matter - but it means that the unlock_page() is
> now done after releasing the page table lock.  Again, not a big deal,
> you'd think.
> 
> But it turns out that it's very wrong indeed, because once we've
> released the page table lock, we've basically lost our only reference to
> the page - the page tables - and it could now be free'd at any time.  We
> do hold the mmap_sem, so no actual unmap() can happen, but madvise can
> come in and a MADV_DONTNEED will zap the page range - and free the page.
> 
> So now the page may be free'd just as we're unlocking it, which in turn
> will usually trigger a "Bad page state" error in the freeing path.  To
> make matters more confusing, by the time the debug code prints out the
> page state, the unlock has typically completed and everything looks fine
> again.
> 
> This all doesn't happen in any normal situations, but it does trigger
> with the dirtyc0w_child LTP test.  And it seems to trigger much more
> easily (but not expclusively) on s390 than elsewhere, probably because
> s390 doesn't do the "batch pages up for freeing after the TLB flush"
> that gives the unlock_page() more time to complete and makes the race
> harder to hit.
> 
> Fixes: 09854ba94c6a ("mm: do_wp_page() simplification")
> Link: https://lore.kernel.org/lkml/a46e9bbef2ed4e17778f5615e818526ef848d791.camel@xxxxxxxxxx/
> Link: https://lore.kernel.org/linux-mm/c41149a8-211e-390b-af1d-d5eee690fecb@xxxxxxxxxxxxxxxxx/
> Reported-by: Qian Cai <cai@xxxxxxxxxx>
> Reported-by: Alex Shi <alex.shi@xxxxxxxxxxxxxxxxx>
> Bisected-and-analyzed-by: Gerald Schaefer <gerald.schaefer@xxxxxxxxxxxxx>
> Tested-by: Gerald Schaefer <gerald.schaefer@xxxxxxxxxxxxx>
> Signed-off-by: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>
> ---
>  mm/memory.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/mm/memory.c b/mm/memory.c
> index e315b1f1ef08..f3eb55975902 100644
> --- a/mm/memory.c
> +++ b/mm/memory.c
> @@ -2967,8 +2967,8 @@ static vm_fault_t do_wp_page(struct vm_fault *vmf)
>  		 * page count reference, and the page is locked,
>  		 * it's dark out, and we're wearing sunglasses. Hit it.
>  		 */
> -		wp_page_reuse(vmf);
>  		unlock_page(page);
> +		wp_page_reuse(vmf);
>  		return VM_FAULT_WRITE;
>  	} else if (unlikely((vma->vm_flags & (VM_WRITE|VM_SHARED)) ==
>  					(VM_WRITE|VM_SHARED))) {
> -- 
> GitLab
> 
> 
> From 516d980f85415d76ae3d0d2a871eb20243f46c95 Mon Sep 17 00:00:00 2001
> From: Masahiro Yamada <masahiroy@xxxxxxxxxx>
> Date: Wed, 23 Sep 2020 02:48:56 +0900
> Subject: [PATCH 079/126] scripts/kallsyms: skip ppc compiler stub
>  *.long_branch.* / *.plt_branch.*
> 
> PowerPC allmodconfig often fails to build as follows:
> 
>     LD      .tmp_vmlinux.kallsyms1
>     KSYM    .tmp_vmlinux.kallsyms1.o
>     LD      .tmp_vmlinux.kallsyms2
>     KSYM    .tmp_vmlinux.kallsyms2.o
>     LD      .tmp_vmlinux.kallsyms3
>     KSYM    .tmp_vmlinux.kallsyms3.o
>     LD      vmlinux
>     SORTTAB vmlinux
>     SYSMAP  System.map
>   Inconsistent kallsyms data
>   Try make KALLSYMS_EXTRA_PASS=1 as a workaround
>   make[2]: *** [../Makefile:1162: vmlinux] Error 1
> 
> Setting KALLSYMS_EXTRA_PASS=1 does not help.
> 
> This is caused by the compiler inserting stubs such as *.long_branch.*
> and *.plt_branch.*
> 
>   $ powerpc-linux-nm -n .tmp_vmlinux.kallsyms2
>    [ snip ]
>   c00000000210c010 t 00000075.plt_branch.da9:19
>   c00000000210c020 t 00000075.plt_branch.1677:5
>   c00000000210c030 t 00000075.long_branch.memmove
>   c00000000210c034 t 00000075.plt_branch.9e0:5
>   c00000000210c044 t 00000075.plt_branch.free_initrd_mem
>     ...
> 
> Actually, the problem mentioned in scripts/link-vmlinux.sh comments;
> "In theory it's possible this results in even more stubs, but unlikely"
> is happening here, and ends up with another kallsyms step required.
> 
> scripts/kallsyms.c already ignores various compiler stubs. Let's do
> similar to make kallsysms for PowerPC always succeed in 2 steps.
> 
> Reported-by: Guenter Roeck <linux@xxxxxxxxxxxx>
> Signed-off-by: Masahiro Yamada <masahiroy@xxxxxxxxxx>
> Tested-by: Guenter Roeck <linux@xxxxxxxxxxxx>
> ---
>  scripts/kallsyms.c | 16 +++++++++++++++-
>  1 file changed, 15 insertions(+), 1 deletion(-)
> 
> diff --git a/scripts/kallsyms.c b/scripts/kallsyms.c
> index 0096cd965332..7ecd2ccba531 100644
> --- a/scripts/kallsyms.c
> +++ b/scripts/kallsyms.c
> @@ -82,6 +82,7 @@ static char *sym_name(const struct sym_entry *s)
>  
>  static bool is_ignored_symbol(const char *name, char type)
>  {
> +	/* Symbol names that exactly match to the following are ignored.*/
>  	static const char * const ignored_symbols[] = {
>  		/*
>  		 * Symbols which vary between passes. Passes 1 and 2 must have
> @@ -104,6 +105,7 @@ static bool is_ignored_symbol(const char *name, char type)
>  		NULL
>  	};
>  
> +	/* Symbol names that begin with the following are ignored.*/
>  	static const char * const ignored_prefixes[] = {
>  		"$",			/* local symbols for ARM, MIPS, etc. */
>  		".LASANPC",		/* s390 kasan local symbols */
> @@ -113,6 +115,7 @@ static bool is_ignored_symbol(const char *name, char type)
>  		NULL
>  	};
>  
> +	/* Symbol names that end with the following are ignored.*/
>  	static const char * const ignored_suffixes[] = {
>  		"_from_arm",		/* arm */
>  		"_from_thumb",		/* arm */
> @@ -120,9 +123,15 @@ static bool is_ignored_symbol(const char *name, char type)
>  		NULL
>  	};
>  
> +	/* Symbol names that contain the following are ignored.*/
> +	static const char * const ignored_matches[] = {
> +		".long_branch.",	/* ppc stub */
> +		".plt_branch.",		/* ppc stub */
> +		NULL
> +	};
> +
>  	const char * const *p;
>  
> -	/* Exclude symbols which vary between passes. */
>  	for (p = ignored_symbols; *p; p++)
>  		if (!strcmp(name, *p))
>  			return true;
> @@ -138,6 +147,11 @@ static bool is_ignored_symbol(const char *name, char type)
>  			return true;
>  	}
>  
> +	for (p = ignored_matches; *p; p++) {
> +		if (strstr(name, *p))
> +			return true;
> +	}
> +
>  	if (type == 'U' || type == 'u')
>  		return true;
>  	/* exclude debugging symbols */
> -- 
> GitLab
> 
> 
> From ee6fa053019478918ca15eadaa93e516ddb9da8d Mon Sep 17 00:00:00 2001
> From: Maxim Levitsky <mlevitsk@xxxxxxxxxx>
> Date: Mon, 21 Sep 2020 13:38:05 +0300
> Subject: [PATCH 080/126] KVM: x86: fix MSR_IA32_TSC read for nested migration
> 
> MSR reads/writes should always access the L1 state, since the (nested)
> hypervisor should intercept all the msrs it wants to adjust, and these
> that it doesn't should be read by the guest as if the host had read it.
> 
> However IA32_TSC is an exception. Even when not intercepted, guest still
> reads the value + TSC offset.
> The write however does not take any TSC offset into account.
> 
> This is documented in Intel's SDM and seems also to happen on AMD as well.
> 
> This creates a problem when userspace wants to read the IA32_TSC value and then
> write it. (e.g for migration)
> 
> In this case it reads L2 value but write is interpreted as an L1 value.
> To fix this make the userspace initiated reads of IA32_TSC return L1 value
> as well.
> 
> Huge thanks to Dave Gilbert for helping me understand this very confusing
> semantic of MSR writes.
> 
> Signed-off-by: Maxim Levitsky <mlevitsk@xxxxxxxxxx>
> Message-Id: <20200921103805.9102-2-mlevitsk@xxxxxxxxxx>
> Signed-off-by: Paolo Bonzini <pbonzini@xxxxxxxxxx>
> ---
>  arch/x86/kvm/x86.c | 17 +++++++++++++++--
>  1 file changed, 15 insertions(+), 2 deletions(-)
> 
> diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
> index 67362607e396..e3fe1d126cc3 100644
> --- a/arch/x86/kvm/x86.c
> +++ b/arch/x86/kvm/x86.c
> @@ -3224,9 +3224,22 @@ int kvm_get_msr_common(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
>  	case MSR_IA32_POWER_CTL:
>  		msr_info->data = vcpu->arch.msr_ia32_power_ctl;
>  		break;
> -	case MSR_IA32_TSC:
> -		msr_info->data = kvm_scale_tsc(vcpu, rdtsc()) + vcpu->arch.tsc_offset;
> +	case MSR_IA32_TSC: {
> +		/*
> +		 * Intel SDM states that MSR_IA32_TSC read adds the TSC offset
> +		 * even when not intercepted. AMD manual doesn't explicitly
> +		 * state this but appears to behave the same.
> +		 *
> +		 * On userspace reads and writes, however, we unconditionally
> +		 * operate L1's TSC value to ensure backwards-compatible
> +		 * behavior for migration.
> +		 */
> +		u64 tsc_offset = msr_info->host_initiated ? vcpu->arch.l1_tsc_offset :
> +							    vcpu->arch.tsc_offset;
> +
> +		msr_info->data = kvm_scale_tsc(vcpu, rdtsc()) + tsc_offset;
>  		break;
> +	}
>  	case MSR_MTRRcap:
>  	case 0x200 ... 0x2ff:
>  		return kvm_mtrr_get_msr(vcpu, msr_info->index, &msr_info->data);
> -- 
> GitLab
> 
> 
> From af5d6c1016487ef4b5aa780062fa000f802580d4 Mon Sep 17 00:00:00 2001
> From: Fedora Kernel Team <kernel-team@xxxxxxxxxxxxxxxxx>
> Date: Fri, 25 Sep 2020 04:28:32 +0000
> Subject: [PATCH 081/126] [redhat]
>  kernel-5.9.0-0.rc6.20200925git171d4ff79f96.15.test
> 
> Signed-off-by: Fedora Kernel Team <kernel-team@xxxxxxxxxxxxxxxxx>
> ---
>  Makefile.rhelver             |  2 +-
>  redhat/kernel.changelog-8.99 | 15 +++++++++++++++
>  redhat/marker                |  2 +-
>  3 files changed, 17 insertions(+), 2 deletions(-)
> 
> diff --git a/Makefile.rhelver b/Makefile.rhelver
> index c11ed05e1444..98f70a2f0f06 100644
> --- a/Makefile.rhelver
> +++ b/Makefile.rhelver
> @@ -12,7 +12,7 @@ RHEL_MINOR = 99
>  #
>  # Use this spot to avoid future merge conflicts.
>  # Do not trim this comment.
> -RHEL_RELEASE = 15
> +RHEL_RELEASE = 16
>  
>  #
>  # Early y+1 numbering
> diff --git a/redhat/kernel.changelog-8.99 b/redhat/kernel.changelog-8.99
> index b7e1d20b422f..21a5f7b65085 100644
> --- a/redhat/kernel.changelog-8.99
> +++ b/redhat/kernel.changelog-8.99
> @@ -1,3 +1,18 @@
> +* Fri Sep 25 2020 Fedora Kernel Team <kernel-team@xxxxxxxxxxxxxxxxx> [5.9.0-0.rc6.20200925git171d4ff79f96.15.test]
> +- 171d4ff79f96 rebase
> +- mm: fix misplaced unlock_page in do_wp_page() (Linus Torvalds)
> +- Updated changelog for the release based on c9c9e6a49f89 (Fedora Kernel Team)
> +- Revert "ALSA: usb-audio: Disable Lenovo P620 Rear line-in volume control" (Kai-Heng Feng)
> +- media: dt-bindings: media: imx274: Convert to json-schema (Jacopo Mondi)
> +- Revert "ALSA: hda - Fix silent audio output and corrupted input on MSI X570-A PRO" (Takashi Iwai)
> +- ALSA: usb-audio: Add delay quirk for H570e USB headsets (Joakim Tjernlund)
> +- ALSA: hda/realtek: Enable front panel headset LED on Lenovo ThinkStation P520 (Kai-Heng Feng)
> +- ALSA: hda/realtek - Couldn't detect Mic if booting with headset plugged (Hui Wang)
> +- ALSA: asihpi: fix iounmap in error handler (Tom Rix)
> +- media: media/v4l2: remove V4L2_FLAG_MEMORY_NON_CONSISTENT flag (Sergey Senozhatsky)
> +- mmc: mmc_spi: Fix mmc_spi_dma_alloc() return type for !HAS_DMA (Geert Uytterhoeven)
> +- media: cec-adap.c: don't use flush_scheduled_work() (Hans Verkuil)
> +
>  * Thu Sep 24 2020 Fedora Kernel Team <kernel-team@xxxxxxxxxxxxxxxxx> [5.9.0-0.rc6.20200924gitc9c9e6a49f89.15]
>  - Merge ark-patches
>  
> diff --git a/redhat/marker b/redhat/marker
> index 68954b9460d2..783055722c2a 100644
> --- a/redhat/marker
> +++ b/redhat/marker
> @@ -1 +1 @@
> -c9c9e6a49f89
> +171d4ff79f96
> -- 
> GitLab
> 
> 
> From 7e9806012360a38e4d61366aa12729bbd03419d1 Mon Sep 17 00:00:00 2001
> From: Fedora Kernel Team <kernel-team@xxxxxxxxxxxxxxxxx>
> Date: Fri, 25 Sep 2020 04:33:20 +0000
> Subject: [PATCH 082/126] Updated changelog for the release based on
>  171d4ff79f96
> 
> ---
>  redhat/kernel.changelog-8.99 | 3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/redhat/kernel.changelog-8.99 b/redhat/kernel.changelog-8.99
> index 21a5f7b65085..74300d4ea7aa 100644
> --- a/redhat/kernel.changelog-8.99
> +++ b/redhat/kernel.changelog-8.99
> @@ -1,3 +1,6 @@
> +* Fri Sep 25 2020 Fedora Kernel Team <kernel-team@xxxxxxxxxxxxxxxxx> [5.9.0-0.rc6.20200925git171d4ff79f96.16]
> +- Merge ark-patches
> +
>  * Fri Sep 25 2020 Fedora Kernel Team <kernel-team@xxxxxxxxxxxxxxxxx> [5.9.0-0.rc6.20200925git171d4ff79f96.15.test]
>  - 171d4ff79f96 rebase
>  - mm: fix misplaced unlock_page in do_wp_page() (Linus Torvalds)
> -- 
> GitLab
> 
> 
> From 8d214c481611b29458a57913bd786f0ac06f0605 Mon Sep 17 00:00:00 2001
> From: Sean Christopherson <sean.j.christopherson@xxxxxxxxx>
> Date: Wed, 23 Sep 2020 14:53:52 -0700
> Subject: [PATCH 083/126] KVM: x86: Reset MMU context if guest toggles CR4.SMAP
>  or CR4.PKE
> 
> Reset the MMU context during kvm_set_cr4() if SMAP or PKE is toggled.
> Recent commits to (correctly) not reload PDPTRs when SMAP/PKE are
> toggled inadvertantly skipped the MMU context reset due to the mask
> of bits that triggers PDPTR loads also being used to trigger MMU context
> resets.
> 
> Fixes: 427890aff855 ("kvm: x86: Toggling CR4.SMAP does not load PDPTEs in PAE mode")
> Fixes: cb957adb4ea4 ("kvm: x86: Toggling CR4.PKE does not load PDPTEs in PAE mode")
> Cc: Jim Mattson <jmattson@xxxxxxxxxx>
> Cc: Peter Shier <pshier@xxxxxxxxxx>
> Cc: Oliver Upton <oupton@xxxxxxxxxx>
> Signed-off-by: Sean Christopherson <sean.j.christopherson@xxxxxxxxx>
> Message-Id: <20200923215352.17756-1-sean.j.christopherson@xxxxxxxxx>
> Signed-off-by: Paolo Bonzini <pbonzini@xxxxxxxxxx>
> ---
>  arch/x86/kvm/x86.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
> index e3fe1d126cc3..58fa354b1446 100644
> --- a/arch/x86/kvm/x86.c
> +++ b/arch/x86/kvm/x86.c
> @@ -976,6 +976,7 @@ int kvm_set_cr4(struct kvm_vcpu *vcpu, unsigned long cr4)
>  	unsigned long old_cr4 = kvm_read_cr4(vcpu);
>  	unsigned long pdptr_bits = X86_CR4_PGE | X86_CR4_PSE | X86_CR4_PAE |
>  				   X86_CR4_SMEP;
> +	unsigned long mmu_role_bits = pdptr_bits | X86_CR4_SMAP | X86_CR4_PKE;
>  
>  	if (kvm_valid_cr4(vcpu, cr4))
>  		return 1;
> @@ -1003,7 +1004,7 @@ int kvm_set_cr4(struct kvm_vcpu *vcpu, unsigned long cr4)
>  	if (kvm_x86_ops.set_cr4(vcpu, cr4))
>  		return 1;
>  
> -	if (((cr4 ^ old_cr4) & pdptr_bits) ||
> +	if (((cr4 ^ old_cr4) & mmu_role_bits) ||
>  	    (!(cr4 & X86_CR4_PCIDE) && (old_cr4 & X86_CR4_PCIDE)))
>  		kvm_mmu_reset_context(vcpu);
>  
> -- 
> GitLab
> 
> 
> From f3cd4850504ff612d0ea77a0aaf29b66c98fcefe Mon Sep 17 00:00:00 2001
> From: Jens Axboe <axboe@xxxxxxxxx>
> Date: Thu, 24 Sep 2020 14:55:54 -0600
> Subject: [PATCH 084/126] io_uring: ensure open/openat2 name is cleaned on
>  cancelation
> 
> If we cancel these requests, we'll leak the memory associated with the
> filename. Add them to the table of ops that need cleaning, if
> REQ_F_NEED_CLEANUP is set.
> 
> Cc: stable@xxxxxxxxxxxxxxx
> Fixes: e62753e4e292 ("io_uring: call statx directly")
> Reviewed-by: Stefano Garzarella <sgarzare@xxxxxxxxxx>
> Signed-off-by: Jens Axboe <axboe@xxxxxxxxx>
> ---
>  fs/io_uring.c | 5 +++++
>  1 file changed, 5 insertions(+)
> 
> diff --git a/fs/io_uring.c b/fs/io_uring.c
> index e6004b92e553..0ab16df31288 100644
> --- a/fs/io_uring.c
> +++ b/fs/io_uring.c
> @@ -5671,6 +5671,11 @@ static void __io_clean_op(struct io_kiocb *req)
>  			io_put_file(req, req->splice.file_in,
>  				    (req->splice.flags & SPLICE_F_FD_IN_FIXED));
>  			break;
> +		case IORING_OP_OPENAT:
> +		case IORING_OP_OPENAT2:
> +			if (req->open.filename)
> +				putname(req->open.filename);
> +			break;
>  		}
>  		req->flags &= ~REQ_F_NEED_CLEANUP;
>  	}
> -- 
> GitLab
> 
> 
> From 3aab91774bbd8e571cfaddaf839aafd07718333c Mon Sep 17 00:00:00 2001
> From: Jeffle Xu <jefflexu@xxxxxxxxxxxxxxxxx>
> Date: Fri, 25 Sep 2020 14:00:31 +0800
> Subject: [PATCH 085/126] block: remove unused BLK_QC_T_EAGAIN flag
> 
> commit 7b6620d7db56 ("block: remove REQ_NOWAIT_INLINE") removed the
> REQ_NOWAIT_INLINE related code, but the diff wasn't applied to
> blk_types.h somehow.
> 
> Then commit 2771cefeac49 ("block: remove the REQ_NOWAIT_INLINE flag")
> removed the REQ_NOWAIT_INLINE flag while the BLK_QC_T_EAGAIN flag still
> remains.
> 
> Fixes: 7b6620d7db56 ("block: remove REQ_NOWAIT_INLINE")
> Signed-off-by: Jeffle Xu <jefflexu@xxxxxxxxxxxxxxxxx>
> Signed-off-by: Jens Axboe <axboe@xxxxxxxxx>
> ---
>  include/linux/blk_types.h | 3 +--
>  1 file changed, 1 insertion(+), 2 deletions(-)
> 
> diff --git a/include/linux/blk_types.h b/include/linux/blk_types.h
> index 4ecf4fed171f..b3fc5d3dd8ea 100644
> --- a/include/linux/blk_types.h
> +++ b/include/linux/blk_types.h
> @@ -497,13 +497,12 @@ static inline int op_stat_group(unsigned int op)
>  
>  typedef unsigned int blk_qc_t;
>  #define BLK_QC_T_NONE		-1U
> -#define BLK_QC_T_EAGAIN		-2U
>  #define BLK_QC_T_SHIFT		16
>  #define BLK_QC_T_INTERNAL	(1U << 31)
>  
>  static inline bool blk_qc_t_valid(blk_qc_t cookie)
>  {
> -	return cookie != BLK_QC_T_NONE && cookie != BLK_QC_T_EAGAIN;
> +	return cookie != BLK_QC_T_NONE;
>  }
>  
>  static inline unsigned int blk_qc_t_to_queue_num(blk_qc_t cookie)
> -- 
> GitLab
> 
> 
> From 62c774ed483174b994c79e0c9f596b315f1ddfaf Mon Sep 17 00:00:00 2001
> From: Jens Axboe <axboe@xxxxxxxxx>
> Date: Fri, 25 Sep 2020 09:01:53 -0600
> Subject: [PATCH 086/126] io_uring: don't unconditionally set plug->nowait =
>  true
> 
> This causes all the bios to be submitted with REQ_NOWAIT, which can be
> problematic on either btrfs or on file systems that otherwise use a mix
> of block devices where only some of them support it.
> 
> For now, just remove the setting of plug->nowait = true.
> 
> Reported-by: Dan Melnic <dmm@xxxxxx>
> Reported-by: Brian Foster <bfoster@xxxxxxxxxx>
> Fixes: b63534c41e20 ("io_uring: re-issue block requests that failed because of resources")
> Signed-off-by: Jens Axboe <axboe@xxxxxxxxx>
> ---
>  fs/io_uring.c | 3 ---
>  1 file changed, 3 deletions(-)
> 
> diff --git a/fs/io_uring.c b/fs/io_uring.c
> index 0ab16df31288..ad828fa19af4 100644
> --- a/fs/io_uring.c
> +++ b/fs/io_uring.c
> @@ -6353,9 +6353,6 @@ static void io_submit_state_start(struct io_submit_state *state,
>  				  struct io_ring_ctx *ctx, unsigned int max_ios)
>  {
>  	blk_start_plug(&state->plug);
> -#ifdef CONFIG_BLOCK
> -	state->plug.nowait = true;
> -#endif
>  	state->comp.nr = 0;
>  	INIT_LIST_HEAD(&state->comp.list);
>  	state->comp.ctx = ctx;
> -- 
> GitLab
> 
> 
> From 4bb05f30483fd21ea5413eaf1182768f251cf625 Mon Sep 17 00:00:00 2001
> From: Tom Lendacky <thomas.lendacky@xxxxxxx>
> Date: Thu, 24 Sep 2020 13:41:57 -0500
> Subject: [PATCH 087/126] KVM: SVM: Add a dedicated INVD intercept routine
> 
> The INVD instruction intercept performs emulation. Emulation can't be done
> on an SEV guest because the guest memory is encrypted.
> 
> Provide a dedicated intercept routine for the INVD intercept. And since
> the instruction is emulated as a NOP, just skip it instead.
> 
> Fixes: 1654efcbc431 ("KVM: SVM: Add KVM_SEV_INIT command")
> Signed-off-by: Tom Lendacky <thomas.lendacky@xxxxxxx>
> Message-Id: <a0b9a19ffa7fef86a3cc700c7ea01cb2731e04e5.1600972918.git.thomas.lendacky@xxxxxxx>
> Signed-off-by: Paolo Bonzini <pbonzini@xxxxxxxxxx>
> ---
>  arch/x86/kvm/svm/svm.c | 8 +++++++-
>  1 file changed, 7 insertions(+), 1 deletion(-)
> 
> diff --git a/arch/x86/kvm/svm/svm.c b/arch/x86/kvm/svm/svm.c
> index 5764b87379cf..d4e18bda19c7 100644
> --- a/arch/x86/kvm/svm/svm.c
> +++ b/arch/x86/kvm/svm/svm.c
> @@ -2183,6 +2183,12 @@ static int iret_interception(struct vcpu_svm *svm)
>  	return 1;
>  }
>  
> +static int invd_interception(struct vcpu_svm *svm)
> +{
> +	/* Treat an INVD instruction as a NOP and just skip it. */
> +	return kvm_skip_emulated_instruction(&svm->vcpu);
> +}
> +
>  static int invlpg_interception(struct vcpu_svm *svm)
>  {
>  	if (!static_cpu_has(X86_FEATURE_DECODEASSISTS))
> @@ -2774,7 +2780,7 @@ static int (*const svm_exit_handlers[])(struct vcpu_svm *svm) = {
>  	[SVM_EXIT_RDPMC]			= rdpmc_interception,
>  	[SVM_EXIT_CPUID]			= cpuid_interception,
>  	[SVM_EXIT_IRET]                         = iret_interception,
> -	[SVM_EXIT_INVD]                         = emulate_on_interception,
> +	[SVM_EXIT_INVD]                         = invd_interception,
>  	[SVM_EXIT_PAUSE]			= pause_interception,
>  	[SVM_EXIT_HLT]				= halt_interception,
>  	[SVM_EXIT_INVLPG]			= invlpg_interception,
> -- 
> GitLab
> 
> 
> From cb91cb092b51196cffb69867f0d638c38e5ad7d1 Mon Sep 17 00:00:00 2001
> From: Don Zickus <dzickus@xxxxxxxxxx>
> Date: Thu, 24 Sep 2020 17:38:29 -0400
> Subject: [PATCH 088/126] Merge Upstream script fixes
> 
> As part of splitting the merge-upstream and release stages apart,
> the merge upstream wasn't working quite right.  These are cleanup
> fixes to fix that.
> 
> The main change is to drop the ark rebase patches script.  Running
> that through a Makefile through gitlab CI creates a funky environment
> where the next script (update-configs.sh) no longer exists because
> of the git checkout changes.  Keep rebase-patches in the gitlab-ci
> script for now.
> 
> That will be removed soon enough.  No effect on normal workflow.
> 
> The other fixes are self-explanatory.
> 
> Signed-off-by: Don Zickus <dzickus@xxxxxxxxxx>
> ---
>  redhat/Makefile                         | 5 ++---
>  redhat/scripts/ci/ark-rebase-patches.sh | 4 ++--
>  redhat/scripts/ci/ark-update-configs.sh | 2 +-
>  3 files changed, 5 insertions(+), 6 deletions(-)
> 
> diff --git a/redhat/Makefile b/redhat/Makefile
> index bfc9cd63df60..27d2cd94e78f 100644
> --- a/redhat/Makefile
> +++ b/redhat/Makefile
> @@ -327,11 +327,10 @@ dist-merge-upstream: git-tree-check
>  		fi;
>  
>  	@# If TAG is empty, script defaults to master:HEAD
> -	@$(REDHAT)/scripts/ci/ark-rebase-patches.sh $(TAG) || exit 1
>  	git checkout $(DIST_BRANCH)
>  	@$(REDHAT)/scripts/ci/ark-update-configs.sh $(TAG)
>  
> -dist-merge-upstream-push: DIST_PUSH="1"
> +dist-merge-upstream-push: export DIST_PUSH="1"
>  dist-merge-upstream-push: dist-merge-upstream
>  
>  dist-fedora-release: git-tree-check
> @@ -340,7 +339,7 @@ dist-fedora-release: git-tree-check
>  	@cd ..; $(REDHAT)/scripts/ci/ark-create-release.sh $(TAG) || \
>  		(echo "Unable to create release tag"; exit 1)
>  
> -dist-fedora-release-push: DIST_PUSH="1"
> +dist-fedora-release-push: export DIST_PUSH="1"
>  dist-fedora-release-push: dist-fedora-release
>  
>  .PHONY: dist-brew dist-koji
> diff --git a/redhat/scripts/ci/ark-rebase-patches.sh b/redhat/scripts/ci/ark-rebase-patches.sh
> index ef2183ecc799..2e64b90ac277 100755
> --- a/redhat/scripts/ci/ark-rebase-patches.sh
> +++ b/redhat/scripts/ci/ark-rebase-patches.sh
> @@ -99,7 +99,7 @@ fi
>  
>  if $CLEAN_REBASE; then
>  	if test -n "$DIST_PUSH"; then
> -		echo "Pushing branch ark-patches to $(get remote get-url gitlab)"
> +		echo "Pushing branch ark-patches to $(git remote get-url gitlab)"
>  		git push -f gitlab ark-patches
>  	else
>  		printf "You can safely update ark-patches with 'git push -f <remote> ark-patches'\n"
> @@ -114,7 +114,7 @@ if git tag -v "$UPSTREAM_REF" > /dev/null 2>&1; then
>  	printf "Creating branch \"ark/patches/%s\"\n" "$UPSTREAM_REF"
>  	git branch ark/patches/"$UPSTREAM_REF"
>  	if test -n "$DIST_PUSH"; then
> -		echo "Pushing branch ark/patches to $(get remote get-url gitlab)"
> +		echo "Pushing branch ark/patches to $(git remote get-url gitlab)"
>  		git push gitlab ark/patches/"$UPSTREAM_REF"
>  	else
>  		printf "Don't forget to run 'git push <remote> ark/patches/%s'\n" "$UPSTREAM_REF"
> diff --git a/redhat/scripts/ci/ark-update-configs.sh b/redhat/scripts/ci/ark-update-configs.sh
> index 22dcead23f88..e8baacdb929e 100755
> --- a/redhat/scripts/ci/ark-update-configs.sh
> +++ b/redhat/scripts/ci/ark-update-configs.sh
> @@ -67,7 +67,7 @@ else
>  fi
>  
>  if test -n "$DIST_PUSH"; then
> -	echo "Pushing branch $(git branch --show-current) to $(get remote get-url gitlab)"
> +	echo "Pushing branch $(git branch --show-current) to $(git remote get-url gitlab)"
>  	git push gitlab HEAD
>  
>  	echo "Pushing config update branches"
> -- 
> GitLab
> 
> 
> From f38c7e3abfba9a9e180b34f642254c43782e7ffe Mon Sep 17 00:00:00 2001
> From: Jens Axboe <axboe@xxxxxxxxx>
> Date: Fri, 25 Sep 2020 15:23:43 -0600
> Subject: [PATCH 089/126] io_uring: ensure async buffered read-retry is setup
>  properly
> 
> A previous commit for fixing up short reads botched the async retry
> path, so we ended up going to worker threads more often than we should.
> Fix this up, so retries work the way they originally were intended to.
> 
> Fixes: 227c0c9673d8 ("io_uring: internally retry short reads")
> Reported-by: Hao_Xu <haoxu@xxxxxxxxxxxxxxxxx>
> Signed-off-by: Jens Axboe <axboe@xxxxxxxxx>
> ---
>  fs/io_uring.c | 6 ++----
>  1 file changed, 2 insertions(+), 4 deletions(-)
> 
> diff --git a/fs/io_uring.c b/fs/io_uring.c
> index ad828fa19af4..11b8e428300d 100644
> --- a/fs/io_uring.c
> +++ b/fs/io_uring.c
> @@ -3172,10 +3172,8 @@ static int io_read(struct io_kiocb *req, bool force_nonblock,
>  			goto done;
>  		/* some cases will consume bytes even on error returns */
>  		iov_iter_revert(iter, iov_count - iov_iter_count(iter));
> -		ret = io_setup_async_rw(req, iovec, inline_vecs, iter, false);
> -		if (ret)
> -			goto out_free;
> -		return -EAGAIN;
> +		ret = 0;
> +		goto copy_iov;
>  	} else if (ret < 0) {
>  		/* make sure -ERESTARTSYS -> -EINTR is done */
>  		goto done;
> -- 
> GitLab
> 
> 
> From fc45ae7370c5576427d3767b9d6575bc19a8e050 Mon Sep 17 00:00:00 2001
> From: Don Zickus <dzickus@xxxxxxxxxx>
> Date: Fri, 25 Sep 2020 18:16:45 -0400
> Subject: [PATCH 090/126] Filter out upstream commits from changelog
> 
> I updated the release code to include more changelog info
> in the os-build branch.  This resulted in adding upstream
> merge commits.  This is not interesting for a Fedora tree
> as it is covered by a generic 'merge' entry.
> 
> Use a simple git trick to filter those upstream commits out, "^master".
> See 'man gitrevisions' for more tricks.
> 
> Signed-off-by: Don Zickus <dzickus@xxxxxxxxxx>
> ---
>  redhat/genspec.sh | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/redhat/genspec.sh b/redhat/genspec.sh
> index fbe275f6f4e7..ab135b1a2a1e 100755
> --- a/redhat/genspec.sh
> +++ b/redhat/genspec.sh
> @@ -49,7 +49,7 @@ if [ -z "$lasttag" ]; then
>  	lasttag=$MARKER
>  fi
>  echo "Gathering new log entries since $lasttag"
> -git format-patch --no-renames -k --stdout ${lasttag}.. -- ":!/redhat/rhdocs" | awk '
> +git format-patch --no-renames -k --stdout ^master ${lasttag}.. -- ":!/redhat/rhdocs" | awk '
>  BEGIN{TYPE="PATCHJUNK"; }
>  	# add an entry to changelog
>  	function changelog(subjectline, nameline, zstream)
> -- 
> GitLab
> 
> 
> From 15f68d44f9123ebc54604e833ec3d9411d96cd9c Mon Sep 17 00:00:00 2001
> From: Don Zickus <dzickus@xxxxxxxxxx>
> Date: Fri, 25 Sep 2020 14:02:19 -0400
> Subject: [PATCH 091/126] Create Patchlist.changelog file
> 
> A source git tree's workflow and Fedora's separation of upstream and distro
> contributions don't overlap well.
> 
> A source git tree is always merging upstream content and downstream content
> while avoiding a rebase.  By separating the tarballs and patches out, this
> effectively causes a rebase.  This 'rebase' causes patches to not apply
> correctly as git took care of it previously.
> 
> This patch creates a Patchlist.changelog file that lists all the SHAs that
> are added to the upstream tree.
> 
> The goal is to create a useful file such that the source git tree can
> create a single tarball and use the Patchlist.changelog file to adhere
> to the spirit of the Fedora's separation rules.
> 
> No technical changes, just a new file added to the srpm.
> 
> Signed-off-by: Don Zickus <dzickus@xxxxxxxxxx>
> ---
>  redhat/genspec.sh           | 8 ++++++++
>  redhat/kernel.spec.template | 1 +
>  2 files changed, 9 insertions(+)
> 
> diff --git a/redhat/genspec.sh b/redhat/genspec.sh
> index fbe275f6f4e7..308db0182954 100755
> --- a/redhat/genspec.sh
> +++ b/redhat/genspec.sh
> @@ -273,6 +273,14 @@ if [ "$SINGLE_TARBALL" = 0 ]; then
>  	done
>  fi
>  
> +# generate Patchlist.changelog file that holds the shas and commits not
> +# included upstream.
> +git log --no-merges --pretty=oneline --no-decorate master.. \
> +	":(exclude,top).gitlab-ci.yml" \
> +	":(exclude,top)makefile" \
> +	":(exclude,top)Makefile.rhelver" \
> +	":(exclude,top)redhat" > $plistf.changelog
> +
>  sed -i "s/%%PATCHLIST%%//" $SPECFILE
>  sed -i "s/%%APPLYPATCH%%//" $SPECFILE
>  
> diff --git a/redhat/kernel.spec.template b/redhat/kernel.spec.template
> index 6f591e11bd71..bc12211a7d6b 100644
> --- a/redhat/kernel.spec.template
> +++ b/redhat/kernel.spec.template
> @@ -708,6 +708,7 @@ Source2001: cpupower.config
>  Source3000: merge.pl
>  Source3001: kernel-local
>  Source3002: Patchlist
> +Source3003: Patchlist.changelog
>  
>  Source4000: README.rst
>  
> -- 
> GitLab
> 
> 
> From 54cd0a71284033df1aef6c15c8b69c2564d22103 Mon Sep 17 00:00:00 2001
> From: Fedora Kernel Team <kernel-team@xxxxxxxxxxxxxxxxx>
> Date: Sat, 26 Sep 2020 04:28:03 +0000
> Subject: [PATCH 092/126] [redhat]
>  kernel-5.9.0-0.rc6.20200926git7c7ec3226f5f.16.test
> 
> Signed-off-by: Fedora Kernel Team <kernel-team@xxxxxxxxxxxxxxxxx>
> ---
>  Makefile.rhelver             | 2 +-
>  redhat/kernel.changelog-8.99 | 6 ++++++
>  redhat/marker                | 2 +-
>  3 files changed, 8 insertions(+), 2 deletions(-)
> 
> diff --git a/Makefile.rhelver b/Makefile.rhelver
> index 98f70a2f0f06..350b1c0db268 100644
> --- a/Makefile.rhelver
> +++ b/Makefile.rhelver
> @@ -12,7 +12,7 @@ RHEL_MINOR = 99
>  #
>  # Use this spot to avoid future merge conflicts.
>  # Do not trim this comment.
> -RHEL_RELEASE = 16
> +RHEL_RELEASE = 17
>  
>  #
>  # Early y+1 numbering
> diff --git a/redhat/kernel.changelog-8.99 b/redhat/kernel.changelog-8.99
> index 74300d4ea7aa..57fc51ebebc3 100644
> --- a/redhat/kernel.changelog-8.99
> +++ b/redhat/kernel.changelog-8.99
> @@ -1,3 +1,9 @@
> +* Sat Sep 26 2020 Fedora Kernel Team <kernel-team@xxxxxxxxxxxxxxxxx> [5.9.0-0.rc6.20200926git7c7ec3226f5f.16.test]
> +- 7c7ec3226f5f rebase
> +- Filter out upstream commits from changelog (Don Zickus)
> +- Merge Upstream script fixes (Don Zickus)
> +- Updated changelog for the release based on 171d4ff79f96 (Fedora Kernel Team)
> +
>  * Fri Sep 25 2020 Fedora Kernel Team <kernel-team@xxxxxxxxxxxxxxxxx> [5.9.0-0.rc6.20200925git171d4ff79f96.16]
>  - Merge ark-patches
>  
> diff --git a/redhat/marker b/redhat/marker
> index 783055722c2a..02e1e4b6abb0 100644
> --- a/redhat/marker
> +++ b/redhat/marker
> @@ -1 +1 @@
> -171d4ff79f96
> +7c7ec3226f5f
> -- 
> GitLab
> 
> 
> From 256de6a50ef1a7e1303a7e1732fca657f672cda3 Mon Sep 17 00:00:00 2001
> From: Fedora Kernel Team <kernel-team@xxxxxxxxxxxxxxxxx>
> Date: Sat, 26 Sep 2020 04:32:57 +0000
> Subject: [PATCH 093/126] Updated changelog for the release based on
>  7c7ec3226f5f
> 
> ---
>  redhat/kernel.changelog-8.99 | 3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/redhat/kernel.changelog-8.99 b/redhat/kernel.changelog-8.99
> index 57fc51ebebc3..5857c0547754 100644
> --- a/redhat/kernel.changelog-8.99
> +++ b/redhat/kernel.changelog-8.99
> @@ -1,3 +1,6 @@
> +* Sat Sep 26 2020 Fedora Kernel Team <kernel-team@xxxxxxxxxxxxxxxxx> [5.9.0-0.rc6.20200926git7c7ec3226f5f.17]
> +- Merge ark-patches
> +
>  * Sat Sep 26 2020 Fedora Kernel Team <kernel-team@xxxxxxxxxxxxxxxxx> [5.9.0-0.rc6.20200926git7c7ec3226f5f.16.test]
>  - 7c7ec3226f5f rebase
>  - Filter out upstream commits from changelog (Don Zickus)
> -- 
> GitLab
> 
> 
> From e30d694c3381b565e043cf74b0bed059db1b4ac9 Mon Sep 17 00:00:00 2001
> From: Florian Fainelli <f.fainelli@xxxxxxxxx>
> Date: Fri, 25 Sep 2020 08:21:14 -0700
> Subject: [PATCH 094/126] Documentation/llvm: Fix clang target examples
> 
> clang --target=<triple> is how we can specify a particular toolchain
> triple to be use, fix the two occurences in the documentation.
> 
> Fixes: fcf1b6a35c16 ("Documentation/llvm: add documentation on building w/ Clang/LLVM")
> Signed-off-by: Florian Fainelli <f.fainelli@xxxxxxxxx>
> Reviewed-by: Nick Desaulniers <ndesaulniers@xxxxxxxxxx>
> Reviewed-by: Nathan Chancellor <natechancellor@xxxxxxxxx>
> Signed-off-by: Masahiro Yamada <masahiroy@xxxxxxxxxx>
> ---
>  Documentation/kbuild/llvm.rst | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/Documentation/kbuild/llvm.rst b/Documentation/kbuild/llvm.rst
> index 334df758dce3..dae90c21aed3 100644
> --- a/Documentation/kbuild/llvm.rst
> +++ b/Documentation/kbuild/llvm.rst
> @@ -39,10 +39,10 @@ which can help simplify cross compiling. ::
>  	ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- make CC=clang
>  
>  ``CROSS_COMPILE`` is not used to prefix the Clang compiler binary, instead
> -``CROSS_COMPILE`` is used to set a command line flag: ``--target <triple>``. For
> +``CROSS_COMPILE`` is used to set a command line flag: ``--target=<triple>``. For
>  example: ::
>  
> -	clang --target aarch64-linux-gnu foo.c
> +	clang --target=aarch64-linux-gnu foo.c
>  
>  LLVM Utilities
>  --------------
> -- 
> GitLab
> 
> 
> From 678ff6a7afccc43d352c1b8c94b6d8c0ee1464ad Mon Sep 17 00:00:00 2001
> From: Shakeel Butt <shakeelb@xxxxxxxxxx>
> Date: Sat, 26 Sep 2020 07:13:41 -0700
> Subject: [PATCH 095/126] mm: slab: fix potential double free in ___cache_free
> 
> With the commit 10befea91b61 ("mm: memcg/slab: use a single set of
> kmem_caches for all allocations"), it becomes possible to call kfree()
> from the slabs_destroy().
> 
> The functions cache_flusharray() and do_drain() calls slabs_destroy() on
> array_cache of the local CPU without updating the size of the
> array_cache.  This enables the kfree() call from the slabs_destroy() to
> recursively call cache_flusharray() which can potentially call
> free_block() on the same elements of the array_cache of the local CPU
> and causing double free and memory corruption.
> 
> To fix the issue, simply update the local CPU array_cache cache before
> calling slabs_destroy().
> 
> Fixes: 10befea91b61 ("mm: memcg/slab: use a single set of kmem_caches for all allocations")
> Signed-off-by: Shakeel Butt <shakeelb@xxxxxxxxxx>
> Reviewed-by: Roman Gushchin <guro@xxxxxx>
> Tested-by: Ming Lei <ming.lei@xxxxxxxxxx>
> Reported-by: kernel test robot <rong.a.chen@xxxxxxxxx>
> Cc: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>
> Cc: Ted Ts'o <tytso@xxxxxxx>
> Signed-off-by: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>
> ---
>  mm/slab.c | 8 ++++++--
>  1 file changed, 6 insertions(+), 2 deletions(-)
> 
> diff --git a/mm/slab.c b/mm/slab.c
> index 3160dff6fd76..f658e86ec8ce 100644
> --- a/mm/slab.c
> +++ b/mm/slab.c
> @@ -1632,6 +1632,10 @@ static void slab_destroy(struct kmem_cache *cachep, struct page *page)
>  		kmem_cache_free(cachep->freelist_cache, freelist);
>  }
>  
> +/*
> + * Update the size of the caches before calling slabs_destroy as it may
> + * recursively call kfree.
> + */
>  static void slabs_destroy(struct kmem_cache *cachep, struct list_head *list)
>  {
>  	struct page *page, *n;
> @@ -2153,8 +2157,8 @@ static void do_drain(void *arg)
>  	spin_lock(&n->list_lock);
>  	free_block(cachep, ac->entry, ac->avail, node, &list);
>  	spin_unlock(&n->list_lock);
> -	slabs_destroy(cachep, &list);
>  	ac->avail = 0;
> +	slabs_destroy(cachep, &list);
>  }
>  
>  static void drain_cpu_caches(struct kmem_cache *cachep)
> @@ -3402,9 +3406,9 @@ static void cache_flusharray(struct kmem_cache *cachep, struct array_cache *ac)
>  	}
>  #endif
>  	spin_unlock(&n->list_lock);
> -	slabs_destroy(cachep, &list);
>  	ac->avail -= batchcount;
>  	memmove(ac->entry, &(ac->entry[batchcount]), sizeof(void *)*ac->avail);
> +	slabs_destroy(cachep, &list);
>  }
>  
>  /*
> -- 
> GitLab
> 
> 
> From 41663430588c737dd735bad5a0d1ba325dcabd59 Mon Sep 17 00:00:00 2001
> From: Gao Xiang <hsiangkao@xxxxxxxxxx>
> Date: Fri, 25 Sep 2020 21:19:01 -0700
> Subject: [PATCH 096/126] mm, THP, swap: fix allocating cluster for swapfile by
>  mistake
> 
> SWP_FS is used to make swap_{read,write}page() go through the
> filesystem, and it's only used for swap files over NFS.  So, !SWP_FS
> means non NFS for now, it could be either file backed or device backed.
> Something similar goes with legacy SWP_FILE.
> 
> So in order to achieve the goal of the original patch, SWP_BLKDEV should
> be used instead.
> 
> FS corruption can be observed with SSD device + XFS + fragmented
> swapfile due to CONFIG_THP_SWAP=y.
> 
> I reproduced the issue with the following details:
> 
> Environment:
> 
>   QEMU + upstream kernel + buildroot + NVMe (2 GB)
> 
> Kernel config:
> 
>   CONFIG_BLK_DEV_NVME=y
>   CONFIG_THP_SWAP=y
> 
> Some reproducible steps:
> 
>   mkfs.xfs -f /dev/nvme0n1
>   mkdir /tmp/mnt
>   mount /dev/nvme0n1 /tmp/mnt
>   bs="32k"
>   sz="1024m"    # doesn't matter too much, I also tried 16m
>   xfs_io -f -c "pwrite -R -b $bs 0 $sz" -c "fdatasync" /tmp/mnt/sw
>   xfs_io -f -c "pwrite -R -b $bs 0 $sz" -c "fdatasync" /tmp/mnt/sw
>   xfs_io -f -c "pwrite -R -b $bs 0 $sz" -c "fdatasync" /tmp/mnt/sw
>   xfs_io -f -c "pwrite -F -S 0 -b $bs 0 $sz" -c "fdatasync" /tmp/mnt/sw
>   xfs_io -f -c "pwrite -R -b $bs 0 $sz" -c "fsync" /tmp/mnt/sw
> 
>   mkswap /tmp/mnt/sw
>   swapon /tmp/mnt/sw
> 
>   stress --vm 2 --vm-bytes 600M   # doesn't matter too much as well
> 
> Symptoms:
>  - FS corruption (e.g. checksum failure)
>  - memory corruption at: 0xd2808010
>  - segfault
> 
> Fixes: f0eea189e8e9 ("mm, THP, swap: Don't allocate huge cluster for file backed swap device")
> Fixes: 38d8b4e6bdc8 ("mm, THP, swap: delay splitting THP during swap out")
> Signed-off-by: Gao Xiang <hsiangkao@xxxxxxxxxx>
> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>
> Reviewed-by: "Huang, Ying" <ying.huang@xxxxxxxxx>
> Reviewed-by: Yang Shi <shy828301@xxxxxxxxx>
> Acked-by: Rafael Aquini <aquini@xxxxxxxxxx>
> Cc: Matthew Wilcox <willy@xxxxxxxxxxxxx>
> Cc: Carlos Maiolino <cmaiolino@xxxxxxxxxx>
> Cc: Eric Sandeen <esandeen@xxxxxxxxxx>
> Cc: Dave Chinner <david@xxxxxxxxxxxxx>
> Cc: <stable@xxxxxxxxxxxxxxx>
> Link: https://lkml.kernel.org/r/20200820045323.7809-1-hsiangkao@xxxxxxxxxx
> Signed-off-by: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>
> ---
>  mm/swapfile.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/mm/swapfile.c b/mm/swapfile.c
> index 12f59e641b5e..debc94155f74 100644
> --- a/mm/swapfile.c
> +++ b/mm/swapfile.c
> @@ -1078,7 +1078,7 @@ int get_swap_pages(int n_goal, swp_entry_t swp_entries[], int entry_size)
>  			goto nextsi;
>  		}
>  		if (size == SWAPFILE_CLUSTER) {
> -			if (!(si->flags & SWP_FS))
> +			if (si->flags & SWP_BLKDEV)
>  				n_ret = swap_alloc_cluster(si, swp_entries);
>  		} else
>  			n_ret = scan_swap_map_slots(si, SWAP_HAS_CACHE,
> -- 
> GitLab
> 
> 
> From 8d3fe09d8d6645dcbbe2413cde58f51ceb6545a6 Mon Sep 17 00:00:00 2001
> From: Muchun Song <songmuchun@xxxxxxxxxxxxx>
> Date: Fri, 25 Sep 2020 21:19:05 -0700
> Subject: [PATCH 097/126] mm: memcontrol: fix missing suffix of
>  workingset_restore
> 
> We forget to add the suffix to the workingset_restore string, so fix it.
> 
> And also update the documentation of cgroup-v2.rst.
> 
> Fixes: 170b04b7ae49 ("mm/workingset: prepare the workingset detection infrastructure for anon LRU")
> Signed-off-by: Muchun Song <songmuchun@xxxxxxxxxxxxx>
> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>
> Reviewed-by: Shakeel Butt <shakeelb@xxxxxxxxxx>
> Cc: Joonsoo Kim <iamjoonsoo.kim@xxxxxxx>
> Cc: Johannes Weiner <hannes@xxxxxxxxxxx>
> Cc: Vlastimil Babka <vbabka@xxxxxxx>
> Cc: Tejun Heo <tj@xxxxxxxxxx>
> Cc: Zefan Li <lizefan@xxxxxxxxxx>
> Cc: Jonathan Corbet <corbet@xxxxxxx>
> Cc: Michal Hocko <mhocko@xxxxxxxxxx>
> Cc: Vladimir Davydov <vdavydov.dev@xxxxxxxxx>
> Cc: Roman Gushchin <guro@xxxxxx>
> Cc: Randy Dunlap <rdunlap@xxxxxxxxxxxxx>
> Link: https://lkml.kernel.org/r/20200916100030.71698-1-songmuchun@xxxxxxxxxxxxx
> Signed-off-by: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>
> ---
>  Documentation/admin-guide/cgroup-v2.rst | 25 ++++++++++++++++++-------
>  mm/memcontrol.c                         |  4 ++--
>  2 files changed, 20 insertions(+), 9 deletions(-)
> 
> diff --git a/Documentation/admin-guide/cgroup-v2.rst b/Documentation/admin-guide/cgroup-v2.rst
> index 6be43781ec7f..baa07b30845e 100644
> --- a/Documentation/admin-guide/cgroup-v2.rst
> +++ b/Documentation/admin-guide/cgroup-v2.rst
> @@ -1324,15 +1324,26 @@ PAGE_SIZE multiple when read back.
>  	  pgmajfault
>  		Number of major page faults incurred
>  
> -	  workingset_refault
> -		Number of refaults of previously evicted pages
> +	  workingset_refault_anon
> +		Number of refaults of previously evicted anonymous pages.
>  
> -	  workingset_activate
> -		Number of refaulted pages that were immediately activated
> +	  workingset_refault_file
> +		Number of refaults of previously evicted file pages.
>  
> -	  workingset_restore
> -		Number of restored pages which have been detected as an active
> -		workingset before they got reclaimed.
> +	  workingset_activate_anon
> +		Number of refaulted anonymous pages that were immediately
> +		activated.
> +
> +	  workingset_activate_file
> +		Number of refaulted file pages that were immediately activated.
> +
> +	  workingset_restore_anon
> +		Number of restored anonymous pages which have been detected as
> +		an active workingset before they got reclaimed.
> +
> +	  workingset_restore_file
> +		Number of restored file pages which have been detected as an
> +		active workingset before they got reclaimed.
>  
>  	  workingset_nodereclaim
>  		Number of times a shadow node has been reclaimed
> diff --git a/mm/memcontrol.c b/mm/memcontrol.c
> index cfa6cbad21d5..6877c765b8d0 100644
> --- a/mm/memcontrol.c
> +++ b/mm/memcontrol.c
> @@ -1538,9 +1538,9 @@ static char *memory_stat_format(struct mem_cgroup *memcg)
>  		       memcg_page_state(memcg, WORKINGSET_ACTIVATE_ANON));
>  	seq_buf_printf(&s, "workingset_activate_file %lu\n",
>  		       memcg_page_state(memcg, WORKINGSET_ACTIVATE_FILE));
> -	seq_buf_printf(&s, "workingset_restore %lu\n",
> +	seq_buf_printf(&s, "workingset_restore_anon %lu\n",
>  		       memcg_page_state(memcg, WORKINGSET_RESTORE_ANON));
> -	seq_buf_printf(&s, "workingset_restore %lu\n",
> +	seq_buf_printf(&s, "workingset_restore_file %lu\n",
>  		       memcg_page_state(memcg, WORKINGSET_RESTORE_FILE));
>  	seq_buf_printf(&s, "workingset_nodereclaim %lu\n",
>  		       memcg_page_state(memcg, WORKINGSET_NODERECLAIM));
> -- 
> GitLab
> 
> 
> From d3f7b1bb204099f2f7306318896223e8599bb6a2 Mon Sep 17 00:00:00 2001
> From: Vasily Gorbik <gor@xxxxxxxxxxxxx>
> Date: Fri, 25 Sep 2020 21:19:10 -0700
> Subject: [PATCH 098/126] mm/gup: fix gup_fast with dynamic page table folding
> 
> Currently to make sure that every page table entry is read just once
> gup_fast walks perform READ_ONCE and pass pXd value down to the next
> gup_pXd_range function by value e.g.:
> 
>   static int gup_pud_range(p4d_t p4d, unsigned long addr, unsigned long end,
>                            unsigned int flags, struct page **pages, int *nr)
>   ...
>           pudp = pud_offset(&p4d, addr);
> 
> This function passes a reference on that local value copy to pXd_offset,
> and might get the very same pointer in return.  This happens when the
> level is folded (on most arches), and that pointer should not be
> iterated.
> 
> On s390 due to the fact that each task might have different 5,4 or
> 3-level address translation and hence different levels folded the logic
> is more complex and non-iteratable pointer to a local copy leads to
> severe problems.
> 
> Here is an example of what happens with gup_fast on s390, for a task
> with 3-level paging, crossing a 2 GB pud boundary:
> 
>   // addr = 0x1007ffff000, end = 0x10080001000
>   static int gup_pud_range(p4d_t p4d, unsigned long addr, unsigned long end,
>                            unsigned int flags, struct page **pages, int *nr)
>   {
>         unsigned long next;
>         pud_t *pudp;
> 
>         // pud_offset returns &p4d itself (a pointer to a value on stack)
>         pudp = pud_offset(&p4d, addr);
>         do {
>                 // on second iteratation reading "random" stack value
>                 pud_t pud = READ_ONCE(*pudp);
> 
>                 // next = 0x10080000000, due to PUD_SIZE/MASK != PGDIR_SIZE/MASK on s390
>                 next = pud_addr_end(addr, end);
>                 ...
>         } while (pudp++, addr = next, addr != end); // pudp++ iterating over stack
> 
>         return 1;
>   }
> 
> This happens since s390 moved to common gup code with commit
> d1874a0c2805 ("s390/mm: make the pxd_offset functions more robust") and
> commit 1a42010cdc26 ("s390/mm: convert to the generic
> get_user_pages_fast code").
> 
> s390 tried to mimic static level folding by changing pXd_offset
> primitives to always calculate top level page table offset in pgd_offset
> and just return the value passed when pXd_offset has to act as folded.
> 
> What is crucial for gup_fast and what has been overlooked is that
> PxD_SIZE/MASK and thus pXd_addr_end should also change correspondingly.
> And the latter is not possible with dynamic folding.
> 
> To fix the issue in addition to pXd values pass original pXdp pointers
> down to gup_pXd_range functions.  And introduce pXd_offset_lockless
> helpers, which take an additional pXd entry value parameter.  This has
> already been discussed in
> 
>   https://lkml.kernel.org/r/20190418100218.0a4afd51@mschwideX1
> 
> Fixes: 1a42010cdc26 ("s390/mm: convert to the generic get_user_pages_fast code")
> Signed-off-by: Vasily Gorbik <gor@xxxxxxxxxxxxx>
> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>
> Reviewed-by: Gerald Schaefer <gerald.schaefer@xxxxxxxxxxxxx>
> Reviewed-by: Alexander Gordeev <agordeev@xxxxxxxxxxxxx>
> Reviewed-by: Jason Gunthorpe <jgg@xxxxxxxxxx>
> Reviewed-by: Mike Rapoport <rppt@xxxxxxxxxxxxx>
> Reviewed-by: John Hubbard <jhubbard@xxxxxxxxxx>
> Cc: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>
> Cc: Peter Zijlstra <peterz@xxxxxxxxxxxxx>
> Cc: Dave Hansen <dave.hansen@xxxxxxxxx>
> Cc: Russell King <linux@xxxxxxxxxxxxxxx>
> Cc: Catalin Marinas <catalin.marinas@xxxxxxx>
> Cc: Will Deacon <will@xxxxxxxxxx>
> Cc: Michael Ellerman <mpe@xxxxxxxxxxxxxx>
> Cc: Benjamin Herrenschmidt <benh@xxxxxxxxxxxxxxxxxxx>
> Cc: Paul Mackerras <paulus@xxxxxxxxx>
> Cc: Jeff Dike <jdike@xxxxxxxxxxx>
> Cc: Richard Weinberger <richard@xxxxxx>
> Cc: Dave Hansen <dave.hansen@xxxxxxxxxxxxxxx>
> Cc: Andy Lutomirski <luto@xxxxxxxxxx>
> Cc: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
> Cc: Ingo Molnar <mingo@xxxxxxxxxx>
> Cc: Borislav Petkov <bp@xxxxxxxxx>
> Cc: Arnd Bergmann <arnd@xxxxxxxx>
> Cc: Andrey Ryabinin <aryabinin@xxxxxxxxxxxxx>
> Cc: Heiko Carstens <hca@xxxxxxxxxxxxx>
> Cc: Christian Borntraeger <borntraeger@xxxxxxxxxx>
> Cc: Claudio Imbrenda <imbrenda@xxxxxxxxxxxxx>
> Cc: <stable@xxxxxxxxxxxxxxx>	[5.2+]
> Link: https://lkml.kernel.org/r/patch.git-943f1e5dcff2.your-ad-here.call-01599856292-ext-8676@work.hours
> Signed-off-by: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>
> ---
>  arch/s390/include/asm/pgtable.h | 42 +++++++++++++++++++++++----------
>  include/linux/pgtable.h         | 10 ++++++++
>  mm/gup.c                        | 18 +++++++-------
>  3 files changed, 49 insertions(+), 21 deletions(-)
> 
> diff --git a/arch/s390/include/asm/pgtable.h b/arch/s390/include/asm/pgtable.h
> index 7eb01a5459cd..b55561cc8786 100644
> --- a/arch/s390/include/asm/pgtable.h
> +++ b/arch/s390/include/asm/pgtable.h
> @@ -1260,26 +1260,44 @@ static inline pgd_t *pgd_offset_raw(pgd_t *pgd, unsigned long address)
>  
>  #define pgd_offset(mm, address) pgd_offset_raw(READ_ONCE((mm)->pgd), address)
>  
> -static inline p4d_t *p4d_offset(pgd_t *pgd, unsigned long address)
> +static inline p4d_t *p4d_offset_lockless(pgd_t *pgdp, pgd_t pgd, unsigned long address)
>  {
> -	if ((pgd_val(*pgd) & _REGION_ENTRY_TYPE_MASK) >= _REGION_ENTRY_TYPE_R1)
> -		return (p4d_t *) pgd_deref(*pgd) + p4d_index(address);
> -	return (p4d_t *) pgd;
> +	if ((pgd_val(pgd) & _REGION_ENTRY_TYPE_MASK) >= _REGION_ENTRY_TYPE_R1)
> +		return (p4d_t *) pgd_deref(pgd) + p4d_index(address);
> +	return (p4d_t *) pgdp;
>  }
> +#define p4d_offset_lockless p4d_offset_lockless
>  
> -static inline pud_t *pud_offset(p4d_t *p4d, unsigned long address)
> +static inline p4d_t *p4d_offset(pgd_t *pgdp, unsigned long address)
>  {
> -	if ((p4d_val(*p4d) & _REGION_ENTRY_TYPE_MASK) >= _REGION_ENTRY_TYPE_R2)
> -		return (pud_t *) p4d_deref(*p4d) + pud_index(address);
> -	return (pud_t *) p4d;
> +	return p4d_offset_lockless(pgdp, *pgdp, address);
> +}
> +
> +static inline pud_t *pud_offset_lockless(p4d_t *p4dp, p4d_t p4d, unsigned long address)
> +{
> +	if ((p4d_val(p4d) & _REGION_ENTRY_TYPE_MASK) >= _REGION_ENTRY_TYPE_R2)
> +		return (pud_t *) p4d_deref(p4d) + pud_index(address);
> +	return (pud_t *) p4dp;
> +}
> +#define pud_offset_lockless pud_offset_lockless
> +
> +static inline pud_t *pud_offset(p4d_t *p4dp, unsigned long address)
> +{
> +	return pud_offset_lockless(p4dp, *p4dp, address);
>  }
>  #define pud_offset pud_offset
>  
> -static inline pmd_t *pmd_offset(pud_t *pud, unsigned long address)
> +static inline pmd_t *pmd_offset_lockless(pud_t *pudp, pud_t pud, unsigned long address)
> +{
> +	if ((pud_val(pud) & _REGION_ENTRY_TYPE_MASK) >= _REGION_ENTRY_TYPE_R3)
> +		return (pmd_t *) pud_deref(pud) + pmd_index(address);
> +	return (pmd_t *) pudp;
> +}
> +#define pmd_offset_lockless pmd_offset_lockless
> +
> +static inline pmd_t *pmd_offset(pud_t *pudp, unsigned long address)
>  {
> -	if ((pud_val(*pud) & _REGION_ENTRY_TYPE_MASK) >= _REGION_ENTRY_TYPE_R3)
> -		return (pmd_t *) pud_deref(*pud) + pmd_index(address);
> -	return (pmd_t *) pud;
> +	return pmd_offset_lockless(pudp, *pudp, address);
>  }
>  #define pmd_offset pmd_offset
>  
> diff --git a/include/linux/pgtable.h b/include/linux/pgtable.h
> index e8cbc2e795d5..90654cb63e9e 100644
> --- a/include/linux/pgtable.h
> +++ b/include/linux/pgtable.h
> @@ -1427,6 +1427,16 @@ typedef unsigned int pgtbl_mod_mask;
>  #define mm_pmd_folded(mm)	__is_defined(__PAGETABLE_PMD_FOLDED)
>  #endif
>  
> +#ifndef p4d_offset_lockless
> +#define p4d_offset_lockless(pgdp, pgd, address) p4d_offset(&(pgd), address)
> +#endif
> +#ifndef pud_offset_lockless
> +#define pud_offset_lockless(p4dp, p4d, address) pud_offset(&(p4d), address)
> +#endif
> +#ifndef pmd_offset_lockless
> +#define pmd_offset_lockless(pudp, pud, address) pmd_offset(&(pud), address)
> +#endif
> +
>  /*
>   * p?d_leaf() - true if this entry is a final mapping to a physical address.
>   * This differs from p?d_huge() by the fact that they are always available (if
> diff --git a/mm/gup.c b/mm/gup.c
> index e5739a1974d5..578bf5bd8bf8 100644
> --- a/mm/gup.c
> +++ b/mm/gup.c
> @@ -2485,13 +2485,13 @@ static int gup_huge_pgd(pgd_t orig, pgd_t *pgdp, unsigned long addr,
>  	return 1;
>  }
>  
> -static int gup_pmd_range(pud_t pud, unsigned long addr, unsigned long end,
> +static int gup_pmd_range(pud_t *pudp, pud_t pud, unsigned long addr, unsigned long end,
>  		unsigned int flags, struct page **pages, int *nr)
>  {
>  	unsigned long next;
>  	pmd_t *pmdp;
>  
> -	pmdp = pmd_offset(&pud, addr);
> +	pmdp = pmd_offset_lockless(pudp, pud, addr);
>  	do {
>  		pmd_t pmd = READ_ONCE(*pmdp);
>  
> @@ -2528,13 +2528,13 @@ static int gup_pmd_range(pud_t pud, unsigned long addr, unsigned long end,
>  	return 1;
>  }
>  
> -static int gup_pud_range(p4d_t p4d, unsigned long addr, unsigned long end,
> +static int gup_pud_range(p4d_t *p4dp, p4d_t p4d, unsigned long addr, unsigned long end,
>  			 unsigned int flags, struct page **pages, int *nr)
>  {
>  	unsigned long next;
>  	pud_t *pudp;
>  
> -	pudp = pud_offset(&p4d, addr);
> +	pudp = pud_offset_lockless(p4dp, p4d, addr);
>  	do {
>  		pud_t pud = READ_ONCE(*pudp);
>  
> @@ -2549,20 +2549,20 @@ static int gup_pud_range(p4d_t p4d, unsigned long addr, unsigned long end,
>  			if (!gup_huge_pd(__hugepd(pud_val(pud)), addr,
>  					 PUD_SHIFT, next, flags, pages, nr))
>  				return 0;
> -		} else if (!gup_pmd_range(pud, addr, next, flags, pages, nr))
> +		} else if (!gup_pmd_range(pudp, pud, addr, next, flags, pages, nr))
>  			return 0;
>  	} while (pudp++, addr = next, addr != end);
>  
>  	return 1;
>  }
>  
> -static int gup_p4d_range(pgd_t pgd, unsigned long addr, unsigned long end,
> +static int gup_p4d_range(pgd_t *pgdp, pgd_t pgd, unsigned long addr, unsigned long end,
>  			 unsigned int flags, struct page **pages, int *nr)
>  {
>  	unsigned long next;
>  	p4d_t *p4dp;
>  
> -	p4dp = p4d_offset(&pgd, addr);
> +	p4dp = p4d_offset_lockless(pgdp, pgd, addr);
>  	do {
>  		p4d_t p4d = READ_ONCE(*p4dp);
>  
> @@ -2574,7 +2574,7 @@ static int gup_p4d_range(pgd_t pgd, unsigned long addr, unsigned long end,
>  			if (!gup_huge_pd(__hugepd(p4d_val(p4d)), addr,
>  					 P4D_SHIFT, next, flags, pages, nr))
>  				return 0;
> -		} else if (!gup_pud_range(p4d, addr, next, flags, pages, nr))
> +		} else if (!gup_pud_range(p4dp, p4d, addr, next, flags, pages, nr))
>  			return 0;
>  	} while (p4dp++, addr = next, addr != end);
>  
> @@ -2602,7 +2602,7 @@ static void gup_pgd_range(unsigned long addr, unsigned long end,
>  			if (!gup_huge_pd(__hugepd(pgd_val(pgd)), addr,
>  					 PGDIR_SHIFT, next, flags, pages, nr))
>  				return;
> -		} else if (!gup_p4d_range(pgd, addr, next, flags, pages, nr))
> +		} else if (!gup_p4d_range(pgdp, pgd, addr, next, flags, pages, nr))
>  			return;
>  	} while (pgdp++, addr = next, addr != end);
>  }
> -- 
> GitLab
> 
> 
> From 6c5c7b9f3352728af490183f71d350bb658ffb75 Mon Sep 17 00:00:00 2001
> From: Zi Yan <ziy@xxxxxxxxxx>
> Date: Fri, 25 Sep 2020 21:19:14 -0700
> Subject: [PATCH 099/126] mm/migrate: correct thp migration stats
> 
> PageTransHuge returns true for both thp and hugetlb, so thp stats was
> counting both thp and hugetlb migrations.  Exclude hugetlb migration by
> setting is_thp variable right.
> 
> Clean up thp handling code too when we are there.
> 
> Fixes: 1a5bae25e3cf ("mm/vmstat: add events for THP migration without split")
> Signed-off-by: Zi Yan <ziy@xxxxxxxxxx>
> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>
> Reviewed-by: Daniel Jordan <daniel.m.jordan@xxxxxxxxxx>
> Cc: Anshuman Khandual <anshuman.khandual@xxxxxxx>
> Link: https://lkml.kernel.org/r/20200917210413.1462975-1-zi.yan@xxxxxxxx
> Signed-off-by: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>
> ---
>  mm/migrate.c | 7 +++----
>  1 file changed, 3 insertions(+), 4 deletions(-)
> 
> diff --git a/mm/migrate.c b/mm/migrate.c
> index aecb1433cf3c..04a98bb2f568 100644
> --- a/mm/migrate.c
> +++ b/mm/migrate.c
> @@ -1446,7 +1446,7 @@ int migrate_pages(struct list_head *from, new_page_t get_new_page,
>  			 * Capture required information that might get lost
>  			 * during migration.
>  			 */
> -			is_thp = PageTransHuge(page);
> +			is_thp = PageTransHuge(page) && !PageHuge(page);
>  			nr_subpages = thp_nr_pages(page);
>  			cond_resched();
>  
> @@ -1472,7 +1472,7 @@ int migrate_pages(struct list_head *from, new_page_t get_new_page,
>  				 * we encounter them after the rest of the list
>  				 * is processed.
>  				 */
> -				if (PageTransHuge(page) && !PageHuge(page)) {
> +				if (is_thp) {
>  					lock_page(page);
>  					rc = split_huge_page_to_list(page, from);
>  					unlock_page(page);
> @@ -1481,8 +1481,7 @@ int migrate_pages(struct list_head *from, new_page_t get_new_page,
>  						nr_thp_split++;
>  						goto retry;
>  					}
> -				}
> -				if (is_thp) {
> +
>  					nr_thp_failed++;
>  					nr_failed += nr_subpages;
>  					goto out;
> -- 
> GitLab
> 
> 
> From 1e1b6d63d6340764e00356873e5794225a2a03ea Mon Sep 17 00:00:00 2001
> From: Nick Desaulniers <ndesaulniers@xxxxxxxxxx>
> Date: Fri, 25 Sep 2020 21:19:18 -0700
> Subject: [PATCH 100/126] lib/string.c: implement stpcpy
> 
> LLVM implemented a recent "libcall optimization" that lowers calls to
> `sprintf(dest, "%s", str)` where the return value is used to
> `stpcpy(dest, str) - dest`.
> 
> This generally avoids the machinery involved in parsing format strings.
> `stpcpy` is just like `strcpy` except it returns the pointer to the new
> tail of `dest`.  This optimization was introduced into clang-12.
> 
> Implement this so that we don't observe linkage failures due to missing
> symbol definitions for `stpcpy`.
> 
> Similar to last year's fire drill with: commit 5f074f3e192f
> ("lib/string.c: implement a basic bcmp")
> 
> The kernel is somewhere between a "freestanding" environment (no full
> libc) and "hosted" environment (many symbols from libc exist with the
> same type, function signature, and semantics).
> 
> As Peter Anvin notes, there's not really a great way to inform the
> compiler that you're targeting a freestanding environment but would like
> to opt-in to some libcall optimizations (see pr/47280 below), rather
> than opt-out.
> 
> Arvind notes, -fno-builtin-* behaves slightly differently between GCC
> and Clang, and Clang is missing many __builtin_* definitions, which I
> consider a bug in Clang and am working on fixing.
> 
> Masahiro summarizes the subtle distinction between compilers justly:
>   To prevent transformation from foo() into bar(), there are two ways in
>   Clang to do that; -fno-builtin-foo, and -fno-builtin-bar.  There is
>   only one in GCC; -fno-buitin-foo.
> 
> (Any difference in that behavior in Clang is likely a bug from a missing
> __builtin_* definition.)
> 
> Masahiro also notes:
>   We want to disable optimization from foo() to bar(),
>   but we may still benefit from the optimization from
>   foo() into something else. If GCC implements the same transform, we
>   would run into a problem because it is not -fno-builtin-bar, but
>   -fno-builtin-foo that disables that optimization.
> 
>   In this regard, -fno-builtin-foo would be more future-proof than
>   -fno-built-bar, but -fno-builtin-foo is still potentially overkill. We
>   may want to prevent calls from foo() being optimized into calls to
>   bar(), but we still may want other optimization on calls to foo().
> 
> It seems that compilers today don't quite provide the fine grain control
> over which libcall optimizations pseudo-freestanding environments would
> prefer.
> 
> Finally, Kees notes that this interface is unsafe, so we should not
> encourage its use.  As such, I've removed the declaration from any
> header, but it still needs to be exported to avoid linkage errors in
> modules.
> 
> Reported-by: Sami Tolvanen <samitolvanen@xxxxxxxxxx>
> Suggested-by: Andy Lavr <andy.lavr@xxxxxxxxx>
> Suggested-by: Arvind Sankar <nivedita@xxxxxxxxxxxx>
> Suggested-by: Joe Perches <joe@xxxxxxxxxxx>
> Suggested-by: Kees Cook <keescook@xxxxxxxxxxxx>
> Suggested-by: Masahiro Yamada <masahiroy@xxxxxxxxxx>
> Suggested-by: Rasmus Villemoes <linux@xxxxxxxxxxxxxxxxxx>
> Signed-off-by: Nick Desaulniers <ndesaulniers@xxxxxxxxxx>
> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>
> Tested-by: Nathan Chancellor <natechancellor@xxxxxxxxx>
> Cc: <stable@xxxxxxxxxxxxxxx>
> Link: https://lkml.kernel.org/r/20200914161643.938408-1-ndesaulniers@xxxxxxxxxx
> Link: https://bugs.llvm.org/show_bug.cgi?id=47162
> Link: https://bugs.llvm.org/show_bug.cgi?id=47280
> Link: https://github.com/ClangBuiltLinux/linux/issues/1126
> Link: https://man7.org/linux/man-pages/man3/stpcpy.3.html
> Link: https://pubs.opengroup.org/onlinepubs/9699919799/functions/stpcpy.html
> Link: https://reviews.llvm.org/D85963
> Signed-off-by: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>
> ---
>  lib/string.c | 24 ++++++++++++++++++++++++
>  1 file changed, 24 insertions(+)
> 
> diff --git a/lib/string.c b/lib/string.c
> index 6012c385fb31..4288e0158d47 100644
> --- a/lib/string.c
> +++ b/lib/string.c
> @@ -272,6 +272,30 @@ ssize_t strscpy_pad(char *dest, const char *src, size_t count)
>  }
>  EXPORT_SYMBOL(strscpy_pad);
>  
> +/**
> + * stpcpy - copy a string from src to dest returning a pointer to the new end
> + *          of dest, including src's %NUL-terminator. May overrun dest.
> + * @dest: pointer to end of string being copied into. Must be large enough
> + *        to receive copy.
> + * @src: pointer to the beginning of string being copied from. Must not overlap
> + *       dest.
> + *
> + * stpcpy differs from strcpy in a key way: the return value is a pointer
> + * to the new %NUL-terminating character in @dest. (For strcpy, the return
> + * value is a pointer to the start of @dest). This interface is considered
> + * unsafe as it doesn't perform bounds checking of the inputs. As such it's
> + * not recommended for usage. Instead, its definition is provided in case
> + * the compiler lowers other libcalls to stpcpy.
> + */
> +char *stpcpy(char *__restrict__ dest, const char *__restrict__ src);
> +char *stpcpy(char *__restrict__ dest, const char *__restrict__ src)
> +{
> +	while ((*dest++ = *src++) != '\0')
> +		/* nothing */;
> +	return --dest;
> +}
> +EXPORT_SYMBOL(stpcpy);
> +
>  #ifndef __HAVE_ARCH_STRCAT
>  /**
>   * strcat - Append one %NUL-terminated string to another
> -- 
> GitLab
> 
> 
> From ffa550cd691b8ba6c6117ce986516635afe03c13 Mon Sep 17 00:00:00 2001
> From: Jason Yan <yanaijie@xxxxxxxxxx>
> Date: Fri, 25 Sep 2020 21:19:21 -0700
> Subject: [PATCH 101/126] lib/memregion.c: include memregion.h
> 
> This addresses the following sparse warning:
> 
>   lib/memregion.c:8:5: warning: symbol 'memregion_alloc' was not declared. Should it be static?
>   lib/memregion.c:14:6: warning: symbol 'memregion_free' was not declared. Should it be static?
> 
> Reported-by: Hulk Robot <hulkci@xxxxxxxxxx>
> Signed-off-by: Jason Yan <yanaijie@xxxxxxxxxx>
> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>
> Link: https://lkml.kernel.org/r/20200921142852.875312-1-yanaijie@xxxxxxxxxx
> Signed-off-by: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>
> ---
>  lib/memregion.c | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/lib/memregion.c b/lib/memregion.c
> index 77c85b5251da..be5cfa5a3b57 100644
> --- a/lib/memregion.c
> +++ b/lib/memregion.c
> @@ -2,6 +2,7 @@
>  /* identifiers for device / performance-differentiated memory regions */
>  #include <linux/idr.h>
>  #include <linux/types.h>
> +#include <linux/memregion.h>
>  
>  static DEFINE_IDA(memregion_ids);
>  
> -- 
> GitLab
> 
> 
> From a1cd6c2ae47ee10ff21e62475685d5b399e2ed4a Mon Sep 17 00:00:00 2001
> From: Mikulas Patocka <mpatocka@xxxxxxxxxx>
> Date: Fri, 25 Sep 2020 21:19:24 -0700
> Subject: [PATCH 102/126] arch/x86/lib/usercopy_64.c: fix
>  __copy_user_flushcache() cache writeback
> 
> If we copy less than 8 bytes and if the destination crosses a cache
> line, __copy_user_flushcache would invalidate only the first cache line.
> 
> This patch makes it invalidate the second cache line as well.
> 
> Fixes: 0aed55af88345b ("x86, uaccess: introduce copy_from_iter_flushcache for pmem / cache-bypass operations")
> Signed-off-by: Mikulas Patocka <mpatocka@xxxxxxxxxx>
> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>
> Reviewed-by: Dan Williams <dan.j.wiilliams@xxxxxxxxx>
> Cc: Jan Kara <jack@xxxxxxx>
> Cc: Jeff Moyer <jmoyer@xxxxxxxxxx>
> Cc: Ingo Molnar <mingo@xxxxxxxxxx>
> Cc: Christoph Hellwig <hch@xxxxxx>
> Cc: Toshi Kani <toshi.kani@xxxxxxx>
> Cc: "H. Peter Anvin" <hpa@xxxxxxxxx>
> Cc: Al Viro <viro@xxxxxxxxxxxxxxxxxx>
> Cc: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
> Cc: Matthew Wilcox <mawilcox@xxxxxxxxxxxxx>
> Cc: Ross Zwisler <ross.zwisler@xxxxxxxxxxxxxxx>
> Cc: Ingo Molnar <mingo@xxxxxxx>
> Cc: <stable@xxxxxxxxxxxxxxx>
> Link: https://lkml.kernel.org/r/alpine.LRH.2.02.2009161451140.21915@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
> Signed-off-by: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>
> ---
>  arch/x86/lib/usercopy_64.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/arch/x86/lib/usercopy_64.c b/arch/x86/lib/usercopy_64.c
> index b0dfac3d3df7..1847e993ac63 100644
> --- a/arch/x86/lib/usercopy_64.c
> +++ b/arch/x86/lib/usercopy_64.c
> @@ -120,7 +120,7 @@ long __copy_user_flushcache(void *dst, const void __user *src, unsigned size)
>  	 */
>  	if (size < 8) {
>  		if (!IS_ALIGNED(dest, 4) || size != 4)
> -			clean_cache_range(dst, 1);
> +			clean_cache_range(dst, size);
>  	} else {
>  		if (!IS_ALIGNED(dest, 8)) {
>  			dest = ALIGN(dest, boot_cpu_data.x86_clflush_size);
> -- 
> GitLab
> 
> 
> From c1d0da83358a2316d9be7f229f26126dbaa07468 Mon Sep 17 00:00:00 2001
> From: Laurent Dufour <ldufour@xxxxxxxxxxxxx>
> Date: Fri, 25 Sep 2020 21:19:28 -0700
> Subject: [PATCH 103/126] mm: replace memmap_context by meminit_context
> 
> Patch series "mm: fix memory to node bad links in sysfs", v3.
> 
> Sometimes, firmware may expose interleaved memory layout like this:
> 
>  Early memory node ranges
>    node   1: [mem 0x0000000000000000-0x000000011fffffff]
>    node   2: [mem 0x0000000120000000-0x000000014fffffff]
>    node   1: [mem 0x0000000150000000-0x00000001ffffffff]
>    node   0: [mem 0x0000000200000000-0x000000048fffffff]
>    node   2: [mem 0x0000000490000000-0x00000007ffffffff]
> 
> In that case, we can see memory blocks assigned to multiple nodes in
> sysfs:
> 
>   $ ls -l /sys/devices/system/memory/memory21
>   total 0
>   lrwxrwxrwx 1 root root     0 Aug 24 05:27 node1 -> ../../node/node1
>   lrwxrwxrwx 1 root root     0 Aug 24 05:27 node2 -> ../../node/node2
>   -rw-r--r-- 1 root root 65536 Aug 24 05:27 online
>   -r--r--r-- 1 root root 65536 Aug 24 05:27 phys_device
>   -r--r--r-- 1 root root 65536 Aug 24 05:27 phys_index
>   drwxr-xr-x 2 root root     0 Aug 24 05:27 power
>   -r--r--r-- 1 root root 65536 Aug 24 05:27 removable
>   -rw-r--r-- 1 root root 65536 Aug 24 05:27 state
>   lrwxrwxrwx 1 root root     0 Aug 24 05:25 subsystem -> ../../../../bus/memory
>   -rw-r--r-- 1 root root 65536 Aug 24 05:25 uevent
>   -r--r--r-- 1 root root 65536 Aug 24 05:27 valid_zones
> 
> The same applies in the node's directory with a memory21 link in both
> the node1 and node2's directory.
> 
> This is wrong but doesn't prevent the system to run.  However when
> later, one of these memory blocks is hot-unplugged and then hot-plugged,
> the system is detecting an inconsistency in the sysfs layout and a
> BUG_ON() is raised:
> 
>   kernel BUG at /Users/laurent/src/linux-ppc/mm/memory_hotplug.c:1084!
>   LE PAGE_SIZE=64K MMU=Hash SMP NR_CPUS=2048 NUMA pSeries
>   Modules linked in: rpadlpar_io rpaphp pseries_rng rng_core vmx_crypto gf128mul binfmt_misc ip_tables x_tables xfs libcrc32c crc32c_vpmsum autofs4
>   CPU: 8 PID: 10256 Comm: drmgr Not tainted 5.9.0-rc1+ #25
>   Call Trace:
>     add_memory_resource+0x23c/0x340 (unreliable)
>     __add_memory+0x5c/0xf0
>     dlpar_add_lmb+0x1b4/0x500
>     dlpar_memory+0x1f8/0xb80
>     handle_dlpar_errorlog+0xc0/0x190
>     dlpar_store+0x198/0x4a0
>     kobj_attr_store+0x30/0x50
>     sysfs_kf_write+0x64/0x90
>     kernfs_fop_write+0x1b0/0x290
>     vfs_write+0xe8/0x290
>     ksys_write+0xdc/0x130
>     system_call_exception+0x160/0x270
>     system_call_common+0xf0/0x27c
> 
> This has been seen on PowerPC LPAR.
> 
> The root cause of this issue is that when node's memory is registered,
> the range used can overlap another node's range, thus the memory block
> is registered to multiple nodes in sysfs.
> 
> There are two issues here:
> 
>  (a) The sysfs memory and node's layouts are broken due to these
>      multiple links
> 
>  (b) The link errors in link_mem_sections() should not lead to a system
>      panic.
> 
> To address (a) register_mem_sect_under_node should not rely on the
> system state to detect whether the link operation is triggered by a hot
> plug operation or not.  This is addressed by the patches 1 and 2 of this
> series.
> 
> Issue (b) will be addressed separately.
> 
> This patch (of 2):
> 
> The memmap_context enum is used to detect whether a memory operation is
> due to a hot-add operation or happening at boot time.
> 
> Make it general to the hotplug operation and rename it as
> meminit_context.
> 
> There is no functional change introduced by this patch
> 
> Suggested-by: David Hildenbrand <david@xxxxxxxxxx>
> Signed-off-by: Laurent Dufour <ldufour@xxxxxxxxxxxxx>
> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>
> Reviewed-by: David Hildenbrand <david@xxxxxxxxxx>
> Reviewed-by: Oscar Salvador <osalvador@xxxxxxx>
> Acked-by: Michal Hocko <mhocko@xxxxxxxx>
> Cc: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>
> Cc: "Rafael J . Wysocki" <rafael@xxxxxxxxxx>
> Cc: Nathan Lynch <nathanl@xxxxxxxxxxxxx>
> Cc: Scott Cheloha <cheloha@xxxxxxxxxxxxx>
> Cc: Tony Luck <tony.luck@xxxxxxxxx>
> Cc: Fenghua Yu <fenghua.yu@xxxxxxxxx>
> Cc: <stable@xxxxxxxxxxxxxxx>
> Link: https://lkml.kernel.org/r/20200915094143.79181-1-ldufour@xxxxxxxxxxxxx
> Link: https://lkml.kernel.org/r/20200915132624.9723-1-ldufour@xxxxxxxxxxxxx
> Signed-off-by: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>
> ---
>  arch/ia64/mm/init.c    |  6 +++---
>  include/linux/mm.h     |  2 +-
>  include/linux/mmzone.h | 11 ++++++++---
>  mm/memory_hotplug.c    |  2 +-
>  mm/page_alloc.c        | 10 +++++-----
>  5 files changed, 18 insertions(+), 13 deletions(-)
> 
> diff --git a/arch/ia64/mm/init.c b/arch/ia64/mm/init.c
> index 0b3fb4c7af29..8e7b8c6c576e 100644
> --- a/arch/ia64/mm/init.c
> +++ b/arch/ia64/mm/init.c
> @@ -538,7 +538,7 @@ virtual_memmap_init(u64 start, u64 end, void *arg)
>  	if (map_start < map_end)
>  		memmap_init_zone((unsigned long)(map_end - map_start),
>  				 args->nid, args->zone, page_to_pfn(map_start),
> -				 MEMMAP_EARLY, NULL);
> +				 MEMINIT_EARLY, NULL);
>  	return 0;
>  }
>  
> @@ -547,8 +547,8 @@ memmap_init (unsigned long size, int nid, unsigned long zone,
>  	     unsigned long start_pfn)
>  {
>  	if (!vmem_map) {
> -		memmap_init_zone(size, nid, zone, start_pfn, MEMMAP_EARLY,
> -				NULL);
> +		memmap_init_zone(size, nid, zone, start_pfn,
> +				 MEMINIT_EARLY, NULL);
>  	} else {
>  		struct page *start;
>  		struct memmap_init_callback_data args;
> diff --git a/include/linux/mm.h b/include/linux/mm.h
> index b2f370f0b420..48614513eb66 100644
> --- a/include/linux/mm.h
> +++ b/include/linux/mm.h
> @@ -2416,7 +2416,7 @@ extern int __meminit __early_pfn_to_nid(unsigned long pfn,
>  
>  extern void set_dma_reserve(unsigned long new_dma_reserve);
>  extern void memmap_init_zone(unsigned long, int, unsigned long, unsigned long,
> -		enum memmap_context, struct vmem_altmap *);
> +		enum meminit_context, struct vmem_altmap *);
>  extern void setup_per_zone_wmarks(void);
>  extern int __meminit init_per_zone_wmark_min(void);
>  extern void mem_init(void);
> diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h
> index 8379432f4f2f..0f7a4ff4b059 100644
> --- a/include/linux/mmzone.h
> +++ b/include/linux/mmzone.h
> @@ -824,10 +824,15 @@ bool zone_watermark_ok(struct zone *z, unsigned int order,
>  		unsigned int alloc_flags);
>  bool zone_watermark_ok_safe(struct zone *z, unsigned int order,
>  		unsigned long mark, int highest_zoneidx);
> -enum memmap_context {
> -	MEMMAP_EARLY,
> -	MEMMAP_HOTPLUG,
> +/*
> + * Memory initialization context, use to differentiate memory added by
> + * the platform statically or via memory hotplug interface.
> + */
> +enum meminit_context {
> +	MEMINIT_EARLY,
> +	MEMINIT_HOTPLUG,
>  };
> +
>  extern void init_currently_empty_zone(struct zone *zone, unsigned long start_pfn,
>  				     unsigned long size);
>  
> diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c
> index b11a269e2356..345308a8bd15 100644
> --- a/mm/memory_hotplug.c
> +++ b/mm/memory_hotplug.c
> @@ -729,7 +729,7 @@ void __ref move_pfn_range_to_zone(struct zone *zone, unsigned long start_pfn,
>  	 * are reserved so nobody should be touching them so we should be safe
>  	 */
>  	memmap_init_zone(nr_pages, nid, zone_idx(zone), start_pfn,
> -			MEMMAP_HOTPLUG, altmap);
> +			 MEMINIT_HOTPLUG, altmap);
>  
>  	set_zone_contiguous(zone);
>  }
> diff --git a/mm/page_alloc.c b/mm/page_alloc.c
> index fab5e97dc9ca..5661fa164f13 100644
> --- a/mm/page_alloc.c
> +++ b/mm/page_alloc.c
> @@ -5975,7 +5975,7 @@ overlap_memmap_init(unsigned long zone, unsigned long *pfn)
>   * done. Non-atomic initialization, single-pass.
>   */
>  void __meminit memmap_init_zone(unsigned long size, int nid, unsigned long zone,
> -		unsigned long start_pfn, enum memmap_context context,
> +		unsigned long start_pfn, enum meminit_context context,
>  		struct vmem_altmap *altmap)
>  {
>  	unsigned long pfn, end_pfn = start_pfn + size;
> @@ -6007,7 +6007,7 @@ void __meminit memmap_init_zone(unsigned long size, int nid, unsigned long zone,
>  		 * There can be holes in boot-time mem_map[]s handed to this
>  		 * function.  They do not exist on hotplugged memory.
>  		 */
> -		if (context == MEMMAP_EARLY) {
> +		if (context == MEMINIT_EARLY) {
>  			if (overlap_memmap_init(zone, &pfn))
>  				continue;
>  			if (defer_init(nid, pfn, end_pfn))
> @@ -6016,7 +6016,7 @@ void __meminit memmap_init_zone(unsigned long size, int nid, unsigned long zone,
>  
>  		page = pfn_to_page(pfn);
>  		__init_single_page(page, pfn, zone, nid);
> -		if (context == MEMMAP_HOTPLUG)
> +		if (context == MEMINIT_HOTPLUG)
>  			__SetPageReserved(page);
>  
>  		/*
> @@ -6099,7 +6099,7 @@ void __ref memmap_init_zone_device(struct zone *zone,
>  		 * check here not to call set_pageblock_migratetype() against
>  		 * pfn out of zone.
>  		 *
> -		 * Please note that MEMMAP_HOTPLUG path doesn't clear memmap
> +		 * Please note that MEMINIT_HOTPLUG path doesn't clear memmap
>  		 * because this is done early in section_activate()
>  		 */
>  		if (!(pfn & (pageblock_nr_pages - 1))) {
> @@ -6137,7 +6137,7 @@ void __meminit __weak memmap_init(unsigned long size, int nid,
>  		if (end_pfn > start_pfn) {
>  			size = end_pfn - start_pfn;
>  			memmap_init_zone(size, nid, zone, start_pfn,
> -					 MEMMAP_EARLY, NULL);
> +					 MEMINIT_EARLY, NULL);
>  		}
>  	}
>  }
> -- 
> GitLab
> 
> 
> From f85086f95fa36194eb0db5cd5c12e56801b98523 Mon Sep 17 00:00:00 2001
> From: Laurent Dufour <ldufour@xxxxxxxxxxxxx>
> Date: Fri, 25 Sep 2020 21:19:31 -0700
> Subject: [PATCH 104/126] mm: don't rely on system state to detect hot-plug
>  operations
> 
> In register_mem_sect_under_node() the system_state's value is checked to
> detect whether the call is made during boot time or during an hot-plug
> operation.  Unfortunately, that check against SYSTEM_BOOTING is wrong
> because regular memory is registered at SYSTEM_SCHEDULING state.  In
> addition, memory hot-plug operation can be triggered at this system
> state by the ACPI [1].  So checking against the system state is not
> enough.
> 
> The consequence is that on system with interleaved node's ranges like this:
> 
>  Early memory node ranges
>    node   1: [mem 0x0000000000000000-0x000000011fffffff]
>    node   2: [mem 0x0000000120000000-0x000000014fffffff]
>    node   1: [mem 0x0000000150000000-0x00000001ffffffff]
>    node   0: [mem 0x0000000200000000-0x000000048fffffff]
>    node   2: [mem 0x0000000490000000-0x00000007ffffffff]
> 
> This can be seen on PowerPC LPAR after multiple memory hot-plug and
> hot-unplug operations are done.  At the next reboot the node's memory
> ranges can be interleaved and since the call to link_mem_sections() is
> made in topology_init() while the system is in the SYSTEM_SCHEDULING
> state, the node's id is not checked, and the sections registered to
> multiple nodes:
> 
>   $ ls -l /sys/devices/system/memory/memory21/node*
>   total 0
>   lrwxrwxrwx 1 root root     0 Aug 24 05:27 node1 -> ../../node/node1
>   lrwxrwxrwx 1 root root     0 Aug 24 05:27 node2 -> ../../node/node2
> 
> In that case, the system is able to boot but if later one of theses
> memory blocks is hot-unplugged and then hot-plugged, the sysfs
> inconsistency is detected and this is triggering a BUG_ON():
> 
>   kernel BUG at /Users/laurent/src/linux-ppc/mm/memory_hotplug.c:1084!
>   Oops: Exception in kernel mode, sig: 5 [#1]
>   LE PAGE_SIZE=64K MMU=Hash SMP NR_CPUS=2048 NUMA pSeries
>   Modules linked in: rpadlpar_io rpaphp pseries_rng rng_core vmx_crypto gf128mul binfmt_misc ip_tables x_tables xfs libcrc32c crc32c_vpmsum autofs4
>   CPU: 8 PID: 10256 Comm: drmgr Not tainted 5.9.0-rc1+ #25
>   Call Trace:
>     add_memory_resource+0x23c/0x340 (unreliable)
>     __add_memory+0x5c/0xf0
>     dlpar_add_lmb+0x1b4/0x500
>     dlpar_memory+0x1f8/0xb80
>     handle_dlpar_errorlog+0xc0/0x190
>     dlpar_store+0x198/0x4a0
>     kobj_attr_store+0x30/0x50
>     sysfs_kf_write+0x64/0x90
>     kernfs_fop_write+0x1b0/0x290
>     vfs_write+0xe8/0x290
>     ksys_write+0xdc/0x130
>     system_call_exception+0x160/0x270
>     system_call_common+0xf0/0x27c
> 
> This patch addresses the root cause by not relying on the system_state
> value to detect whether the call is due to a hot-plug operation.  An
> extra parameter is added to link_mem_sections() detailing whether the
> operation is due to a hot-plug operation.
> 
> [1] According to Oscar Salvador, using this qemu command line, ACPI
> memory hotplug operations are raised at SYSTEM_SCHEDULING state:
> 
>   $QEMU -enable-kvm -machine pc -smp 4,sockets=4,cores=1,threads=1 -cpu host -monitor pty \
>         -m size=$MEM,slots=255,maxmem=4294967296k  \
>         -numa node,nodeid=0,cpus=0-3,mem=512 -numa node,nodeid=1,mem=512 \
>         -object memory-backend-ram,id=memdimm0,size=134217728 -device pc-dimm,node=0,memdev=memdimm0,id=dimm0,slot=0 \
>         -object memory-backend-ram,id=memdimm1,size=134217728 -device pc-dimm,node=0,memdev=memdimm1,id=dimm1,slot=1 \
>         -object memory-backend-ram,id=memdimm2,size=134217728 -device pc-dimm,node=0,memdev=memdimm2,id=dimm2,slot=2 \
>         -object memory-backend-ram,id=memdimm3,size=134217728 -device pc-dimm,node=0,memdev=memdimm3,id=dimm3,slot=3 \
>         -object memory-backend-ram,id=memdimm4,size=134217728 -device pc-dimm,node=1,memdev=memdimm4,id=dimm4,slot=4 \
>         -object memory-backend-ram,id=memdimm5,size=134217728 -device pc-dimm,node=1,memdev=memdimm5,id=dimm5,slot=5 \
>         -object memory-backend-ram,id=memdimm6,size=134217728 -device pc-dimm,node=1,memdev=memdimm6,id=dimm6,slot=6 \
> 
> Fixes: 4fbce633910e ("mm/memory_hotplug.c: make register_mem_sect_under_node() a callback of walk_memory_range()")
> Signed-off-by: Laurent Dufour <ldufour@xxxxxxxxxxxxx>
> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>
> Reviewed-by: David Hildenbrand <david@xxxxxxxxxx>
> Reviewed-by: Oscar Salvador <osalvador@xxxxxxx>
> Acked-by: Michal Hocko <mhocko@xxxxxxxx>
> Cc: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>
> Cc: "Rafael J. Wysocki" <rafael@xxxxxxxxxx>
> Cc: Fenghua Yu <fenghua.yu@xxxxxxxxx>
> Cc: Nathan Lynch <nathanl@xxxxxxxxxxxxx>
> Cc: Scott Cheloha <cheloha@xxxxxxxxxxxxx>
> Cc: Tony Luck <tony.luck@xxxxxxxxx>
> Cc: <stable@xxxxxxxxxxxxxxx>
> Link: https://lkml.kernel.org/r/20200915094143.79181-3-ldufour@xxxxxxxxxxxxx
> Signed-off-by: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>
> ---
>  drivers/base/node.c  | 85 ++++++++++++++++++++++++++++----------------
>  include/linux/node.h | 11 +++---
>  mm/memory_hotplug.c  |  3 +-
>  3 files changed, 64 insertions(+), 35 deletions(-)
> 
> diff --git a/drivers/base/node.c b/drivers/base/node.c
> index 508b80f6329b..50af16e68d98 100644
> --- a/drivers/base/node.c
> +++ b/drivers/base/node.c
> @@ -761,14 +761,36 @@ static int __ref get_nid_for_pfn(unsigned long pfn)
>  	return pfn_to_nid(pfn);
>  }
>  
> +static int do_register_memory_block_under_node(int nid,
> +					       struct memory_block *mem_blk)
> +{
> +	int ret;
> +
> +	/*
> +	 * If this memory block spans multiple nodes, we only indicate
> +	 * the last processed node.
> +	 */
> +	mem_blk->nid = nid;
> +
> +	ret = sysfs_create_link_nowarn(&node_devices[nid]->dev.kobj,
> +				       &mem_blk->dev.kobj,
> +				       kobject_name(&mem_blk->dev.kobj));
> +	if (ret)
> +		return ret;
> +
> +	return sysfs_create_link_nowarn(&mem_blk->dev.kobj,
> +				&node_devices[nid]->dev.kobj,
> +				kobject_name(&node_devices[nid]->dev.kobj));
> +}
> +
>  /* register memory section under specified node if it spans that node */
> -static int register_mem_sect_under_node(struct memory_block *mem_blk,
> -					 void *arg)
> +static int register_mem_block_under_node_early(struct memory_block *mem_blk,
> +					       void *arg)
>  {
>  	unsigned long memory_block_pfns = memory_block_size_bytes() / PAGE_SIZE;
>  	unsigned long start_pfn = section_nr_to_pfn(mem_blk->start_section_nr);
>  	unsigned long end_pfn = start_pfn + memory_block_pfns - 1;
> -	int ret, nid = *(int *)arg;
> +	int nid = *(int *)arg;
>  	unsigned long pfn;
>  
>  	for (pfn = start_pfn; pfn <= end_pfn; pfn++) {
> @@ -785,38 +807,33 @@ static int register_mem_sect_under_node(struct memory_block *mem_blk,
>  		}
>  
>  		/*
> -		 * We need to check if page belongs to nid only for the boot
> -		 * case, during hotplug we know that all pages in the memory
> -		 * block belong to the same node.
> -		 */
> -		if (system_state == SYSTEM_BOOTING) {
> -			page_nid = get_nid_for_pfn(pfn);
> -			if (page_nid < 0)
> -				continue;
> -			if (page_nid != nid)
> -				continue;
> -		}
> -
> -		/*
> -		 * If this memory block spans multiple nodes, we only indicate
> -		 * the last processed node.
> +		 * We need to check if page belongs to nid only at the boot
> +		 * case because node's ranges can be interleaved.
>  		 */
> -		mem_blk->nid = nid;
> -
> -		ret = sysfs_create_link_nowarn(&node_devices[nid]->dev.kobj,
> -					&mem_blk->dev.kobj,
> -					kobject_name(&mem_blk->dev.kobj));
> -		if (ret)
> -			return ret;
> +		page_nid = get_nid_for_pfn(pfn);
> +		if (page_nid < 0)
> +			continue;
> +		if (page_nid != nid)
> +			continue;
>  
> -		return sysfs_create_link_nowarn(&mem_blk->dev.kobj,
> -				&node_devices[nid]->dev.kobj,
> -				kobject_name(&node_devices[nid]->dev.kobj));
> +		return do_register_memory_block_under_node(nid, mem_blk);
>  	}
>  	/* mem section does not span the specified node */
>  	return 0;
>  }
>  
> +/*
> + * During hotplug we know that all pages in the memory block belong to the same
> + * node.
> + */
> +static int register_mem_block_under_node_hotplug(struct memory_block *mem_blk,
> +						 void *arg)
> +{
> +	int nid = *(int *)arg;
> +
> +	return do_register_memory_block_under_node(nid, mem_blk);
> +}
> +
>  /*
>   * Unregister a memory block device under the node it spans. Memory blocks
>   * with multiple nodes cannot be offlined and therefore also never be removed.
> @@ -832,11 +849,19 @@ void unregister_memory_block_under_nodes(struct memory_block *mem_blk)
>  			  kobject_name(&node_devices[mem_blk->nid]->dev.kobj));
>  }
>  
> -int link_mem_sections(int nid, unsigned long start_pfn, unsigned long end_pfn)
> +int link_mem_sections(int nid, unsigned long start_pfn, unsigned long end_pfn,
> +		      enum meminit_context context)
>  {
> +	walk_memory_blocks_func_t func;
> +
> +	if (context == MEMINIT_HOTPLUG)
> +		func = register_mem_block_under_node_hotplug;
> +	else
> +		func = register_mem_block_under_node_early;
> +
>  	return walk_memory_blocks(PFN_PHYS(start_pfn),
>  				  PFN_PHYS(end_pfn - start_pfn), (void *)&nid,
> -				  register_mem_sect_under_node);
> +				  func);
>  }
>  
>  #ifdef CONFIG_HUGETLBFS
> diff --git a/include/linux/node.h b/include/linux/node.h
> index 4866f32a02d8..014ba3ab2efd 100644
> --- a/include/linux/node.h
> +++ b/include/linux/node.h
> @@ -99,11 +99,13 @@ extern struct node *node_devices[];
>  typedef  void (*node_registration_func_t)(struct node *);
>  
>  #if defined(CONFIG_MEMORY_HOTPLUG_SPARSE) && defined(CONFIG_NUMA)
> -extern int link_mem_sections(int nid, unsigned long start_pfn,
> -			     unsigned long end_pfn);
> +int link_mem_sections(int nid, unsigned long start_pfn,
> +		      unsigned long end_pfn,
> +		      enum meminit_context context);
>  #else
>  static inline int link_mem_sections(int nid, unsigned long start_pfn,
> -				    unsigned long end_pfn)
> +				    unsigned long end_pfn,
> +				    enum meminit_context context)
>  {
>  	return 0;
>  }
> @@ -128,7 +130,8 @@ static inline int register_one_node(int nid)
>  		if (error)
>  			return error;
>  		/* link memory sections under this node */
> -		error = link_mem_sections(nid, start_pfn, end_pfn);
> +		error = link_mem_sections(nid, start_pfn, end_pfn,
> +					  MEMINIT_EARLY);
>  	}
>  
>  	return error;
> diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c
> index 345308a8bd15..ce3e73e3a5c1 100644
> --- a/mm/memory_hotplug.c
> +++ b/mm/memory_hotplug.c
> @@ -1080,7 +1080,8 @@ int __ref add_memory_resource(int nid, struct resource *res)
>  	}
>  
>  	/* link memory sections under this node.*/
> -	ret = link_mem_sections(nid, PFN_DOWN(start), PFN_UP(start + size - 1));
> +	ret = link_mem_sections(nid, PFN_DOWN(start), PFN_UP(start + size - 1),
> +				MEMINIT_HOTPLUG);
>  	BUG_ON(ret);
>  
>  	/* create new memmap entry */
> -- 
> GitLab
> 
> 
> From ce2684254bd4818ca3995c0d021fb62c4cf10a19 Mon Sep 17 00:00:00 2001
> From: Minchan Kim <minchan@xxxxxxxxxx>
> Date: Mon, 14 Sep 2020 23:32:15 -0700
> Subject: [PATCH 105/126] mm: validate pmd after splitting
> 
> syzbot reported the following KASAN splat:
> 
>   general protection fault, probably for non-canonical address 0xdffffc0000000003: 0000 [#1] PREEMPT SMP KASAN
>   KASAN: null-ptr-deref in range [0x0000000000000018-0x000000000000001f]
>   CPU: 1 PID: 6826 Comm: syz-executor142 Not tainted 5.9.0-rc4-syzkaller #0
>   Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
>   RIP: 0010:__lock_acquire+0x84/0x2ae0 kernel/locking/lockdep.c:4296
>   Code: ff df 8a 04 30 84 c0 0f 85 e3 16 00 00 83 3d 56 58 35 08 00 0f 84 0e 17 00 00 83 3d 25 c7 f5 07 00 74 2c 4c 89 e8 48 c1 e8 03 <80> 3c 30 00 74 12 4c 89 ef e8 3e d1 5a 00 48 be 00 00 00 00 00 fc
>   RSP: 0018:ffffc90004b9f850 EFLAGS: 00010006
>   Call Trace:
>     lock_acquire+0x140/0x6f0 kernel/locking/lockdep.c:5006
>     __raw_spin_lock include/linux/spinlock_api_smp.h:142 [inline]
>     _raw_spin_lock+0x2a/0x40 kernel/locking/spinlock.c:151
>     spin_lock include/linux/spinlock.h:354 [inline]
>     madvise_cold_or_pageout_pte_range+0x52f/0x25c0 mm/madvise.c:389
>     walk_pmd_range mm/pagewalk.c:89 [inline]
>     walk_pud_range mm/pagewalk.c:160 [inline]
>     walk_p4d_range mm/pagewalk.c:193 [inline]
>     walk_pgd_range mm/pagewalk.c:229 [inline]
>     __walk_page_range+0xe7b/0x1da0 mm/pagewalk.c:331
>     walk_page_range+0x2c3/0x5c0 mm/pagewalk.c:427
>     madvise_pageout_page_range mm/madvise.c:521 [inline]
>     madvise_pageout mm/madvise.c:557 [inline]
>     madvise_vma mm/madvise.c:946 [inline]
>     do_madvise+0x12d0/0x2090 mm/madvise.c:1145
>     __do_sys_madvise mm/madvise.c:1171 [inline]
>     __se_sys_madvise mm/madvise.c:1169 [inline]
>     __x64_sys_madvise+0x76/0x80 mm/madvise.c:1169
>     do_syscall_64+0x31/0x70 arch/x86/entry/common.c:46
>     entry_SYSCALL_64_after_hwframe+0x44/0xa9
> 
> The backing vma was shmem.
> 
> In case of split page of file-backed THP, madvise zaps the pmd instead
> of remapping of sub-pages.  So we need to check pmd validity after
> split.
> 
> Reported-by: syzbot+ecf80462cb7d5d552bc7@xxxxxxxxxxxxxxxxxxxxxxxxx
> Fixes: 1a4e58cce84e ("mm: introduce MADV_PAGEOUT")
> Signed-off-by: Minchan Kim <minchan@xxxxxxxxxx>
> Acked-by: Kirill A. Shutemov <kirill.shutemov@xxxxxxxxxxxxxxx>
> Signed-off-by: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>
> ---
>  mm/madvise.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/mm/madvise.c b/mm/madvise.c
> index d4aa5f776543..0e0d61003fc6 100644
> --- a/mm/madvise.c
> +++ b/mm/madvise.c
> @@ -381,9 +381,9 @@ static int madvise_cold_or_pageout_pte_range(pmd_t *pmd,
>  		return 0;
>  	}
>  
> +regular_page:
>  	if (pmd_trans_unstable(pmd))
>  		return 0;
> -regular_page:
>  #endif
>  	tlb_change_page_size(tlb, PAGE_SIZE);
>  	orig_pte = pte = pte_offset_map_lock(vma->vm_mm, pmd, addr, &ptl);
> -- 
> GitLab
> 
> 
> From 41dd876ad95312bf2c718704d098b9e8b8b3344d Mon Sep 17 00:00:00 2001
> From: Fedora Kernel Team <kernel-team@xxxxxxxxxxxxxxxxx>
> Date: Sun, 27 Sep 2020 04:32:44 +0000
> Subject: [PATCH 106/126] [redhat]
>  kernel-5.9.0-0.rc6.20200927gita1bffa48745a.17.test
> 
> Signed-off-by: Fedora Kernel Team <kernel-team@xxxxxxxxxxxxxxxxx>
> ---
>  Makefile.rhelver             | 2 +-
>  redhat/kernel.changelog-8.99 | 5 +++++
>  redhat/marker                | 2 +-
>  3 files changed, 7 insertions(+), 2 deletions(-)
> 
> diff --git a/Makefile.rhelver b/Makefile.rhelver
> index 350b1c0db268..7633b2faaba4 100644
> --- a/Makefile.rhelver
> +++ b/Makefile.rhelver
> @@ -12,7 +12,7 @@ RHEL_MINOR = 99
>  #
>  # Use this spot to avoid future merge conflicts.
>  # Do not trim this comment.
> -RHEL_RELEASE = 17
> +RHEL_RELEASE = 18
>  
>  #
>  # Early y+1 numbering
> diff --git a/redhat/kernel.changelog-8.99 b/redhat/kernel.changelog-8.99
> index 5857c0547754..4af9953b8366 100644
> --- a/redhat/kernel.changelog-8.99
> +++ b/redhat/kernel.changelog-8.99
> @@ -1,3 +1,8 @@
> +* Sun Sep 27 2020 Fedora Kernel Team <kernel-team@xxxxxxxxxxxxxxxxx> [5.9.0-0.rc6.20200927gita1bffa48745a.17.test]
> +- a1bffa48745a rebase
> +- Updated changelog for the release based on 7c7ec3226f5f (Fedora Kernel Team)
> +- Create Patchlist.changelog file (Don Zickus)
> +
>  * Sat Sep 26 2020 Fedora Kernel Team <kernel-team@xxxxxxxxxxxxxxxxx> [5.9.0-0.rc6.20200926git7c7ec3226f5f.17]
>  - Merge ark-patches
>  
> diff --git a/redhat/marker b/redhat/marker
> index 02e1e4b6abb0..f6cade62a796 100644
> --- a/redhat/marker
> +++ b/redhat/marker
> @@ -1 +1 @@
> -7c7ec3226f5f
> +a1bffa48745a
> -- 
> GitLab
> 
> 
> From b6510359a70347d2379ad38feafdf9ae31317e32 Mon Sep 17 00:00:00 2001
> From: Fedora Kernel Team <kernel-team@xxxxxxxxxxxxxxxxx>
> Date: Sun, 27 Sep 2020 04:37:24 +0000
> Subject: [PATCH 107/126] Updated changelog for the release based on
>  a1bffa48745a
> 
> ---
>  redhat/kernel.changelog-8.99 | 3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/redhat/kernel.changelog-8.99 b/redhat/kernel.changelog-8.99
> index 4af9953b8366..d1f557eef4df 100644
> --- a/redhat/kernel.changelog-8.99
> +++ b/redhat/kernel.changelog-8.99
> @@ -1,3 +1,6 @@
> +* Sun Sep 27 2020 Fedora Kernel Team <kernel-team@xxxxxxxxxxxxxxxxx> [5.9.0-0.rc6.20200927gita1bffa48745a.18]
> +- Merge ark-patches
> +
>  * Sun Sep 27 2020 Fedora Kernel Team <kernel-team@xxxxxxxxxxxxxxxxx> [5.9.0-0.rc6.20200927gita1bffa48745a.17.test]
>  - a1bffa48745a rebase
>  - Updated changelog for the release based on 7c7ec3226f5f (Fedora Kernel Team)
> -- 
> GitLab
> 
> 
> From 008cfe4418b3dbda2ff820cdd7b1a5ce458ae444 Mon Sep 17 00:00:00 2001
> From: Peter Xu <peterx@xxxxxxxxxx>
> Date: Fri, 25 Sep 2020 18:25:57 -0400
> Subject: [PATCH 108/126] mm: Introduce mm_struct.has_pinned
> 
> (Commit message majorly collected from Jason Gunthorpe)
> 
> Reduce the chance of false positive from page_maybe_dma_pinned() by
> keeping track if the mm_struct has ever been used with pin_user_pages().
> This allows cases that might drive up the page ref_count to avoid any
> penalty from handling dma_pinned pages.
> 
> Future work is planned, to provide a more sophisticated solution, likely
> to turn it into a real counter.  For now, make it atomic_t but use it as
> a boolean for simplicity.
> 
> Suggested-by: Jason Gunthorpe <jgg@xxxxxxxx>
> Signed-off-by: Peter Xu <peterx@xxxxxxxxxx>
> Signed-off-by: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>
> ---
>  include/linux/mm_types.h | 10 ++++++++++
>  kernel/fork.c            |  1 +
>  mm/gup.c                 |  6 ++++++
>  3 files changed, 17 insertions(+)
> 
> diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h
> index 496c3ff97cce..ed028af3cb19 100644
> --- a/include/linux/mm_types.h
> +++ b/include/linux/mm_types.h
> @@ -436,6 +436,16 @@ struct mm_struct {
>  		 */
>  		atomic_t mm_count;
>  
> +		/**
> +		 * @has_pinned: Whether this mm has pinned any pages.  This can
> +		 * be either replaced in the future by @pinned_vm when it
> +		 * becomes stable, or grow into a counter on its own. We're
> +		 * aggresive on this bit now - even if the pinned pages were
> +		 * unpinned later on, we'll still keep this bit set for the
> +		 * lifecycle of this mm just for simplicity.
> +		 */
> +		atomic_t has_pinned;
> +
>  #ifdef CONFIG_MMU
>  		atomic_long_t pgtables_bytes;	/* PTE page table pages */
>  #endif
> diff --git a/kernel/fork.c b/kernel/fork.c
> index 49677d668de4..e65d8192d080 100644
> --- a/kernel/fork.c
> +++ b/kernel/fork.c
> @@ -1011,6 +1011,7 @@ static struct mm_struct *mm_init(struct mm_struct *mm, struct task_struct *p,
>  	mm_pgtables_bytes_init(mm);
>  	mm->map_count = 0;
>  	mm->locked_vm = 0;
> +	atomic_set(&mm->has_pinned, 0);
>  	atomic64_set(&mm->pinned_vm, 0);
>  	memset(&mm->rss_stat, 0, sizeof(mm->rss_stat));
>  	spin_lock_init(&mm->page_table_lock);
> diff --git a/mm/gup.c b/mm/gup.c
> index 578bf5bd8bf8..dfe781d2ad4c 100644
> --- a/mm/gup.c
> +++ b/mm/gup.c
> @@ -1255,6 +1255,9 @@ static __always_inline long __get_user_pages_locked(struct mm_struct *mm,
>  		BUG_ON(*locked != 1);
>  	}
>  
> +	if (flags & FOLL_PIN)
> +		atomic_set(&current->mm->has_pinned, 1);
> +
>  	/*
>  	 * FOLL_PIN and FOLL_GET are mutually exclusive. Traditional behavior
>  	 * is to set FOLL_GET if the caller wants pages[] filled in (but has
> @@ -2660,6 +2663,9 @@ static int internal_get_user_pages_fast(unsigned long start, int nr_pages,
>  				       FOLL_FAST_ONLY)))
>  		return -EINVAL;
>  
> +	if (gup_flags & FOLL_PIN)
> +		atomic_set(&current->mm->has_pinned, 1);
> +
>  	if (!(gup_flags & FOLL_FAST_ONLY))
>  		might_lock_read(&current->mm->mmap_lock);
>  
> -- 
> GitLab
> 
> 
> From 7a4830c380f3a8b3425f6383deff58e65b2557b5 Mon Sep 17 00:00:00 2001
> From: Peter Xu <peterx@xxxxxxxxxx>
> Date: Fri, 25 Sep 2020 18:25:58 -0400
> Subject: [PATCH 109/126] mm/fork: Pass new vma pointer into copy_page_range()
> 
> This prepares for the future work to trigger early cow on pinned pages
> during fork().
> 
> No functional change intended.
> 
> Signed-off-by: Peter Xu <peterx@xxxxxxxxxx>
> Signed-off-by: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>
> ---
>  include/linux/mm.h |  2 +-
>  kernel/fork.c      |  2 +-
>  mm/memory.c        | 14 +++++++++-----
>  3 files changed, 11 insertions(+), 7 deletions(-)
> 
> diff --git a/include/linux/mm.h b/include/linux/mm.h
> index 48614513eb66..16b799a0522c 100644
> --- a/include/linux/mm.h
> +++ b/include/linux/mm.h
> @@ -1646,7 +1646,7 @@ struct mmu_notifier_range;
>  void free_pgd_range(struct mmu_gather *tlb, unsigned long addr,
>  		unsigned long end, unsigned long floor, unsigned long ceiling);
>  int copy_page_range(struct mm_struct *dst, struct mm_struct *src,
> -			struct vm_area_struct *vma);
> +		    struct vm_area_struct *vma, struct vm_area_struct *new);
>  int follow_pte_pmd(struct mm_struct *mm, unsigned long address,
>  		   struct mmu_notifier_range *range,
>  		   pte_t **ptepp, pmd_t **pmdpp, spinlock_t **ptlp);
> diff --git a/kernel/fork.c b/kernel/fork.c
> index e65d8192d080..da8d360fb032 100644
> --- a/kernel/fork.c
> +++ b/kernel/fork.c
> @@ -589,7 +589,7 @@ static __latent_entropy int dup_mmap(struct mm_struct *mm,
>  
>  		mm->map_count++;
>  		if (!(tmp->vm_flags & VM_WIPEONFORK))
> -			retval = copy_page_range(mm, oldmm, mpnt);
> +			retval = copy_page_range(mm, oldmm, mpnt, tmp);
>  
>  		if (tmp->vm_ops && tmp->vm_ops->open)
>  			tmp->vm_ops->open(tmp);
> diff --git a/mm/memory.c b/mm/memory.c
> index f3eb55975902..d56178721452 100644
> --- a/mm/memory.c
> +++ b/mm/memory.c
> @@ -819,6 +819,7 @@ copy_present_pte(struct mm_struct *dst_mm, struct mm_struct *src_mm,
>  
>  static int copy_pte_range(struct mm_struct *dst_mm, struct mm_struct *src_mm,
>  		   pmd_t *dst_pmd, pmd_t *src_pmd, struct vm_area_struct *vma,
> +		   struct vm_area_struct *new,
>  		   unsigned long addr, unsigned long end)
>  {
>  	pte_t *orig_src_pte, *orig_dst_pte;
> @@ -889,6 +890,7 @@ static int copy_pte_range(struct mm_struct *dst_mm, struct mm_struct *src_mm,
>  
>  static inline int copy_pmd_range(struct mm_struct *dst_mm, struct mm_struct *src_mm,
>  		pud_t *dst_pud, pud_t *src_pud, struct vm_area_struct *vma,
> +		struct vm_area_struct *new,
>  		unsigned long addr, unsigned long end)
>  {
>  	pmd_t *src_pmd, *dst_pmd;
> @@ -915,7 +917,7 @@ static inline int copy_pmd_range(struct mm_struct *dst_mm, struct mm_struct *src
>  		if (pmd_none_or_clear_bad(src_pmd))
>  			continue;
>  		if (copy_pte_range(dst_mm, src_mm, dst_pmd, src_pmd,
> -						vma, addr, next))
> +				   vma, new, addr, next))
>  			return -ENOMEM;
>  	} while (dst_pmd++, src_pmd++, addr = next, addr != end);
>  	return 0;
> @@ -923,6 +925,7 @@ static inline int copy_pmd_range(struct mm_struct *dst_mm, struct mm_struct *src
>  
>  static inline int copy_pud_range(struct mm_struct *dst_mm, struct mm_struct *src_mm,
>  		p4d_t *dst_p4d, p4d_t *src_p4d, struct vm_area_struct *vma,
> +		struct vm_area_struct *new,
>  		unsigned long addr, unsigned long end)
>  {
>  	pud_t *src_pud, *dst_pud;
> @@ -949,7 +952,7 @@ static inline int copy_pud_range(struct mm_struct *dst_mm, struct mm_struct *src
>  		if (pud_none_or_clear_bad(src_pud))
>  			continue;
>  		if (copy_pmd_range(dst_mm, src_mm, dst_pud, src_pud,
> -						vma, addr, next))
> +				   vma, new, addr, next))
>  			return -ENOMEM;
>  	} while (dst_pud++, src_pud++, addr = next, addr != end);
>  	return 0;
> @@ -957,6 +960,7 @@ static inline int copy_pud_range(struct mm_struct *dst_mm, struct mm_struct *src
>  
>  static inline int copy_p4d_range(struct mm_struct *dst_mm, struct mm_struct *src_mm,
>  		pgd_t *dst_pgd, pgd_t *src_pgd, struct vm_area_struct *vma,
> +		struct vm_area_struct *new,
>  		unsigned long addr, unsigned long end)
>  {
>  	p4d_t *src_p4d, *dst_p4d;
> @@ -971,14 +975,14 @@ static inline int copy_p4d_range(struct mm_struct *dst_mm, struct mm_struct *src
>  		if (p4d_none_or_clear_bad(src_p4d))
>  			continue;
>  		if (copy_pud_range(dst_mm, src_mm, dst_p4d, src_p4d,
> -						vma, addr, next))
> +				   vma, new, addr, next))
>  			return -ENOMEM;
>  	} while (dst_p4d++, src_p4d++, addr = next, addr != end);
>  	return 0;
>  }
>  
>  int copy_page_range(struct mm_struct *dst_mm, struct mm_struct *src_mm,
> -		struct vm_area_struct *vma)
> +		    struct vm_area_struct *vma, struct vm_area_struct *new)
>  {
>  	pgd_t *src_pgd, *dst_pgd;
>  	unsigned long next;
> @@ -1033,7 +1037,7 @@ int copy_page_range(struct mm_struct *dst_mm, struct mm_struct *src_mm,
>  		if (pgd_none_or_clear_bad(src_pgd))
>  			continue;
>  		if (unlikely(copy_p4d_range(dst_mm, src_mm, dst_pgd, src_pgd,
> -					    vma, addr, next))) {
> +					    vma, new, addr, next))) {
>  			ret = -ENOMEM;
>  			break;
>  		}
> -- 
> GitLab
> 
> 
> From 70e806e4e645019102d0e09d4933654fb5fb58ce Mon Sep 17 00:00:00 2001
> From: Peter Xu <peterx@xxxxxxxxxx>
> Date: Fri, 25 Sep 2020 18:25:59 -0400
> Subject: [PATCH 110/126] mm: Do early cow for pinned pages during fork() for
>  ptes
> 
> This allows copy_pte_range() to do early cow if the pages were pinned on
> the source mm.
> 
> Currently we don't have an accurate way to know whether a page is pinned
> or not.  The only thing we have is page_maybe_dma_pinned().  However
> that's good enough for now.  Especially, with the newly added
> mm->has_pinned flag to make sure we won't affect processes that never
> pinned any pages.
> 
> It would be easier if we can do GFP_KERNEL allocation within
> copy_one_pte().  Unluckily, we can't because we're with the page table
> locks held for both the parent and child processes.  So the page
> allocation needs to be done outside copy_one_pte().
> 
> Some trick is there in copy_present_pte(), majorly the wrprotect trick
> to block concurrent fast-gup.  Comments in the function should explain
> better in place.
> 
> Oleg Nesterov reported a (probably harmless) bug during review that we
> didn't reset entry.val properly in copy_pte_range() so that potentially
> there's chance to call add_swap_count_continuation() multiple times on
> the same swp entry.  However that should be harmless since even if it
> happens, the same function (add_swap_count_continuation()) will return
> directly noticing that there're enough space for the swp counter.  So
> instead of a standalone stable patch, it is touched up in this patch
> directly.
> 
> Link: https://lore.kernel.org/lkml/20200914143829.GA1424636@xxxxxxxxxx/
> Suggested-by: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>
> Signed-off-by: Peter Xu <peterx@xxxxxxxxxx>
> Signed-off-by: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>
> ---
>  mm/memory.c | 205 ++++++++++++++++++++++++++++++++++++++++++++++++----
>  1 file changed, 189 insertions(+), 16 deletions(-)
> 
> diff --git a/mm/memory.c b/mm/memory.c
> index d56178721452..fcfc4ca36eba 100644
> --- a/mm/memory.c
> +++ b/mm/memory.c
> @@ -773,15 +773,142 @@ copy_nonpresent_pte(struct mm_struct *dst_mm, struct mm_struct *src_mm,
>  	return 0;
>  }
>  
> -static inline void
> +/*
> + * Copy a present and normal page if necessary.
> + *
> + * NOTE! The usual case is that this doesn't need to do
> + * anything, and can just return a positive value. That
> + * will let the caller know that it can just increase
> + * the page refcount and re-use the pte the traditional
> + * way.
> + *
> + * But _if_ we need to copy it because it needs to be
> + * pinned in the parent (and the child should get its own
> + * copy rather than just a reference to the same page),
> + * we'll do that here and return zero to let the caller
> + * know we're done.
> + *
> + * And if we need a pre-allocated page but don't yet have
> + * one, return a negative error to let the preallocation
> + * code know so that it can do so outside the page table
> + * lock.
> + */
> +static inline int
> +copy_present_page(struct mm_struct *dst_mm, struct mm_struct *src_mm,
> +		pte_t *dst_pte, pte_t *src_pte,
> +		struct vm_area_struct *vma, struct vm_area_struct *new,
> +		unsigned long addr, int *rss, struct page **prealloc,
> +		pte_t pte, struct page *page)
> +{
> +	struct page *new_page;
> +
> +	if (!is_cow_mapping(vma->vm_flags))
> +		return 1;
> +
> +	/*
> +	 * The trick starts.
> +	 *
> +	 * What we want to do is to check whether this page may
> +	 * have been pinned by the parent process.  If so,
> +	 * instead of wrprotect the pte on both sides, we copy
> +	 * the page immediately so that we'll always guarantee
> +	 * the pinned page won't be randomly replaced in the
> +	 * future.
> +	 *
> +	 * To achieve this, we do the following:
> +	 *
> +	 * 1. Write-protect the pte if it's writable.  This is
> +	 *    to protect concurrent write fast-gup with
> +	 *    FOLL_PIN, so that we'll fail the fast-gup with
> +	 *    the write bit removed.
> +	 *
> +	 * 2. Check page_maybe_dma_pinned() to see whether this
> +	 *    page may have been pinned.
> +	 *
> +	 * The order of these steps is important to serialize
> +	 * against the fast-gup code (gup_pte_range()) on the
> +	 * pte check and try_grab_compound_head(), so that
> +	 * we'll make sure either we'll capture that fast-gup
> +	 * so we'll copy the pinned page here, or we'll fail
> +	 * that fast-gup.
> +	 *
> +	 * NOTE! Even if we don't end up copying the page,
> +	 * we won't undo this wrprotect(), because the normal
> +	 * reference copy will need it anyway.
> +	 */
> +	if (pte_write(pte))
> +		ptep_set_wrprotect(src_mm, addr, src_pte);
> +
> +	/*
> +	 * These are the "normally we can just copy by reference"
> +	 * checks.
> +	 */
> +	if (likely(!atomic_read(&src_mm->has_pinned)))
> +		return 1;
> +	if (likely(!page_maybe_dma_pinned(page)))
> +		return 1;
> +
> +	/*
> +	 * Uhhuh. It looks like the page might be a pinned page,
> +	 * and we actually need to copy it. Now we can set the
> +	 * source pte back to being writable.
> +	 */
> +	if (pte_write(pte))
> +		set_pte_at(src_mm, addr, src_pte, pte);
> +
> +	new_page = *prealloc;
> +	if (!new_page)
> +		return -EAGAIN;
> +
> +	/*
> +	 * We have a prealloc page, all good!  Take it
> +	 * over and copy the page & arm it.
> +	 */
> +	*prealloc = NULL;
> +	copy_user_highpage(new_page, page, addr, vma);
> +	__SetPageUptodate(new_page);
> +	page_add_new_anon_rmap(new_page, new, addr, false);
> +	lru_cache_add_inactive_or_unevictable(new_page, new);
> +	rss[mm_counter(new_page)]++;
> +
> +	/* All done, just insert the new page copy in the child */
> +	pte = mk_pte(new_page, new->vm_page_prot);
> +	pte = maybe_mkwrite(pte_mkdirty(pte), new);
> +	set_pte_at(dst_mm, addr, dst_pte, pte);
> +	return 0;
> +}
> +
> +/*
> + * Copy one pte.  Returns 0 if succeeded, or -EAGAIN if one preallocated page
> + * is required to copy this pte.
> + */
> +static inline int
>  copy_present_pte(struct mm_struct *dst_mm, struct mm_struct *src_mm,
>  		pte_t *dst_pte, pte_t *src_pte, struct vm_area_struct *vma,
> -		unsigned long addr, int *rss)
> +		struct vm_area_struct *new,
> +		unsigned long addr, int *rss, struct page **prealloc)
>  {
>  	unsigned long vm_flags = vma->vm_flags;
>  	pte_t pte = *src_pte;
>  	struct page *page;
>  
> +	page = vm_normal_page(vma, addr, pte);
> +	if (page) {
> +		int retval;
> +
> +		retval = copy_present_page(dst_mm, src_mm,
> +			dst_pte, src_pte,
> +			vma, new,
> +			addr, rss, prealloc,
> +			pte, page);
> +		if (retval <= 0)
> +			return retval;
> +
> +		get_page(page);
> +		page_dup_rmap(page, false);
> +		rss[mm_counter(page)]++;
> +	}
> +
>  	/*
>  	 * If it's a COW mapping, write protect it both
>  	 * in the parent and the child
> @@ -807,14 +934,27 @@ copy_present_pte(struct mm_struct *dst_mm, struct mm_struct *src_mm,
>  	if (!(vm_flags & VM_UFFD_WP))
>  		pte = pte_clear_uffd_wp(pte);
>  
> -	page = vm_normal_page(vma, addr, pte);
> -	if (page) {
> -		get_page(page);
> -		page_dup_rmap(page, false);
> -		rss[mm_counter(page)]++;
> +	set_pte_at(dst_mm, addr, dst_pte, pte);
> +	return 0;
> +}
> +
> +static inline struct page *
> +page_copy_prealloc(struct mm_struct *src_mm, struct vm_area_struct *vma,
> +		   unsigned long addr)
> +{
> +	struct page *new_page;
> +
> +	new_page = alloc_page_vma(GFP_HIGHUSER_MOVABLE, vma, addr);
> +	if (!new_page)
> +		return NULL;
> +
> +	if (mem_cgroup_charge(new_page, src_mm, GFP_KERNEL)) {
> +		put_page(new_page);
> +		return NULL;
>  	}
> +	cgroup_throttle_swaprate(new_page, GFP_KERNEL);
>  
> -	set_pte_at(dst_mm, addr, dst_pte, pte);
> +	return new_page;
>  }
>  
>  static int copy_pte_range(struct mm_struct *dst_mm, struct mm_struct *src_mm,
> @@ -825,16 +965,20 @@ static int copy_pte_range(struct mm_struct *dst_mm, struct mm_struct *src_mm,
>  	pte_t *orig_src_pte, *orig_dst_pte;
>  	pte_t *src_pte, *dst_pte;
>  	spinlock_t *src_ptl, *dst_ptl;
> -	int progress = 0;
> +	int progress, ret = 0;
>  	int rss[NR_MM_COUNTERS];
>  	swp_entry_t entry = (swp_entry_t){0};
> +	struct page *prealloc = NULL;
>  
>  again:
> +	progress = 0;
>  	init_rss_vec(rss);
>  
>  	dst_pte = pte_alloc_map_lock(dst_mm, dst_pmd, addr, &dst_ptl);
> -	if (!dst_pte)
> -		return -ENOMEM;
> +	if (!dst_pte) {
> +		ret = -ENOMEM;
> +		goto out;
> +	}
>  	src_pte = pte_offset_map(src_pmd, addr);
>  	src_ptl = pte_lockptr(src_mm, src_pmd);
>  	spin_lock_nested(src_ptl, SINGLE_DEPTH_NESTING);
> @@ -866,8 +1010,25 @@ static int copy_pte_range(struct mm_struct *dst_mm, struct mm_struct *src_mm,
>  			progress += 8;
>  			continue;
>  		}
> -		copy_present_pte(dst_mm, src_mm, dst_pte, src_pte,
> -				 vma, addr, rss);
> +		/* copy_present_pte() will clear `*prealloc' if consumed */
> +		ret = copy_present_pte(dst_mm, src_mm, dst_pte, src_pte,
> +				       vma, new, addr, rss, &prealloc);
> +		/*
> +		 * If we need a pre-allocated page for this pte, drop the
> +		 * locks, allocate, and try again.
> +		 */
> +		if (unlikely(ret == -EAGAIN))
> +			break;
> +		if (unlikely(prealloc)) {
> +			/*
> +			 * pre-alloc page cannot be reused by next time so as
> +			 * to strictly follow mempolicy (e.g., alloc_page_vma()
> +			 * will allocate page according to address).  This
> +			 * could only happen if one pinned pte changed.
> +			 */
> +			put_page(prealloc);
> +			prealloc = NULL;
> +		}
>  		progress += 8;
>  	} while (dst_pte++, src_pte++, addr += PAGE_SIZE, addr != end);
>  
> @@ -879,13 +1040,25 @@ static int copy_pte_range(struct mm_struct *dst_mm, struct mm_struct *src_mm,
>  	cond_resched();
>  
>  	if (entry.val) {
> -		if (add_swap_count_continuation(entry, GFP_KERNEL) < 0)
> +		if (add_swap_count_continuation(entry, GFP_KERNEL) < 0) {
> +			ret = -ENOMEM;
> +			goto out;
> +		}
> +		entry.val = 0;
> +	} else if (ret) {
> +		WARN_ON_ONCE(ret != -EAGAIN);
> +		prealloc = page_copy_prealloc(src_mm, vma, addr);
> +		if (!prealloc)
>  			return -ENOMEM;
> -		progress = 0;
> +		/* We've captured and resolved the error. Reset, try again. */
> +		ret = 0;
>  	}
>  	if (addr != end)
>  		goto again;
> -	return 0;
> +out:
> +	if (unlikely(prealloc))
> +		put_page(prealloc);
> +	return ret;
>  }
>  
>  static inline int copy_pmd_range(struct mm_struct *dst_mm, struct mm_struct *src_mm,
> -- 
> GitLab
> 
> 
> From d042035eaf5f9009ad927dc4d3ce848381ccdeed Mon Sep 17 00:00:00 2001
> From: Peter Xu <peterx@xxxxxxxxxx>
> Date: Fri, 25 Sep 2020 18:26:00 -0400
> Subject: [PATCH 111/126] mm/thp: Split huge pmds/puds if they're pinned when
>  fork()
> 
> Pinned pages shouldn't be write-protected when fork() happens, because
> follow up copy-on-write on these pages could cause the pinned pages to
> be replaced by random newly allocated pages.
> 
> For huge PMDs, we split the huge pmd if pinning is detected.  So that
> future handling will be done by the PTE level (with our latest changes,
> each of the small pages will be copied).  We can achieve this by let
> copy_huge_pmd() return -EAGAIN for pinned pages, so that we'll
> fallthrough in copy_pmd_range() and finally land the next
> copy_pte_range() call.
> 
> Huge PUDs will be even more special - so far it does not support
> anonymous pages.  But it can actually be done the same as the huge PMDs
> even if the split huge PUDs means to erase the PUD entries.  It'll
> guarantee the follow up fault ins will remap the same pages in either
> parent/child later.
> 
> This might not be the most efficient way, but it should be easy and
> clean enough.  It should be fine, since we're tackling with a very rare
> case just to make sure userspaces that pinned some thps will still work
> even without MADV_DONTFORK and after they fork()ed.
> 
> Signed-off-by: Peter Xu <peterx@xxxxxxxxxx>
> Signed-off-by: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>
> ---
>  mm/huge_memory.c | 28 ++++++++++++++++++++++++++++
>  1 file changed, 28 insertions(+)
> 
> diff --git a/mm/huge_memory.c b/mm/huge_memory.c
> index faadc449cca5..da397779a6d4 100644
> --- a/mm/huge_memory.c
> +++ b/mm/huge_memory.c
> @@ -1074,6 +1074,24 @@ int copy_huge_pmd(struct mm_struct *dst_mm, struct mm_struct *src_mm,
>  
>  	src_page = pmd_page(pmd);
>  	VM_BUG_ON_PAGE(!PageHead(src_page), src_page);
> +
> +	/*
> +	 * If this page is a potentially pinned page, split and retry the fault
> +	 * with smaller page size.  Normally this should not happen because the
> +	 * userspace should use MADV_DONTFORK upon pinned regions.  This is a
> +	 * best effort that the pinned pages won't be replaced by another
> +	 * random page during the coming copy-on-write.
> +	 */
> +	if (unlikely(is_cow_mapping(vma->vm_flags) &&
> +		     atomic_read(&src_mm->has_pinned) &&
> +		     page_maybe_dma_pinned(src_page))) {
> +		pte_free(dst_mm, pgtable);
> +		spin_unlock(src_ptl);
> +		spin_unlock(dst_ptl);
> +		__split_huge_pmd(vma, src_pmd, addr, false, NULL);
> +		return -EAGAIN;
> +	}
> +
>  	get_page(src_page);
>  	page_dup_rmap(src_page, true);
>  	add_mm_counter(dst_mm, MM_ANONPAGES, HPAGE_PMD_NR);
> @@ -1177,6 +1195,16 @@ int copy_huge_pud(struct mm_struct *dst_mm, struct mm_struct *src_mm,
>  		/* No huge zero pud yet */
>  	}
>  
> +	/* Please refer to comments in copy_huge_pmd() */
> +	if (unlikely(is_cow_mapping(vma->vm_flags) &&
> +		     atomic_read(&src_mm->has_pinned) &&
> +		     page_maybe_dma_pinned(pud_page(pud)))) {
> +		spin_unlock(src_ptl);
> +		spin_unlock(dst_ptl);
> +		__split_huge_pud(vma, src_pud, addr);
> +		return -EAGAIN;
> +	}
> +
>  	pudp_set_wrprotect(src_mm, addr, src_pud);
>  	pud = pud_mkold(pud_wrprotect(pud));
>  	set_pud_at(dst_mm, addr, dst_pud, pud);
> -- 
> GitLab
> 
> 
> From a1b8638ba1320e6684aa98233c15255eb803fac7 Mon Sep 17 00:00:00 2001
> From: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>
> Date: Sun, 27 Sep 2020 14:38:10 -0700
> Subject: [PATCH 112/126] Linux 5.9-rc7
> 
> ---
>  Makefile | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/Makefile b/Makefile
> index 2b66d3398878..992d24467ca0 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -2,7 +2,7 @@
>  VERSION = 5
>  PATCHLEVEL = 9
>  SUBLEVEL = 0
> -EXTRAVERSION = -rc6
> +EXTRAVERSION = -rc7
>  NAME = Kleptomaniac Octopus
>  
>  # *DOCUMENTATION*
> -- 
> GitLab
> 
> 
> From 91870415d7072513052a21fdb9b0f1393b5ba89f Mon Sep 17 00:00:00 2001
> From: Fedora Kernel Team <kernel-team@xxxxxxxxxxxxxxxxx>
> Date: Mon, 28 Sep 2020 04:25:58 +0000
> Subject: [PATCH 113/126] [redhat] kernel-5.9.0-0.rc7.18.test
> 
> Signed-off-by: Fedora Kernel Team <kernel-team@xxxxxxxxxxxxxxxxx>
> ---
>  Makefile.rhelver             | 2 +-
>  redhat/kernel.changelog-8.99 | 4 ++++
>  redhat/marker                | 2 +-
>  3 files changed, 6 insertions(+), 2 deletions(-)
> 
> diff --git a/Makefile.rhelver b/Makefile.rhelver
> index 7633b2faaba4..85efc4f45c49 100644
> --- a/Makefile.rhelver
> +++ b/Makefile.rhelver
> @@ -12,7 +12,7 @@ RHEL_MINOR = 99
>  #
>  # Use this spot to avoid future merge conflicts.
>  # Do not trim this comment.
> -RHEL_RELEASE = 18
> +RHEL_RELEASE = 19
>  
>  #
>  # Early y+1 numbering
> diff --git a/redhat/kernel.changelog-8.99 b/redhat/kernel.changelog-8.99
> index d1f557eef4df..0776dd2a5a09 100644
> --- a/redhat/kernel.changelog-8.99
> +++ b/redhat/kernel.changelog-8.99
> @@ -1,3 +1,7 @@
> +* Mon Sep 28 2020 Fedora Kernel Team <kernel-team@xxxxxxxxxxxxxxxxx> [5.9.0-0.rc7.18.test]
> +- v5.9-rc7 rebase
> +- Updated changelog for the release based on a1bffa48745a (Fedora Kernel Team)
> +
>  * Sun Sep 27 2020 Fedora Kernel Team <kernel-team@xxxxxxxxxxxxxxxxx> [5.9.0-0.rc6.20200927gita1bffa48745a.18]
>  - Merge ark-patches
>  
> diff --git a/redhat/marker b/redhat/marker
> index f6cade62a796..ab4ad51a233a 100644
> --- a/redhat/marker
> +++ b/redhat/marker
> @@ -1 +1 @@
> -a1bffa48745a
> +v5.9-rc7
> -- 
> GitLab
> 
> 
> From ec835ea8eae96eb831b3cc0529e53bdfa28058f8 Mon Sep 17 00:00:00 2001
> From: Fedora Kernel Team <kernel-team@xxxxxxxxxxxxxxxxx>
> Date: Mon, 28 Sep 2020 04:30:46 +0000
> Subject: [PATCH 114/126] Updated changelog for the release based on v5.9-rc7
> 
> ---
>  redhat/kernel.changelog-8.99 | 3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/redhat/kernel.changelog-8.99 b/redhat/kernel.changelog-8.99
> index 0776dd2a5a09..9b005b3fea3d 100644
> --- a/redhat/kernel.changelog-8.99
> +++ b/redhat/kernel.changelog-8.99
> @@ -1,3 +1,6 @@
> +* Mon Sep 28 2020 Fedora Kernel Team <kernel-team@xxxxxxxxxxxxxxxxx> [5.9.0-0.rc7.19]
> +- Merge ark-patches
> +
>  * Mon Sep 28 2020 Fedora Kernel Team <kernel-team@xxxxxxxxxxxxxxxxx> [5.9.0-0.rc7.18.test]
>  - v5.9-rc7 rebase
>  - Updated changelog for the release based on a1bffa48745a (Fedora Kernel Team)
> -- 
> GitLab
> 
> 
> From 6a7548305a04ae0cd9e9f062c050f265d4bf2d2e Mon Sep 17 00:00:00 2001
> From: Maxime Ripard <maxime@xxxxxxxxxx>
> Date: Thu, 24 Sep 2020 10:26:42 +0200
> Subject: [PATCH 115/126] ARM: dts: bcm2835: Change firmware compatible from
>  simple-bus to simple-mfd
> 
> The current binding for the RPi firmware uses the simple-bus compatible as
> a fallback to benefit from its automatic probing of child nodes.
> 
> However, simple-bus also comes with some constraints, like having the ranges,
> our case.
> 
> Let's switch to simple-mfd that provides the same probing logic without
> those constraints.
> 
> Signed-off-by: Maxime Ripard <maxime@xxxxxxxxxx>
> Link: https://lore.kernel.org/r/20200924082642.18144-1-maxime@xxxxxxxxxx
> Signed-off-by: Rob Herring <robh@xxxxxxxxxx>
> ---
>  .../bindings/arm/bcm/raspberrypi,bcm2835-firmware.yaml        | 4 ++--
>  arch/arm/boot/dts/bcm2835-rpi.dtsi                            | 2 +-
>  2 files changed, 3 insertions(+), 3 deletions(-)
> 
> diff --git a/Documentation/devicetree/bindings/arm/bcm/raspberrypi,bcm2835-firmware.yaml b/Documentation/devicetree/bindings/arm/bcm/raspberrypi,bcm2835-firmware.yaml
> index 17e4f20c8d39..6834f5e8df5f 100644
> --- a/Documentation/devicetree/bindings/arm/bcm/raspberrypi,bcm2835-firmware.yaml
> +++ b/Documentation/devicetree/bindings/arm/bcm/raspberrypi,bcm2835-firmware.yaml
> @@ -23,7 +23,7 @@ properties:
>    compatible:
>      items:
>        - const: raspberrypi,bcm2835-firmware
> -      - const: simple-bus
> +      - const: simple-mfd
>  
>    mboxes:
>      $ref: '/schemas/types.yaml#/definitions/phandle'
> @@ -57,7 +57,7 @@ required:
>  examples:
>    - |
>      firmware {
> -        compatible = "raspberrypi,bcm2835-firmware", "simple-bus";
> +        compatible = "raspberrypi,bcm2835-firmware", "simple-mfd";
>          mboxes = <&mailbox>;
>  
>          firmware_clocks: clocks {
> diff --git a/arch/arm/boot/dts/bcm2835-rpi.dtsi b/arch/arm/boot/dts/bcm2835-rpi.dtsi
> index f7ae5a4530b8..d94357b21f7e 100644
> --- a/arch/arm/boot/dts/bcm2835-rpi.dtsi
> +++ b/arch/arm/boot/dts/bcm2835-rpi.dtsi
> @@ -13,7 +13,7 @@ act {
>  
>  	soc {
>  		firmware: firmware {
> -			compatible = "raspberrypi,bcm2835-firmware", "simple-bus";
> +			compatible = "raspberrypi,bcm2835-firmware", "simple-mfd";
>  			#address-cells = <1>;
>  			#size-cells = <1>;
>  
> -- 
> GitLab
> 
> 
> From 5cada726c70e5d5f034e41b913d8bfb7628f2dbe Mon Sep 17 00:00:00 2001
> From: Prarit Bhargava <prarit@xxxxxxxxxx>
> Date: Mon, 28 Sep 2020 08:58:54 -0400
> Subject: [PATCH 116/126] Re-enable CONFIG_IR_SERIAL on Fedora
> 
> The serial IR driver is needed for Fedora media-centers.
> 
> Re-enable the serial IR module for Fedora.
> 
> Suggested-by: Craig Gelowitz <craig@xxxxxxxxxxxx>
> Signed-off-by: Prarit Bhargava <prarit@xxxxxxxxxx>
> Cc: jbastian@xxxxxxxxxx
> ---
>  redhat/configs/fedora/generic/CONFIG_IR_SERIAL | 1 +
>  1 file changed, 1 insertion(+)
>  create mode 100644 redhat/configs/fedora/generic/CONFIG_IR_SERIAL
> 
> diff --git a/redhat/configs/fedora/generic/CONFIG_IR_SERIAL b/redhat/configs/fedora/generic/CONFIG_IR_SERIAL
> new file mode 100644
> index 000000000000..53c7f1d81e8e
> --- /dev/null
> +++ b/redhat/configs/fedora/generic/CONFIG_IR_SERIAL
> @@ -0,0 +1 @@
> +CONFIG_IR_SERIAL=m
> -- 
> GitLab
> 
> 
> From 749543316e90704b0d6ea769cd3bda384e090ee2 Mon Sep 17 00:00:00 2001
> From: Don Zickus <dzickus@xxxxxxxxxx>
> Date: Fri, 25 Sep 2020 19:18:14 -0400
> Subject: [PATCH 117/126] Separate merge-upstream and release stages
> 
> Now that the merge-upstream stage is separated and working, let's
> remove it from the release stage.  These scripts are already excuted by the
> 'merge-upstream' stage.  This changes just removes the duplication. Trivial
> change.
> 
> Signed-off-by: Don Zickus <dzickus@xxxxxxxxxx>
> ---
>  redhat/scripts/ci/ark-create-release.sh | 3 ---
>  1 file changed, 3 deletions(-)
> 
> diff --git a/redhat/scripts/ci/ark-create-release.sh b/redhat/scripts/ci/ark-create-release.sh
> index 0d4cfd9181e5..aeb3696f5caf 100755
> --- a/redhat/scripts/ci/ark-create-release.sh
> +++ b/redhat/scripts/ci/ark-create-release.sh
> @@ -33,9 +33,6 @@ if [ -n "$BASE_RELEASE" ]; then
>  fi
>  
>  git checkout os-build
> -./redhat/scripts/ci/ark-rebase-patches.sh "$UPSTREAM_REF" "$PROJECT_ID"
> -git checkout os-build
> -./redhat/scripts/ci/ark-update-configs.sh "$UPSTREAM_REF" "$PROJECT_ID"
>  make dist-release
>  
>  if git tag -v "$UPSTREAM_REF" > /dev/null 2>&1; then
> -- 
> GitLab
> 
> 
> From a4d63c3732f1a0c91abcf5b7f32b4ef7dcd82025 Mon Sep 17 00:00:00 2001
> From: "Jason A. Donenfeld" <Jason@xxxxxxxxx>
> Date: Mon, 28 Sep 2020 12:35:07 +0200
> Subject: [PATCH 118/126] mm: do not rely on mm == current->mm in
>  __get_user_pages_locked
> 
> It seems likely this block was pasted from internal_get_user_pages_fast,
> which is not passed an mm struct and therefore uses current's.  But
> __get_user_pages_locked is passed an explicit mm, and current->mm is not
> always valid. This was hit when being called from i915, which uses:
> 
>   pin_user_pages_remote->
>     __get_user_pages_remote->
>       __gup_longterm_locked->
>         __get_user_pages_locked
> 
> Before, this would lead to an OOPS:
> 
>   BUG: kernel NULL pointer dereference, address: 0000000000000064
>   #PF: supervisor write access in kernel mode
>   #PF: error_code(0x0002) - not-present page
>   CPU: 10 PID: 1431 Comm: kworker/u33:1 Tainted: P S   U     O      5.9.0-rc7+ #140
>   Hardware name: LENOVO 20QTCTO1WW/20QTCTO1WW, BIOS N2OET47W (1.34 ) 08/06/2020
>   Workqueue: i915-userptr-acquire __i915_gem_userptr_get_pages_worker [i915]
>   RIP: 0010:__get_user_pages_remote+0xd7/0x310
>   Call Trace:
>    __i915_gem_userptr_get_pages_worker+0xc8/0x260 [i915]
>    process_one_work+0x1ca/0x390
>    worker_thread+0x48/0x3c0
>    kthread+0x114/0x130
>    ret_from_fork+0x1f/0x30
>   CR2: 0000000000000064
> 
> This commit fixes the problem by using the mm pointer passed to the
> function rather than the bogus one in current.
> 
> Fixes: 008cfe4418b3 ("mm: Introduce mm_struct.has_pinned")
> Tested-by: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx>
> Reported-by: Harald Arnesen <harald@xxxxxxxxxxx>
> Reviewed-by: Jason Gunthorpe <jgg@xxxxxxxxxx>
> Reviewed-by: Peter Xu <peterx@xxxxxxxxxx>
> Signed-off-by: Jason A. Donenfeld <Jason@xxxxxxxxx>
> Signed-off-by: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>
> ---
>  mm/gup.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/mm/gup.c b/mm/gup.c
> index dfe781d2ad4c..e869c634cc9a 100644
> --- a/mm/gup.c
> +++ b/mm/gup.c
> @@ -1256,7 +1256,7 @@ static __always_inline long __get_user_pages_locked(struct mm_struct *mm,
>  	}
>  
>  	if (flags & FOLL_PIN)
> -		atomic_set(&current->mm->has_pinned, 1);
> +		atomic_set(&mm->has_pinned, 1);
>  
>  	/*
>  	 * FOLL_PIN and FOLL_GET are mutually exclusive. Traditional behavior
> -- 
> GitLab
> 
> 
> From 9949189a72d0eeb2d308a41ed6f941bc0a254271 Mon Sep 17 00:00:00 2001
> From: Prarit Bhargava <prarit@xxxxxxxxxx>
> Date: Thu, 17 Sep 2020 08:55:36 -0400
> Subject: [PATCH 119/126] RHMAINTAINERS: Reassign FIREWIRE
> 
> Reassign FIREWIRE to Jarod.
> 
> Signed-off-by: Prarit Bhargava <prarit@xxxxxxxxxx>
> Cc: jarod@xxxxxxxxxx
> ---
>  redhat/rhdocs/MAINTAINERS/RHMAINTAINERS | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/redhat/rhdocs/MAINTAINERS/RHMAINTAINERS b/redhat/rhdocs/MAINTAINERS/RHMAINTAINERS
> index a7bf575a4d1d..2ee6d6986ee6 100644
> --- a/redhat/rhdocs/MAINTAINERS/RHMAINTAINERS
> +++ b/redhat/rhdocs/MAINTAINERS/RHMAINTAINERS
> @@ -637,7 +637,7 @@ F:	include/linux/dax.h
>  F:	include/trace/events/fs_dax.h
>  
>  FIREWIRE SUBSYSTEM
> -L:	kernel-patches@xxxxxxxxxx
> +M:	Jarod Wilson <jarod@xxxxxxxxxx>
>  S:	Maintained
>  F:	drivers/firewire/
>  F:	include/linux/firewire*.h
> -- 
> GitLab
> 
> 
> From d09f5fc4b844b59c74cfc6a662615bb2575b0dc3 Mon Sep 17 00:00:00 2001
> From: Fedora Kernel Team <kernel-team@xxxxxxxxxxxxxxxxx>
> Date: Tue, 29 Sep 2020 04:26:27 +0000
> Subject: [PATCH 120/126] [redhat] kernel-5.9.0-0.rc7.19.test
> 
> Signed-off-by: Fedora Kernel Team <kernel-team@xxxxxxxxxxxxxxxxx>
> ---
>  Makefile.rhelver             | 2 +-
>  redhat/kernel.changelog-8.99 | 5 +++++
>  2 files changed, 6 insertions(+), 1 deletion(-)
> 
> diff --git a/Makefile.rhelver b/Makefile.rhelver
> index 85efc4f45c49..07fdee0572fb 100644
> --- a/Makefile.rhelver
> +++ b/Makefile.rhelver
> @@ -12,7 +12,7 @@ RHEL_MINOR = 99
>  #
>  # Use this spot to avoid future merge conflicts.
>  # Do not trim this comment.
> -RHEL_RELEASE = 19
> +RHEL_RELEASE = 20
>  
>  #
>  # Early y+1 numbering
> diff --git a/redhat/kernel.changelog-8.99 b/redhat/kernel.changelog-8.99
> index 9b005b3fea3d..2af5ed2c10e1 100644
> --- a/redhat/kernel.changelog-8.99
> +++ b/redhat/kernel.changelog-8.99
> @@ -1,3 +1,8 @@
> +* Tue Sep 29 2020 Fedora Kernel Team <kernel-team@xxxxxxxxxxxxxxxxx> [5.9.0-0.rc7.19.test]
> +- Separate merge-upstream and release stages (Don Zickus)
> +- Re-enable CONFIG_IR_SERIAL on Fedora (Prarit Bhargava)
> +- Updated changelog for the release based on v5.9-rc7 (Fedora Kernel Team)
> +
>  * Mon Sep 28 2020 Fedora Kernel Team <kernel-team@xxxxxxxxxxxxxxxxx> [5.9.0-0.rc7.19]
>  - Merge ark-patches
>  
> -- 
> GitLab
> 
> 
> From ed718bcee0fd3c084f8c5f20af02fefff64cc912 Mon Sep 17 00:00:00 2001
> From: Fedora Kernel Team <kernel-team@xxxxxxxxxxxxxxxxx>
> Date: Tue, 29 Sep 2020 04:31:18 +0000
> Subject: [PATCH 121/126] Updated changelog for the release based on v5.9-rc7
> 
> ---
>  redhat/kernel.changelog-8.99 | 3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/redhat/kernel.changelog-8.99 b/redhat/kernel.changelog-8.99
> index 2af5ed2c10e1..cadeeacd8bfb 100644
> --- a/redhat/kernel.changelog-8.99
> +++ b/redhat/kernel.changelog-8.99
> @@ -1,3 +1,6 @@
> +* Tue Sep 29 2020 Fedora Kernel Team <kernel-team@xxxxxxxxxxxxxxxxx> [5.9.0-0.rc7.20]
> +- Merge ark-patches
> +
>  * Tue Sep 29 2020 Fedora Kernel Team <kernel-team@xxxxxxxxxxxxxxxxx> [5.9.0-0.rc7.19.test]
>  - Separate merge-upstream and release stages (Don Zickus)
>  - Re-enable CONFIG_IR_SERIAL on Fedora (Prarit Bhargava)
> -- 
> GitLab
> 
> 
> From 64ff609b551914d8c2c51d828920f2ffc5237de7 Mon Sep 17 00:00:00 2001
> From: Rob Herring <robh@xxxxxxxxxx>
> Date: Mon, 28 Sep 2020 10:22:56 -0500
> Subject: [PATCH 122/126] dt-bindings: Fix 'reg' size issues in zynqmp examples
> 
> The default sizes in examples for 'reg' are 1 cell each. Fix the
> incorrect sizes in zynqmp examples:
> 
> Documentation/devicetree/bindings/dma/xilinx/xlnx,zynqmp-dpdma.example.dt.yaml: example-0: dma-controller@fd4c0000:reg:0: [0, 4249616384, 0, 4096] is too long
> 	From schema: /usr/local/lib/python3.8/dist-packages/dtschema/schemas/reg.yaml
> Documentation/devicetree/bindings/display/xlnx/xlnx,zynqmp-dpsub.example.dt.yaml: example-0: display@fd4a0000:reg:0: [0, 4249485312, 0, 4096] is too long
> 	From schema: /usr/local/lib/python3.8/dist-packages/dtschema/schemas/reg.yaml
> Documentation/devicetree/bindings/display/xlnx/xlnx,zynqmp-dpsub.example.dt.yaml: example-0: display@fd4a0000:reg:1: [0, 4249526272, 0, 4096] is too long
> 	From schema: /usr/local/lib/python3.8/dist-packages/dtschema/schemas/reg.yaml
> Documentation/devicetree/bindings/display/xlnx/xlnx,zynqmp-dpsub.example.dt.yaml: example-0: display@fd4a0000:reg:2: [0, 4249530368, 0, 4096] is too long
> 	From schema: /usr/local/lib/python3.8/dist-packages/dtschema/schemas/reg.yaml
> Documentation/devicetree/bindings/display/xlnx/xlnx,zynqmp-dpsub.example.dt.yaml: example-0: display@fd4a0000:reg:3: [0, 4249534464, 0, 4096] is too long
> 	From schema: /usr/local/lib/python3.8/dist-packages/dtschema/schemas/reg.yaml
> 
> Cc: Hyun Kwon <hyun.kwon@xxxxxxxxxx>
> Cc: Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx>
> Cc: Vinod Koul <vkoul@xxxxxxxxxx>
> Cc: dri-devel@xxxxxxxxxxxxxxxxxxxxx
> Cc: dmaengine@xxxxxxxxxxxxxxx
> Acked-by: Michal Simek <michal.simek@xxxxxxxxxx>
> Signed-off-by: Rob Herring <robh@xxxxxxxxxx>
> ---
>  .../bindings/display/xlnx/xlnx,zynqmp-dpsub.yaml          | 8 ++++----
>  .../devicetree/bindings/dma/xilinx/xlnx,zynqmp-dpdma.yaml | 2 +-
>  2 files changed, 5 insertions(+), 5 deletions(-)
> 
> diff --git a/Documentation/devicetree/bindings/display/xlnx/xlnx,zynqmp-dpsub.yaml b/Documentation/devicetree/bindings/display/xlnx/xlnx,zynqmp-dpsub.yaml
> index 52a939cade3b..7b9d468c3e52 100644
> --- a/Documentation/devicetree/bindings/display/xlnx/xlnx,zynqmp-dpsub.yaml
> +++ b/Documentation/devicetree/bindings/display/xlnx/xlnx,zynqmp-dpsub.yaml
> @@ -145,10 +145,10 @@ examples:
>  
>      display@fd4a0000 {
>          compatible = "xlnx,zynqmp-dpsub-1.7";
> -        reg = <0x0 0xfd4a0000 0x0 0x1000>,
> -              <0x0 0xfd4aa000 0x0 0x1000>,
> -              <0x0 0xfd4ab000 0x0 0x1000>,
> -              <0x0 0xfd4ac000 0x0 0x1000>;
> +        reg = <0xfd4a0000 0x1000>,
> +              <0xfd4aa000 0x1000>,
> +              <0xfd4ab000 0x1000>,
> +              <0xfd4ac000 0x1000>;
>          reg-names = "dp", "blend", "av_buf", "aud";
>          interrupts = <0 119 4>;
>          interrupt-parent = <&gic>;
> diff --git a/Documentation/devicetree/bindings/dma/xilinx/xlnx,zynqmp-dpdma.yaml b/Documentation/devicetree/bindings/dma/xilinx/xlnx,zynqmp-dpdma.yaml
> index 5de510f8c88c..2a595b18ff6c 100644
> --- a/Documentation/devicetree/bindings/dma/xilinx/xlnx,zynqmp-dpdma.yaml
> +++ b/Documentation/devicetree/bindings/dma/xilinx/xlnx,zynqmp-dpdma.yaml
> @@ -57,7 +57,7 @@ examples:
>  
>      dma: dma-controller@fd4c0000 {
>        compatible = "xlnx,zynqmp-dpdma";
> -      reg = <0x0 0xfd4c0000 0x0 0x1000>;
> +      reg = <0xfd4c0000 0x1000>;
>        interrupts = <GIC_SPI 122 IRQ_TYPE_LEVEL_HIGH>;
>        interrupt-parent = <&gic>;
>        clocks = <&dpdma_clk>;
> -- 
> GitLab
> 
> 
> From efe84d408bf41975db8506d3a1cc02e794e2309c Mon Sep 17 00:00:00 2001
> From: =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= <u.kleine-koenig@xxxxxxxxxxxxxx>
> Date: Sat, 19 Sep 2020 16:39:22 +0200
> Subject: [PATCH 123/126] scripts/dtc: only append to HOST_EXTRACFLAGS instead
>  of overwriting
> MIME-Version: 1.0
> Content-Type: text/plain; charset=UTF-8
> Content-Transfer-Encoding: 8bit
> 
> When building with
> 
> 	$ HOST_EXTRACFLAGS=-g make
> 
> the expectation is that host tools are built with debug informations.
> This however doesn't happen if the Makefile assigns a new value to the
> HOST_EXTRACFLAGS instead of appending to it. So use += instead of := for
> the first assignment.
> 
> Fixes: e3fd9b5384f3 ("scripts/dtc: consolidate include path options in Makefile")
> Signed-off-by: Uwe Kleine-König <u.kleine-koenig@xxxxxxxxxxxxxx>
> Signed-off-by: Rob Herring <robh@xxxxxxxxxx>
> ---
>  scripts/dtc/Makefile | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/scripts/dtc/Makefile b/scripts/dtc/Makefile
> index a698ece43fff..4852bf44e913 100644
> --- a/scripts/dtc/Makefile
> +++ b/scripts/dtc/Makefile
> @@ -9,7 +9,7 @@ dtc-objs	:= dtc.o flattree.o fstree.o data.o livetree.o treesource.o \
>  dtc-objs	+= dtc-lexer.lex.o dtc-parser.tab.o
>  
>  # Source files need to get at the userspace version of libfdt_env.h to compile
> -HOST_EXTRACFLAGS := -I $(srctree)/$(src)/libfdt
> +HOST_EXTRACFLAGS += -I $(srctree)/$(src)/libfdt
>  
>  ifeq ($(shell pkg-config --exists yaml-0.1 2>/dev/null && echo yes),)
>  ifneq ($(CHECK_DT_BINDING)$(CHECK_DTBS),)
> -- 
> GitLab
> 
> 
> From 90fb702791bf99b959006972e8ee7bb4609f441b Mon Sep 17 00:00:00 2001
> From: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>
> Date: Tue, 29 Sep 2020 17:18:34 -0700
> Subject: [PATCH 124/126] autofs: use __kernel_write() for the autofs pipe
>  writing
> 
> autofs got broken in some configurations by commit 13c164b1a186
> ("autofs: switch to kernel_write") because there is now an extra LSM
> permission check done by security_file_permission() in rw_verify_area().
> 
> autofs is one if the few places that really does want the much more
> limited __kernel_write(), because the write is an internal kernel one
> that shouldn't do any user permission checks (it also doesn't need the
> file_start_write/file_end_write logic, since it's just a pipe).
> 
> There are a couple of other cases like that - accounting, core dumping,
> and splice - but autofs stands out because it can be built as a module.
> 
> As a result, we need to export this internal __kernel_write() function
> again.
> 
> We really don't want any other module to use this, but we don't have a
> "EXPORT_SYMBOL_FOR_AUTOFS_ONLY()".  But we can mark it GPL-only to at
> least approximate that "internal use only" for licensing.
> 
> While in this area, make autofs pass in NULL for the file position
> pointer, since it's always a pipe, and we now use a NULL file pointer
> for streaming file descriptors (see file_ppos() and commit 438ab720c675:
> "vfs: pass ppos=NULL to .read()/.write() of FMODE_STREAM files")
> 
> This effectively reverts commits 9db977522449 ("fs: unexport
> __kernel_write") and 13c164b1a186 ("autofs: switch to kernel_write").
> 
> Fixes: 13c164b1a186 ("autofs: switch to kernel_write")
> Reported-by: Ondrej Mosnacek <omosnace@xxxxxxxxxx>
> Acked-by: Christoph Hellwig <hch@xxxxxx>
> Acked-by: Acked-by: Ian Kent <raven@xxxxxxxxxx>
> Signed-off-by: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>
> ---
>  fs/autofs/waitq.c | 2 +-
>  fs/read_write.c   | 8 ++++++++
>  2 files changed, 9 insertions(+), 1 deletion(-)
> 
> diff --git a/fs/autofs/waitq.c b/fs/autofs/waitq.c
> index 74c886f7c51c..5ced859dac53 100644
> --- a/fs/autofs/waitq.c
> +++ b/fs/autofs/waitq.c
> @@ -53,7 +53,7 @@ static int autofs_write(struct autofs_sb_info *sbi,
>  
>  	mutex_lock(&sbi->pipe_mutex);
>  	while (bytes) {
> -		wr = kernel_write(file, data, bytes, &file->f_pos);
> +		wr = __kernel_write(file, data, bytes, NULL);
>  		if (wr <= 0)
>  			break;
>  		data += wr;
> diff --git a/fs/read_write.c b/fs/read_write.c
> index 5db58b8c78d0..d3428189f36b 100644
> --- a/fs/read_write.c
> +++ b/fs/read_write.c
> @@ -538,6 +538,14 @@ ssize_t __kernel_write(struct file *file, const void *buf, size_t count, loff_t
>  	inc_syscw(current);
>  	return ret;
>  }
> +/*
> + * This "EXPORT_SYMBOL_GPL()" is more of a "EXPORT_SYMBOL_DONTUSE()",
> + * but autofs is one of the few internal kernel users that actually
> + * wants this _and_ can be built as a module. So we need to export
> + * this symbol for autofs, even though it really isn't appropriate
> + * for any other kernel modules.
> + */
> +EXPORT_SYMBOL_GPL(__kernel_write);
>  
>  ssize_t kernel_write(struct file *file, const void *buf, size_t count,
>  			    loff_t *pos)
> -- 
> GitLab
> 
> 
> From a47f675eac24fa68106356972d94dc759f9fecc8 Mon Sep 17 00:00:00 2001
> From: Fedora Kernel Team <kernel-team@xxxxxxxxxxxxxxxxx>
> Date: Wed, 30 Sep 2020 04:26:38 +0000
> Subject: [PATCH 125/126] [redhat]
>  kernel-5.9.0-0.rc7.20200930gitfb0155a09b02.20.test
> 
> Signed-off-by: Fedora Kernel Team <kernel-team@xxxxxxxxxxxxxxxxx>
> ---
>  Makefile.rhelver             | 2 +-
>  redhat/kernel.changelog-8.99 | 3 +++
>  redhat/marker                | 2 +-
>  3 files changed, 5 insertions(+), 2 deletions(-)
> 
> diff --git a/Makefile.rhelver b/Makefile.rhelver
> index 07fdee0572fb..165fd682816c 100644
> --- a/Makefile.rhelver
> +++ b/Makefile.rhelver
> @@ -12,7 +12,7 @@ RHEL_MINOR = 99
>  #
>  # Use this spot to avoid future merge conflicts.
>  # Do not trim this comment.
> -RHEL_RELEASE = 20
> +RHEL_RELEASE = 21
>  
>  #
>  # Early y+1 numbering
> diff --git a/redhat/kernel.changelog-8.99 b/redhat/kernel.changelog-8.99
> index cadeeacd8bfb..b875c35aff21 100644
> --- a/redhat/kernel.changelog-8.99
> +++ b/redhat/kernel.changelog-8.99
> @@ -1,3 +1,6 @@
> +* Wed Sep 30 2020 Fedora Kernel Team <kernel-team@xxxxxxxxxxxxxxxxx> [5.9.0-0.rc7.20200930gitfb0155a09b02.20.test]
> +- fb0155a09b02 rebase
> +
>  * Tue Sep 29 2020 Fedora Kernel Team <kernel-team@xxxxxxxxxxxxxxxxx> [5.9.0-0.rc7.20]
>  - Merge ark-patches
>  
> diff --git a/redhat/marker b/redhat/marker
> index ab4ad51a233a..234a5040e110 100644
> --- a/redhat/marker
> +++ b/redhat/marker
> @@ -1 +1 @@
> -v5.9-rc7
> +fb0155a09b02
> -- 
> GitLab
> 
> 
> From 97492496b430e0293e815028719121eff83c7038 Mon Sep 17 00:00:00 2001
> From: Fedora Kernel Team <kernel-team@xxxxxxxxxxxxxxxxx>
> Date: Wed, 30 Sep 2020 04:31:29 +0000
> Subject: [PATCH 126/126] Updated changelog for the release based on
>  fb0155a09b02
> 
> ---
>  redhat/kernel.changelog-8.99 | 3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/redhat/kernel.changelog-8.99 b/redhat/kernel.changelog-8.99
> index b875c35aff21..528244659c85 100644
> --- a/redhat/kernel.changelog-8.99
> +++ b/redhat/kernel.changelog-8.99
> @@ -1,3 +1,6 @@
> +* Wed Sep 30 2020 Fedora Kernel Team <kernel-team@xxxxxxxxxxxxxxxxx> [5.9.0-0.rc7.20200930gitfb0155a09b02.21]
> +- Merge ark-patches
> +
>  * Wed Sep 30 2020 Fedora Kernel Team <kernel-team@xxxxxxxxxxxxxxxxx> [5.9.0-0.rc7.20200930gitfb0155a09b02.20.test]
>  - fb0155a09b02 rebase
>  
> -- 
> GitLab
> _______________________________________________
> kernel mailing list -- kernel@xxxxxxxxxxxxxxxxxxxxxxx
> To unsubscribe send an email to kernel-leave@xxxxxxxxxxxxxxxxxxxxxxx
> Fedora Code of Conduct: https://docs.fedoraproject.org/en-US/project/code-of-conduct/
> List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines
> List Archives: https://lists.fedoraproject.org/archives/list/kernel@xxxxxxxxxxxxxxxxxxxxxxx
_______________________________________________
kernel mailing list -- kernel@xxxxxxxxxxxxxxxxxxxxxxx
To unsubscribe send an email to kernel-leave@xxxxxxxxxxxxxxxxxxxxxxx
Fedora Code of Conduct: https://docs.fedoraproject.org/en-US/project/code-of-conduct/
List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines
List Archives: https://lists.fedoraproject.org/archives/list/kernel@xxxxxxxxxxxxxxxxxxxxxxx





[Index of Archives]     [Fedora General Discussion]     [Older Fedora Users Archive]     [Fedora Advisory Board]     [Fedora Security]     [Fedora Devel Java]     [Fedora Legacy]     [Fedora Desktop]     [ATA RAID]     [Fedora Marketing]     [Fedora Mentors]     [Fedora Package Announce]     [Fedora Package Review]     [Fedora Music]     [Fedora Packaging]     [Centos]     [Fedora SELinux]     [Coolkey]     [Yum Users]     [Tux]     [Yosemite News]     [KDE Users]     [Fedora Art]     [Fedora Docs]     [USB]     [Asterisk PBX]

  Powered by Linux