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(®map_debugfs_early_lock); > list_add(&node->link, ®map_debugfs_early_list); > mutex_unlock(®map_debugfs_early_lock); > @@ -679,7 +678,7 @@ void regmap_debugfs_initcall(void) > > mutex_lock(®map_debugfs_early_lock); > list_for_each_entry_safe(node, tmp, ®map_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, ®, 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, ®, range, val_num); > + ret = _regmap_select_page(map, ®, 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(¤t->thread.fpu.fpr[insn.loongson3_lswc2_format.rt], 0, value); > + set_fpr64(¤t->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(¤t->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(¤t->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(¤t->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(¤t->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(¤t->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(¤t->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 = ¤t_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(¤t->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(¤t->mm->has_pinned, 1); > + > if (!(gup_flags & FOLL_FAST_ONLY)) > might_lock_read(¤t->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(¤t->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