Projects
home:xmzzz:branches:openEuler:24.03
kernel
Sign Up
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
Expand all
Collapse all
Changes of Revision 76
View file
_service:tar_scm:kernel-rt.spec
Changed
@@ -40,10 +40,10 @@ %global upstream_version 6.6 %global upstream_sublevel 0 -%global devel_release 38 +%global devel_release 27 %global maintenance_release .0.0 -%global pkg_release .5 -%global rt_release .rt35 +%global pkg_release .4 +%global rt_release .rt30 %define with_debuginfo 1 # Do not recompute the build-id of vmlinux in find-debuginfo.sh @@ -1057,9 +1057,6 @@ %endif %changelog -* Thu Aug 22 2024 zhangyu <zhangyu4@kylinos.cn> - 6.6.0-38.0.0.5 -- update kernel-rt version to 6.6.0-38.0.0.5 - * Tue May 21 2024 zhangyu <zhangyu4@kylinos.cn> - 6.6.0-27.0.0.4 - update kernel-rt version to 6.6.0-27.0.0.3
View file
_service:tar_scm:kernel.spec
Changed
@@ -6,7 +6,6 @@ %if %{with toolchain_clang} %global toolchain clang -%define with_kabichk 0 %endif %bcond_with clang_lto @@ -43,7 +42,7 @@ %global upstream_sublevel 0 %global devel_release 41 %global maintenance_release .0.0 -%global pkg_release .50 +%global pkg_release .49 %global openeuler_lts 1 %global openeuler_major 2403 @@ -446,7 +445,7 @@ %{openEuler_check_EBS_perm} if $openEuler_has_sign_perm -eq 1 ; then cp %{SOURCE15} ./certs/openeuler-cert.pem - # close kernel native signature + # close kernel native signature sed -i 's/CONFIG_MODULE_SIG_KEY=.*$/CONFIG_MODULE_SIG_KEY=""/g' .config sed -i 's/CONFIG_SYSTEM_TRUSTED_KEYS=.*$/CONFIG_SYSTEM_TRUSTED_KEYS="certs\/openeuler-cert.pem"/g' .config sed -i 's/CONFIG_MODULE_SIG_ALL=y$/CONFIG_MODULE_SIG_ALL=n/g' .config @@ -1090,12 +1089,11 @@ %endif %changelog -* Thu Sep 12 2024 Mingzheng Xing <xingmingzheng@iscas.ac.cn> - 6.6.0-41.0.0.50 +* Fri Sep 13 2024 Mingzheng Xing <xingmingzheng@iscas.ac.cn> - 6.6.0-41.0.0.49 - riscv kernel upgrade to 6.6.0-41.0.0 -- config update -- revert a patch +- Enable device mapper related configs to fix ISO image booting issue for RISC-V -* Fri Sep 06 2024 ZhangPeng <zhangpeng362@huawei.com> - 6.6.0-41.0.0.49 +* Fri Sep 06 2024 ZhangPeng <zhangpeng362@huawei.com> - 6.6.0-41.0.0.48 - !11443 v2 drm/amd/display: Fix null pointer deref in dcn20_resource.c - drm/amd/display: Fix null pointer deref in dcn20_resource.c - !11433 ext4: Track data blocks freeing operation in journal @@ -1233,9 +1231,6 @@ - mm: make HPAGE_PXD_* macros even if !THP - mm/Kconfig: CONFIG_PGTABLE_HAS_HUGE_LEAVES -* Wed Aug 28 2024 Luo Feng <luofeng13@huawei.com> - 6.6.0-39.0.0.48 -- When compiling with clang, skip the kabi check. - * Tue Aug 27 2024 ZhangPeng <zhangpeng362@huawei.com> - 6.6.0-39.0.0.47 - !11156 v3 Fix CVE-2024-43869 - perf: Fix kabi broken of struct perf_event
View file
_service:tar_scm:raspberrypi-kernel-rt.spec
Changed
@@ -2,13 +2,13 @@ %global KernelVer %{version}-%{release}.raspi.%{_target_cpu} -%global hulkrelease 38.0.0 +%global hulkrelease 26.0.0 %global debug_package %{nil} Name: raspberrypi-kernel-rt Version: 6.6.0 -Release: %{hulkrelease}.rt.3 +Release: %{hulkrelease}.rt.1 Summary: Linux Kernel License: GPLv2 URL: http://www.kernel.org/ @@ -265,10 +265,6 @@ %changelog -* Thu Aug 22 2024 zhangyu <zhangyu4@kylinos.cn> - 6.6.0.38.0.3 -- - update Rpi:preempt-RT to openEuler 6.6.0.38.0.0 - - * Wed May 15 2024 zhangyu <zhangyu4@kylinos.cn> - 6.6.0.25.0.0 - - update Rpi:preempt-RT to openEuler 6.6.0.25.0.0 @@ -2893,4 +2889,4 @@ - package init based on openEuler 5.10.0-5.3.0 * Mon Aug 9 2021 Yafen Fang<yafen@iscas.ac.cn> - 5.10.0-5.1.0.1 -- package init based on openEuler 5.10.0-5.1.0 +- package init based on openEuler 5.10.0-5.1.0 \ No newline at end of file
View file
_service:tar_scm:raspberrypi-kernel.spec
Changed
@@ -2,13 +2,13 @@ %global KernelVer %{version}-%{release}.raspi.%{_target_cpu} -%global hulkrelease 39.0.0 +%global hulkrelease 28.0.0 %global debug_package %{nil} Name: raspberrypi-kernel Version: 6.6.0 -Release: %{hulkrelease}.7 +Release: %{hulkrelease}.5 Summary: Linux Kernel License: GPLv2 URL: http://www.kernel.org/ @@ -260,12 +260,6 @@ /usr/src/kernels/%{KernelVer} %changelog -* Fri Aug 30 2024 Yafen Fang <yafen@iscas.ac.cn> - 6.6.0-39.0.0.7 -- update kernel version to openEuler 6.6.0-39.0.0 - -* Sat Aug 17 2024 Yafen Fang <yafen@iscas.ac.cn> - 6.6.0-38.0.0.6 -- update kernel version to openEuler 6.6.0-38.0.0 - * Wed May 29 2024 Yafen Fang <yafen@iscas.ac.cn> - 6.6.0-28.0.0.5 - update kernel version to openEuler 6.6.0-28.0.0
View file
_service:tar_scm:0000-raspberrypi-kernel.patch
Changed
@@ -1,7 +1,7 @@ -From c1e3be3d366faf8c19e493071f7c7a2297558c82 Mon Sep 17 00:00:00 2001 +From 42a6a0e9bca5d03c3bbc4104eb93025153d4cfee Mon Sep 17 00:00:00 2001 From: Yafen <yafen@iscas.ac.cn> -Date: Sat, 17 Aug 2024 20:06:31 +0800 -Subject: PATCH apply RPi patch of 6.6.30 (openEuler 6.6.0-39.0.0) +Date: Wed, 15 May 2024 06:23:21 +0800 +Subject: PATCH apply RPi patch of 6.6.30 (openEuler 6.6.0-26.0.0) --- .../admin-guide/media/bcm2835-isp.rst | 127 + @@ -47,7 +47,7 @@ .../devicetree/bindings/vendor-prefixes.txt | 463 ++ .../devicetree/bindings/vendor-prefixes.yaml | 6 + .../devicetree/configfs-overlays.txt | 31 + - Documentation/driver-api/pwm.rst | 9 + + Documentation/driver-api/pwm.rst | 17 +- .../userspace-api/media/drivers/index.rst | 1 + .../userspace-api/media/v4l/meta-formats.rst | 2 + .../v4l/pixfmt-meta-bcm2835-isp-stats.rst | 41 + @@ -540,7 +540,7 @@ drivers/dma/Makefile | 1 + drivers/dma/bcm2708-dmaengine.c | 281 + drivers/dma/bcm2835-dma.c | 735 +- - .../dma/dw-axi-dmac/dw-axi-dmac-platform.c | 135 +- + .../dma/dw-axi-dmac/dw-axi-dmac-platform.c | 137 +- drivers/dma/dw-axi-dmac/dw-axi-dmac.h | 1 + drivers/firmware/psci/psci.c | 9 +- drivers/firmware/raspberrypi.c | 149 +- @@ -565,12 +565,13 @@ drivers/gpu/drm/drm_fb_helper.c | 11 +- drivers/gpu/drm/drm_modes.c | 5 +- drivers/gpu/drm/drm_probe_helper.c | 5 +- + .../gpu/drm/i915/display/intel_backlight.c | 6 +- drivers/gpu/drm/i915/display/intel_display.c | 13 + drivers/gpu/drm/msm/msm_atomic.c | 2 + drivers/gpu/drm/panel/Kconfig | 32 + drivers/gpu/drm/panel/Makefile | 3 + drivers/gpu/drm/panel/panel-ilitek-ili9806e.c | 484 ++ - drivers/gpu/drm/panel/panel-ilitek-ili9881c.c | 949 ++- + drivers/gpu/drm/panel/panel-ilitek-ili9881c.c | 955 ++- .../gpu/drm/panel/panel-jdi-lt070me05000.c | 19 +- .../drm/panel/panel-raspberrypi-touchscreen.c | 44 +- drivers/gpu/drm/panel/panel-simple.c | 238 +- @@ -598,6 +599,7 @@ drivers/gpu/drm/rp1/rp1-vec/rp1_vec_cfg.c | 508 ++ drivers/gpu/drm/rp1/rp1-vec/rp1_vec_hw.c | 568 ++ drivers/gpu/drm/rp1/rp1-vec/vec_regs.h | 1420 ++++ + drivers/gpu/drm/solomon/ssd130x.c | 2 +- drivers/gpu/drm/tiny/ili9486.c | 1 - drivers/gpu/drm/v3d/v3d_bo.c | 12 +- drivers/gpu/drm/v3d/v3d_debugfs.c | 258 +- @@ -623,7 +625,7 @@ drivers/gpu/drm/vc4/vc4_dsi.c | 98 +- drivers/gpu/drm/vc4/vc4_firmware_kms.c | 2077 +++++ drivers/gpu/drm/vc4/vc4_gem.c | 24 +- - drivers/gpu/drm/vc4/vc4_hdmi.c | 217 +- + drivers/gpu/drm/vc4/vc4_hdmi.c | 216 +- drivers/gpu/drm/vc4/vc4_hdmi.h | 31 + drivers/gpu/drm/vc4/vc4_hdmi_phy.c | 640 ++ drivers/gpu/drm/vc4/vc4_hdmi_regs.h | 222 +- @@ -648,7 +650,7 @@ drivers/hwmon/aht10.c | 7 + drivers/hwmon/ds1621.c | 10 + drivers/hwmon/emc2305.c | 95 +- - drivers/hwmon/pwm-fan.c | 59 +- + drivers/hwmon/pwm-fan.c | 67 +- drivers/hwmon/rp1-adc.c | 307 + drivers/hwmon/sht3x.c | 12 +- drivers/i2c/busses/Kconfig | 19 + @@ -666,6 +668,10 @@ drivers/input/joystick/Kconfig | 8 + drivers/input/joystick/Makefile | 1 + drivers/input/joystick/rpisense-js.c | 153 + + drivers/input/misc/da7280.c | 4 +- + drivers/input/misc/pwm-beeper.c | 4 +- + drivers/input/misc/pwm-vibra.c | 8 +- + drivers/input/touchscreen/ads7846.c | 11 + drivers/input/touchscreen/edt-ft5x06.c | 124 +- drivers/input/touchscreen/goodix.c | 75 +- drivers/input/touchscreen/goodix.h | 5 + @@ -682,6 +688,8 @@ drivers/irqchip/irq-bcm2836.c | 28 +- drivers/irqchip/irq-brcmstb-l2.c | 17 + drivers/leds/leds-gpio.c | 17 +- + drivers/leds/leds-pwm.c | 2 +- + drivers/leds/rgb/leds-pwm-multicolor.c | 4 +- drivers/leds/trigger/Kconfig | 18 + drivers/leds/trigger/Makefile | 2 + drivers/leds/trigger/ledtrig-actpwr.c | 190 + @@ -742,7 +750,7 @@ .../platform/raspberrypi/rp1_cfe/pisp_types.h | 144 + drivers/media/platform/video-mux.c | 73 +- drivers/media/rc/Kconfig | 1 + - drivers/media/rc/pwm-ir-tx.c | 83 +- + drivers/media/rc/pwm-ir-tx.c | 87 +- drivers/media/spi/Kconfig | 1 + drivers/media/usb/dvb-usb-v2/rtl28xxu.c | 4 + drivers/media/v4l2-core/v4l2-ctrls-defs.c | 1 + @@ -779,7 +787,7 @@ drivers/mmc/host/sdhci-pltfm.h | 3 + drivers/mmc/host/sdhci.c | 36 +- drivers/mmc/host/sdhci.h | 9 + - .../net/ethernet/broadcom/genet/bcmgenet.c | 29 +- + .../net/ethernet/broadcom/genet/bcmgenet.c | 45 +- .../net/ethernet/broadcom/genet/bcmgenet.h | 2 +- drivers/net/ethernet/broadcom/genet/bcmmii.c | 6 +- drivers/net/ethernet/cadence/macb.h | 25 + @@ -792,7 +800,7 @@ drivers/net/phy/broadcom.c | 48 +- drivers/net/phy/microchip.c | 27 + drivers/net/usb/lan78xx.c | 64 +- - drivers/net/usb/smsc95xx.c | 45 +- + drivers/net/usb/smsc95xx.c | 51 +- .../broadcom/brcm80211/brcmfmac/bus.h | 2 +- .../broadcom/brcm80211/brcmfmac/cfg80211.c | 364 +- .../broadcom/brcm80211/brcmfmac/cfg80211.h | 18 + @@ -833,6 +841,7 @@ drivers/pinctrl/bcm/pinctrl-bcm2712.c | 1247 +++ drivers/pinctrl/bcm/pinctrl-bcm2835.c | 44 +- drivers/pinctrl/pinctrl-rp1.c | 1605 ++++ + drivers/platform/x86/lenovo-yogabook.c | 2 +- drivers/pmdomain/bcm/bcm2835-power.c | 29 +- drivers/power/reset/gpio-poweroff.c | 21 +- drivers/power/supply/Kconfig | 7 + @@ -842,13 +851,17 @@ drivers/pps/pps.c | 6 +- drivers/pwm/Kconfig | 9 + drivers/pwm/Makefile | 1 + - drivers/pwm/core.c | 62 +- + drivers/pwm/core.c | 74 +- drivers/pwm/pwm-bcm2835.c | 59 +- drivers/pwm/pwm-raspberrypi-poe.c | 81 +- drivers/pwm/pwm-renesas-tpu.c | 1 - drivers/pwm/pwm-rp1.c | 203 + + drivers/pwm/pwm-twl-led.c | 2 +- + drivers/pwm/pwm-vt8500.c | 2 +- + drivers/pwm/sysfs.c | 10 +- drivers/regulator/Kconfig | 10 + drivers/regulator/Makefile | 1 + + drivers/regulator/pwm-regulator.c | 4 +- .../regulator/rpi-panel-attiny-regulator.c | 27 +- drivers/regulator/rpi-panel-v2-regulator.c | 189 + drivers/reset/Kconfig | 2 +- @@ -939,6 +952,7 @@ drivers/usb/dwc3/core.h | 17 +- drivers/usb/dwc3/host.c | 9 +- drivers/usb/gadget/file_storage.c | 3676 +++++++++ + drivers/usb/gadget/function/uvc_configfs.c | 4 +- drivers/usb/host/Kconfig | 10 + drivers/usb/host/Makefile | 1 + drivers/usb/host/dwc_common_port/Makefile | 58 + @@ -1009,6 +1023,9 @@ drivers/usb/phy/phy-generic.c | 7 - drivers/video/backlight/Kconfig | 7 + drivers/video/backlight/Makefile | 1 + + drivers/video/backlight/lm3630a_bl.c | 2 +- + drivers/video/backlight/lp855x_bl.c | 2 +- + drivers/video/backlight/pwm_bl.c | 12 +- drivers/video/backlight/rpi_backlight.c | 119 + drivers/video/fbdev/Kconfig | 28 + drivers/video/fbdev/Makefile | 2 + @@ -1017,6 +1034,7 @@ drivers/video/fbdev/core/fb_defio.c | 3 +- drivers/video/fbdev/core/fbmem.c | 19 +- drivers/video/fbdev/rpisense-fb.c | 297 + + drivers/video/fbdev/ssd1307fb.c | 2 +- drivers/video/logo/logo_linux_clut224.ppm | 2483 ++---- drivers/w1/masters/w1-gpio.c | 15 +- drivers/w1/w1.c | 2 + @@ -1044,7 +1062,7 @@ include/linux/mmc/sd.h | 12 + include/linux/module.h | 2 +- include/linux/platform_data/dma-bcm2708.h | 143 + - include/linux/pwm.h | 29 +- + include/linux/pwm.h | 57 +- include/linux/rp1_platform.h | 20 + include/linux/usb.h | 2 + include/linux/usb/hcd.h | 7 + @@ -1121,7 +1139,7 @@ sound/soc/soc-core.c | 14 +- sound/usb/card.c | 8 +- sound/usb/quirks.c | 2 + - 1117 files changed, 230176 insertions(+), 4250 deletions(-) + 1135 files changed, 230272 insertions(+), 4326 deletions(-) create mode 100644 Documentation/admin-guide/media/bcm2835-isp.rst create mode 100644 Documentation/devicetree/bindings/display/panel/panel-dsi.yaml create mode 100644 Documentation/devicetree/bindings/hwmon/microchip,emc2305.yaml @@ -4457,10 +4475,16 @@ +intended to be used by hardware managers in the kernel, while the copy interface +make sense for developers (since it avoids problems with namespaces). diff --git a/Documentation/driver-api/pwm.rst b/Documentation/driver-api/pwm.rst -index ed5ec9816538..c68ed828fba9 100644 +index 3fdc95f7a1d1..c68ed828fba9 100644 --- a/Documentation/driver-api/pwm.rst +++ b/Documentation/driver-api/pwm.rst -@@ -46,6 +46,15 @@ After being requested, a PWM has to be configured using:: +@@ -41,11 +41,20 @@ the getter, devm_pwm_get() and devm_fwnode_pwm_get(), also exist. + + After being requested, a PWM has to be configured using:: + +- int pwm_apply_state(struct pwm_device *pwm, struct pwm_state *state); ++ int pwm_apply_might_sleep(struct pwm_device *pwm, struct pwm_state *state); + This API controls both the PWM period/duty_cycle config and the enable/disable state. @@ -4476,6 +4500,23 @@ As a consumer, don't rely on the output's state for a disabled PWM. If it's easily possible, drivers are supposed to emit the inactive state, but some drivers cannot. If you rely on getting the inactive state, use .duty_cycle=0, +@@ -57,13 +66,13 @@ If supported by the driver, the signal can be optimized, for example to improve + EMI by phase shifting the individual channels of a chip. + + The pwm_config(), pwm_enable() and pwm_disable() functions are just wrappers +-around pwm_apply_state() and should not be used if the user wants to change ++around pwm_apply_might_sleep() and should not be used if the user wants to change + several parameter at once. For example, if you see pwm_config() and + pwm_{enable,disable}() calls in the same function, this probably means you +-should switch to pwm_apply_state(). ++should switch to pwm_apply_might_sleep(). + + The PWM user API also allows one to query the PWM state that was passed to the +-last invocation of pwm_apply_state() using pwm_get_state(). Note this is ++last invocation of pwm_apply_might_sleep() using pwm_get_state(). Note this is + different to what the driver has actually implemented if the request cannot be + satisfied exactly with the hardware in use. There is currently no way for + consumers to get the actually implemented settings. diff --git a/Documentation/userspace-api/media/drivers/index.rst b/Documentation/userspace-api/media/drivers/index.rst index 6708d649afd7..65de8ab99c58 100644 --- a/Documentation/userspace-api/media/drivers/index.rst @@ -5150,7 +5191,7 @@ + pixfmt-nv24 pixfmt-m420 diff --git a/MAINTAINERS b/MAINTAINERS -index 8d4577d29e97..f1f37169169a 100644 +index 1c70622103e0..2e813db650d1 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1563,6 +1563,22 @@ S: Maintained @@ -5206,7 +5247,7 @@ BROADCOM BCM47XX MIPS ARCHITECTURE M: Hauke Mehrtens <hauke@hauke-m.de> M: Rafał Miłecki <zajec5@gmail.com> -@@ -15885,6 +15924,14 @@ S: Maintained +@@ -15868,6 +15907,14 @@ S: Maintained T: git git://linuxtv.org/media_tree.git F: drivers/media/i2c/ov5695.c @@ -5221,16 +5262,16 @@ OMNIVISION OV7670 SENSOR DRIVER L: linux-media@vger.kernel.org S: Orphan -@@ -17454,7 +17501,7 @@ F: drivers/video/backlight/pwm_bl.c +@@ -17426,7 +17473,7 @@ F: drivers/video/backlight/pwm_bl.c F: include/dt-bindings/pwm/ F: include/linux/pwm.h F: include/linux/pwm_backlight.h --K: pwm_(config|apply_might_sleep|ops) +-K: pwm_(config|apply_state|ops) +K: pwm_(config|apply_might_sleep|apply_atomic|ops) PXA GPIO DRIVER M: Robert Jarzmik <robert.jarzmik@free.fr> -@@ -18646,6 +18693,13 @@ S: Supported +@@ -18618,6 +18665,13 @@ S: Supported F: drivers/iio/light/rohm-bu27008.c F: drivers/iio/light/rohm-bu27034.c @@ -5244,7 +5285,7 @@ ROHM MULTIFUNCTION BD9571MWV-M PMIC DEVICE DRIVERS M: Marek Vasut <marek.vasut+renesas@gmail.com> L: linux-kernel@vger.kernel.org -@@ -20039,7 +20093,7 @@ M: Sakari Ailus <sakari.ailus@linux.intel.com> +@@ -20011,7 +20065,7 @@ M: Sakari Ailus <sakari.ailus@linux.intel.com> L: linux-media@vger.kernel.org S: Maintained T: git git://linuxtv.org/media_tree.git @@ -5253,7 +5294,7 @@ F: drivers/media/i2c/imx258.c SONY IMX274 SENSOR DRIVER -@@ -20116,6 +20170,31 @@ T: git git://linuxtv.org/media_tree.git +@@ -20088,6 +20142,31 @@ T: git git://linuxtv.org/media_tree.git F: Documentation/devicetree/bindings/media/i2c/sony,imx415.yaml F: drivers/media/i2c/imx415.c @@ -56480,10 +56521,10 @@ + #endif diff --git a/arch/arm/include/asm/uaccess.h b/arch/arm/include/asm/uaccess.h -index c28f5ec21e41..c59c5e63f2dd 100644 +index 2162ebc6c77a..e766a121555a 100644 --- a/arch/arm/include/asm/uaccess.h +++ b/arch/arm/include/asm/uaccess.h -@@ -499,6 +499,9 @@ do { \ +@@ -500,6 +500,9 @@ do { \ extern unsigned long __must_check arm_copy_from_user(void *to, const void __user *from, unsigned long n); @@ -56494,10 +56535,10 @@ raw_copy_from_user(void *to, const void __user *from, unsigned long n) { diff --git a/arch/arm/kernel/fiq.c b/arch/arm/kernel/fiq.c -index d2c8e5313539..bb320f08ad2f 100644 +index 9b51562b1f86..d7a1048763a2 100644 --- a/arch/arm/kernel/fiq.c +++ b/arch/arm/kernel/fiq.c -@@ -57,6 +57,8 @@ +@@ -64,6 +64,8 @@ static unsigned long dfl_fiq_insn; static struct pt_regs dfl_fiq_regs; @@ -56506,7 +56547,7 @@ /* Default reacquire function * - we always relinquish FIQ control * - we always reacquire FIQ control -@@ -141,6 +143,8 @@ static int fiq_start; +@@ -148,6 +150,8 @@ static int fiq_start; void enable_fiq(int fiq) { @@ -56543,10 +56584,10 @@ /* diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c -index c66b560562b3..9e312aad369f 100644 +index 5cfc9c5056a7..0ea30401beaa 100644 --- a/arch/arm/kernel/setup.c +++ b/arch/arm/kernel/setup.c -@@ -1276,6 +1276,8 @@ static int c_show(struct seq_file *m, void *v) +@@ -1277,6 +1277,8 @@ static int c_show(struct seq_file *m, void *v) { int i, j; u32 cpuid; @@ -56555,7 +56596,7 @@ for_each_online_cpu(i) { /* -@@ -1335,6 +1337,14 @@ static int c_show(struct seq_file *m, void *v) +@@ -1336,6 +1338,14 @@ static int c_show(struct seq_file *m, void *v) seq_printf(m, "Revision\t: %04x\n", system_rev); seq_printf(m, "Serial\t\t: %s\n", system_serial); @@ -58426,10 +58467,10 @@ /* * Save the userland NEON/VFP state. Under UP, diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig -index 501ec560a939..740deea8f801 100644 +index fc56e4e30e29..bb49f48de832 100644 --- a/arch/arm64/Kconfig +++ b/arch/arm64/Kconfig -@@ -125,7 +125,8 @@ config ARM64 +@@ -124,7 +124,8 @@ config ARM64 select CRC32 select DCACHE_WORD_ACCESS select DYNAMIC_FTRACE if FUNCTION_TRACER @@ -63590,10 +63631,10 @@ asmlinkage void aesbs_ecb_encrypt(u8 out, u8 const in, u8 const rk, diff --git a/arch/arm64/kernel/armv8_deprecated.c b/arch/arm64/kernel/armv8_deprecated.c -index 87ac0b9c0b4f..fe108a850d4d 100644 +index fd0f291e215e..b843b686affd 100644 --- a/arch/arm64/kernel/armv8_deprecated.c +++ b/arch/arm64/kernel/armv8_deprecated.c -@@ -542,9 +542,14 @@ static void __init register_insn_emulation(struct insn_emulation *insn) +@@ -539,9 +539,14 @@ static void __init register_insn_emulation(struct insn_emulation *insn) switch (insn->status) { case INSN_DEPRECATED: @@ -63609,7 +63650,7 @@ break; case INSN_OBSOLETE: diff --git a/arch/arm64/kernel/cpuinfo.c b/arch/arm64/kernel/cpuinfo.c -index 5ad8d8697d56..1d6136f28ab0 100644 +index eecedf5b67fa..33ac8dfb30ca 100644 --- a/arch/arm64/kernel/cpuinfo.c +++ b/arch/arm64/kernel/cpuinfo.c @@ -17,6 +17,7 @@ @@ -63672,10 +63713,10 @@ /* diff --git a/arch/arm64/kernel/setup.c b/arch/arm64/kernel/setup.c -index 3f00cf64059e..0290c734242a 100644 +index 95cb22c083c8..d8cdca9144ba 100644 --- a/arch/arm64/kernel/setup.c +++ b/arch/arm64/kernel/setup.c -@@ -270,9 +270,9 @@ static void __init request_standard_resources(void) +@@ -269,9 +269,9 @@ static void __init request_standard_resources(void) size_t res_size; kernel_code.start = __pa_symbol(_stext); @@ -65582,10 +65623,10 @@ +MODULE_DESCRIPTION("Driver for accessing GPIOs from userspace"); +MODULE_AUTHOR("Jonathan Bell <jonathan@raspberrypi.com>"); diff --git a/drivers/char/tpm/tpm_tis_spi_main.c b/drivers/char/tpm/tpm_tis_spi_main.c -index 4bdad9e3667f..c6c9d5d714b2 100644 +index c5c3197ee29f..02700cb16f90 100644 --- a/drivers/char/tpm/tpm_tis_spi_main.c +++ b/drivers/char/tpm/tpm_tis_spi_main.c -@@ -348,7 +348,11 @@ static struct spi_driver tpm_tis_spi_driver = { +@@ -347,7 +347,11 @@ static struct spi_driver tpm_tis_spi_driver = { .pm = &tpm_tis_pm, .of_match_table = of_match_ptr(of_tis_spi_match), .acpi_match_table = ACPI_PTR(acpi_tis_spi_match), @@ -66050,7 +66091,7 @@ MODULE_AUTHOR("Eric Anholt <eric@anholt.net>"); MODULE_DESCRIPTION("BCM2835 clock driver"); diff --git a/drivers/clk/bcm/clk-raspberrypi.c b/drivers/clk/bcm/clk-raspberrypi.c -index 4d411408e4af..60d01131b12b 100644 +index 829406dc44a2..9b331f249a98 100644 --- a/drivers/clk/bcm/clk-raspberrypi.c +++ b/drivers/clk/bcm/clk-raspberrypi.c @@ -34,6 +34,7 @@ static char *rpi_firmware_clk_names = { @@ -69714,7 +69755,7 @@ +MODULE_DESCRIPTION("RP1 clock driver"); +MODULE_LICENSE("GPL"); diff --git a/drivers/dma/Kconfig b/drivers/dma/Kconfig -index e36506471a4f..e8e029bab078 100644 +index 7a618f629e86..60b10aed1b81 100644 --- a/drivers/dma/Kconfig +++ b/drivers/dma/Kconfig @@ -669,6 +669,10 @@ config UNIPHIER_XDMAC @@ -71143,7 +71184,7 @@ MODULE_ALIAS("platform:bcm2835-dma"); MODULE_DESCRIPTION("BCM2835 DMA engine driver"); diff --git a/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c b/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c -index 72fb40de58b3..7387df7525c0 100644 +index dd02f84e404d..43053530aa0b 100644 --- a/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c +++ b/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c @@ -12,6 +12,7 @@ @@ -71192,7 +71233,16 @@ for (i = 0; i < chip->dw->hdata->nr_channels; i++) { axi_chan_irq_disable(&chip->dw->chani, DWAXIDMAC_IRQ_ALL); axi_chan_disable(&chip->dw->chani); -@@ -305,6 +328,48 @@ static void vchan_desc_put(struct virt_dma_desc *vdesc) +@@ -282,7 +305,7 @@ static struct axi_dma_lli *axi_desc_get(struct axi_dma_chan *chan, + static void axi_desc_put(struct axi_dma_desc *desc) + { + struct axi_dma_chan *chan = desc->chan; +- int count = atomic_read(&chan->descs_allocated); ++ u32 count = desc->hw_desc_count; + struct axi_dma_hw_desc *hw_desc; + int descs_put; + +@@ -304,6 +327,48 @@ static void vchan_desc_put(struct virt_dma_desc *vdesc) axi_desc_put(vd_to_axi_desc(vdesc)); } @@ -71241,7 +71291,7 @@ static enum dma_status dma_chan_tx_status(struct dma_chan *dchan, dma_cookie_t cookie, struct dma_tx_state *txstate) -@@ -314,10 +379,7 @@ dma_chan_tx_status(struct dma_chan *dchan, dma_cookie_t cookie, +@@ -313,10 +378,7 @@ dma_chan_tx_status(struct dma_chan *dchan, dma_cookie_t cookie, enum dma_status status; u32 completed_length; unsigned long flags; @@ -71252,7 +71302,7 @@ status = dma_cookie_status(dchan, cookie, txstate); if (status == DMA_COMPLETE || !txstate) -@@ -326,16 +388,31 @@ dma_chan_tx_status(struct dma_chan *dchan, dma_cookie_t cookie, +@@ -325,16 +387,31 @@ dma_chan_tx_status(struct dma_chan *dchan, dma_cookie_t cookie, spin_lock_irqsave(&chan->vc.lock, flags); vdesc = vchan_find_desc(&chan->vc, cookie); @@ -71291,7 +71341,7 @@ return status; } -@@ -389,8 +466,6 @@ static void axi_chan_block_xfer_start(struct axi_dma_chan *chan, +@@ -388,8 +465,6 @@ static void axi_chan_block_xfer_start(struct axi_dma_chan *chan, return; } @@ -71300,7 +71350,7 @@ config.dst_multblk_type = DWAXIDMAC_MBLK_TYPE_LL; config.src_multblk_type = DWAXIDMAC_MBLK_TYPE_LL; config.tt_fc = DWAXIDMAC_TT_FC_MEM_TO_MEM_DMAC; -@@ -523,7 +598,7 @@ static void dw_axi_dma_set_hw_channel(struct axi_dma_chan *chan, bool set) +@@ -522,7 +597,7 @@ static void dw_axi_dma_set_hw_channel(struct axi_dma_chan *chan, bool set) unsigned long reg_value, val; if (!chip->apb_regs) { @@ -71309,7 +71359,7 @@ return; } -@@ -627,18 +702,25 @@ static int dw_axi_dma_set_hw_desc(struct axi_dma_chan *chan, +@@ -626,18 +701,25 @@ static int dw_axi_dma_set_hw_desc(struct axi_dma_chan *chan, switch (chan->direction) { case DMA_MEM_TO_DEV: reg_width = __ffs(chan->config.dst_addr_width); @@ -71337,7 +71387,7 @@ DWAXIDMAC_CH_CTL_L_INC << CH_CTL_L_DST_INC_POS | DWAXIDMAC_CH_CTL_L_NOINC << CH_CTL_L_SRC_INC_POS; block_ts = len >> reg_width; -@@ -674,9 +756,6 @@ static int dw_axi_dma_set_hw_desc(struct axi_dma_chan *chan, +@@ -673,9 +755,6 @@ static int dw_axi_dma_set_hw_desc(struct axi_dma_chan *chan, } hw_desc->lli->block_ts_lo = cpu_to_le32(block_ts - 1); @@ -71347,7 +71397,7 @@ hw_desc->lli->ctl_lo = cpu_to_le32(ctllo); set_desc_src_master(hw_desc); -@@ -771,6 +850,8 @@ dw_axi_dma_chan_prep_cyclic(struct dma_chan *dchan, dma_addr_t dma_addr, +@@ -770,6 +849,8 @@ dw_axi_dma_chan_prep_cyclic(struct dma_chan *dchan, dma_addr_t dma_addr, src_addr += segment_len; } @@ -71356,7 +71406,7 @@ llp = desc->hw_desc0.llp; /* Managed transfer list */ -@@ -836,6 +917,9 @@ dw_axi_dma_chan_prep_slave_sg(struct dma_chan *dchan, struct scatterlist *sgl, +@@ -835,6 +916,9 @@ dw_axi_dma_chan_prep_slave_sg(struct dma_chan *dchan, struct scatterlist *sgl, mem = sg_dma_address(sg); len = sg_dma_len(sg); num_segments = DIV_ROUND_UP(sg_dma_len(sg), axi_block_len); @@ -71366,7 +71416,7 @@ segment_len = DIV_ROUND_UP(sg_dma_len(sg), num_segments); do { -@@ -850,6 +934,8 @@ dw_axi_dma_chan_prep_slave_sg(struct dma_chan *dchan, struct scatterlist *sgl, +@@ -849,6 +933,8 @@ dw_axi_dma_chan_prep_slave_sg(struct dma_chan *dchan, struct scatterlist *sgl, } while (len >= segment_len); } @@ -71375,7 +71425,7 @@ /* Set end-of-link to the last link descriptor of list */ set_desc_last(&desc->hw_descnum_sgs - 1); -@@ -957,6 +1043,8 @@ dma_chan_prep_dma_memcpy(struct dma_chan *dchan, dma_addr_t dst_adr, +@@ -956,6 +1042,8 @@ dma_chan_prep_dma_memcpy(struct dma_chan *dchan, dma_addr_t dst_adr, num++; } @@ -71384,7 +71434,7 @@ /* Set end-of-link to the last link descriptor of list */ set_desc_last(&desc->hw_descnum - 1); /* Managed transfer list */ -@@ -1005,7 +1093,7 @@ static void axi_chan_dump_lli(struct axi_dma_chan *chan, +@@ -1004,7 +1092,7 @@ static void axi_chan_dump_lli(struct axi_dma_chan *chan, static void axi_chan_list_dump_lli(struct axi_dma_chan *chan, struct axi_dma_desc *desc_head) { @@ -71393,7 +71443,7 @@ int i; for (i = 0; i < count; i++) -@@ -1048,11 +1136,11 @@ static noinline void axi_chan_handle_err(struct axi_dma_chan *chan, u32 status) +@@ -1047,11 +1135,11 @@ static noinline void axi_chan_handle_err(struct axi_dma_chan *chan, u32 status) static void axi_chan_block_xfer_complete(struct axi_dma_chan *chan) { @@ -71406,7 +71456,7 @@ u64 llp; int i; -@@ -1074,6 +1162,7 @@ static void axi_chan_block_xfer_complete(struct axi_dma_chan *chan) +@@ -1073,6 +1161,7 @@ static void axi_chan_block_xfer_complete(struct axi_dma_chan *chan) if (chan->cyclic) { desc = vd_to_axi_desc(vd); if (desc) { @@ -71414,7 +71464,7 @@ llp = lo_hi_readq(chan->chan_regs + CH_LLP); for (i = 0; i < count; i++) { hw_desc = &desc->hw_desci; -@@ -1323,6 +1412,10 @@ static int parse_device_properties(struct axi_dma_chip *chip) +@@ -1325,6 +1414,10 @@ static int parse_device_properties(struct axi_dma_chip *chip) chip->dw->hdata->nr_masters = tmp; @@ -71426,7 +71476,7 @@ if (ret) return ret; diff --git a/drivers/dma/dw-axi-dmac/dw-axi-dmac.h b/drivers/dma/dw-axi-dmac/dw-axi-dmac.h -index 8521530a34ec..3bdbc50312f1 100644 +index eb267cb24f67..47c3a4f0dac3 100644 --- a/drivers/dma/dw-axi-dmac/dw-axi-dmac.h +++ b/drivers/dma/dw-axi-dmac/dw-axi-dmac.h @@ -101,6 +101,7 @@ struct axi_dma_desc { @@ -71438,7 +71488,7 @@ u32 length; u32 period_len; diff --git a/drivers/firmware/psci/psci.c b/drivers/firmware/psci/psci.c -index 2328ca58bba6..7a1e42237cf2 100644 +index d9629ff87861..e2ffd734d5e8 100644 --- a/drivers/firmware/psci/psci.c +++ b/drivers/firmware/psci/psci.c @@ -315,7 +315,14 @@ static int psci_sys_reset(struct notifier_block *nb, unsigned long action, @@ -71458,10 +71508,10 @@ invoke_psci_fn(PSCI_0_2_FN_SYSTEM_RESET, 0, 0, 0); } diff --git a/drivers/firmware/raspberrypi.c b/drivers/firmware/raspberrypi.c -index 428ae54d3196..f1a2505ebc9e 100644 +index f66efaa5196d..17abde1e7d55 100644 --- a/drivers/firmware/raspberrypi.c +++ b/drivers/firmware/raspberrypi.c -@@ -14,6 +14,7 @@ +@@ -13,6 +13,7 @@ #include <linux/of.h> #include <linux/of_platform.h> #include <linux/platform_device.h> @@ -71469,7 +71519,7 @@ #include <linux/slab.h> #include <soc/bcm2835/raspberrypi-firmware.h> -@@ -32,8 +33,11 @@ struct rpi_firmware { +@@ -31,8 +32,11 @@ struct rpi_firmware { u32 enabled; struct kref consumers; @@ -71481,7 +71531,7 @@ static DEFINE_MUTEX(transaction_lock); static void response_callback(struct mbox_client *cl, void *msg) -@@ -175,15 +179,92 @@ int rpi_firmware_property(struct rpi_firmware *fw, +@@ -174,15 +178,92 @@ int rpi_firmware_property(struct rpi_firmware *fw, kfree(data); @@ -71574,7 +71624,7 @@ int ret = rpi_firmware_property(fw, RPI_FIRMWARE_GET_FIRMWARE_REVISION, &packet, sizeof(packet)); -@@ -193,7 +274,35 @@ rpi_firmware_print_firmware_revision(struct rpi_firmware *fw) +@@ -192,7 +273,35 @@ rpi_firmware_print_firmware_revision(struct rpi_firmware *fw) /* This is not compatible with y2038 */ date_and_time = packet; @@ -71611,7 +71661,7 @@ } static void -@@ -208,6 +317,11 @@ rpi_register_hwmon_driver(struct device *dev, struct rpi_firmware *fw) +@@ -207,6 +316,11 @@ rpi_register_hwmon_driver(struct device *dev, struct rpi_firmware *fw) rpi_hwmon = platform_device_register_data(dev, "raspberrypi-hwmon", -1, NULL, 0); @@ -71623,7 +71673,7 @@ } static void rpi_register_clk_driver(struct device *dev) -@@ -300,8 +414,10 @@ static int rpi_firmware_probe(struct platform_device *pdev) +@@ -299,8 +413,10 @@ static int rpi_firmware_probe(struct platform_device *pdev) kref_init(&fw->consumers); platform_set_drvdata(pdev, fw); @@ -71634,7 +71684,7 @@ rpi_register_hwmon_driver(dev, fw); rpi_register_clk_driver(dev); -@@ -328,6 +444,7 @@ static int rpi_firmware_remove(struct platform_device *pdev) +@@ -327,6 +443,7 @@ static int rpi_firmware_remove(struct platform_device *pdev) rpi_clk = NULL; rpi_firmware_put(fw); @@ -71642,7 +71692,7 @@ return 0; } -@@ -408,7 +525,35 @@ static struct platform_driver rpi_firmware_driver = { +@@ -407,7 +524,35 @@ static struct platform_driver rpi_firmware_driver = { .shutdown = rpi_firmware_shutdown, .remove = rpi_firmware_remove, }; @@ -71680,7 +71730,7 @@ MODULE_AUTHOR("Eric Anholt <eric@anholt.net>"); MODULE_DESCRIPTION("Raspberry Pi firmware driver"); diff --git a/drivers/gpio/Kconfig b/drivers/gpio/Kconfig -index 509f42e6ab6a..0c1e188c75a4 100644 +index e52e8b5ae88e..7e646ea60873 100644 --- a/drivers/gpio/Kconfig +++ b/drivers/gpio/Kconfig @@ -207,10 +207,16 @@ config GPIO_BCM_XGS_IPROC @@ -73338,7 +73388,7 @@ +MODULE_DESCRIPTION("GPIO FSM driver"); +MODULE_ALIAS("platform:gpio-fsm"); diff --git a/drivers/gpio/gpio-mmio.c b/drivers/gpio/gpio-mmio.c -index c9f9f4e36c89..25c08cc5cd20 100644 +index 74fdf0d87b2c..7e26fa957d5e 100644 --- a/drivers/gpio/gpio-mmio.c +++ b/drivers/gpio/gpio-mmio.c @@ -234,6 +234,25 @@ static void bgpio_set(struct gpio_chip *gc, unsigned int gpio, int val) @@ -73515,10 +73565,10 @@ } else { if (flags & BGPIOF_NO_OUTPUT) diff --git a/drivers/gpio/gpio-pca953x.c b/drivers/gpio/gpio-pca953x.c -index ce9a94e33280..11bdd678272d 100644 +index bdd50a78e414..52923f616222 100644 --- a/drivers/gpio/gpio-pca953x.c +++ b/drivers/gpio/gpio-pca953x.c -@@ -1347,6 +1347,7 @@ static const struct of_device_id pca953x_dt_ids = { +@@ -1345,6 +1345,7 @@ static const struct of_device_id pca953x_dt_ids = { { .compatible = "ti,tca6424", .data = OF_953X(24, PCA_INT), }, { .compatible = "ti,tca9538", .data = OF_953X( 8, PCA_INT), }, { .compatible = "ti,tca9539", .data = OF_953X(16, PCA_INT), }, @@ -73677,10 +73727,10 @@ +MODULE_AUTHOR("Dave Stevenson <dave.stevenson@raspberrypi.com>"); +MODULE_DESCRIPTION("PWM GPIO driver"); diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c -index 5c0016c77d2a..64194a4584f6 100644 +index 1c512ed3fa6d..d15870f7cbc0 100644 --- a/drivers/gpio/gpiolib.c +++ b/drivers/gpio/gpiolib.c -@@ -58,6 +58,8 @@ +@@ -57,6 +57,8 @@ #define extra_checks 0 #endif @@ -73689,7 +73739,7 @@ /* Device and char device-related information */ static DEFINE_IDA(gpio_ida); static dev_t gpio_devt; -@@ -2592,8 +2594,8 @@ int gpiod_direction_output(struct gpio_desc *desc, int value) +@@ -2591,8 +2593,8 @@ int gpiod_direction_output(struct gpio_desc *desc, int value) value = !!value; /* GPIOs used for enabled IRQs shall not be set as output */ @@ -73700,7 +73750,7 @@ gpiod_err(desc, "%s: tried to set a GPIO tied to an IRQ as output\n", __func__); -@@ -3471,8 +3473,8 @@ int gpiochip_lock_as_irq(struct gpio_chip *gc, unsigned int offset) +@@ -3470,8 +3472,8 @@ int gpiochip_lock_as_irq(struct gpio_chip *gc, unsigned int offset) } /* To be valid for IRQ the line needs to be input or open drain */ @@ -73712,7 +73762,7 @@ "%s: tried to flag a GPIO set as output for IRQ\n", __func__); diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig -index a5b92adb8aff..5352376b5c45 100644 +index d1cad875d2f7..89eb6afe2688 100644 --- a/drivers/gpu/drm/Kconfig +++ b/drivers/gpu/drm/Kconfig @@ -346,6 +346,8 @@ source "drivers/gpu/drm/v3d/Kconfig" @@ -73725,13 +73775,13 @@ source "drivers/gpu/drm/etnaviv/Kconfig" diff --git a/drivers/gpu/drm/Makefile b/drivers/gpu/drm/Makefile -index b120267fbe40..8933dbeb2b83 100644 +index a670c0d95023..0df4a7d4f8e2 100644 --- a/drivers/gpu/drm/Makefile +++ b/drivers/gpu/drm/Makefile -@@ -200,3 +200,4 @@ obj-$(CONFIG_DRM_SPRD) += sprd/ +@@ -199,3 +199,4 @@ obj-y += solomon/ + obj-$(CONFIG_DRM_SPRD) += sprd/ obj-$(CONFIG_DRM_LOONGSON) += loongson/ obj-$(CONFIG_DRM_PHYTIUM) += phytium/ - obj-$(CONFIG_HYDCU_FIXUP_HEADER) += hygon/hydcu-fixup-header/ +obj-y += rp1/ diff --git a/drivers/gpu/drm/bridge/Kconfig b/drivers/gpu/drm/bridge/Kconfig index 3e6a4e2044c0..b1c5ef817598 100644 @@ -74001,7 +74051,7 @@ * drm_color_lut_check - check validity of lookup table * @lut: property blob containing LUT to check diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c -index 309aad5f0c80..476ea750acf4 100644 +index c44d5bcf1284..fa125167c018 100644 --- a/drivers/gpu/drm/drm_connector.c +++ b/drivers/gpu/drm/drm_connector.c @@ -33,6 +33,7 @@ @@ -74145,10 +74195,10 @@ return drm_connector_set_panel_orientation(connector, orientation); } diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c -index 117237d3528b..c7c2040bda0c 100644 +index d612133e2cf7..7d4ed1530ac2 100644 --- a/drivers/gpu/drm/drm_fb_helper.c +++ b/drivers/gpu/drm/drm_fb_helper.c -@@ -1840,7 +1840,7 @@ __drm_fb_helper_initial_config_and_unlock(struct drm_fb_helper *fb_helper) +@@ -1837,7 +1837,7 @@ __drm_fb_helper_initial_config_and_unlock(struct drm_fb_helper *fb_helper) struct drm_device *dev = fb_helper->dev; struct fb_info *info; unsigned int width, height; @@ -74212,6 +74262,37 @@ uint64_t default_mode; if (drm_object_property_get_default_value(&connector->base, +diff --git a/drivers/gpu/drm/i915/display/intel_backlight.c b/drivers/gpu/drm/i915/display/intel_backlight.c +index 2e8f17c04522..ff9b9918b0a1 100644 +--- a/drivers/gpu/drm/i915/display/intel_backlight.c ++++ b/drivers/gpu/drm/i915/display/intel_backlight.c +@@ -274,7 +274,7 @@ static void ext_pwm_set_backlight(const struct drm_connector_state *conn_state, + struct intel_panel *panel = &to_intel_connector(conn_state->connector)->panel; + + pwm_set_relative_duty_cycle(&panel->backlight.pwm_state, level, 100); +- pwm_apply_state(panel->backlight.pwm, &panel->backlight.pwm_state); ++ pwm_apply_might_sleep(panel->backlight.pwm, &panel->backlight.pwm_state); + } + + static void +@@ -427,7 +427,7 @@ static void ext_pwm_disable_backlight(const struct drm_connector_state *old_conn + intel_backlight_set_pwm_level(old_conn_state, level); + + panel->backlight.pwm_state.enabled = false; +- pwm_apply_state(panel->backlight.pwm, &panel->backlight.pwm_state); ++ pwm_apply_might_sleep(panel->backlight.pwm, &panel->backlight.pwm_state); + } + + void intel_backlight_disable(const struct drm_connector_state *old_conn_state) +@@ -749,7 +749,7 @@ static void ext_pwm_enable_backlight(const struct intel_crtc_state *crtc_state, + + pwm_set_relative_duty_cycle(&panel->backlight.pwm_state, level, 100); + panel->backlight.pwm_state.enabled = true; +- pwm_apply_state(panel->backlight.pwm, &panel->backlight.pwm_state); ++ pwm_apply_might_sleep(panel->backlight.pwm, &panel->backlight.pwm_state); + } + + static void __intel_backlight_enable(const struct intel_crtc_state *crtc_state, diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c index 1a59fca40252..0e941ce3d5a4 100644 --- a/drivers/gpu/drm/i915/display/intel_display.c @@ -74250,7 +74331,7 @@ * Start timer if we don't already have an update pending * on this crtc: diff --git a/drivers/gpu/drm/panel/Kconfig b/drivers/gpu/drm/panel/Kconfig -index 3a2f4a9f1d46..307dd2c0fae4 100644 +index 869e535faefa..d3109ea534fe 100644 --- a/drivers/gpu/drm/panel/Kconfig +++ b/drivers/gpu/drm/panel/Kconfig @@ -194,6 +194,17 @@ config DRM_PANEL_ILITEK_ILI9341 @@ -74824,7 +74905,7 @@ +MODULE_DESCRIPTION("ili9806 LCD panel driver"); +MODULE_LICENSE("GPL v2"); diff --git a/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c b/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c -index bb201f848ae9..971f8ee56308 100644 +index 7838947a1bf3..971f8ee56308 100644 --- a/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c +++ b/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c @@ -1,6 +1,9 @@ @@ -75689,6 +75770,28 @@ * DCS commands. * * So before any attempt at sending a command or data, we have to be +@@ -883,10 +1696,10 @@ static int ili9881c_prepare(struct drm_panel *panel) + msleep(5); + + /* And reset it */ +- gpiod_set_value(ctx->reset, 1); ++ gpiod_set_value_cansleep(ctx->reset, 1); + msleep(20); + +- gpiod_set_value(ctx->reset, 0); ++ gpiod_set_value_cansleep(ctx->reset, 0); + msleep(20); + + for (i = 0; i < ctx->desc->init_length; i++) { +@@ -941,7 +1754,7 @@ static int ili9881c_unprepare(struct drm_panel *panel) + + mipi_dsi_dcs_enter_sleep_mode(ctx->dsi); + regulator_disable(ctx->power); +- gpiod_set_value(ctx->reset, 1); ++ gpiod_set_value_cansleep(ctx->reset, 1); + + return 0; + } @@ -980,6 +1793,23 @@ static const struct drm_display_mode k101_im2byl02_default_mode = { .height_mm = 217, }; @@ -75782,12 +75885,12 @@ dsi->format = MIPI_DSI_FMT_RGB888; - dsi->lanes = 4; + dsi->lanes = ctx->desc->lanes; - -- return mipi_dsi_attach(dsi); ++ + ret = mipi_dsi_attach(dsi); + if (ret) + drm_panel_remove(&ctx->panel); -+ + +- return mipi_dsi_attach(dsi); + return ret; } @@ -76002,7 +76105,7 @@ /* Look up the DSI host. It needs to probe before we do. */ endpoint = of_graph_get_next_endpoint(dev->of_node, NULL); diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c -index 11ade6bac592..36cda6335369 100644 +index 51f838befb32..0d436f0ec197 100644 --- a/drivers/gpu/drm/panel/panel-simple.c +++ b/drivers/gpu/drm/panel/panel-simple.c @@ -40,6 +40,7 @@ @@ -76158,7 +76261,7 @@ static const struct drm_display_mode innolux_at070tn92_mode = { .clock = 33333, .hdisplay = 800, -@@ -3376,6 +3416,31 @@ static const struct panel_desc rocktech_rk043fn48h = { +@@ -3372,6 +3412,31 @@ static const struct panel_desc rocktech_rk043fn48h = { .connector_type = DRM_MODE_CONNECTOR_DPI, }; @@ -76190,7 +76293,7 @@ static const struct display_timing rocktech_rk070er9427_timing = { .pixelclock = { 26400000, 33300000, 46800000 }, .hactive = { 800, 800, 800 }, -@@ -4273,6 +4338,9 @@ static const struct of_device_id platform_of_match = { +@@ -4269,6 +4334,9 @@ static const struct of_device_id platform_of_match = { }, { .compatible = "friendlyarm,hd702e", .data = &friendlyarm_hd702e, @@ -76200,7 +76303,7 @@ }, { .compatible = "giantplus,gpg482739qs5", .data = &giantplus_gpg482739qs5 -@@ -4294,6 +4362,9 @@ static const struct of_device_id platform_of_match = { +@@ -4290,6 +4358,9 @@ static const struct of_device_id platform_of_match = { }, { .compatible = "innolux,at043tn24", .data = &innolux_at043tn24, @@ -76210,7 +76313,7 @@ }, { .compatible = "innolux,at070tn92", .data = &innolux_at070tn92, -@@ -4426,6 +4497,9 @@ static const struct of_device_id platform_of_match = { +@@ -4422,6 +4493,9 @@ static const struct of_device_id platform_of_match = { }, { .compatible = "rocktech,rk043fn48h", .data = &rocktech_rk043fn48h, @@ -76220,7 +76323,7 @@ }, { .compatible = "rocktech,rk070er9427", .data = &rocktech_rk070er9427, -@@ -4780,6 +4854,9 @@ static const struct panel_desc_dsi osd101t2045_53ts = { +@@ -4776,6 +4850,9 @@ static const struct panel_desc_dsi osd101t2045_53ts = { .lanes = 4, }; @@ -76230,7 +76333,7 @@ static const struct of_device_id dsi_of_match = { { .compatible = "auo,b080uan01", -@@ -4802,21 +4879,138 @@ static const struct of_device_id dsi_of_match = { +@@ -4798,21 +4875,138 @@ static const struct of_device_id dsi_of_match = { }, { .compatible = "osddisplays,osd101t2045-53ts", .data = &osd101t2045_53ts @@ -85116,6 +85219,19 @@ +#define VEC_DAC_EC_PAL_EN_ACCESS "RW" +// ============================================================================= +#endif // VEC_REGS_DEFINED +diff --git a/drivers/gpu/drm/solomon/ssd130x.c b/drivers/gpu/drm/solomon/ssd130x.c +index 78272b1f9d5b..deec6acdcf64 100644 +--- a/drivers/gpu/drm/solomon/ssd130x.c ++++ b/drivers/gpu/drm/solomon/ssd130x.c +@@ -267,7 +267,7 @@ static int ssd130x_pwm_enable(struct ssd130x_device *ssd130x) + + pwm_init_state(ssd130x->pwm, &pwmstate); + pwm_set_relative_duty_cycle(&pwmstate, 50, 100); +- pwm_apply_state(ssd130x->pwm, &pwmstate); ++ pwm_apply_might_sleep(ssd130x->pwm, &pwmstate); + + /* Enable the PWM */ + pwm_enable(ssd130x->pwm); diff --git a/drivers/gpu/drm/tiny/ili9486.c b/drivers/gpu/drm/tiny/ili9486.c index 938bceed5999..a6bc9df206a8 100644 --- a/drivers/gpu/drm/tiny/ili9486.c @@ -91275,7 +91391,7 @@ switch (args->madv) { diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c -index 643754fa6a8a..449725618b59 100644 +index 4626fe9aac56..e42b431c29af 100644 --- a/drivers/gpu/drm/vc4/vc4_hdmi.c +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c @@ -41,6 +41,8 @@ @@ -91574,7 +91690,7 @@ int index, len; int ret; -@@ -2717,22 +2801,18 @@ static int vc4_hdmi_audio_init(struct vc4_hdmi *vc4_hdmi) +@@ -2717,20 +2801,15 @@ static int vc4_hdmi_audio_init(struct vc4_hdmi *vc4_hdmi) } /* @@ -91589,19 +91705,16 @@ /* Before BCM2711, we don't have a named register range */ if (index < 0) index = 1; - -- addr = of_get_address(dev->of_node, index, NULL, NULL); -- if (!addr) + iomem = platform_get_resource(vc4_hdmi->pdev, IORESOURCE_MEM, index); -+ if (!iomem) - return -EINVAL; +- addr = of_get_address(dev->of_node, index, NULL, NULL); +- - vc4_hdmi->audio.dma_data.addr = be32_to_cpup(addr) + mai_data->offset; + vc4_hdmi->audio.dma_data.addr = iomem->start + mai_data->offset; vc4_hdmi->audio.dma_data.addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES; vc4_hdmi->audio.dma_data.maxburst = 2; -@@ -2802,6 +2882,8 @@ static int vc4_hdmi_audio_init(struct vc4_hdmi *vc4_hdmi) +@@ -2800,6 +2879,8 @@ static int vc4_hdmi_audio_init(struct vc4_hdmi *vc4_hdmi) dai_link->codecs->name = dev_name(&codec_pdev->dev); dai_link->platforms->name = dev_name(dev); @@ -91610,7 +91723,7 @@ card->dai_link = dai_link; card->num_links = 1; card->name = vc4_hdmi->variant->card_name; -@@ -2831,7 +2913,7 @@ static irqreturn_t vc4_hdmi_hpd_irq_thread(int irq, void *priv) +@@ -2829,7 +2910,7 @@ static irqreturn_t vc4_hdmi_hpd_irq_thread(int irq, void *priv) struct drm_connector *connector = &vc4_hdmi->connector; struct drm_device *dev = connector->dev; @@ -91619,7 +91732,7 @@ drm_connector_helper_hpd_irq_event(connector); return IRQ_HANDLED; -@@ -3573,6 +3655,7 @@ static int vc4_hdmi_runtime_suspend(struct device *dev) +@@ -3571,6 +3652,7 @@ static int vc4_hdmi_runtime_suspend(struct device *dev) { struct vc4_hdmi *vc4_hdmi = dev_get_drvdata(dev); @@ -91627,7 +91740,7 @@ clk_disable_unprepare(vc4_hdmi->hsm_clock); return 0; -@@ -3605,6 +3688,10 @@ static int vc4_hdmi_runtime_resume(struct device *dev) +@@ -3603,6 +3685,10 @@ static int vc4_hdmi_runtime_resume(struct device *dev) goto err_disable_clk; } @@ -91638,7 +91751,7 @@ if (vc4_hdmi->variant->reset) vc4_hdmi->variant->reset(vc4_hdmi); -@@ -3657,6 +3744,8 @@ static int vc4_hdmi_bind(struct device *dev, struct device *master, void *data) +@@ -3655,6 +3741,8 @@ static int vc4_hdmi_bind(struct device *dev, struct device *master, void *data) if (ret) return ret; @@ -91647,7 +91760,7 @@ spin_lock_init(&vc4_hdmi->hw_lock); INIT_DELAYED_WORK(&vc4_hdmi->scrambling_work, vc4_hdmi_scrambling_wq); -@@ -3725,7 +3814,9 @@ static int vc4_hdmi_bind(struct device *dev, struct device *master, void *data) +@@ -3723,7 +3811,9 @@ static int vc4_hdmi_bind(struct device *dev, struct device *master, void *data) return ret; if ((of_device_is_compatible(dev->of_node, "brcm,bcm2711-hdmi0") || @@ -91658,7 +91771,7 @@ HDMI_READ(HDMI_VID_CTL) & VC4_HD_VID_CTL_ENABLE) { clk_prepare_enable(vc4_hdmi->pixel_clock); clk_prepare_enable(vc4_hdmi->hsm_clock); -@@ -3767,8 +3858,16 @@ static int vc4_hdmi_bind(struct device *dev, struct device *master, void *data) +@@ -3765,8 +3855,16 @@ static int vc4_hdmi_bind(struct device *dev, struct device *master, void *data) return ret; } @@ -91675,7 +91788,7 @@ }; static int vc4_hdmi_dev_probe(struct platform_device *pdev) -@@ -3859,10 +3958,66 @@ static const struct vc4_hdmi_variant bcm2711_hdmi1_variant = { +@@ -3857,10 +3955,66 @@ static const struct vc4_hdmi_variant bcm2711_hdmi1_variant = { .hp_detect = vc5_hdmi_hp_detect, }; @@ -98029,7 +98142,7 @@ + VC_IMAGE_YUVINFO_CSC_REC_2020 = 9, +}; diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h -index 4246348ca16e..8d5fe42d00e8 100644 +index 0a4daff4846f..a2b2fb75b5ed 100644 --- a/drivers/hid/hid-ids.h +++ b/drivers/hid/hid-ids.h @@ -239,6 +239,9 @@ @@ -98042,7 +98155,7 @@ #define USB_VENDOR_ID_BELKIN 0x050d #define USB_DEVICE_ID_FLIP_KVM 0x3201 -@@ -1407,6 +1410,9 @@ +@@ -1404,6 +1407,9 @@ #define USB_VENDOR_ID_XIAOMI 0x2717 #define USB_DEVICE_ID_MI_SILENT_MOUSE 0x5014 @@ -98367,7 +98480,7 @@ .probe = emc2305_probe, .remove = emc2305_remove, diff --git a/drivers/hwmon/pwm-fan.c b/drivers/hwmon/pwm-fan.c -index b67bc9e833c0..131895d5a031 100644 +index 6e4516c2ab89..131895d5a031 100644 --- a/drivers/hwmon/pwm-fan.c +++ b/drivers/hwmon/pwm-fan.c @@ -12,6 +12,7 @@ @@ -98399,6 +98512,42 @@ /* This handler assumes self resetting edge triggered interrupt. */ static irqreturn_t pulse_handler(int irq, void *dev_id) { +@@ -151,7 +159,7 @@ static int pwm_fan_power_on(struct pwm_fan_ctx *ctx) + } + + state->enabled = true; +- ret = pwm_apply_state(ctx->pwm, state); ++ ret = pwm_apply_might_sleep(ctx->pwm, state); + if (ret) { + dev_err(ctx->dev, "failed to enable PWM\n"); + goto disable_regulator; +@@ -181,7 +189,7 @@ static int pwm_fan_power_off(struct pwm_fan_ctx *ctx) + + state->enabled = false; + state->duty_cycle = 0; +- ret = pwm_apply_state(ctx->pwm, state); ++ ret = pwm_apply_might_sleep(ctx->pwm, state); + if (ret) { + dev_err(ctx->dev, "failed to disable PWM\n"); + return ret; +@@ -207,7 +215,7 @@ static int __set_pwm(struct pwm_fan_ctx *ctx, unsigned long pwm) + + period = state->period; + state->duty_cycle = DIV_ROUND_UP(pwm * (period - 1), MAX_PWM); +- ret = pwm_apply_state(ctx->pwm, state); ++ ret = pwm_apply_might_sleep(ctx->pwm, state); + if (ret) + return ret; + ret = pwm_fan_power_on(ctx); +@@ -278,7 +286,7 @@ static int pwm_fan_update_enable(struct pwm_fan_ctx *ctx, long val) + state, + &enable_regulator); + +- pwm_apply_state(ctx->pwm, state); ++ pwm_apply_might_sleep(ctx->pwm, state); + pwm_fan_switch_power(ctx, enable_regulator); + pwm_fan_update_state(ctx, 0); + } @@ -335,7 +343,10 @@ static int pwm_fan_read(struct device *dev, enum hwmon_sensor_types type, } return -EOPNOTSUPP; @@ -100251,6 +100400,119 @@ +MODULE_DESCRIPTION("Raspberry Pi Sense HAT joystick driver"); +MODULE_AUTHOR("Serge Schneider <serge@raspberrypi.org>"); +MODULE_LICENSE("GPL"); +diff --git a/drivers/input/misc/da7280.c b/drivers/input/misc/da7280.c +index ce82548916bb..c1fa75c0f970 100644 +--- a/drivers/input/misc/da7280.c ++++ b/drivers/input/misc/da7280.c +@@ -352,7 +352,7 @@ static int da7280_haptic_set_pwm(struct da7280_haptic *haptics, bool enabled) + state.duty_cycle = period_mag_multi; + } + +- error = pwm_apply_state(haptics->pwm_dev, &state); ++ error = pwm_apply_might_sleep(haptics->pwm_dev, &state); + if (error) + dev_err(haptics->dev, "Failed to apply pwm state: %d\n", error); + +@@ -1175,7 +1175,7 @@ static int da7280_probe(struct i2c_client *client) + /* Sync up PWM state and ensure it is off. */ + pwm_init_state(haptics->pwm_dev, &state); + state.enabled = false; +- error = pwm_apply_state(haptics->pwm_dev, &state); ++ error = pwm_apply_might_sleep(haptics->pwm_dev, &state); + if (error) { + dev_err(dev, "Failed to apply PWM state: %d\n", error); + return error; +diff --git a/drivers/input/misc/pwm-beeper.c b/drivers/input/misc/pwm-beeper.c +index 1e731d8397c6..5b9aedf4362f 100644 +--- a/drivers/input/misc/pwm-beeper.c ++++ b/drivers/input/misc/pwm-beeper.c +@@ -39,7 +39,7 @@ static int pwm_beeper_on(struct pwm_beeper *beeper, unsigned long period) + state.period = period; + pwm_set_relative_duty_cycle(&state, 50, 100); + +- error = pwm_apply_state(beeper->pwm, &state); ++ error = pwm_apply_might_sleep(beeper->pwm, &state); + if (error) + return error; + +@@ -138,7 +138,7 @@ static int pwm_beeper_probe(struct platform_device *pdev) + /* Sync up PWM state and ensure it is off. */ + pwm_init_state(beeper->pwm, &state); + state.enabled = false; +- error = pwm_apply_state(beeper->pwm, &state); ++ error = pwm_apply_might_sleep(beeper->pwm, &state); + if (error) { + dev_err(dev, "failed to apply initial PWM state: %d\n", + error); +diff --git a/drivers/input/misc/pwm-vibra.c b/drivers/input/misc/pwm-vibra.c +index acac79c488aa..3e5ed685ed8f 100644 +--- a/drivers/input/misc/pwm-vibra.c ++++ b/drivers/input/misc/pwm-vibra.c +@@ -56,7 +56,7 @@ static int pwm_vibrator_start(struct pwm_vibrator *vibrator) + pwm_set_relative_duty_cycle(&state, vibrator->level, 0xffff); + state.enabled = true; + +- err = pwm_apply_state(vibrator->pwm, &state); ++ err = pwm_apply_might_sleep(vibrator->pwm, &state); + if (err) { + dev_err(pdev, "failed to apply pwm state: %d\n", err); + return err; +@@ -67,7 +67,7 @@ static int pwm_vibrator_start(struct pwm_vibrator *vibrator) + state.duty_cycle = vibrator->direction_duty_cycle; + state.enabled = true; + +- err = pwm_apply_state(vibrator->pwm_dir, &state); ++ err = pwm_apply_might_sleep(vibrator->pwm_dir, &state); + if (err) { + dev_err(pdev, "failed to apply dir-pwm state: %d\n", err); + pwm_disable(vibrator->pwm); +@@ -160,7 +160,7 @@ static int pwm_vibrator_probe(struct platform_device *pdev) + /* Sync up PWM state and ensure it is off. */ + pwm_init_state(vibrator->pwm, &state); + state.enabled = false; +- err = pwm_apply_state(vibrator->pwm, &state); ++ err = pwm_apply_might_sleep(vibrator->pwm, &state); + if (err) { + dev_err(&pdev->dev, "failed to apply initial PWM state: %d\n", + err); +@@ -174,7 +174,7 @@ static int pwm_vibrator_probe(struct platform_device *pdev) + /* Sync up PWM state and ensure it is off. */ + pwm_init_state(vibrator->pwm_dir, &state); + state.enabled = false; +- err = pwm_apply_state(vibrator->pwm_dir, &state); ++ err = pwm_apply_might_sleep(vibrator->pwm_dir, &state); + if (err) { + dev_err(&pdev->dev, "failed to apply initial PWM state: %d\n", + err); +diff --git a/drivers/input/touchscreen/ads7846.c b/drivers/input/touchscreen/ads7846.c +index faea40dd66d0..262d23749440 100644 +--- a/drivers/input/touchscreen/ads7846.c ++++ b/drivers/input/touchscreen/ads7846.c +@@ -1114,6 +1114,16 @@ static const struct of_device_id ads7846_dt_ids = { + }; + MODULE_DEVICE_TABLE(of, ads7846_dt_ids); + ++static const struct spi_device_id ads7846_spi_ids = { ++ { "tsc2046", 0 }, ++ { "ads7843", 0 }, ++ { "ads7845", 0 }, ++ { "ads7846", 0 }, ++ { "ads7873", 0 }, ++ { } ++}; ++MODULE_DEVICE_TABLE(spi, ads7846_spi_ids); ++ + static const struct ads7846_platform_data *ads7846_get_props(struct device *dev) + { + struct ads7846_platform_data *pdata; +@@ -1390,6 +1400,7 @@ static struct spi_driver ads7846_driver = { + .pm = pm_sleep_ptr(&ads7846_pm), + .of_match_table = ads7846_dt_ids, + }, ++ .id_table = ads7846_spi_ids, + .probe = ads7846_probe, + .remove = ads7846_remove, + }; diff --git a/drivers/input/touchscreen/edt-ft5x06.c b/drivers/input/touchscreen/edt-ft5x06.c index 457d53337fbb..1d2b8df0aea9 100644 --- a/drivers/input/touchscreen/edt-ft5x06.c @@ -101479,10 +101741,10 @@ + +#endif diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c -index 28f63ad432de..0e0f399a9a74 100644 +index 58e7d03fc27c..f98a8f13ecbe 100644 --- a/drivers/iommu/iommu.c +++ b/drivers/iommu/iommu.c -@@ -2487,11 +2487,8 @@ int iommu_map(struct iommu_domain *domain, unsigned long iova, +@@ -2476,11 +2476,8 @@ int iommu_map(struct iommu_domain *domain, unsigned long iova, return -EINVAL; ret = __iommu_map(domain, iova, paddr, size, prot, gfp); @@ -101496,7 +101758,7 @@ return ret; -@@ -2625,11 +2622,8 @@ ssize_t iommu_map_sg(struct iommu_domain *domain, unsigned long iova, +@@ -2614,11 +2611,8 @@ ssize_t iommu_map_sg(struct iommu_domain *domain, unsigned long iova, sg = sg_next(sg); } @@ -101511,7 +101773,7 @@ out_err: diff --git a/drivers/irqchip/Kconfig b/drivers/irqchip/Kconfig -index 6ffcdad8b131..81c3c771e45d 100644 +index e0408e9016b9..023a963012f7 100644 --- a/drivers/irqchip/Kconfig +++ b/drivers/irqchip/Kconfig @@ -152,6 +152,14 @@ config I8259 @@ -102204,6 +102466,34 @@ if (template->default_state == LEDS_GPIO_DEFSTATE_KEEP) { state = gpiod_get_value_cansleep(led_dat->gpiod); if (state < 0) +diff --git a/drivers/leds/leds-pwm.c b/drivers/leds/leds-pwm.c +index 2b3bf1353b70..4e3936a39d0e 100644 +--- a/drivers/leds/leds-pwm.c ++++ b/drivers/leds/leds-pwm.c +@@ -54,7 +54,7 @@ static int led_pwm_set(struct led_classdev *led_cdev, + + led_dat->pwmstate.duty_cycle = duty; + led_dat->pwmstate.enabled = true; +- return pwm_apply_state(led_dat->pwm, &led_dat->pwmstate); ++ return pwm_apply_might_sleep(led_dat->pwm, &led_dat->pwmstate); + } + + __attribute__((nonnull)) +diff --git a/drivers/leds/rgb/leds-pwm-multicolor.c b/drivers/leds/rgb/leds-pwm-multicolor.c +index 46cd062b8b24..e1a81e0109e8 100644 +--- a/drivers/leds/rgb/leds-pwm-multicolor.c ++++ b/drivers/leds/rgb/leds-pwm-multicolor.c +@@ -51,8 +51,8 @@ static int led_pwm_mc_set(struct led_classdev *cdev, + + priv->ledsi.state.duty_cycle = duty; + priv->ledsi.state.enabled = duty > 0; +- ret = pwm_apply_state(priv->ledsi.pwm, +- &priv->ledsi.state); ++ ret = pwm_apply_might_sleep(priv->ledsi.pwm, ++ &priv->ledsi.state); + if (ret) + break; + } diff --git a/drivers/leds/trigger/Kconfig b/drivers/leds/trigger/Kconfig index 2a57328eca20..6100c9690734 100644 --- a/drivers/leds/trigger/Kconfig @@ -108247,7 +108537,7 @@ static const struct dev_pm_ops dw9807_pm_ops = { diff --git a/drivers/media/i2c/imx219.c b/drivers/media/i2c/imx219.c -index a9a8cd148f4f..91854f16c5b9 100644 +index 3afa3f79c8a2..aeab1a8cca94 100644 --- a/drivers/media/i2c/imx219.c +++ b/drivers/media/i2c/imx219.c @@ -77,7 +77,7 @@ @@ -136198,7 +136488,7 @@ help Say Y if you want to use a PWM based IR transmitter. This is diff --git a/drivers/media/rc/pwm-ir-tx.c b/drivers/media/rc/pwm-ir-tx.c -index 4a6fafe7a249..f8fdbc83b7e8 100644 +index 7732054c4621..f8fdbc83b7e8 100644 --- a/drivers/media/rc/pwm-ir-tx.c +++ b/drivers/media/rc/pwm-ir-tx.c @@ -10,6 +10,8 @@ @@ -136238,7 +136528,22 @@ { struct pwm_ir *pwm_ir = dev->priv; struct pwm_device *pwm = pwm_ir->pwm; -@@ -81,6 +89,62 @@ static int pwm_ir_tx(struct rc_dev *dev, unsigned int *txbuf, +@@ -67,7 +75,7 @@ static int pwm_ir_tx(struct rc_dev *dev, unsigned int *txbuf, + + for (i = 0; i < count; i++) { + state.enabled = !(i % 2); +- pwm_apply_state(pwm, &state); ++ pwm_apply_might_sleep(pwm, &state); + + edge = ktime_add_us(edge, txbufi); + delta = ktime_us_delta(edge, ktime_get()); +@@ -76,11 +84,67 @@ static int pwm_ir_tx(struct rc_dev *dev, unsigned int *txbuf, + } + + state.enabled = false; +- pwm_apply_state(pwm, &state); ++ pwm_apply_might_sleep(pwm, &state); + return count; } @@ -136504,7 +136809,7 @@ tristate "Renesas Synchronization Management Unit with I2C" depends on I2C && OF diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile -index 50b42df268ea..089032ef56db 100644 +index 700b3600eb79..3eff03c6d6ba 100644 --- a/drivers/mfd/Makefile +++ b/drivers/mfd/Makefile @@ -268,6 +268,7 @@ obj-$(CONFIG_MFD_STMFX) += stmfx.o @@ -136515,11 +136820,11 @@ obj-$(CONFIG_LPC_CHIP3) += lpc_sunway_chip3.o obj-$(CONFIG_SUNWAY_SUPERIO_AST2400) += sunway_ast2400.o -@@ -285,3 +286,5 @@ obj-$(CONFIG_MFD_ATC260X_I2C) += atc260x-i2c.o - - obj-$(CONFIG_MFD_RSMU_I2C) += rsmu_i2c.o rsmu_core.o - obj-$(CONFIG_MFD_RSMU_SPI) += rsmu_spi.o rsmu_core.o -+ +@@ -287,3 +288,5 @@ rsmu-i2c-objs := rsmu_core.o rsmu_i2c.o + rsmu-spi-objs := rsmu_core.o rsmu_spi.o + obj-$(CONFIG_MFD_RSMU_I2C) += rsmu-i2c.o + obj-$(CONFIG_MFD_RSMU_SPI) += rsmu-spi.o ++ +obj-$(CONFIG_MFD_RP1) += rp1.o diff --git a/drivers/mfd/bcm2835-pm.c b/drivers/mfd/bcm2835-pm.c index 3cb2b9423121..8b31775da7b6 100644 @@ -138335,10 +138640,10 @@ return 0; } diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c -index 7e39017e440f..bcbf8468d316 100644 +index 3a927452a650..450683646196 100644 --- a/drivers/mmc/core/mmc.c +++ b/drivers/mmc/core/mmc.c -@@ -1915,8 +1915,8 @@ static int mmc_init_card(struct mmc_host *host, u32 ocr, +@@ -1910,8 +1910,8 @@ static int mmc_init_card(struct mmc_host *host, u32 ocr, host->cqe_enabled = true; if (card->ext_csd.cmdq_en) { @@ -142924,7 +143229,7 @@ return ret; } diff --git a/drivers/mmc/host/sdhci-brcmstb.c b/drivers/mmc/host/sdhci-brcmstb.c -index 25664cd5e90f..58812c22280d 100644 +index c23251bb95f3..61cea31cc891 100644 --- a/drivers/mmc/host/sdhci-brcmstb.c +++ b/drivers/mmc/host/sdhci-brcmstb.c @@ -11,6 +11,8 @@ @@ -142936,7 +143241,7 @@ #include "sdhci-cqhci.h" #include "sdhci-pltfm.h" -@@ -27,18 +29,43 @@ +@@ -26,18 +28,43 @@ #define BRCMSTB_PRIV_FLAGS_HAS_CQE BIT(0) #define BRCMSTB_PRIV_FLAGS_GATE_CLOCK BIT(1) @@ -142980,7 +143285,7 @@ struct sdhci_ops *ops; const unsigned int flags; }; -@@ -80,6 +107,42 @@ static void sdhci_brcmstb_hs400es(struct mmc_host *mmc, struct mmc_ios *ios) +@@ -79,6 +106,42 @@ static void sdhci_brcmstb_hs400es(struct mmc_host *mmc, struct mmc_ios *ios) writel(reg, host->ioaddr + SDHCI_VENDOR); } @@ -143023,7 +143328,7 @@ static void sdhci_brcmstb_set_clock(struct sdhci_host *host, unsigned int clock) { u16 clk; -@@ -95,6 +158,17 @@ static void sdhci_brcmstb_set_clock(struct sdhci_host *host, unsigned int clock) +@@ -94,6 +157,17 @@ static void sdhci_brcmstb_set_clock(struct sdhci_host *host, unsigned int clock) sdhci_enable_clk(host, clk); } @@ -143041,7 +143346,7 @@ static void sdhci_brcmstb_set_uhs_signaling(struct sdhci_host *host, unsigned int timing) { -@@ -124,6 +198,139 @@ static void sdhci_brcmstb_set_uhs_signaling(struct sdhci_host *host, +@@ -123,6 +197,139 @@ static void sdhci_brcmstb_set_uhs_signaling(struct sdhci_host *host, sdhci_writew(host, ctrl_2, SDHCI_HOST_CONTROL2); } @@ -143181,7 +143486,7 @@ static void sdhci_brcmstb_dumpregs(struct mmc_host *mmc) { sdhci_dumpregs(mmc_priv(mmc)); -@@ -132,6 +339,7 @@ static void sdhci_brcmstb_dumpregs(struct mmc_host *mmc) +@@ -131,6 +338,7 @@ static void sdhci_brcmstb_dumpregs(struct mmc_host *mmc) static void sdhci_brcmstb_cqe_enable(struct mmc_host *mmc) { struct sdhci_host *host = mmc_priv(mmc); @@ -143189,7 +143494,7 @@ u32 reg; reg = sdhci_readl(host, SDHCI_PRESENT_STATE); -@@ -141,6 +349,9 @@ static void sdhci_brcmstb_cqe_enable(struct mmc_host *mmc) +@@ -140,6 +348,9 @@ static void sdhci_brcmstb_cqe_enable(struct mmc_host *mmc) } sdhci_cqe_enable(mmc); @@ -143199,7 +143504,7 @@ } static const struct cqhci_host_ops sdhci_brcmstb_cqhci_ops = { -@@ -156,6 +367,15 @@ static struct sdhci_ops sdhci_brcmstb_ops = { +@@ -155,6 +366,15 @@ static struct sdhci_ops sdhci_brcmstb_ops = { .set_uhs_signaling = sdhci_set_uhs_signaling, }; @@ -143215,7 +143520,7 @@ static struct sdhci_ops sdhci_brcmstb_ops_7216 = { .set_clock = sdhci_brcmstb_set_clock, .set_bus_width = sdhci_set_bus_width, -@@ -180,10 +400,18 @@ static const struct brcmstb_match_priv match_priv_7216 = { +@@ -179,10 +399,18 @@ static const struct brcmstb_match_priv match_priv_7216 = { .ops = &sdhci_brcmstb_ops_7216, }; @@ -143234,7 +143539,7 @@ {}, }; -@@ -256,6 +484,8 @@ static int sdhci_brcmstb_probe(struct platform_device *pdev) +@@ -255,6 +483,8 @@ static int sdhci_brcmstb_probe(struct platform_device *pdev) struct sdhci_brcmstb_priv *priv; u32 actual_clock_mhz; struct sdhci_host *host; @@ -143243,7 +143548,7 @@ struct clk *clk; struct clk *base_clk = NULL; int res; -@@ -278,12 +508,19 @@ static int sdhci_brcmstb_probe(struct platform_device *pdev) +@@ -277,12 +507,19 @@ static int sdhci_brcmstb_probe(struct platform_device *pdev) return PTR_ERR(host); pltfm_host = sdhci_priv(host); @@ -143263,7 +143568,7 @@ /* Map in the non-standard CFG registers */ priv->cfg_regs = devm_platform_get_and_ioremap_resource(pdev, 1, NULL); if (IS_ERR(priv->cfg_regs)) { -@@ -296,6 +533,43 @@ static int sdhci_brcmstb_probe(struct platform_device *pdev) +@@ -295,6 +532,43 @@ static int sdhci_brcmstb_probe(struct platform_device *pdev) if (res) goto err; @@ -143307,7 +143612,7 @@ /* * Automatic clock gating does not work for SD cards that may * voltage switch so only enable it for non-removable devices. -@@ -312,6 +586,13 @@ static int sdhci_brcmstb_probe(struct platform_device *pdev) +@@ -311,6 +585,13 @@ static int sdhci_brcmstb_probe(struct platform_device *pdev) (host->mmc->caps2 & MMC_CAP2_HS400_ES)) host->mmc_host_ops.hs400_enhanced_strobe = match_priv->hs400es; @@ -143321,7 +143626,7 @@ /* * Supply the existing CAPS, but clear the UHS modes. This * will allow these modes to be specified by device tree -@@ -362,7 +643,6 @@ static int sdhci_brcmstb_probe(struct platform_device *pdev) +@@ -358,7 +639,6 @@ static int sdhci_brcmstb_probe(struct platform_device *pdev) if (res) goto err; @@ -143516,7 +143821,7 @@ { return host->private; diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c -index 9796a3cb3ca6..0661dde378ad 100644 +index ff41aa56564e..7e9ec325b87c 100644 --- a/drivers/mmc/host/sdhci.c +++ b/drivers/mmc/host/sdhci.c @@ -40,7 +40,7 @@ @@ -143541,7 +143846,7 @@ sdhci_writew(host, SDHCI_MAKE_CMD(cmd->opcode, flags), SDHCI_COMMAND); return true; -@@ -3050,6 +3056,15 @@ static void sdhci_card_event(struct mmc_host *mmc) +@@ -3047,6 +3053,15 @@ static void sdhci_card_event(struct mmc_host *mmc) spin_unlock_irqrestore(&host->lock, flags); } @@ -143557,7 +143862,7 @@ static const struct mmc_host_ops sdhci_ops = { .request = sdhci_request, .post_req = sdhci_post_req, -@@ -3065,6 +3080,7 @@ static const struct mmc_host_ops sdhci_ops = { +@@ -3062,6 +3077,7 @@ static const struct mmc_host_ops sdhci_ops = { .execute_tuning = sdhci_execute_tuning, .card_event = sdhci_card_event, .card_busy = sdhci_card_busy, @@ -143565,7 +143870,7 @@ }; /*****************************************************************************\ -@@ -3212,7 +3228,7 @@ static void sdhci_timeout_timer(struct timer_list *t) +@@ -3209,7 +3225,7 @@ static void sdhci_timeout_timer(struct timer_list *t) spin_lock_irqsave(&host->lock, flags); if (host->cmd && !sdhci_data_line_cmd(host->cmd)) { @@ -143574,7 +143879,7 @@ mmc_hostname(host->mmc)); sdhci_err_stats_inc(host, REQ_TIMEOUT); sdhci_dumpregs(host); -@@ -3235,7 +3251,7 @@ static void sdhci_timeout_data_timer(struct timer_list *t) +@@ -3232,7 +3248,7 @@ static void sdhci_timeout_data_timer(struct timer_list *t) if (host->data || host->data_cmd || (host->cmd && sdhci_data_line_cmd(host->cmd))) { @@ -143583,7 +143888,7 @@ mmc_hostname(host->mmc)); sdhci_err_stats_inc(host, REQ_TIMEOUT); sdhci_dumpregs(host); -@@ -3299,6 +3315,11 @@ static void sdhci_cmd_irq(struct sdhci_host *host, u32 intmask, u32 *intmask_p) +@@ -3296,6 +3312,11 @@ static void sdhci_cmd_irq(struct sdhci_host *host, u32 intmask, u32 *intmask_p) if (intmask & SDHCI_INT_TIMEOUT) { host->cmd->error = -ETIMEDOUT; sdhci_err_stats_inc(host, CMD_TIMEOUT); @@ -143595,7 +143900,7 @@ } else { host->cmd->error = -EILSEQ; if (!mmc_op_tuning(host->cmd->opcode)) -@@ -4583,6 +4604,15 @@ int sdhci_setup_host(struct sdhci_host *host) +@@ -4574,6 +4595,15 @@ int sdhci_setup_host(struct sdhci_host *host) !(host->quirks2 & SDHCI_QUIRK2_BROKEN_DDR50)) mmc->caps |= MMC_CAP_UHS_DDR50; @@ -143612,10 +143917,10 @@ if (host->caps1 & SDHCI_USE_SDR50_TUNING) host->flags |= SDHCI_SDR50_NEEDS_TUNING; diff --git a/drivers/mmc/host/sdhci.h b/drivers/mmc/host/sdhci.h -index a315cee69809..45121666b87d 100644 +index f219bdea8f28..112402286f73 100644 --- a/drivers/mmc/host/sdhci.h +++ b/drivers/mmc/host/sdhci.h -@@ -487,6 +487,14 @@ struct sdhci_host { +@@ -486,6 +486,14 @@ struct sdhci_host { /* Issue CMD and DATA reset together */ #define SDHCI_QUIRK2_ISSUE_CMD_DAT_RESET_TOGETHER (1<<19) @@ -143630,7 +143935,7 @@ int irq; /* Device IRQ */ void __iomem *ioaddr; /* Mapped address */ phys_addr_t mapbase; /* physical address base */ -@@ -669,6 +677,7 @@ struct sdhci_ops { +@@ -668,6 +676,7 @@ struct sdhci_ops { void (*request_done)(struct sdhci_host *host, struct mmc_request *mrq); void (*dump_vendor_regs)(struct sdhci_host *host); @@ -143639,7 +143944,7 @@ #ifdef CONFIG_MMC_SDHCI_IO_ACCESSORS diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.c b/drivers/net/ethernet/broadcom/genet/bcmgenet.c -index 79d096a371ae..0b7764c4ab84 100644 +index 89c8ddc6565a..0ca1dcc04002 100644 --- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c +++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c @@ -67,6 +67,12 @@ @@ -143655,7 +143960,7 @@ static inline void bcmgenet_writel(u32 value, void __iomem *offset) { -@@ -2495,6 +2501,11 @@ static void reset_umac(struct bcmgenet_priv *priv) +@@ -2491,6 +2497,11 @@ static void reset_umac(struct bcmgenet_priv *priv) bcmgenet_rbuf_ctrl_set(priv, 0); udelay(10); @@ -143665,9 +143970,9 @@ + } + /* issue soft reset and disable MAC while updating its registers */ - spin_lock_bh(&priv->reg_lock); bcmgenet_umac_writel(priv, CMD_SW_RESET, UMAC_CMD); -@@ -2666,7 +2677,7 @@ static void bcmgenet_init_tx_ring(struct bcmgenet_priv *priv, + udelay(2); +@@ -2660,7 +2671,7 @@ static void bcmgenet_init_tx_ring(struct bcmgenet_priv *priv, bcmgenet_tdma_ring_writel(priv, index, 0, TDMA_PROD_INDEX); bcmgenet_tdma_ring_writel(priv, index, 0, TDMA_CONS_INDEX); @@ -143676,7 +143981,42 @@ /* Disable rate control for now */ bcmgenet_tdma_ring_writel(priv, index, flow_period_val, TDMA_FLOW_PERIOD); -@@ -3441,6 +3452,17 @@ static int bcmgenet_open(struct net_device *dev) +@@ -3299,7 +3310,7 @@ static void bcmgenet_get_hw_addr(struct bcmgenet_priv *priv, + } + + /* Returns a reusable dma control register value */ +-static u32 bcmgenet_dma_disable(struct bcmgenet_priv *priv) ++static u32 bcmgenet_dma_disable(struct bcmgenet_priv *priv, bool flush_rx) + { + unsigned int i; + u32 reg; +@@ -3324,6 +3335,14 @@ static u32 bcmgenet_dma_disable(struct bcmgenet_priv *priv) + udelay(10); + bcmgenet_umac_writel(priv, 0, UMAC_TX_FLUSH); + ++ if (flush_rx) { ++ reg = bcmgenet_rbuf_ctrl_get(priv); ++ bcmgenet_rbuf_ctrl_set(priv, reg | BIT(0)); ++ udelay(10); ++ bcmgenet_rbuf_ctrl_set(priv, reg); ++ udelay(10); ++ } ++ + return dma_ctrl; + } + +@@ -3387,8 +3406,8 @@ static int bcmgenet_open(struct net_device *dev) + + bcmgenet_set_hw_addr(priv, dev->dev_addr); + +- /* Disable RX/TX DMA and flush TX queues */ +- dma_ctrl = bcmgenet_dma_disable(priv); ++ /* Disable RX/TX DMA and flush TX and RX queues */ ++ dma_ctrl = bcmgenet_dma_disable(priv, true); + + /* Reinitialize TDMA and RDMA and SW housekeeping */ + ret = bcmgenet_init_dma(priv); +@@ -3425,6 +3444,17 @@ static int bcmgenet_open(struct net_device *dev) bcmgenet_phy_pause_set(dev, priv->rx_pause, priv->tx_pause); @@ -143694,7 +144034,7 @@ bcmgenet_netif_start(dev); netif_tx_start_all_queues(dev); -@@ -4161,9 +4183,12 @@ static int bcmgenet_probe(struct platform_device *pdev) +@@ -4141,9 +4171,12 @@ static int bcmgenet_probe(struct platform_device *pdev) netif_set_real_num_rx_queues(priv->dev, priv->hw_params->rx_queues + 1); /* Set default coalescing parameters */ @@ -143708,8 +144048,17 @@ /* libphy will determine the link state */ netif_carrier_off(dev); +@@ -4259,7 +4292,7 @@ static int bcmgenet_resume(struct device *d) + bcmgenet_hfb_create_rxnfc_filter(priv, rule); + + /* Disable RX/TX DMA and flush TX queues */ +- dma_ctrl = bcmgenet_dma_disable(priv); ++ dma_ctrl = bcmgenet_dma_disable(priv, false); + + /* Reinitialize TDMA and RDMA and SW housekeeping */ + ret = bcmgenet_init_dma(priv); diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.h b/drivers/net/ethernet/broadcom/genet/bcmgenet.h -index 28e2c94ef835..44e42d7d2689 100644 +index 1985c0ec4da2..4a73c1572398 100644 --- a/drivers/net/ethernet/broadcom/genet/bcmgenet.h +++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.h @@ -31,7 +31,7 @@ @@ -143722,10 +144071,10 @@ /* misc. configuration */ #define MAX_NUM_OF_FS_RULES 16 diff --git a/drivers/net/ethernet/broadcom/genet/bcmmii.c b/drivers/net/ethernet/broadcom/genet/bcmmii.c -index e7c659cd3974..7a906edbb3f7 100644 +index 97ea76d443ab..7f856f5a26d6 100644 --- a/drivers/net/ethernet/broadcom/genet/bcmmii.c +++ b/drivers/net/ethernet/broadcom/genet/bcmmii.c -@@ -303,14 +303,14 @@ int bcmgenet_mii_probe(struct net_device *dev) +@@ -299,14 +299,14 @@ int bcmgenet_mii_probe(struct net_device *dev) struct device_node *dn = kdev->of_node; phy_interface_t phy_iface = priv->phy_interface; struct phy_device *phydev; @@ -144277,7 +144626,7 @@ + rtl8168_setup_ldev(leds + i, ndev, i); +} diff --git a/drivers/net/ethernet/realtek/r8169_main.c b/drivers/net/ethernet/realtek/r8169_main.c -index 8a732edac15a..7b5a96607ef4 100644 +index e6f1da66c450..59f1f156d4ea 100644 --- a/drivers/net/ethernet/realtek/r8169_main.c +++ b/drivers/net/ethernet/realtek/r8169_main.c @@ -289,6 +289,7 @@ enum rtl8168_8101_registers { @@ -144359,7 +144708,7 @@ static void r8168fp_adjust_ocp_cmd(struct rtl8169_private *tp, u32 *cmd, int type) { /* based on RTL8168FP_OOBMAC_BASE in vendor driver */ -@@ -5254,6 +5312,7 @@ static int rtl_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) +@@ -5259,6 +5317,7 @@ static int rtl_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) raw_spin_lock_init(&tp->cfg9346_usage_lock); raw_spin_lock_init(&tp->config25_lock); raw_spin_lock_init(&tp->mac_ocp_lock); @@ -144367,7 +144716,7 @@ dev->tstats = devm_netdev_alloc_pcpu_stats(&pdev->dev, struct pcpu_sw_netstats); -@@ -5410,6 +5469,12 @@ static int rtl_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) +@@ -5415,6 +5474,12 @@ static int rtl_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) if (rc) return rc; @@ -144706,7 +145055,7 @@ buf = kmalloc(maxp, GFP_KERNEL); if (!buf) { diff --git a/drivers/net/usb/smsc95xx.c b/drivers/net/usb/smsc95xx.c -index 8e82184be5e7..e00a2f62e10b 100644 +index 2fa46baa589e..44aefcb23930 100644 --- a/drivers/net/usb/smsc95xx.c +++ b/drivers/net/usb/smsc95xx.c @@ -79,6 +79,18 @@ static bool turbo_mode = true; @@ -144784,6 +145133,26 @@ } netif_dbg(dev, ifup, dev->net, "rx_urb_size=%ld\n", +@@ -1870,7 +1905,8 @@ static int smsc95xx_rx_fixup(struct usbnet *dev, struct sk_buff *skb) + if (dev->net->features & NETIF_F_RXCSUM) + smsc95xx_rx_csum_offload(skb); + skb_trim(skb, skb->len - 4); /* remove fcs */ +- skb->truesize = size + sizeof(struct sk_buff); ++ if (truesize_mode) ++ skb->truesize = size + sizeof(struct sk_buff); + + return 1; + } +@@ -1888,7 +1924,8 @@ static int smsc95xx_rx_fixup(struct usbnet *dev, struct sk_buff *skb) + if (dev->net->features & NETIF_F_RXCSUM) + smsc95xx_rx_csum_offload(ax_skb); + skb_trim(ax_skb, ax_skb->len - 4); /* remove fcs */ +- ax_skb->truesize = size + sizeof(struct sk_buff); ++ if (truesize_mode) ++ ax_skb->truesize = size + sizeof(struct sk_buff); + + usbnet_skb_return(dev, ax_skb); + } diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bus.h b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bus.h index fe31051a9e11..8c3613ff23f5 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bus.h @@ -145744,10 +146113,10 @@ afx_hdl = &p2p->afx_hdl; afx_hdl->peer_listen_chan = le32_to_cpu(af_params->channel); diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c -index a43af8269140..b29e8d64d9af 100644 +index 80220685f5e4..21a61f092820 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c -@@ -2212,7 +2212,7 @@ static void brcmf_pcie_setup(struct device *dev, int ret, +@@ -2207,7 +2207,7 @@ static void brcmf_pcie_setup(struct device *dev, int ret, init_waitqueue_head(&devinfo->mbdata_resp_wait); @@ -151831,6 +152200,19 @@ + }, +}; +builtin_platform_driver(rp1_pinctrl_driver); +diff --git a/drivers/platform/x86/lenovo-yogabook.c b/drivers/platform/x86/lenovo-yogabook.c +index b8d0239192cb..fd62bf746ebd 100644 +--- a/drivers/platform/x86/lenovo-yogabook.c ++++ b/drivers/platform/x86/lenovo-yogabook.c +@@ -435,7 +435,7 @@ static int yogabook_pdev_set_kbd_backlight(struct yogabook_data *data, u8 level) + .enabled = level, + }; + +- pwm_apply_state(data->kbd_bl_pwm, &state); ++ pwm_apply_might_sleep(data->kbd_bl_pwm, &state); + gpiod_set_value(data->kbd_bl_led_enable, level ? 1 : 0); + return 0; + } diff --git a/drivers/pmdomain/bcm/bcm2835-power.c b/drivers/pmdomain/bcm/bcm2835-power.c index d2f0233cb620..5812f2a355d4 100644 --- a/drivers/pmdomain/bcm/bcm2835-power.c @@ -152318,19 +152700,30 @@ obj-$(CONFIG_PWM_RENESAS_TPU) += pwm-renesas-tpu.o obj-$(CONFIG_PWM_ROCKCHIP) += pwm-rockchip.o diff --git a/drivers/pwm/core.c b/drivers/pwm/core.c -index a1a355ba2383..65331cd64da1 100644 +index 0c8c63239adb..65331cd64da1 100644 --- a/drivers/pwm/core.c +++ b/drivers/pwm/core.c -@@ -489,24 +489,15 @@ static void pwm_apply_debug(struct pwm_device *pwm, +@@ -382,8 +382,8 @@ struct pwm_device *pwm_request_from_chip(struct pwm_chip *chip, + } + EXPORT_SYMBOL_GPL(pwm_request_from_chip); + +-static void pwm_apply_state_debug(struct pwm_device *pwm, +- const struct pwm_state *state) ++static void pwm_apply_debug(struct pwm_device *pwm, ++ const struct pwm_state *state) + { + struct pwm_state *last = &pwm->last; + struct pwm_chip *chip = pwm->chip; +@@ -489,24 +489,15 @@ static void pwm_apply_state_debug(struct pwm_device *pwm, } /** -- * pwm_apply_might_sleep() - atomically apply a new state to a PWM device +- * pwm_apply_state() - atomically apply a new state to a PWM device + * __pwm_apply() - atomically apply a new state to a PWM device * @pwm: PWM device * @state: new state to apply */ --int pwm_apply_might_sleep(struct pwm_device *pwm, const struct pwm_state *state) +-int pwm_apply_state(struct pwm_device *pwm, const struct pwm_state *state) +static int __pwm_apply(struct pwm_device *pwm, const struct pwm_state *state) { struct pwm_chip *chip; @@ -152339,7 +152732,7 @@ - /* - * Some lowlevel driver's implementations of .apply() make use of - * mutexes, also with some drivers only returning when the new -- * configuration is active calling pwm_apply_might_sleep() from atomic context +- * configuration is active calling pwm_apply_state() from atomic context - * is a bad idea. So make it explicit that calling this function might - * sleep. - */ @@ -152348,10 +152741,16 @@ if (!pwm || !state || !state->period || state->duty_cycle > state->period) return -EINVAL; -@@ -535,8 +526,57 @@ int pwm_apply_might_sleep(struct pwm_device *pwm, const struct pwm_state *state) +@@ -531,11 +522,60 @@ int pwm_apply_state(struct pwm_device *pwm, const struct pwm_state *state) + * only do this after pwm->state was applied as some + * implementations of .get_state depend on this + */ +- pwm_apply_state_debug(pwm, state); ++ pwm_apply_debug(pwm, state); return 0; } +-EXPORT_SYMBOL_GPL(pwm_apply_state); + +/** + * pwm_apply_might_sleep() - atomically apply a new state to a PWM device @@ -152386,8 +152785,8 @@ + + return err; +} - EXPORT_SYMBOL_GPL(pwm_apply_might_sleep); - ++EXPORT_SYMBOL_GPL(pwm_apply_might_sleep); ++ +/** + * pwm_apply_atomic() - apply a new state to a PWM device from atomic context + * Not all PWM devices support this function, check with pwm_might_sleep(). @@ -152402,10 +152801,27 @@ + return __pwm_apply(pwm, state); +} +EXPORT_SYMBOL_GPL(pwm_apply_atomic); -+ + /** * pwm_capture() - capture and report a PWM signal - * @pwm: PWM device +@@ -593,7 +633,7 @@ int pwm_adjust_config(struct pwm_device *pwm) + state.period = pargs.period; + state.polarity = pargs.polarity; + +- return pwm_apply_state(pwm, &state); ++ return pwm_apply_might_sleep(pwm, &state); + } + + /* +@@ -616,7 +656,7 @@ int pwm_adjust_config(struct pwm_device *pwm) + state.duty_cycle = state.period - state.duty_cycle; + } + +- return pwm_apply_state(pwm, &state); ++ return pwm_apply_might_sleep(pwm, &state); + } + EXPORT_SYMBOL_GPL(pwm_adjust_config); + diff --git a/drivers/pwm/pwm-bcm2835.c b/drivers/pwm/pwm-bcm2835.c index bdfc2a5ec0d6..70e05ccd40ba 100644 --- a/drivers/pwm/pwm-bcm2835.c @@ -152916,6 +153332,81 @@ +MODULE_AUTHOR("Naushir Patuck <naush@raspberrypi.com"); +MODULE_DESCRIPTION("RP1 PWM driver"); +MODULE_LICENSE("GPL"); +diff --git a/drivers/pwm/pwm-twl-led.c b/drivers/pwm/pwm-twl-led.c +index 8fb84b441853..65205449ed79 100644 +--- a/drivers/pwm/pwm-twl-led.c ++++ b/drivers/pwm/pwm-twl-led.c +@@ -172,7 +172,7 @@ static int twl4030_pwmled_apply(struct pwm_chip *chip, struct pwm_device *pwm, + * We cannot skip calling ->config even if state->period == + * pwm->state.period && state->duty_cycle == pwm->state.duty_cycle + * because we might have exited early in the last call to +- * pwm_apply_state because of !state->enabled and so the two values in ++ * pwm_apply_might_sleep because of !state->enabled and so the two values in + * pwm->state might not be configured in hardware. + */ + ret = twl4030_pwmled_config(pwm->chip, pwm, +diff --git a/drivers/pwm/pwm-vt8500.c b/drivers/pwm/pwm-vt8500.c +index 6d46db51daac..ba1204e18afb 100644 +--- a/drivers/pwm/pwm-vt8500.c ++++ b/drivers/pwm/pwm-vt8500.c +@@ -206,7 +206,7 @@ static int vt8500_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm, + * We cannot skip calling ->config even if state->period == + * pwm->state.period && state->duty_cycle == pwm->state.duty_cycle + * because we might have exited early in the last call to +- * pwm_apply_state because of !state->enabled and so the two values in ++ * pwm_apply_might_sleep because of !state->enabled and so the two values in + * pwm->state might not be configured in hardware. + */ + err = vt8500_pwm_config(pwm->chip, pwm, state->duty_cycle, state->period); +diff --git a/drivers/pwm/sysfs.c b/drivers/pwm/sysfs.c +index 8d1254761e4d..052ccadbdabf 100644 +--- a/drivers/pwm/sysfs.c ++++ b/drivers/pwm/sysfs.c +@@ -62,7 +62,7 @@ static ssize_t period_store(struct device *child, + mutex_lock(&export->lock); + pwm_get_state(pwm, &state); + state.period = val; +- ret = pwm_apply_state(pwm, &state); ++ ret = pwm_apply_might_sleep(pwm, &state); + mutex_unlock(&export->lock); + + return ret ? : size; +@@ -97,7 +97,7 @@ static ssize_t duty_cycle_store(struct device *child, + mutex_lock(&export->lock); + pwm_get_state(pwm, &state); + state.duty_cycle = val; +- ret = pwm_apply_state(pwm, &state); ++ ret = pwm_apply_might_sleep(pwm, &state); + mutex_unlock(&export->lock); + + return ret ? : size; +@@ -144,7 +144,7 @@ static ssize_t enable_store(struct device *child, + goto unlock; + } + +- ret = pwm_apply_state(pwm, &state); ++ ret = pwm_apply_might_sleep(pwm, &state); + + unlock: + mutex_unlock(&export->lock); +@@ -194,7 +194,7 @@ static ssize_t polarity_store(struct device *child, + mutex_lock(&export->lock); + pwm_get_state(pwm, &state); + state.polarity = polarity; +- ret = pwm_apply_state(pwm, &state); ++ ret = pwm_apply_might_sleep(pwm, &state); + mutex_unlock(&export->lock); + + return ret ? : size; +@@ -401,7 +401,7 @@ static int pwm_class_apply_state(struct pwm_export *export, + struct pwm_device *pwm, + struct pwm_state *state) + { +- int ret = pwm_apply_state(pwm, state); ++ int ret = pwm_apply_might_sleep(pwm, state); + + /* release lock taken in pwm_class_get_state */ + mutex_unlock(&export->lock); diff --git a/drivers/regulator/Kconfig b/drivers/regulator/Kconfig index 965d4f0c18a6..d6210b0c3bc5 100644 --- a/drivers/regulator/Kconfig @@ -152949,6 +153440,28 @@ obj-$(CONFIG_REGULATOR_RC5T583) += rc5t583-regulator.o obj-$(CONFIG_REGULATOR_RK808) += rk808-regulator.o obj-$(CONFIG_REGULATOR_RN5T618) += rn5t618-regulator.o +diff --git a/drivers/regulator/pwm-regulator.c b/drivers/regulator/pwm-regulator.c +index e33d10df7a76..226ca4c62673 100644 +--- a/drivers/regulator/pwm-regulator.c ++++ b/drivers/regulator/pwm-regulator.c +@@ -90,7 +90,7 @@ static int pwm_regulator_set_voltage_sel(struct regulator_dev *rdev, + pwm_set_relative_duty_cycle(&pstate, + drvdata->duty_cycle_tableselector.dutycycle, 100); + +- ret = pwm_apply_state(drvdata->pwm, &pstate); ++ ret = pwm_apply_might_sleep(drvdata->pwm, &pstate); + if (ret) { + dev_err(&rdev->dev, "Failed to configure PWM: %d\n", ret); + return ret; +@@ -219,7 +219,7 @@ static int pwm_regulator_set_voltage(struct regulator_dev *rdev, + + pwm_set_relative_duty_cycle(&pstate, dutycycle, duty_unit); + +- ret = pwm_apply_state(drvdata->pwm, &pstate); ++ ret = pwm_apply_might_sleep(drvdata->pwm, &pstate); + if (ret) { + dev_err(&rdev->dev, "Failed to configure PWM: %d\n", ret); + return ret; diff --git a/drivers/regulator/rpi-panel-attiny-regulator.c b/drivers/regulator/rpi-panel-attiny-regulator.c index f52c3d47ecea..ab0250fe2837 100644 --- a/drivers/regulator/rpi-panel-attiny-regulator.c @@ -154086,7 +154599,7 @@ static int spi_gpio_probe(struct platform_device *pdev) diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c -index 91e067418bbb..5d8081e09ed7 100644 +index 1e08cd571d21..15d95f7172e2 100644 --- a/drivers/spi/spi.c +++ b/drivers/spi/spi.c @@ -3736,6 +3736,7 @@ static int spi_set_cs_timing(struct spi_device *spi) @@ -154113,7 +154626,7 @@ * Help drivers fail *cleanly* when they need options * that aren't supported with their current controller. diff --git a/drivers/spi/spidev.c b/drivers/spi/spidev.c -index b97206d47ec6..dd21a4ff9869 100644 +index d13dc15cc191..6fae5510b58f 100644 --- a/drivers/spi/spidev.c +++ b/drivers/spi/spidev.c @@ -424,7 +424,6 @@ spidev_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) @@ -154135,15 +154648,15 @@ tmp |= spi->mode & ~SPI_MODE_MASK; spi->mode = tmp & SPI_MODE_USER_MASK; retval = spi_setup(spi); -@@ -705,6 +700,7 @@ static struct class *spidev_class; +@@ -704,6 +699,7 @@ static const struct file_operations spidev_fops = { + static struct class *spidev_class; static const struct spi_device_id spidev_spi_ids = { - { .name = "bh2228fv" }, + { .name = "spidev" }, { .name = "dh2228fv" }, { .name = "ltc2488" }, { .name = "sx1301" }, -@@ -725,7 +721,7 @@ MODULE_DEVICE_TABLE(spi, spidev_spi_ids); +@@ -724,7 +720,7 @@ MODULE_DEVICE_TABLE(spi, spidev_spi_ids); */ static int spidev_of_check(struct device *dev) { @@ -171232,10 +171745,10 @@ } diff --git a/drivers/tty/serial/sc16is7xx.c b/drivers/tty/serial/sc16is7xx.c -index 7a9924d9b294..097dace67a41 100644 +index f75b8bceb8ca..eea6622122af 100644 --- a/drivers/tty/serial/sc16is7xx.c +++ b/drivers/tty/serial/sc16is7xx.c -@@ -773,6 +773,8 @@ static bool sc16is7xx_port_irq(struct sc16is7xx_port *s, int portno) +@@ -760,6 +760,8 @@ static bool sc16is7xx_port_irq(struct sc16is7xx_port *s, int portno) if (rxlen) sc16is7xx_handle_rx(port, rxlen, iir); @@ -171244,7 +171757,7 @@ break; /* CTSRTS interrupt comes only when CTS goes inactive */ case SC16IS7XX_IIR_CTSRTS_SRC: -@@ -1204,6 +1206,9 @@ static int sc16is7xx_startup(struct uart_port *port) +@@ -1191,6 +1193,9 @@ static int sc16is7xx_startup(struct uart_port *port) SC16IS7XX_IER_MSI_BIT; sc16is7xx_port_write(port, SC16IS7XX_IER_REG, val); @@ -171255,7 +171768,7 @@ uart_port_lock_irqsave(port, &flags); sc16is7xx_enable_ms(port); diff --git a/drivers/usb/Makefile b/drivers/usb/Makefile -index 949eca0adebe..80af388baede 100644 +index 3a9a0dd4be70..64d602c5b238 100644 --- a/drivers/usb/Makefile +++ b/drivers/usb/Makefile @@ -9,6 +9,7 @@ obj-$(CONFIG_USB_COMMON) += common/ @@ -171300,10 +171813,10 @@ * endpoint state is gone from hardware. usb_hcd_flush_endpoint() must * have been called previously. Use for set_configuration, set_interface, diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c -index 1ba3feb5e190..88e32e32929c 100644 +index 7417972202b8..a3ed81c7674f 100644 --- a/drivers/usb/core/hub.c +++ b/drivers/usb/core/hub.c -@@ -5710,7 +5710,7 @@ static void port_event(struct usb_hub *hub, int port1) +@@ -5709,7 +5709,7 @@ static void port_event(struct usb_hub *hub, int port1) port_dev->over_current_count++; port_over_current_notify(port_dev); @@ -171582,10 +172095,10 @@ } diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c -index 674467b7638e..b9fb1c1a732d 100644 +index 7d50c81ce97e..192c22bec46e 100644 --- a/drivers/usb/dwc3/core.c +++ b/drivers/usb/dwc3/core.c -@@ -1181,6 +1181,24 @@ static void dwc3_config_threshold(struct dwc3 *dwc) +@@ -1162,6 +1162,24 @@ static void dwc3_config_threshold(struct dwc3 *dwc) } } @@ -171610,7 +172123,7 @@ /** * dwc3_core_init - Low-level initialization of DWC3 Core * @dwc: Pointer to our controller context structure -@@ -1246,6 +1264,8 @@ static int dwc3_core_init(struct dwc3 *dwc) +@@ -1242,6 +1260,8 @@ static int dwc3_core_init(struct dwc3 *dwc) dwc3_set_incr_burst_type(dwc); @@ -171619,7 +172132,7 @@ ret = dwc3_phy_power_on(dwc); if (ret) goto err_exit_phy; -@@ -1310,6 +1330,9 @@ static int dwc3_core_init(struct dwc3 *dwc) +@@ -1306,6 +1326,9 @@ static int dwc3_core_init(struct dwc3 *dwc) if (dwc->parkmode_disable_hs_quirk) reg |= DWC3_GUCTL1_PARKMODE_DISABLE_HS; @@ -171629,7 +172142,7 @@ if (DWC3_VER_IS_WITHIN(DWC3, 290A, ANY) && (dwc->maximum_speed == USB_SPEED_HIGH || dwc->maximum_speed == USB_SPEED_FULL)) -@@ -1320,6 +1343,24 @@ static int dwc3_core_init(struct dwc3 *dwc) +@@ -1316,6 +1339,24 @@ static int dwc3_core_init(struct dwc3 *dwc) dwc3_config_threshold(dwc); @@ -171654,7 +172167,7 @@ return 0; err_power_off_phy: -@@ -1463,6 +1504,7 @@ static void dwc3_get_properties(struct dwc3 *dwc) +@@ -1459,6 +1500,7 @@ static void dwc3_get_properties(struct dwc3 *dwc) u8 tx_thr_num_pkt_prd = 0; u8 tx_max_burst_prd = 0; u8 tx_fifo_resize_max_num; @@ -171662,7 +172175,7 @@ const char *usb_psy_name; int ret; -@@ -1485,6 +1527,9 @@ static void dwc3_get_properties(struct dwc3 *dwc) +@@ -1481,6 +1523,9 @@ static void dwc3_get_properties(struct dwc3 *dwc) */ tx_fifo_resize_max_num = 6; @@ -171672,7 +172185,7 @@ dwc->maximum_speed = usb_get_maximum_speed(dev); dwc->max_ssp_rate = usb_get_maximum_ssp_rate(dev); dwc->dr_mode = usb_get_dr_mode(dev); -@@ -1586,6 +1631,8 @@ static void dwc3_get_properties(struct dwc3 *dwc) +@@ -1582,6 +1627,8 @@ static void dwc3_get_properties(struct dwc3 *dwc) "snps,parkmode-disable-ss-quirk"); dwc->parkmode_disable_hs_quirk = device_property_read_bool(dev, "snps,parkmode-disable-hs-quirk"); @@ -171681,7 +172194,7 @@ dwc->gfladj_refclk_lpm_sel = device_property_read_bool(dev, "snps,gfladj-refclk-lpm-sel-quirk"); -@@ -1606,6 +1653,9 @@ static void dwc3_get_properties(struct dwc3 *dwc) +@@ -1602,6 +1649,9 @@ static void dwc3_get_properties(struct dwc3 *dwc) dwc->dis_split_quirk = device_property_read_bool(dev, "snps,dis-split-quirk"); @@ -171691,7 +172204,7 @@ dwc->lpm_nyet_threshold = lpm_nyet_threshold; dwc->tx_de_emphasis = tx_de_emphasis; -@@ -1623,6 +1673,8 @@ static void dwc3_get_properties(struct dwc3 *dwc) +@@ -1619,6 +1669,8 @@ static void dwc3_get_properties(struct dwc3 *dwc) dwc->tx_thr_num_pkt_prd = tx_thr_num_pkt_prd; dwc->tx_max_burst_prd = tx_max_burst_prd; @@ -171700,7 +172213,7 @@ dwc->imod_interval = 0; dwc->tx_fifo_resize_max_num = tx_fifo_resize_max_num; -@@ -1898,6 +1950,12 @@ static int dwc3_probe(struct platform_device *pdev) +@@ -1894,6 +1946,12 @@ static int dwc3_probe(struct platform_device *pdev) dwc3_get_properties(dwc); @@ -171714,7 +172227,7 @@ if (IS_ERR(dwc->reset)) { ret = PTR_ERR(dwc->reset); diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h -index 07b062c2f647..d5e5e3af84d0 100644 +index 5e6ead35dffc..7a7af6caae91 100644 --- a/drivers/usb/dwc3/core.h +++ b/drivers/usb/dwc3/core.h @@ -185,6 +185,9 @@ @@ -171760,7 +172273,7 @@ * @tx_de_emphasis_quirk: set if we enable Tx de-emphasis quirk * @tx_de_emphasis: Tx de-emphasis value * 0 - -6dB de-emphasis -@@ -1294,6 +1301,7 @@ struct dwc3 { +@@ -1293,6 +1300,7 @@ struct dwc3 { u8 tx_max_burst_prd; u8 tx_fifo_resize_max_num; u8 clear_stall_protocol; @@ -171768,7 +172281,7 @@ const char *hsphy_interface; -@@ -1337,6 +1345,7 @@ struct dwc3 { +@@ -1336,6 +1344,7 @@ struct dwc3 { unsigned ulpi_ext_vbus_drv:1; unsigned parkmode_disable_ss_quirk:1; unsigned parkmode_disable_hs_quirk:1; @@ -171777,10 +172290,10 @@ unsigned tx_de_emphasis_quirk:1; diff --git a/drivers/usb/dwc3/host.c b/drivers/usb/dwc3/host.c -index 6c143f7d2410..53c32d58706d 100644 +index f6a020d77fa1..799ab2a42995 100644 --- a/drivers/usb/dwc3/host.c +++ b/drivers/usb/dwc3/host.c -@@ -82,16 +82,23 @@ static int dwc3_host_get_irq(struct dwc3 *dwc) +@@ -61,16 +61,23 @@ static int dwc3_host_get_irq(struct dwc3 *dwc) int dwc3_host_init(struct dwc3 *dwc) { @@ -175487,6 +176000,23 @@ + kref_put(&fsg->ref, fsg_release); +} +module_exit(fsg_cleanup); +diff --git a/drivers/usb/gadget/function/uvc_configfs.c b/drivers/usb/gadget/function/uvc_configfs.c +index 9bf0e985acfa..d16c04d2961b 100644 +--- a/drivers/usb/gadget/function/uvc_configfs.c ++++ b/drivers/usb/gadget/function/uvc_configfs.c +@@ -92,10 +92,10 @@ static int __uvcg_iter_item_entries(const char *page, size_t len, + + while (pg - page < len) { + i = 0; +- while (i < sizeof(buf) && (pg - page < len) && ++ while (i < bufsize && (pg - page < len) && + *pg != '\0' && *pg != '\n') + bufi++ = *pg++; +- if (i == sizeof(buf)) { ++ if (i == bufsize) { + ret = -EINVAL; + goto out_free_buf; + } diff --git a/drivers/usb/host/Kconfig b/drivers/usb/host/Kconfig index 4448d0ab06f0..fdd73e4d4ad8 100644 --- a/drivers/usb/host/Kconfig @@ -231664,7 +232194,7 @@ erst_base = xhci_read_64(xhci, &ir->ir_set->erst_base); diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c -index ac42ea2795c5..078e49b5ef87 100644 +index 44a749fdcafd..71ea283a4f23 100644 --- a/drivers/usb/host/xhci-pci.c +++ b/drivers/usb/host/xhci-pci.c @@ -27,6 +27,8 @@ @@ -231676,7 +232206,7 @@ /* Device for a quirk */ #define PCI_VENDOR_ID_FRESCO_LOGIC 0x1b73 #define PCI_DEVICE_ID_FRESCO_LOGIC_PDK 0x1000 -@@ -291,6 +293,16 @@ static int xhci_pci_reinit(struct xhci_hcd *xhci, struct pci_dev *pdev) +@@ -290,6 +292,16 @@ static int xhci_pci_reinit(struct xhci_hcd *xhci, struct pci_dev *pdev) return 0; } @@ -231693,7 +232223,7 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci) { struct pci_dev *pdev = to_pci_dev(dev); -@@ -486,8 +498,15 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci) +@@ -479,8 +491,15 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci) pdev->device == 0x3432) xhci->quirks |= XHCI_BROKEN_STREAMS; @@ -231711,7 +232241,7 @@ if (pdev->vendor == PCI_VENDOR_ID_ASMEDIA && pdev->device == PCI_DEVICE_ID_ASMEDIA_1042_XHCI) { diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c -index 8ef5b6773a53..3de4cb2bf5b3 100644 +index c91b6348aa30..82fddeb2ffe7 100644 --- a/drivers/usb/host/xhci-ring.c +++ b/drivers/usb/host/xhci-ring.c @@ -633,8 +633,11 @@ static int xhci_move_dequeue_past_td(struct xhci_hcd *xhci, @@ -231784,7 +232314,7 @@ } /* This function gets called from contexts where it cannot sleep */ -@@ -3627,6 +3659,48 @@ static int xhci_align_td(struct xhci_hcd *xhci, struct urb *urb, u32 enqd_len, +@@ -3596,6 +3628,48 @@ static int xhci_align_td(struct xhci_hcd *xhci, struct urb *urb, u32 enqd_len, return 1; } @@ -231833,7 +232363,7 @@ /* This is very similar to what ehci-q.c qtd_fill() does */ int xhci_queue_bulk_tx(struct xhci_hcd *xhci, gfp_t mem_flags, struct urb *urb, int slot_id, unsigned int ep_index) -@@ -3783,6 +3857,8 @@ int xhci_queue_bulk_tx(struct xhci_hcd *xhci, gfp_t mem_flags, +@@ -3752,6 +3826,8 @@ int xhci_queue_bulk_tx(struct xhci_hcd *xhci, gfp_t mem_flags, } check_trb_math(urb, enqd_len); @@ -231842,7 +232372,7 @@ giveback_first_trb(xhci, slot_id, ep_index, urb->stream_id, start_cycle, start_trb); return 0; -@@ -3918,6 +3994,8 @@ int xhci_queue_ctrl_tx(struct xhci_hcd *xhci, gfp_t mem_flags, +@@ -3887,6 +3963,8 @@ int xhci_queue_ctrl_tx(struct xhci_hcd *xhci, gfp_t mem_flags, /* Event on completion */ field | TRB_IOC | TRB_TYPE(TRB_STATUS) | ep_ring->cycle_state); @@ -231852,10 +232382,10 @@ start_cycle, start_trb); return 0; diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c -index 3c9b4ae3d33b..42711549f16c 100644 +index 573b5784d1c3..6515eb72500a 100644 --- a/drivers/usb/host/xhci.c +++ b/drivers/usb/host/xhci.c -@@ -1496,6 +1496,109 @@ static int xhci_check_maxpacket(struct xhci_hcd *xhci, unsigned int slot_id, +@@ -1486,6 +1486,109 @@ static int xhci_check_maxpacket(struct xhci_hcd *xhci, unsigned int slot_id, return ret; } @@ -231965,7 +232495,7 @@ /* * non-error returns are a promise to giveback() the urb later * we drop ownership so next owner (or urb unlink) can get it -@@ -5326,6 +5429,7 @@ static const struct hc_driver xhci_hc_driver = { +@@ -5316,6 +5419,7 @@ static const struct hc_driver xhci_hc_driver = { .endpoint_reset = xhci_endpoint_reset, .check_bandwidth = xhci_check_bandwidth, .reset_bandwidth = xhci_reset_bandwidth, @@ -231974,10 +232504,10 @@ .enable_device = xhci_enable_device, .update_hub_device = xhci_update_hub_device, diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h -index 53998c16f035..03ae6a902172 100644 +index d57471a9e643..56c8d5dc340f 100644 --- a/drivers/usb/host/xhci.h +++ b/drivers/usb/host/xhci.h -@@ -1680,8 +1680,9 @@ struct urb_priv { +@@ -1679,8 +1679,9 @@ struct urb_priv { * Each segment table entry is 4*32bits long. 1K seems like an ok size: * (1K bytes * 8bytes/bit) / (4*32 bits) = 64 segment entries in the table, * meaning 64 ring segments. @@ -231989,7 +232519,7 @@ /* Poll every 60 seconds */ #define POLL_TIMEOUT 60 /* Stop endpoint command timeout (secs) for URB cancellation watchdog timer */ -@@ -1915,6 +1916,11 @@ struct xhci_hcd { +@@ -1914,6 +1915,11 @@ struct xhci_hcd { #define XHCI_ZHAOXIN_TRB_FETCH BIT_ULL(45) #define XHCI_ZHAOXIN_HOST BIT_ULL(46) @@ -232049,6 +232579,90 @@ obj-$(CONFIG_BACKLIGHT_RT4831) += rt4831-backlight.o obj-$(CONFIG_BACKLIGHT_SAHARA) += kb3886_bl.o obj-$(CONFIG_BACKLIGHT_SKY81452) += sky81452-backlight.o +diff --git a/drivers/video/backlight/lm3630a_bl.c b/drivers/video/backlight/lm3630a_bl.c +index 7115d7bb2a14..26ff4178cc16 100644 +--- a/drivers/video/backlight/lm3630a_bl.c ++++ b/drivers/video/backlight/lm3630a_bl.c +@@ -180,7 +180,7 @@ static int lm3630a_pwm_ctrl(struct lm3630a_chip *pchip, int br, int br_max) + + pchip->pwmd_state.enabled = pchip->pwmd_state.duty_cycle ? true : false; + +- return pwm_apply_state(pchip->pwmd, &pchip->pwmd_state); ++ return pwm_apply_might_sleep(pchip->pwmd, &pchip->pwmd_state); + } + + /* update and get brightness */ +diff --git a/drivers/video/backlight/lp855x_bl.c b/drivers/video/backlight/lp855x_bl.c +index da1f124db69c..7075bfab59c4 100644 +--- a/drivers/video/backlight/lp855x_bl.c ++++ b/drivers/video/backlight/lp855x_bl.c +@@ -234,7 +234,7 @@ static int lp855x_pwm_ctrl(struct lp855x *lp, int br, int max_br) + state.duty_cycle = div_u64(br * state.period, max_br); + state.enabled = state.duty_cycle; + +- return pwm_apply_state(lp->pwm, &state); ++ return pwm_apply_might_sleep(lp->pwm, &state); + } + + static int lp855x_bl_update_status(struct backlight_device *bl) +diff --git a/drivers/video/backlight/pwm_bl.c b/drivers/video/backlight/pwm_bl.c +index 289bd9ce4d36..35c716e9043c 100644 +--- a/drivers/video/backlight/pwm_bl.c ++++ b/drivers/video/backlight/pwm_bl.c +@@ -103,7 +103,7 @@ static int pwm_backlight_update_status(struct backlight_device *bl) + pwm_get_state(pb->pwm, &state); + state.duty_cycle = compute_duty_cycle(pb, brightness, &state); + state.enabled = true; +- pwm_apply_state(pb->pwm, &state); ++ pwm_apply_might_sleep(pb->pwm, &state); + + pwm_backlight_power_on(pb); + } else { +@@ -120,7 +120,7 @@ static int pwm_backlight_update_status(struct backlight_device *bl) + * inactive output. + */ + state.enabled = !pb->power_supply && !pb->enable_gpio; +- pwm_apply_state(pb->pwm, &state); ++ pwm_apply_might_sleep(pb->pwm, &state); + } + + if (pb->notify_after) +@@ -528,7 +528,7 @@ static int pwm_backlight_probe(struct platform_device *pdev) + if (!state.period && (data->pwm_period_ns > 0)) + state.period = data->pwm_period_ns; + +- ret = pwm_apply_state(pb->pwm, &state); ++ ret = pwm_apply_might_sleep(pb->pwm, &state); + if (ret) { + dev_err(&pdev->dev, "failed to apply initial PWM state: %d\n", + ret); +@@ -633,7 +633,7 @@ static void pwm_backlight_remove(struct platform_device *pdev) + pwm_get_state(pb->pwm, &state); + state.duty_cycle = 0; + state.enabled = false; +- pwm_apply_state(pb->pwm, &state); ++ pwm_apply_might_sleep(pb->pwm, &state); + + if (pb->exit) + pb->exit(&pdev->dev); +@@ -649,7 +649,7 @@ static void pwm_backlight_shutdown(struct platform_device *pdev) + pwm_get_state(pb->pwm, &state); + state.duty_cycle = 0; + state.enabled = false; +- pwm_apply_state(pb->pwm, &state); ++ pwm_apply_might_sleep(pb->pwm, &state); + } + + #ifdef CONFIG_PM_SLEEP +@@ -673,7 +673,7 @@ static int pwm_backlight_suspend(struct device *dev) + pwm_get_state(pb->pwm, &state); + state.duty_cycle = 0; + state.enabled = false; +- pwm_apply_state(pb->pwm, &state); ++ pwm_apply_might_sleep(pb->pwm, &state); + + if (pb->notify_after) + pb->notify_after(pb->dev, 0); diff --git a/drivers/video/backlight/rpi_backlight.c b/drivers/video/backlight/rpi_backlight.c new file mode 100644 index 000000000000..14a0d9b03739 @@ -232175,7 +232789,7 @@ +MODULE_DESCRIPTION("Raspberry Pi mailbox based Backlight Driver"); +MODULE_LICENSE("GPL"); diff --git a/drivers/video/fbdev/Kconfig b/drivers/video/fbdev/Kconfig -index 2ada2b100c51..9198e18aea2d 100644 +index 35b3ca2fb50a..9682b8711f71 100644 --- a/drivers/video/fbdev/Kconfig +++ b/drivers/video/fbdev/Kconfig @@ -61,6 +61,21 @@ config FB_MACMODES @@ -233955,6 +234569,19 @@ +MODULE_AUTHOR("Serge Schneider <serge@raspberrypi.org>"); +MODULE_LICENSE("GPL"); + +diff --git a/drivers/video/fbdev/ssd1307fb.c b/drivers/video/fbdev/ssd1307fb.c +index 5ae48e36fccb..1a4f90ea7d5a 100644 +--- a/drivers/video/fbdev/ssd1307fb.c ++++ b/drivers/video/fbdev/ssd1307fb.c +@@ -347,7 +347,7 @@ static int ssd1307fb_init(struct ssd1307fb_par *par) + + pwm_init_state(par->pwm, &pwmstate); + pwm_set_relative_duty_cycle(&pwmstate, 50, 100); +- pwm_apply_state(par->pwm, &pwmstate); ++ pwm_apply_might_sleep(par->pwm, &pwmstate); + + /* Enable the PWM */ + pwm_enable(par->pwm); diff --git a/drivers/video/logo/logo_linux_clut224.ppm b/drivers/video/logo/logo_linux_clut224.ppm index 3c14e43b82fe..7626beb6a5bb 100644 --- a/drivers/video/logo/logo_linux_clut224.ppm @@ -236718,7 +237345,7 @@ * @DRM_MODE_TV_MODE_MAX: Number of analog TV output modes. * diff --git a/include/drm/drm_mipi_dsi.h b/include/drm/drm_mipi_dsi.h -index 900262f4c234..48bfdd398fb0 100644 +index c0aec0d4d664..4c44d3ed89b8 100644 --- a/include/drm/drm_mipi_dsi.h +++ b/include/drm/drm_mipi_dsi.h @@ -113,29 +113,43 @@ struct mipi_dsi_host *of_find_mipi_dsi_host_by_node(struct device_node *node); @@ -237617,7 +238244,7 @@ + +#endif /* _VC_MEM_H */ diff --git a/include/linux/fb.h b/include/linux/fb.h -index 195513d589c2..146c0b309265 100644 +index ab2a9f4163c7..703dd9cd4bd2 100644 --- a/include/linux/fb.h +++ b/include/linux/fb.h @@ -504,6 +504,7 @@ struct fb_info { @@ -237649,7 +238276,7 @@ int gpiochip_irq_map(struct irq_domain *d, unsigned int irq, irq_hw_number_t hwirq); diff --git a/include/linux/iommu.h b/include/linux/iommu.h -index 293219ee6fb9..2a798ab6bec5 100644 +index 98acb1d50bd9..a0804d0f1f5e 100644 --- a/include/linux/iommu.h +++ b/include/linux/iommu.h @@ -693,16 +693,20 @@ struct iommu_domain_ops { @@ -237676,7 +238303,7 @@ struct iommu_iotlb_gather *iotlb_gather); int (*cache_invalidate_user)(struct iommu_domain *domain, diff --git a/include/linux/leds.h b/include/linux/leds.h -index d3056bc6f0a1..eafe6034550f 100644 +index aa16dc2a8230..9c7ad6eada2c 100644 --- a/include/linux/leds.h +++ b/include/linux/leds.h @@ -115,6 +115,9 @@ struct led_classdev { @@ -238053,9 +238680,54 @@ + +#endif /* _PLAT_BCM2708_DMA_H */ diff --git a/include/linux/pwm.h b/include/linux/pwm.h -index 63426d8255e4..4bfbd25ade06 100644 +index fe0f38ce1bde..4bfbd25ade06 100644 --- a/include/linux/pwm.h +++ b/include/linux/pwm.h +@@ -95,8 +95,8 @@ struct pwm_device { + * @state: state to fill with the current PWM state + * + * The returned PWM state represents the state that was applied by a previous call to +- * pwm_apply_state(). Drivers may have to slightly tweak that state before programming it to +- * hardware. If pwm_apply_state() was never called, this returns either the current hardware ++ * pwm_apply_might_sleep(). Drivers may have to slightly tweak that state before programming it to ++ * hardware. If pwm_apply_might_sleep() was never called, this returns either the current hardware + * state (if supported) or the default settings. + */ + static inline void pwm_get_state(const struct pwm_device *pwm, +@@ -160,20 +160,20 @@ static inline void pwm_get_args(const struct pwm_device *pwm, + } + + /** +- * pwm_init_state() - prepare a new state to be applied with pwm_apply_state() ++ * pwm_init_state() - prepare a new state to be applied with pwm_apply_might_sleep() + * @pwm: PWM device + * @state: state to fill with the prepared PWM state + * + * This functions prepares a state that can later be tweaked and applied +- * to the PWM device with pwm_apply_state(). This is a convenient function ++ * to the PWM device with pwm_apply_might_sleep(). This is a convenient function + * that first retrieves the current PWM state and the replaces the period + * and polarity fields with the reference values defined in pwm->args. + * Once the function returns, you can adjust the ->enabled and ->duty_cycle +- * fields according to your needs before calling pwm_apply_state(). ++ * fields according to your needs before calling pwm_apply_might_sleep(). + * + * ->duty_cycle is initially set to zero to avoid cases where the current + * ->duty_cycle value exceed the pwm_args->period one, which would trigger +- * an error if the user calls pwm_apply_state() without adjusting ->duty_cycle ++ * an error if the user calls pwm_apply_might_sleep() without adjusting ->duty_cycle + * first. + */ + static inline void pwm_init_state(const struct pwm_device *pwm, +@@ -229,7 +229,7 @@ pwm_get_relative_duty_cycle(const struct pwm_state *state, unsigned int scale) + * + * pwm_init_state(pwm, &state); + * pwm_set_relative_duty_cycle(&state, 50, 100); +- * pwm_apply_state(pwm, &state); ++ * pwm_apply_might_sleep(pwm, &state); + * + * This functions returns -EINVAL if @duty_cycle and/or @scale are + * inconsistent (@scale == 0 or @duty_cycle > @scale). @@ -289,6 +289,7 @@ struct pwm_ops { * @npwm: number of PWMs controlled by this chip * @of_xlate: request a PWM device given a device tree PWM specifier @@ -238072,18 +238744,42 @@ /* only used internally by the PWM framework */ struct list_head list; -@@ -310,6 +312,7 @@ struct pwm_chip { +@@ -309,7 +311,8 @@ struct pwm_chip { + #if IS_ENABLED(CONFIG_PWM) /* PWM user APIs */ - int pwm_apply_might_sleep(struct pwm_device *pwm, const struct pwm_state *state); +-int pwm_apply_state(struct pwm_device *pwm, const struct pwm_state *state); ++int pwm_apply_might_sleep(struct pwm_device *pwm, const struct pwm_state *state); +int pwm_apply_atomic(struct pwm_device *pwm, const struct pwm_state *state); int pwm_adjust_config(struct pwm_device *pwm); /** -@@ -380,6 +383,17 @@ static inline void pwm_disable(struct pwm_device *pwm) - pwm_apply_might_sleep(pwm, &state); +@@ -337,7 +340,7 @@ static inline int pwm_config(struct pwm_device *pwm, int duty_ns, + + state.duty_cycle = duty_ns; + state.period = period_ns; +- return pwm_apply_state(pwm, &state); ++ return pwm_apply_might_sleep(pwm, &state); } + /** +@@ -358,7 +361,7 @@ static inline int pwm_enable(struct pwm_device *pwm) + return 0; + + state.enabled = true; +- return pwm_apply_state(pwm, &state); ++ return pwm_apply_might_sleep(pwm, &state); + } + + /** +@@ -377,7 +380,18 @@ static inline void pwm_disable(struct pwm_device *pwm) + return; + + state.enabled = false; +- pwm_apply_state(pwm, &state); ++ pwm_apply_might_sleep(pwm, &state); ++} ++ +/** + * pwm_might_sleep() - is pwm_apply_atomic() supported? + * @pwm: PWM device @@ -238093,22 +238789,22 @@ +static inline bool pwm_might_sleep(struct pwm_device *pwm) +{ + return !pwm->chip->atomic; -+} -+ + } + /* PWM provider APIs */ - int pwm_capture(struct pwm_device *pwm, struct pwm_capture *result, - unsigned long timeout); @@ -408,16 +422,27 @@ struct pwm_device *devm_fwnode_pwm_get(struct device *dev, struct fwnode_handle *fwnode, const char *con_id); #else +-static inline int pwm_apply_state(struct pwm_device *pwm, +- const struct pwm_state *state) +static inline bool pwm_might_sleep(struct pwm_device *pwm) +{ + return true; +} + - static inline int pwm_apply_might_sleep(struct pwm_device *pwm, - const struct pwm_state *state) ++static inline int pwm_apply_might_sleep(struct pwm_device *pwm, ++ const struct pwm_state *state) { might_sleep(); - return -ENOTSUPP; @@ -238128,6 +238824,15 @@ } static inline int pwm_config(struct pwm_device *pwm, int duty_ns, +@@ -536,7 +561,7 @@ static inline void pwm_apply_args(struct pwm_device *pwm) + state.period = pwm->args.period; + state.usage_power = false; + +- pwm_apply_state(pwm, &state); ++ pwm_apply_might_sleep(pwm, &state); + } + + struct pwm_lookup { diff --git a/include/linux/rp1_platform.h b/include/linux/rp1_platform.h new file mode 100644 index 000000000000..f805dbe1ed9b @@ -239115,7 +239820,7 @@ #define V4L2_PIX_FMT_PRIV_MAGIC 0xfeedcafe diff --git a/kernel/cgroup/cgroup.c b/kernel/cgroup/cgroup.c -index ef9da2e19aad..19c9df92f89b 100644 +index dd8eed3c6e31..7b717aa93c47 100644 --- a/kernel/cgroup/cgroup.c +++ b/kernel/cgroup/cgroup.c @@ -6170,6 +6170,9 @@ int __init cgroup_init_early(void) @@ -239202,10 +239907,10 @@ for (;;) { tmp = *p; diff --git a/mm/page_alloc.c b/mm/page_alloc.c -index 52382ba24232..e987fac9ed69 100644 +index 4652dc453964..b9ab4d4b2353 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c -@@ -207,6 +207,27 @@ EXPORT_SYMBOL(node_states); +@@ -206,6 +206,27 @@ EXPORT_SYMBOL(node_states); gfp_t gfp_allowed_mask __read_mostly = GFP_BOOT_MASK; @@ -239233,7 +239938,7 @@ /* * A cached value of the page's pageblock's migratetype, used when the page is * put on a pcplist. Used to avoid the pageblock migratetype lookup when -@@ -2107,12 +2128,13 @@ __rmqueue(struct zone *zone, unsigned int order, int migratetype, +@@ -2123,12 +2144,13 @@ __rmqueue(struct zone *zone, unsigned int order, int migratetype, if (IS_ENABLED(CONFIG_CMA)) { /* * Balance movable allocations between regular and CMA areas by @@ -239251,10 +239956,10 @@ if (page) return page; diff --git a/net/bluetooth/hci_sync.c b/net/bluetooth/hci_sync.c -index 38fee34887d8..7778e0dbaa6f 100644 +index 1bc58b324b73..e2ae1bd4dfd0 100644 --- a/net/bluetooth/hci_sync.c +++ b/net/bluetooth/hci_sync.c -@@ -4707,6 +4707,7 @@ static const struct { +@@ -4737,6 +4737,7 @@ static const struct { */ static int hci_dev_setup_sync(struct hci_dev *hdev) { @@ -239262,7 +239967,7 @@ int ret = 0; bool invalid_bdaddr; size_t i; -@@ -4735,7 +4736,8 @@ static int hci_dev_setup_sync(struct hci_dev *hdev) +@@ -4765,7 +4766,8 @@ static int hci_dev_setup_sync(struct hci_dev *hdev) test_bit(HCI_QUIRK_USE_BDADDR_PROPERTY, &hdev->quirks); if (!ret) { if (test_bit(HCI_QUIRK_USE_BDADDR_PROPERTY, &hdev->quirks) && @@ -240747,7 +241452,7 @@ +0x9f, +0x21, diff --git a/scripts/Makefile.dtbinst b/scripts/Makefile.dtbinst -index fa3ad33a19df..38af1db2a98e 100644 +index 4405d5b67578..9d8f14e3c732 100644 --- a/scripts/Makefile.dtbinst +++ b/scripts/Makefile.dtbinst @@ -18,9 +18,10 @@ include $(srctree)/scripts/Kbuild.include @@ -240771,10 +241476,10 @@ .PHONY: $(PHONY) diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib -index 9443c7ca1183..0ad40aa42efe 100644 +index 68d0134bdbf9..116cfae5fa07 100644 --- a/scripts/Makefile.lib +++ b/scripts/Makefile.lib -@@ -356,6 +356,7 @@ DTC_FLAGS += -Wno-interrupt_provider \ +@@ -346,6 +346,7 @@ DTC_FLAGS += -Wno-interrupt_provider \ # Disable noisy checks by default ifeq ($(findstring 1,$(KBUILD_EXTRA_WARN)),) DTC_FLAGS += -Wno-unit_address_vs_reg \ @@ -240782,7 +241487,7 @@ -Wno-avoid_unnecessary_addr_size \ -Wno-alias_paths \ -Wno-graph_child_address \ -@@ -435,6 +436,24 @@ $(obj)/%.dtb: $(src)/%.dts $(DTC) $(DT_TMP_SCHEMA) FORCE +@@ -421,6 +422,24 @@ $(obj)/%.dtb: $(src)/%.dts $(DTC) $(DT_TMP_SCHEMA) FORCE $(obj)/%.dtbo: $(src)/%.dtso $(DTC) FORCE $(call if_changed_dep,dtc) @@ -257107,10 +257812,10 @@ /* * For devices with more than one control interface, we assume the diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c -index b437b14d838a..6f5a7a51f327 100644 +index 09712e61c606..48e0226b2d34 100644 --- a/sound/usb/quirks.c +++ b/sound/usb/quirks.c -@@ -2189,6 +2189,8 @@ static const struct usb_audio_quirk_flags_table quirk_flags_table = { +@@ -2185,6 +2185,8 @@ static const struct usb_audio_quirk_flags_table quirk_flags_table = { QUIRK_FLAG_ALIGN_TRANSFER), DEVICE_FLG(0x534d, 0x2109, /* MacroSilicon MS2109 */ QUIRK_FLAG_ALIGN_TRANSFER),
View file
_service:tar_scm:0001-raspberrypi-kernel-RT.patch
Changed
@@ -1,7 +1,7 @@ -From b000137e06f399ac756aa2374e77e724d245f19c Mon Sep 17 00:00:00 2001 +From a8b87098c93aa630d286de4af9637a247d55a370 Mon Sep 17 00:00:00 2001 From: zhangyu <zhangyu4@kylinos.cn> -Date: Thu, 22 Aug 2024 09:32:29 +0800 -Subject: PATCH rt-patrch +Date: Fri, 17 May 2024 15:06:01 +0800 +Subject: PATCH rpi-rt --- arch/arm/Kconfig | 6 +- @@ -32,7 +32,7 @@ drivers/gpu/drm/i915/Kconfig | 1 - drivers/gpu/drm/i915/display/intel_crtc.c | 15 +- drivers/gpu/drm/i915/display/intel_vblank.c | 6 +- - drivers/gpu/drm/i915/gt/intel_breadcrumbs.c | 7 +- + drivers/gpu/drm/i915/gt/intel_breadcrumbs.c | 5 +- .../drm/i915/gt/intel_execlists_submission.c | 17 +- drivers/gpu/drm/i915/gt/intel_reset.c | 12 +- drivers/gpu/drm/i915/gt/uc/intel_guc.h | 2 +- @@ -155,10 +155,10 @@ kernel/sched/core.c | 127 +- kernel/sched/debug.c | 19 + kernel/sched/fair.c | 49 +- - kernel/sched/features.h | 2 + + kernel/sched/features.h | 2 +- kernel/sched/idle.c | 3 +- kernel/sched/rt.c | 5 +- - kernel/sched/sched.h | 3 +- + kernel/sched/sched.h | 1 + kernel/signal.c | 30 +- kernel/softirq.c | 95 +- kernel/time/hrtimer.c | 4 +- @@ -168,11 +168,11 @@ kernel/trace/trace_output.c | 16 +- net/core/dev.c | 39 +- net/core/skbuff.c | 7 +- - 164 files changed, 5047 insertions(+), 1540 deletions(-) + 164 files changed, 5041 insertions(+), 1542 deletions(-) create mode 100644 kernel/printk/nbcon.c diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig -index 749935e2e..46910150c 100644 +index 2483ce304..52707a682 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -34,6 +34,7 @@ config ARM @@ -234,7 +234,7 @@ return 0; } diff --git a/arch/arm/vfp/vfpmodule.c b/arch/arm/vfp/vfpmodule.c -index 7e8773a2d..9fde36fcb 100644 +index a1ff693e4..adcc34042 100644 --- a/arch/arm/vfp/vfpmodule.c +++ b/arch/arm/vfp/vfpmodule.c @@ -55,6 +55,34 @@ extern unsigned int VFP_arch_feroceon __alias(VFP_arch); @@ -272,7 +272,7 @@ /* * Is 'thread's most up to date state stored in this CPUs hardware? * Must be called from non-preemptible context. -@@ -240,7 +268,7 @@ static void vfp_panic(char *reason, u32 inst) +@@ -243,7 +271,7 @@ static void vfp_panic(char *reason, u32 inst) /* * Process bitmask of exception conditions. */ @@ -281,7 +281,7 @@ { int si_code = 0; -@@ -248,8 +276,7 @@ static void vfp_raise_exceptions(u32 exceptions, u32 inst, u32 fpscr, struct pt_ +@@ -251,8 +279,7 @@ static void vfp_raise_exceptions(u32 exceptions, u32 inst, u32 fpscr, struct pt_ if (exceptions == VFP_EXCEPTION_ERROR) { vfp_panic("unhandled bounce", inst); @@ -291,7 +291,7 @@ } /* -@@ -277,8 +304,7 @@ static void vfp_raise_exceptions(u32 exceptions, u32 inst, u32 fpscr, struct pt_ +@@ -280,8 +307,7 @@ static void vfp_raise_exceptions(u32 exceptions, u32 inst, u32 fpscr, struct pt_ RAISE(FPSCR_OFC, FPSCR_OFE, FPE_FLTOVF); RAISE(FPSCR_IOC, FPSCR_IOE, FPE_FLTINV); @@ -301,7 +301,7 @@ } /* -@@ -324,6 +350,8 @@ static u32 vfp_emulate_instruction(u32 inst, u32 fpscr, struct pt_regs *regs) +@@ -327,6 +353,8 @@ static u32 vfp_emulate_instruction(u32 inst, u32 fpscr, struct pt_regs *regs) static void VFP_bounce(u32 trigger, u32 fpexc, struct pt_regs *regs) { u32 fpscr, orig_fpscr, fpsid, exceptions; @@ -310,7 +310,7 @@ pr_debug("VFP: bounce: trigger %08x fpexc %08x\n", trigger, fpexc); -@@ -369,8 +397,8 @@ static void VFP_bounce(u32 trigger, u32 fpexc, struct pt_regs *regs) +@@ -372,8 +400,8 @@ static void VFP_bounce(u32 trigger, u32 fpexc, struct pt_regs *regs) * unallocated VFP instruction but with FPSCR.IXE set and not * on VFP subarch 1. */ @@ -321,7 +321,7 @@ } /* -@@ -394,14 +422,14 @@ static void VFP_bounce(u32 trigger, u32 fpexc, struct pt_regs *regs) +@@ -397,14 +425,14 @@ static void VFP_bounce(u32 trigger, u32 fpexc, struct pt_regs *regs) */ exceptions = vfp_emulate_instruction(trigger, fpscr, regs); if (exceptions) @@ -338,7 +338,7 @@ /* * The barrier() here prevents fpinst2 being read -@@ -413,7 +441,13 @@ static void VFP_bounce(u32 trigger, u32 fpexc, struct pt_regs *regs) +@@ -416,7 +444,13 @@ static void VFP_bounce(u32 trigger, u32 fpexc, struct pt_regs *regs) emulate: exceptions = vfp_emulate_instruction(trigger, orig_fpscr, regs); if (exceptions) @@ -353,7 +353,7 @@ } static void vfp_enable(void *unused) -@@ -512,11 +546,9 @@ static inline void vfp_pm_init(void) { } +@@ -518,11 +552,9 @@ static inline void vfp_pm_init(void) { } */ void vfp_sync_hwstate(struct thread_info *thread) { @@ -367,7 +367,7 @@ u32 fpexc = fmrx(FPEXC); /* -@@ -527,8 +559,7 @@ void vfp_sync_hwstate(struct thread_info *thread) +@@ -534,8 +566,7 @@ void vfp_sync_hwstate(struct thread_info *thread) fmxr(FPEXC, fpexc); } @@ -377,7 +377,7 @@ } /* Ensure that the thread reloads the hardware VFP state on the next use. */ -@@ -683,7 +714,7 @@ static int vfp_support_entry(struct pt_regs *regs, u32 trigger) +@@ -695,7 +726,7 @@ static int vfp_support_entry(struct pt_regs *regs, u32 trigger) if (!user_mode(regs)) return vfp_kmode_exception(regs, trigger); @@ -386,7 +386,7 @@ fpexc = fmrx(FPEXC); /* -@@ -748,6 +779,7 @@ static int vfp_support_entry(struct pt_regs *regs, u32 trigger) +@@ -760,6 +791,7 @@ static int vfp_support_entry(struct pt_regs *regs, u32 trigger) * replay the instruction that trapped. */ fmxr(FPEXC, fpexc); @@ -394,7 +394,7 @@ } else { /* Check for synchronous or asynchronous exceptions */ if (!(fpexc & (FPEXC_EX | FPEXC_DEX))) { -@@ -762,17 +794,17 @@ static int vfp_support_entry(struct pt_regs *regs, u32 trigger) +@@ -774,17 +806,17 @@ static int vfp_support_entry(struct pt_regs *regs, u32 trigger) if (!(fpscr & FPSCR_IXE)) { if (!(fpscr & FPSCR_LENGTH_MASK)) { pr_debug("not VFP\n"); @@ -414,7 +414,7 @@ return 0; } -@@ -819,7 +851,7 @@ void kernel_neon_begin(void) +@@ -831,7 +863,7 @@ void kernel_neon_begin(void) unsigned int cpu; u32 fpexc; @@ -423,7 +423,7 @@ /* * Kernel mode NEON is only allowed outside of hardirq context with -@@ -850,7 +882,7 @@ void kernel_neon_end(void) +@@ -863,7 +895,7 @@ void kernel_neon_end(void) { /* Disable the NEON/VFP unit. */ fmxr(FPEXC, fmrx(FPEXC) & ~FPEXC_EN); @@ -433,10 +433,10 @@ EXPORT_SYMBOL(kernel_neon_end); diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig -index 501ec560a..eb0d9a8e0 100644 +index bb49f48de..699c3f58a 100644 --- a/arch/arm64/Kconfig +++ b/arch/arm64/Kconfig -@@ -99,6 +99,7 @@ config ARM64 +@@ -98,6 +98,7 @@ config ARM64 select ARCH_SUPPORTS_NUMA_BALANCING select ARCH_SUPPORTS_PAGE_TABLE_CHECK select ARCH_SUPPORTS_PER_VMA_LOCK @@ -531,7 +531,7 @@ select MPIC select OF_DYNAMIC diff --git a/arch/powerpc/platforms/pseries/iommu.c b/arch/powerpc/platforms/pseries/iommu.c -index b1e6d275c..9a8d3970d 100644 +index e8c412969..c61e29dea 100644 --- a/arch/powerpc/platforms/pseries/iommu.c +++ b/arch/powerpc/platforms/pseries/iommu.c @@ -25,6 +25,7 @@ @@ -838,10 +838,10 @@ if (has_vector()) { if (riscv_v_setup_vsize()) diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig -index 958a491fb..acb9d6f2a 100644 +index a993a3716..aa7ab6207 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig -@@ -122,6 +122,7 @@ config X86 +@@ -121,6 +121,7 @@ config X86 select ARCH_USES_CFI_TRAPS if X86_64 && CFI_CLANG select ARCH_SUPPORTS_LTO_CLANG select ARCH_SUPPORTS_LTO_CLANG_THIN @@ -849,7 +849,7 @@ select ARCH_USE_BUILTIN_BSWAP select ARCH_USE_MEMTEST select ARCH_USE_QUEUED_RWLOCKS -@@ -278,6 +279,7 @@ config X86 +@@ -277,6 +278,7 @@ config X86 select HAVE_STATIC_CALL select HAVE_STATIC_CALL_INLINE if HAVE_OBJTOOL select HAVE_PREEMPT_DYNAMIC_CALL @@ -882,10 +882,10 @@ #define _TIF_SSBD (1 << TIF_SSBD) #define _TIF_SPEC_IB (1 << TIF_SPEC_IB) diff --git a/drivers/acpi/processor_idle.c b/drivers/acpi/processor_idle.c -index 831fa4a12..5af3ebec0 100644 +index bd6a7857c..d45dfd10b 100644 --- a/drivers/acpi/processor_idle.c +++ b/drivers/acpi/processor_idle.c -@@ -107,7 +107,7 @@ static const struct dmi_system_id processor_power_dmi_table = { +@@ -108,7 +108,7 @@ static const struct dmi_system_id processor_power_dmi_table = { */ static void __cpuidle acpi_safe_halt(void) { @@ -1139,7 +1139,7 @@ DC_LOGGER_INIT(dc->ctx->logger); BW_VAL_TRACE_COUNT(); -@@ -2062,16 +2061,14 @@ validate_fail: +@@ -2062,16 +2061,14 @@ static bool dcn20_validate_bandwidth_internal(struct dc *dc, struct dc_state *co out = false; validate_out: @@ -1202,7 +1202,7 @@ DC_LOGGER_INIT(dc->ctx->logger); BW_VAL_TRACE_COUNT(); -@@ -2362,7 +2358,6 @@ validate_fail: +@@ -2362,7 +2358,6 @@ bool dcn21_validate_bandwidth_fp(struct dc *dc, out = false; validate_out: @@ -1325,25 +1325,24 @@ spin_unlock_irqrestore(&dev_priv->uncore.lock, irqflags); diff --git a/drivers/gpu/drm/i915/gt/intel_breadcrumbs.c b/drivers/gpu/drm/i915/gt/intel_breadcrumbs.c -index f2973cd1a..aa77f8601 100644 +index ecc990ec1..8d04b1068 100644 --- a/drivers/gpu/drm/i915/gt/intel_breadcrumbs.c +++ b/drivers/gpu/drm/i915/gt/intel_breadcrumbs.c -@@ -315,7 +315,12 @@ void __intel_breadcrumbs_park(struct intel_breadcrumbs *b) - return; - +@@ -312,10 +312,9 @@ void __intel_breadcrumbs_park(struct intel_breadcrumbs *b) /* Kick the work once more to drain the signalers, and disarm the irq */ -- irq_work_queue(&b->irq_work); -+ irq_work_sync(&b->irq_work); -+ while (READ_ONCE(b->irq_armed) && !atomic_read(&b->active)) { + irq_work_sync(&b->irq_work); + while (READ_ONCE(b->irq_armed) && !atomic_read(&b->active)) { +- local_irq_disable(); +- signal_irq_work(&b->irq_work); +- local_irq_enable(); + irq_work_queue(&b->irq_work); -+ cond_resched(); + cond_resched(); + irq_work_sync(&b->irq_work); -+ } + } } - void intel_breadcrumbs_free(struct kref *kref) diff --git a/drivers/gpu/drm/i915/gt/intel_execlists_submission.c b/drivers/gpu/drm/i915/gt/intel_execlists_submission.c -index 2065be5a1..73d815fc5 100644 +index 42e09f158..ac80e229f 100644 --- a/drivers/gpu/drm/i915/gt/intel_execlists_submission.c +++ b/drivers/gpu/drm/i915/gt/intel_execlists_submission.c @@ -1303,7 +1303,7 @@ static void execlists_dequeue(struct intel_engine_cs *engine) @@ -1373,7 +1372,7 @@ return; /* leave this for another sibling */ } -@@ -1591,7 +1591,7 @@ done: +@@ -1591,7 +1591,7 @@ static void execlists_dequeue(struct intel_engine_cs *engine) */ sched_engine->queue_priority_hint = queue_prio(sched_engine); i915_sched_engine_reset_on_empty(sched_engine); @@ -1382,7 +1381,7 @@ /* * We can skip poking the HW if we ended up with exactly the same set -@@ -1617,13 +1617,6 @@ done: +@@ -1617,13 +1617,6 @@ static void execlists_dequeue(struct intel_engine_cs *engine) } } @@ -1597,7 +1596,7 @@ lsr = serial_port_in(port, UART_LSR); diff --git a/drivers/tty/serial/8250/8250_bcm7271.c b/drivers/tty/serial/8250/8250_bcm7271.c -index 9afd5979c..db23b3a02 100644 +index aa5aff046..ff0662c68 100644 --- a/drivers/tty/serial/8250/8250_bcm7271.c +++ b/drivers/tty/serial/8250/8250_bcm7271.c @@ -567,7 +567,7 @@ static irqreturn_t brcmuart_isr(int irq, void *dev_id) @@ -1649,7 +1648,7 @@ serial8250_do_shutdown(port); } -@@ -807,7 +807,7 @@ static int brcmuart_handle_irq(struct uart_port *p) +@@ -788,7 +788,7 @@ static int brcmuart_handle_irq(struct uart_port *p) * interrupt but there is no data ready. */ if (((iir & UART_IIR_ID) == UART_IIR_RX_TIMEOUT) && !(priv->shutdown)) { @@ -1658,7 +1657,7 @@ status = serial_port_in(p, UART_LSR); if ((status & UART_LSR_DR) == 0) { -@@ -832,7 +832,7 @@ static int brcmuart_handle_irq(struct uart_port *p) +@@ -813,7 +813,7 @@ static int brcmuart_handle_irq(struct uart_port *p) handled = 1; } @@ -1667,7 +1666,7 @@ if (handled) return 1; } -@@ -850,7 +850,7 @@ static enum hrtimer_restart brcmuart_hrtimer_func(struct hrtimer *t) +@@ -831,7 +831,7 @@ static enum hrtimer_restart brcmuart_hrtimer_func(struct hrtimer *t) if (priv->shutdown) return HRTIMER_NORESTART; @@ -1676,7 +1675,7 @@ status = serial_port_in(p, UART_LSR); /* -@@ -874,7 +874,7 @@ static enum hrtimer_restart brcmuart_hrtimer_func(struct hrtimer *t) +@@ -855,7 +855,7 @@ static enum hrtimer_restart brcmuart_hrtimer_func(struct hrtimer *t) status |= UART_MCR_RTS; serial_port_out(p, UART_MCR, status); } @@ -1685,7 +1684,7 @@ return HRTIMER_NORESTART; } -@@ -1173,10 +1173,10 @@ static int __maybe_unused brcmuart_suspend(struct device *dev) +@@ -1154,10 +1154,10 @@ static int __maybe_unused brcmuart_suspend(struct device *dev) * This will prevent resume from enabling RTS before the * baud rate has been restored. */ @@ -1698,7 +1697,7 @@ serial8250_suspend_port(priv->line); clk_disable_unprepare(priv->baud_mux_clk); -@@ -1215,10 +1215,10 @@ static int __maybe_unused brcmuart_resume(struct device *dev) +@@ -1196,10 +1196,10 @@ static int __maybe_unused brcmuart_resume(struct device *dev) if (priv->saved_mctrl & TIOCM_RTS) { /* Restore RTS */ @@ -1712,10 +1711,10 @@ return 0; diff --git a/drivers/tty/serial/8250/8250_core.c b/drivers/tty/serial/8250/8250_core.c -index 3449f8790..30434718f 100644 +index e561f21cd..594201fbc 100644 --- a/drivers/tty/serial/8250/8250_core.c +++ b/drivers/tty/serial/8250/8250_core.c -@@ -259,7 +259,7 @@ static void serial8250_backup_timeout(struct timer_list *t) +@@ -271,7 +271,7 @@ static void serial8250_backup_timeout(struct timer_list *t) unsigned int iir, ier = 0, lsr; unsigned long flags; @@ -1724,7 +1723,7 @@ /* * Must disable interrupts or else we risk racing with the interrupt -@@ -292,7 +292,7 @@ static void serial8250_backup_timeout(struct timer_list *t) +@@ -304,7 +304,7 @@ static void serial8250_backup_timeout(struct timer_list *t) if (up->port.irq) serial_out(up, UART_IER, ier); @@ -1733,7 +1732,7 @@ /* Standard timer interval plus 0.2s to keep the port running */ mod_timer(&up->timer, -@@ -592,6 +592,7 @@ serial8250_register_ports(struct uart_driver *drv, struct device *dev) +@@ -607,6 +607,7 @@ serial8250_register_ports(struct uart_driver *drv, struct device *dev) #ifdef CONFIG_SERIAL_8250_CONSOLE @@ -1741,7 +1740,7 @@ static void univ8250_console_write(struct console *co, const char *s, unsigned int count) { -@@ -599,6 +600,37 @@ static void univ8250_console_write(struct console *co, const char *s, +@@ -614,6 +615,37 @@ static void univ8250_console_write(struct console *co, const char *s, serial8250_console_write(up, s, count); } @@ -1779,7 +1778,7 @@ static int univ8250_console_setup(struct console *co, char *options) { -@@ -698,12 +730,20 @@ static int univ8250_console_match(struct console *co, char *name, int idx, +@@ -713,12 +745,20 @@ static int univ8250_console_match(struct console *co, char *name, int idx, static struct console univ8250_console = { .name = "ttyS", @@ -1801,7 +1800,7 @@ .index = -1, .data = &serial8250_reg, }; -@@ -992,11 +1032,11 @@ static void serial_8250_overrun_backoff_work(struct work_struct *work) +@@ -1007,11 +1047,11 @@ static void serial_8250_overrun_backoff_work(struct work_struct *work) struct uart_port *port = &up->port; unsigned long flags; @@ -1815,7 +1814,7 @@ } /** -@@ -1194,9 +1234,9 @@ void serial8250_unregister_port(int line) +@@ -1209,9 +1249,9 @@ void serial8250_unregister_port(int line) if (uart->em485) { unsigned long flags; @@ -1897,10 +1896,10 @@ if (status & (UART_LSR_DR | UART_LSR_BI)) { dw8250_writel_ext(p, RZN1_UART_RDMACR, 0); diff --git a/drivers/tty/serial/8250/8250_exar.c b/drivers/tty/serial/8250/8250_exar.c -index 27430fdd9..17be6ad24 100644 +index 4d20f3aa2..342786064 100644 --- a/drivers/tty/serial/8250/8250_exar.c +++ b/drivers/tty/serial/8250/8250_exar.c -@@ -243,9 +243,9 @@ static int xr17v35x_startup(struct uart_port *port) +@@ -201,9 +201,9 @@ static int xr17v35x_startup(struct uart_port *port) * * Synchronize UART_IER access against the console. */ @@ -1940,7 +1939,7 @@ } diff --git a/drivers/tty/serial/8250/8250_mtk.c b/drivers/tty/serial/8250/8250_mtk.c -index 28f9a2679..33699e86e 100644 +index 74da5676c..23457daae 100644 --- a/drivers/tty/serial/8250/8250_mtk.c +++ b/drivers/tty/serial/8250/8250_mtk.c @@ -102,7 +102,7 @@ static void mtk8250_dma_rx_complete(void *param) @@ -1961,7 +1960,7 @@ } static void mtk8250_rx_dma(struct uart_8250_port *up) -@@ -372,7 +372,7 @@ mtk8250_set_termios(struct uart_port *port, struct ktermios *termios, +@@ -368,7 +368,7 @@ mtk8250_set_termios(struct uart_port *port, struct ktermios *termios, * Ok, we're now changing the port state. Do it with * interrupts disabled. */ @@ -1970,7 +1969,7 @@ /* * Update the per-port timeout. -@@ -420,7 +420,7 @@ mtk8250_set_termios(struct uart_port *port, struct ktermios *termios, +@@ -416,7 +416,7 @@ mtk8250_set_termios(struct uart_port *port, struct ktermios *termios, if (uart_console(port)) up->port.cons->cflag = termios->c_cflag; @@ -1980,10 +1979,10 @@ if (tty_termios_baud_rate(termios)) tty_termios_encode_baud_rate(termios, baud, baud); diff --git a/drivers/tty/serial/8250/8250_omap.c b/drivers/tty/serial/8250/8250_omap.c -index 8f472a208..78fc1f17d 100644 +index 346167afe..db5519ce0 100644 --- a/drivers/tty/serial/8250/8250_omap.c +++ b/drivers/tty/serial/8250/8250_omap.c -@@ -405,7 +405,7 @@ static void omap_8250_set_termios(struct uart_port *port, +@@ -401,7 +401,7 @@ static void omap_8250_set_termios(struct uart_port *port, * interrupts disabled. */ pm_runtime_get_sync(port->dev); @@ -1992,7 +1991,7 @@ /* * Update the per-port timeout. -@@ -508,7 +508,7 @@ static void omap_8250_set_termios(struct uart_port *port, +@@ -504,7 +504,7 @@ static void omap_8250_set_termios(struct uart_port *port, } omap8250_restore_regs(up); @@ -2001,7 +2000,7 @@ pm_runtime_mark_last_busy(port->dev); pm_runtime_put_autosuspend(port->dev); -@@ -533,7 +533,7 @@ static void omap_8250_pm(struct uart_port *port, unsigned int state, +@@ -529,7 +529,7 @@ static void omap_8250_pm(struct uart_port *port, unsigned int state, pm_runtime_get_sync(port->dev); /* Synchronize UART_IER access against the console. */ @@ -2010,7 +2009,7 @@ serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B); efr = serial_in(up, UART_EFR); -@@ -545,7 +545,7 @@ static void omap_8250_pm(struct uart_port *port, unsigned int state, +@@ -541,7 +541,7 @@ static void omap_8250_pm(struct uart_port *port, unsigned int state, serial_out(up, UART_EFR, efr); serial_out(up, UART_LCR, 0); @@ -2019,7 +2018,7 @@ pm_runtime_mark_last_busy(port->dev); pm_runtime_put_autosuspend(port->dev); -@@ -676,7 +676,7 @@ static irqreturn_t omap8250_irq(int irq, void *dev_id) +@@ -660,7 +660,7 @@ static irqreturn_t omap8250_irq(int irq, void *dev_id) unsigned long delay; /* Synchronize UART_IER access against the console. */ @@ -2028,7 +2027,7 @@ up->ier = port->serial_in(port, UART_IER); if (up->ier & (UART_IER_RLSI | UART_IER_RDI)) { port->ops->stop_rx(port); -@@ -686,7 +686,7 @@ static irqreturn_t omap8250_irq(int irq, void *dev_id) +@@ -670,7 +670,7 @@ static irqreturn_t omap8250_irq(int irq, void *dev_id) */ cancel_delayed_work(&up->overrun_backoff); } @@ -2037,7 +2036,7 @@ delay = msecs_to_jiffies(up->overrun_backoff_time_ms); schedule_delayed_work(&up->overrun_backoff, delay); -@@ -733,10 +733,10 @@ static int omap_8250_startup(struct uart_port *port) +@@ -717,10 +717,10 @@ static int omap_8250_startup(struct uart_port *port) } /* Synchronize UART_IER access against the console. */ @@ -2050,7 +2049,7 @@ #ifdef CONFIG_PM up->capabilities |= UART_CAP_RPM; -@@ -749,9 +749,9 @@ static int omap_8250_startup(struct uart_port *port) +@@ -733,9 +733,9 @@ static int omap_8250_startup(struct uart_port *port) serial_out(up, UART_OMAP_WER, priv->wer); if (up->dma && !(priv->habit & UART_HAS_EFR2)) { @@ -2062,7 +2061,7 @@ } enable_irq(up->port.irq); -@@ -777,10 +777,10 @@ static void omap_8250_shutdown(struct uart_port *port) +@@ -761,10 +761,10 @@ static void omap_8250_shutdown(struct uart_port *port) serial_out(up, UART_OMAP_EFR2, 0x0); /* Synchronize UART_IER access against the console. */ @@ -2075,7 +2074,7 @@ disable_irq_nosync(up->port.irq); dev_pm_clear_wake_irq(port->dev); -@@ -805,10 +805,10 @@ static void omap_8250_throttle(struct uart_port *port) +@@ -789,10 +789,10 @@ static void omap_8250_throttle(struct uart_port *port) pm_runtime_get_sync(port->dev); @@ -2088,7 +2087,7 @@ pm_runtime_mark_last_busy(port->dev); pm_runtime_put_autosuspend(port->dev); -@@ -823,14 +823,14 @@ static void omap_8250_unthrottle(struct uart_port *port) +@@ -807,14 +807,14 @@ static void omap_8250_unthrottle(struct uart_port *port) pm_runtime_get_sync(port->dev); /* Synchronize UART_IER access against the console. */ @@ -2105,7 +2104,7 @@ pm_runtime_mark_last_busy(port->dev); pm_runtime_put_autosuspend(port->dev); -@@ -974,7 +974,7 @@ static void __dma_rx_complete(void *param) +@@ -958,7 +958,7 @@ static void __dma_rx_complete(void *param) unsigned long flags; /* Synchronize UART_IER access against the console. */ @@ -2114,7 +2113,7 @@ /* * If the tx status is not DMA_COMPLETE, then this is a delayed -@@ -983,7 +983,7 @@ static void __dma_rx_complete(void *param) +@@ -967,7 +967,7 @@ static void __dma_rx_complete(void *param) */ if (dmaengine_tx_status(dma->rxchan, dma->rx_cookie, &state) != DMA_COMPLETE) { @@ -2123,7 +2122,7 @@ return; } __dma_rx_do_complete(p); -@@ -994,7 +994,7 @@ static void __dma_rx_complete(void *param) +@@ -978,7 +978,7 @@ static void __dma_rx_complete(void *param) omap_8250_rx_dma(p); } @@ -2132,7 +2131,7 @@ } static void omap_8250_rx_dma_flush(struct uart_8250_port *p) -@@ -1099,7 +1099,7 @@ static void omap_8250_dma_tx_complete(void *param) +@@ -1083,7 +1083,7 @@ static void omap_8250_dma_tx_complete(void *param) dma_sync_single_for_cpu(dma->txchan->device->dev, dma->tx_addr, UART_XMIT_SIZE, DMA_TO_DEVICE); @@ -2141,7 +2140,7 @@ dma->tx_running = 0; -@@ -1128,7 +1128,7 @@ static void omap_8250_dma_tx_complete(void *param) +@@ -1112,7 +1112,7 @@ static void omap_8250_dma_tx_complete(void *param) serial8250_set_THRI(p); } @@ -2150,7 +2149,7 @@ } static int omap_8250_tx_dma(struct uart_8250_port *p) -@@ -1294,7 +1294,7 @@ static int omap_8250_dma_handle_irq(struct uart_port *port) +@@ -1278,7 +1278,7 @@ static int omap_8250_dma_handle_irq(struct uart_port *port) return IRQ_HANDLED; } @@ -2159,7 +2158,7 @@ status = serial_port_in(port, UART_LSR); -@@ -1774,15 +1774,15 @@ static int omap8250_runtime_resume(struct device *dev) +@@ -1758,15 +1758,15 @@ static int omap8250_runtime_resume(struct device *dev) up = serial8250_get_port(priv->line); if (up && omap8250_lost_context(up)) { @@ -2210,7 +2209,7 @@ mutex_unlock(&tport->mutex); } diff --git a/drivers/tty/serial/8250/8250_port.c b/drivers/tty/serial/8250/8250_port.c -index a17803da8..2d4e775cd 100644 +index 8099e6a26..510bb858f 100644 --- a/drivers/tty/serial/8250/8250_port.c +++ b/drivers/tty/serial/8250/8250_port.c @@ -557,6 +557,11 @@ static int serial8250_em485_init(struct uart_8250_port *p) @@ -2387,7 +2386,7 @@ serial8250_rpm_put(p); return HRTIMER_NORESTART; -@@ -1624,12 +1641,12 @@ static enum hrtimer_restart serial8250_em485_handle_start_tx(struct hrtimer *t) +@@ -1627,12 +1644,12 @@ static enum hrtimer_restart serial8250_em485_handle_start_tx(struct hrtimer *t) struct uart_8250_port *p = em485->port; unsigned long flags; @@ -2402,7 +2401,7 @@ return HRTIMER_NORESTART; } -@@ -1912,7 +1929,7 @@ int serial8250_handle_irq(struct uart_port *port, unsigned int iir) +@@ -1921,7 +1938,7 @@ int serial8250_handle_irq(struct uart_port *port, unsigned int iir) if (iir & UART_IIR_NO_INT) return 0; @@ -2411,7 +2410,7 @@ status = serial_lsr_in(up); -@@ -1982,9 +1999,9 @@ static int serial8250_tx_threshold_handle_irq(struct uart_port *port) +@@ -1991,9 +2008,9 @@ static int serial8250_tx_threshold_handle_irq(struct uart_port *port) if ((iir & UART_IIR_ID) == UART_IIR_THRI) { struct uart_8250_port *up = up_to_u8250p(port); @@ -2423,7 +2422,7 @@ } iir = serial_port_in(port, UART_IIR); -@@ -1999,10 +2016,10 @@ static unsigned int serial8250_tx_empty(struct uart_port *port) +@@ -2008,10 +2025,10 @@ static unsigned int serial8250_tx_empty(struct uart_port *port) serial8250_rpm_get(up); @@ -2436,7 +2435,7 @@ serial8250_rpm_put(up); -@@ -2064,13 +2081,13 @@ static void serial8250_break_ctl(struct uart_port *port, int break_state) +@@ -2073,13 +2090,13 @@ static void serial8250_break_ctl(struct uart_port *port, int break_state) unsigned long flags; serial8250_rpm_get(up); @@ -2452,7 +2451,7 @@ serial8250_rpm_put(up); } -@@ -2205,7 +2222,7 @@ int serial8250_do_startup(struct uart_port *port) +@@ -2214,7 +2231,7 @@ int serial8250_do_startup(struct uart_port *port) * * Synchronize UART_IER access against the console. */ @@ -2461,7 +2460,7 @@ up->acr = 0; serial_port_out(port, UART_LCR, UART_LCR_CONF_MODE_B); serial_port_out(port, UART_EFR, UART_EFR_ECB); -@@ -2215,7 +2232,7 @@ int serial8250_do_startup(struct uart_port *port) +@@ -2224,7 +2241,7 @@ int serial8250_do_startup(struct uart_port *port) serial_port_out(port, UART_LCR, UART_LCR_CONF_MODE_B); serial_port_out(port, UART_EFR, UART_EFR_ECB); serial_port_out(port, UART_LCR, 0); @@ -2470,7 +2469,7 @@ } if (port->type == PORT_DA830) { -@@ -2224,10 +2241,10 @@ int serial8250_do_startup(struct uart_port *port) +@@ -2233,10 +2250,10 @@ int serial8250_do_startup(struct uart_port *port) * * Synchronize UART_IER access against the console. */ @@ -2483,7 +2482,7 @@ mdelay(10); /* Enable Tx, Rx and free run mode */ -@@ -2341,7 +2358,7 @@ int serial8250_do_startup(struct uart_port *port) +@@ -2350,7 +2367,7 @@ int serial8250_do_startup(struct uart_port *port) * * Synchronize UART_IER access against the console. */ @@ -2492,7 +2491,7 @@ wait_for_xmitr(up, UART_LSR_THRE); serial_port_out_sync(port, UART_IER, UART_IER_THRI); -@@ -2353,7 +2370,7 @@ int serial8250_do_startup(struct uart_port *port) +@@ -2362,7 +2379,7 @@ int serial8250_do_startup(struct uart_port *port) iir = serial_port_in(port, UART_IIR); serial_port_out(port, UART_IER, 0); @@ -2501,7 +2500,7 @@ if (port->irqflags & IRQF_SHARED) enable_irq(port->irq); -@@ -2376,7 +2393,7 @@ int serial8250_do_startup(struct uart_port *port) +@@ -2385,7 +2402,7 @@ int serial8250_do_startup(struct uart_port *port) */ serial_port_out(port, UART_LCR, UART_LCR_WLEN8); @@ -2510,7 +2509,7 @@ if (up->port.flags & UPF_FOURPORT) { if (!up->port.irq) up->port.mctrl |= TIOCM_OUT1; -@@ -2422,7 +2439,7 @@ int serial8250_do_startup(struct uart_port *port) +@@ -2431,7 +2448,7 @@ int serial8250_do_startup(struct uart_port *port) } dont_test_tx_en: @@ -2519,7 +2518,7 @@ /* * Clear the interrupt registers again for luck, and clear the -@@ -2493,17 +2510,17 @@ void serial8250_do_shutdown(struct uart_port *port) +@@ -2502,17 +2519,17 @@ void serial8250_do_shutdown(struct uart_port *port) * * Synchronize UART_IER access against the console. */ @@ -2540,7 +2539,7 @@ if (port->flags & UPF_FOURPORT) { /* reset interrupts on the AST Fourport board */ inb((port->iobase & 0xfe0) | 0x1f); -@@ -2512,7 +2529,7 @@ void serial8250_do_shutdown(struct uart_port *port) +@@ -2521,7 +2538,7 @@ void serial8250_do_shutdown(struct uart_port *port) port->mctrl &= ~TIOCM_OUT2; serial8250_set_mctrl(port, port->mctrl); @@ -2549,7 +2548,7 @@ /* * Disable break condition and FIFOs -@@ -2748,14 +2765,14 @@ void serial8250_update_uartclk(struct uart_port *port, unsigned int uartclk) +@@ -2757,14 +2774,14 @@ void serial8250_update_uartclk(struct uart_port *port, unsigned int uartclk) quot = serial8250_get_divisor(port, baud, &frac); serial8250_rpm_get(up); @@ -2566,7 +2565,7 @@ serial8250_rpm_put(up); out_unlock: -@@ -2792,7 +2809,7 @@ serial8250_do_set_termios(struct uart_port *port, struct ktermios *termios, +@@ -2801,7 +2818,7 @@ serial8250_do_set_termios(struct uart_port *port, struct ktermios *termios, * Synchronize UART_IER access against the console. */ serial8250_rpm_get(up); @@ -2575,7 +2574,7 @@ up->lcr = cval; /* Save computed LCR */ -@@ -2895,7 +2912,7 @@ serial8250_do_set_termios(struct uart_port *port, struct ktermios *termios, +@@ -2904,7 +2921,7 @@ serial8250_do_set_termios(struct uart_port *port, struct ktermios *termios, serial_port_out(port, UART_FCR, up->fcr); /* set fcr */ } serial8250_set_mctrl(port, port->mctrl); @@ -2584,7 +2583,7 @@ serial8250_rpm_put(up); /* Don't rewrite B0 */ -@@ -2918,15 +2935,15 @@ void serial8250_do_set_ldisc(struct uart_port *port, struct ktermios *termios) +@@ -2927,15 +2944,15 @@ void serial8250_do_set_ldisc(struct uart_port *port, struct ktermios *termios) { if (termios->c_line == N_PPS) { port->flags |= UPF_HARDPPS_CD; @@ -2604,7 +2603,7 @@ } } } -@@ -3322,6 +3339,11 @@ static void serial8250_console_putchar(struct uart_port *port, unsigned char ch) +@@ -3331,6 +3348,11 @@ static void serial8250_console_putchar(struct uart_port *port, unsigned char ch) wait_for_xmitr(up, UART_LSR_THRE); serial_port_out(port, UART_TX, ch); @@ -2616,7 +2615,7 @@ } /* -@@ -3350,6 +3372,7 @@ static void serial8250_console_restore(struct uart_8250_port *up) +@@ -3359,6 +3381,7 @@ static void serial8250_console_restore(struct uart_8250_port *up) serial8250_out_MCR(up, up->mcr | UART_MCR_DTR | UART_MCR_RTS); } @@ -2624,7 +2623,7 @@ /* * Print a string to the serial port using the device FIFO * -@@ -3400,15 +3423,15 @@ void serial8250_console_write(struct uart_8250_port *up, const char *s, +@@ -3409,15 +3432,15 @@ void serial8250_console_write(struct uart_8250_port *up, const char *s, touch_nmi_watchdog(); if (oops_in_progress) @@ -2643,7 +2642,7 @@ /* check scratch reg to see if port powered off during system sleep */ if (up->canary && (up->canary != serial_port_in(port, UART_SCR))) { -@@ -3472,8 +3495,137 @@ void serial8250_console_write(struct uart_8250_port *up, const char *s, +@@ -3481,8 +3504,137 @@ void serial8250_console_write(struct uart_8250_port *up, const char *s, serial8250_modem_status(up); if (locked) @@ -2782,7 +2781,7 @@ static unsigned int probe_baud(struct uart_port *port) { -@@ -3492,6 +3644,7 @@ static unsigned int probe_baud(struct uart_port *port) +@@ -3501,6 +3653,7 @@ static unsigned int probe_baud(struct uart_port *port) int serial8250_console_setup(struct uart_port *port, char *options, bool probe) { @@ -2790,7 +2789,7 @@ int baud = 9600; int bits = 8; int parity = 'n'; -@@ -3501,6 +3654,8 @@ int serial8250_console_setup(struct uart_port *port, char *options, bool probe) +@@ -3510,6 +3663,8 @@ int serial8250_console_setup(struct uart_port *port, char *options, bool probe) if (!port->iobase && !port->membase) return -ENODEV; @@ -3053,10 +3052,10 @@ } } diff --git a/drivers/tty/serial/amba-pl011.c b/drivers/tty/serial/amba-pl011.c -index 362bbcdec..9cd660edb 100644 +index a5717655b..901928dba 100644 --- a/drivers/tty/serial/amba-pl011.c +++ b/drivers/tty/serial/amba-pl011.c -@@ -347,9 +347,9 @@ static int pl011_fifo_to_tty(struct uart_amba_port *uap) +@@ -361,9 +361,9 @@ static int pl011_fifo_to_tty(struct uart_amba_port *uap) flag = TTY_FRAME; } @@ -3068,7 +3067,7 @@ if (!sysrq) uart_insert_char(&uap->port, ch, UART011_DR_OE, ch, flag); -@@ -544,7 +544,7 @@ static void pl011_dma_tx_callback(void *data) +@@ -558,7 +558,7 @@ static void pl011_dma_tx_callback(void *data) unsigned long flags; u16 dmacr; @@ -3077,7 +3076,7 @@ if (uap->dmatx.queued) dma_unmap_single(dmatx->chan->device->dev, dmatx->dma, dmatx->len, DMA_TO_DEVICE); -@@ -565,7 +565,7 @@ static void pl011_dma_tx_callback(void *data) +@@ -579,7 +579,7 @@ static void pl011_dma_tx_callback(void *data) if (!(dmacr & UART011_TXDMAE) || uart_tx_stopped(&uap->port) || uart_circ_empty(&uap->port.state->xmit)) { uap->dmatx.queued = false; @@ -3086,7 +3085,7 @@ return; } -@@ -576,7 +576,7 @@ static void pl011_dma_tx_callback(void *data) +@@ -590,7 +590,7 @@ static void pl011_dma_tx_callback(void *data) */ pl011_start_tx_pio(uap); @@ -3095,7 +3094,7 @@ } /* -@@ -1004,7 +1004,7 @@ static void pl011_dma_rx_callback(void *data) +@@ -1018,7 +1018,7 @@ static void pl011_dma_rx_callback(void *data) * routine to flush out the secondary DMA buffer while * we immediately trigger the next DMA job. */ @@ -3104,7 +3103,7 @@ /* * Rx data can be taken by the UART interrupts during * the DMA irq handler. So we check the residue here. -@@ -1020,7 +1020,7 @@ static void pl011_dma_rx_callback(void *data) +@@ -1034,7 +1034,7 @@ static void pl011_dma_rx_callback(void *data) ret = pl011_dma_rx_trigger_dma(uap); pl011_dma_rx_chars(uap, pending, lastbuf, false); @@ -3113,7 +3112,7 @@ /* * Do this check after we picked the DMA chars so we don't * get some IRQ immediately from RX. -@@ -1086,11 +1086,11 @@ static void pl011_dma_rx_poll(struct timer_list *t) +@@ -1100,11 +1100,11 @@ static void pl011_dma_rx_poll(struct timer_list *t) if (jiffies_to_msecs(jiffies - dmarx->last_jiffies) > uap->dmarx.poll_timeout) { @@ -3127,7 +3126,7 @@ uap->dmarx.running = false; dmaengine_terminate_all(rxchan); -@@ -1186,10 +1186,10 @@ static void pl011_dma_shutdown(struct uart_amba_port *uap) +@@ -1200,10 +1200,10 @@ static void pl011_dma_shutdown(struct uart_amba_port *uap) while (pl011_read(uap, REG_FR) & uap->vendor->fr_busy) cpu_relax(); @@ -3140,7 +3139,7 @@ if (uap->using_tx_dma) { /* In theory, this should already be done by pl011_dma_flush_buffer */ -@@ -1400,9 +1400,9 @@ static void pl011_throttle_rx(struct uart_port *port) +@@ -1414,9 +1414,9 @@ static void pl011_throttle_rx(struct uart_port *port) { unsigned long flags; @@ -3152,7 +3151,7 @@ } static void pl011_enable_ms(struct uart_port *port) -@@ -1420,7 +1420,7 @@ __acquires(&uap->port.lock) +@@ -1434,7 +1434,7 @@ __acquires(&uap->port.lock) { pl011_fifo_to_tty(uap); @@ -3161,7 +3160,7 @@ tty_flip_buffer_push(&uap->port.state->port); /* * If we were temporarily out of DMA mode for a while, -@@ -1445,7 +1445,7 @@ __acquires(&uap->port.lock) +@@ -1459,7 +1459,7 @@ __acquires(&uap->port.lock) #endif } } @@ -3170,7 +3169,7 @@ } static bool pl011_tx_char(struct uart_amba_port *uap, unsigned char c, -@@ -1551,7 +1551,7 @@ static irqreturn_t pl011_int(int irq, void *dev_id) +@@ -1570,7 +1570,7 @@ static irqreturn_t pl011_int(int irq, void *dev_id) unsigned int status, pass_counter = AMBA_ISR_PASS_LIMIT; int handled = 0; @@ -3179,7 +3178,7 @@ status = pl011_read(uap, REG_RIS) & uap->im; if (status) { do { -@@ -1581,7 +1581,7 @@ static irqreturn_t pl011_int(int irq, void *dev_id) +@@ -1600,7 +1600,7 @@ static irqreturn_t pl011_int(int irq, void *dev_id) handled = 1; } @@ -3188,7 +3187,7 @@ return IRQ_RETVAL(handled); } -@@ -1653,14 +1653,14 @@ static void pl011_break_ctl(struct uart_port *port, int break_state) +@@ -1672,14 +1672,14 @@ static void pl011_break_ctl(struct uart_port *port, int break_state) unsigned long flags; unsigned int lcr_h; @@ -3205,7 +3204,7 @@ } #ifdef CONFIG_CONSOLE_POLL -@@ -1799,7 +1799,7 @@ static void pl011_enable_interrupts(struct uart_amba_port *uap) +@@ -1818,7 +1818,7 @@ static void pl011_enable_interrupts(struct uart_amba_port *uap) unsigned long flags; unsigned int i; @@ -3214,7 +3213,7 @@ /* Clear out any spuriously appearing RX interrupts */ pl011_write(UART011_RTIS | UART011_RXIS, uap, REG_ICR); -@@ -1821,7 +1821,7 @@ static void pl011_enable_interrupts(struct uart_amba_port *uap) +@@ -1840,7 +1840,7 @@ static void pl011_enable_interrupts(struct uart_amba_port *uap) if (!pl011_dma_rx_running(uap)) uap->im |= UART011_RXIM; pl011_write(uap->im, uap, REG_IMSC); @@ -3223,7 +3222,7 @@ } static void pl011_unthrottle_rx(struct uart_port *port) -@@ -1829,7 +1829,7 @@ static void pl011_unthrottle_rx(struct uart_port *port) +@@ -1848,7 +1848,7 @@ static void pl011_unthrottle_rx(struct uart_port *port) struct uart_amba_port *uap = container_of(port, struct uart_amba_port, port); unsigned long flags; @@ -3232,7 +3231,7 @@ uap->im = UART011_RTIM; if (!pl011_dma_rx_running(uap)) -@@ -1837,7 +1837,7 @@ static void pl011_unthrottle_rx(struct uart_port *port) +@@ -1856,7 +1856,7 @@ static void pl011_unthrottle_rx(struct uart_port *port) pl011_write(uap->im, uap, REG_IMSC); @@ -3241,7 +3240,7 @@ } static int pl011_startup(struct uart_port *port) -@@ -1857,7 +1857,7 @@ static int pl011_startup(struct uart_port *port) +@@ -1876,7 +1876,7 @@ static int pl011_startup(struct uart_port *port) pl011_write(uap->vendor->ifls, uap, REG_IFLS); @@ -3250,7 +3249,7 @@ cr = pl011_read(uap, REG_CR); cr &= UART011_CR_RTS | UART011_CR_DTR; -@@ -1868,7 +1868,7 @@ static int pl011_startup(struct uart_port *port) +@@ -1887,7 +1887,7 @@ static int pl011_startup(struct uart_port *port) pl011_write(cr, uap, REG_CR); @@ -3259,7 +3258,7 @@ /* * initialise the old status of the modem signals -@@ -1929,12 +1929,12 @@ static void pl011_disable_uart(struct uart_amba_port *uap) +@@ -1948,12 +1948,12 @@ static void pl011_disable_uart(struct uart_amba_port *uap) unsigned int cr; uap->port.status &= ~(UPSTAT_AUTOCTS | UPSTAT_AUTORTS); @@ -3274,7 +3273,7 @@ /* * disable break condition and fifos -@@ -1946,14 +1946,14 @@ static void pl011_disable_uart(struct uart_amba_port *uap) +@@ -1965,14 +1965,14 @@ static void pl011_disable_uart(struct uart_amba_port *uap) static void pl011_disable_interrupts(struct uart_amba_port *uap) { @@ -3291,7 +3290,7 @@ } static void pl011_shutdown(struct uart_port *port) -@@ -2098,7 +2098,7 @@ pl011_set_termios(struct uart_port *port, struct ktermios *termios, +@@ -2117,7 +2117,7 @@ pl011_set_termios(struct uart_port *port, struct ktermios *termios, bits = tty_get_frame_size(termios->c_cflag); @@ -3300,7 +3299,7 @@ /* * Update the per-port timeout. -@@ -2172,7 +2172,7 @@ pl011_set_termios(struct uart_port *port, struct ktermios *termios, +@@ -2191,7 +2191,7 @@ pl011_set_termios(struct uart_port *port, struct ktermios *termios, old_cr |= UART011_CR_RXE; pl011_write(old_cr, uap, REG_CR); @@ -3309,7 +3308,7 @@ } static void -@@ -2190,10 +2190,10 @@ sbsa_uart_set_termios(struct uart_port *port, struct ktermios *termios, +@@ -2209,10 +2209,10 @@ sbsa_uart_set_termios(struct uart_port *port, struct ktermios *termios, termios->c_cflag &= ~(CMSPAR | CRTSCTS); termios->c_cflag |= CS8 | CLOCAL; @@ -3322,7 +3321,7 @@ } static const char *pl011_type(struct uart_port *port) -@@ -2328,13 +2328,10 @@ pl011_console_write(struct console *co, const char *s, unsigned int count) +@@ -2347,13 +2347,10 @@ pl011_console_write(struct console *co, const char *s, unsigned int count) clk_enable(uap->clk); @@ -3339,7 +3338,7 @@ /* * First save the CR then disable the interrupts -@@ -2360,8 +2357,7 @@ pl011_console_write(struct console *co, const char *s, unsigned int count) +@@ -2379,8 +2376,7 @@ pl011_console_write(struct console *co, const char *s, unsigned int count) pl011_write(old_cr, uap, REG_CR); if (locked) @@ -3613,7 +3612,7 @@ port->read_status_mask = ATMEL_US_OVRE; if (termios->c_iflag & INPCK) -@@ -2377,22 +2377,22 @@ gclk_fail: +@@ -2377,22 +2377,22 @@ static void atmel_set_termios(struct uart_port *port, else atmel_disable_ms(port); @@ -3642,7 +3641,7 @@ } } diff --git a/drivers/tty/serial/bcm63xx_uart.c b/drivers/tty/serial/bcm63xx_uart.c -index 44c27e5ce..b104c36ce 100644 +index 0dd8cceb8..4a08fd5ee 100644 --- a/drivers/tty/serial/bcm63xx_uart.c +++ b/drivers/tty/serial/bcm63xx_uart.c @@ -201,7 +201,7 @@ static void bcm_uart_break_ctl(struct uart_port *port, int ctl) @@ -3663,7 +3662,7 @@ } /* -@@ -335,7 +335,7 @@ static irqreturn_t bcm_uart_interrupt(int irq, void *dev_id) +@@ -332,7 +332,7 @@ static irqreturn_t bcm_uart_interrupt(int irq, void *dev_id) unsigned int irqstat; port = dev_id; @@ -3672,7 +3671,7 @@ irqstat = bcm_uart_readl(port, UART_IR_REG); if (irqstat & UART_RX_INT_STAT) -@@ -356,7 +356,7 @@ static irqreturn_t bcm_uart_interrupt(int irq, void *dev_id) +@@ -353,7 +353,7 @@ static irqreturn_t bcm_uart_interrupt(int irq, void *dev_id) estat & UART_EXTINP_DCD_MASK); } @@ -3681,7 +3680,7 @@ return IRQ_HANDLED; } -@@ -454,9 +454,9 @@ static void bcm_uart_shutdown(struct uart_port *port) +@@ -451,9 +451,9 @@ static void bcm_uart_shutdown(struct uart_port *port) { unsigned long flags; @@ -3693,7 +3692,7 @@ bcm_uart_disable(port); bcm_uart_flush(port); -@@ -473,7 +473,7 @@ static void bcm_uart_set_termios(struct uart_port *port, struct ktermios *new, +@@ -470,7 +470,7 @@ static void bcm_uart_set_termios(struct uart_port *port, struct ktermios *new, unsigned long flags; int tries; @@ -3702,7 +3701,7 @@ /* Drain the hot tub fully before we power it off for the winter. */ for (tries = 3; !bcm_uart_tx_empty(port) && tries; tries--) -@@ -549,7 +549,7 @@ static void bcm_uart_set_termios(struct uart_port *port, struct ktermios *new, +@@ -546,7 +546,7 @@ static void bcm_uart_set_termios(struct uart_port *port, struct ktermios *new, uart_update_timeout(port, new->c_cflag, baud); bcm_uart_enable(port); @@ -3711,7 +3710,7 @@ } /* -@@ -715,9 +715,9 @@ static void bcm_console_write(struct console *co, const char *s, +@@ -712,9 +712,9 @@ static void bcm_console_write(struct console *co, const char *s, /* bcm_uart_interrupt() already took the lock */ locked = 0; } else if (oops_in_progress) { @@ -3723,7 +3722,7 @@ locked = 1; } -@@ -728,7 +728,7 @@ static void bcm_console_write(struct console *co, const char *s, +@@ -725,7 +725,7 @@ static void bcm_console_write(struct console *co, const char *s, wait_for_xmitr(port); if (locked) @@ -4171,7 +4170,7 @@ while (!(readb(sport->port.membase + UARTSFIFO) & UARTSFIFO_RXEMPT)) { flg = TTY_NORMAL; -@@ -956,9 +956,9 @@ out: +@@ -956,9 +956,9 @@ static void lpuart_rxint(struct lpuart_port *sport) static void lpuart32_txint(struct lpuart_port *sport) { @@ -4207,7 +4206,7 @@ return; } -@@ -1244,7 +1244,7 @@ exit: +@@ -1244,7 +1244,7 @@ static void lpuart_copy_rx_to_tty(struct lpuart_port *sport) dma_sync_sg_for_device(chan->device->dev, &sport->rx_sgl, 1, DMA_FROM_DEVICE); @@ -4543,10 +4542,10 @@ static const char *icom_type(struct uart_port *port) diff --git a/drivers/tty/serial/imx.c b/drivers/tty/serial/imx.c -index a5d0df2ba..267c9af4b 100644 +index c77831e91..66420a992 100644 --- a/drivers/tty/serial/imx.c +++ b/drivers/tty/serial/imx.c -@@ -586,7 +586,7 @@ static void imx_uart_dma_tx_callback(void *data) +@@ -584,7 +584,7 @@ static void imx_uart_dma_tx_callback(void *data) unsigned long flags; u32 ucr1; @@ -4555,7 +4554,7 @@ dma_unmap_sg(sport->port.dev, sgl, sport->dma_tx_nents, DMA_TO_DEVICE); -@@ -611,7 +611,7 @@ static void imx_uart_dma_tx_callback(void *data) +@@ -609,7 +609,7 @@ static void imx_uart_dma_tx_callback(void *data) imx_uart_writel(sport, ucr4, UCR4); } @@ -4564,7 +4563,7 @@ } /* called with port.lock taken and irqs off */ -@@ -782,11 +782,11 @@ static irqreturn_t imx_uart_rtsint(int irq, void *dev_id) +@@ -780,11 +780,11 @@ static irqreturn_t imx_uart_rtsint(int irq, void *dev_id) struct imx_port *sport = dev_id; irqreturn_t ret; @@ -4578,7 +4577,7 @@ return ret; } -@@ -795,9 +795,9 @@ static irqreturn_t imx_uart_txint(int irq, void *dev_id) +@@ -793,9 +793,9 @@ static irqreturn_t imx_uart_txint(int irq, void *dev_id) { struct imx_port *sport = dev_id; @@ -4590,7 +4589,7 @@ return IRQ_HANDLED; } -@@ -911,11 +911,11 @@ static irqreturn_t imx_uart_rxint(int irq, void *dev_id) +@@ -909,11 +909,11 @@ static irqreturn_t imx_uart_rxint(int irq, void *dev_id) struct imx_port *sport = dev_id; irqreturn_t ret; @@ -4604,7 +4603,7 @@ return ret; } -@@ -978,7 +978,7 @@ static irqreturn_t imx_uart_int(int irq, void *dev_id) +@@ -976,7 +976,7 @@ static irqreturn_t imx_uart_int(int irq, void *dev_id) unsigned int usr1, usr2, ucr1, ucr2, ucr3, ucr4; irqreturn_t ret = IRQ_NONE; @@ -4613,7 +4612,7 @@ usr1 = imx_uart_readl(sport, USR1); usr2 = imx_uart_readl(sport, USR2); -@@ -1048,7 +1048,7 @@ static irqreturn_t imx_uart_int(int irq, void *dev_id) +@@ -1046,7 +1046,7 @@ static irqreturn_t imx_uart_int(int irq, void *dev_id) ret = IRQ_HANDLED; } @@ -4622,7 +4621,7 @@ return ret; } -@@ -1131,7 +1131,7 @@ static void imx_uart_break_ctl(struct uart_port *port, int break_state) +@@ -1129,7 +1129,7 @@ static void imx_uart_break_ctl(struct uart_port *port, int break_state) unsigned long flags; u32 ucr1; @@ -4631,7 +4630,7 @@ ucr1 = imx_uart_readl(sport, UCR1) & ~UCR1_SNDBRK; -@@ -1140,7 +1140,7 @@ static void imx_uart_break_ctl(struct uart_port *port, int break_state) +@@ -1138,7 +1138,7 @@ static void imx_uart_break_ctl(struct uart_port *port, int break_state) imx_uart_writel(sport, ucr1, UCR1); @@ -4640,7 +4639,7 @@ } /* -@@ -1153,9 +1153,9 @@ static void imx_uart_timeout(struct timer_list *t) +@@ -1151,9 +1151,9 @@ static void imx_uart_timeout(struct timer_list *t) unsigned long flags; if (sport->port.state) { @@ -4652,7 +4651,7 @@ mod_timer(&sport->timer, jiffies + MCTRL_TIMEOUT); } -@@ -1185,9 +1185,9 @@ static void imx_uart_dma_rx_callback(void *data) +@@ -1183,9 +1183,9 @@ static void imx_uart_dma_rx_callback(void *data) status = dmaengine_tx_status(chan, sport->rx_cookie, &state); if (status == DMA_ERROR) { @@ -4664,7 +4663,7 @@ return; } -@@ -1216,9 +1216,9 @@ static void imx_uart_dma_rx_callback(void *data) +@@ -1214,9 +1214,9 @@ static void imx_uart_dma_rx_callback(void *data) r_bytes = rx_ring->head - rx_ring->tail; /* If we received something, check for 0xff flood */ @@ -4676,7 +4675,7 @@ if (!(sport->port.ignore_status_mask & URXD_DUMMY_READ)) { -@@ -1476,7 +1476,7 @@ static int imx_uart_startup(struct uart_port *port) +@@ -1474,7 +1474,7 @@ static int imx_uart_startup(struct uart_port *port) if (!uart_console(port) && imx_uart_dma_init(sport) == 0) dma_is_inited = 1; @@ -4685,7 +4684,7 @@ /* Reset fifo's and state machines */ imx_uart_soft_reset(sport); -@@ -1549,7 +1549,7 @@ static int imx_uart_startup(struct uart_port *port) +@@ -1547,7 +1547,7 @@ static int imx_uart_startup(struct uart_port *port) imx_uart_disable_loopback_rs485(sport); @@ -4694,7 +4693,7 @@ return 0; } -@@ -1574,21 +1574,21 @@ static void imx_uart_shutdown(struct uart_port *port) +@@ -1572,21 +1572,21 @@ static void imx_uart_shutdown(struct uart_port *port) sport->dma_is_rxing = 0; } @@ -4720,7 +4719,7 @@ /* * Stop our timer. -@@ -1599,7 +1599,7 @@ static void imx_uart_shutdown(struct uart_port *port) +@@ -1597,7 +1597,7 @@ static void imx_uart_shutdown(struct uart_port *port) * Disable all interrupts, port and break condition. */ @@ -4729,7 +4728,7 @@ ucr1 = imx_uart_readl(sport, UCR1); ucr1 &= ~(UCR1_TRDYEN | UCR1_RRDYEN | UCR1_RTSDEN | UCR1_RXDMAEN | -@@ -1621,7 +1621,7 @@ static void imx_uart_shutdown(struct uart_port *port) +@@ -1619,7 +1619,7 @@ static void imx_uart_shutdown(struct uart_port *port) ucr4 &= ~UCR4_TCEN; imx_uart_writel(sport, ucr4, UCR4); @@ -4738,7 +4737,7 @@ clk_disable_unprepare(sport->clk_per); clk_disable_unprepare(sport->clk_ipg); -@@ -1684,7 +1684,7 @@ imx_uart_set_termios(struct uart_port *port, struct ktermios *termios, +@@ -1682,7 +1682,7 @@ imx_uart_set_termios(struct uart_port *port, struct ktermios *termios, baud = uart_get_baud_rate(port, termios, old, 50, port->uartclk / 16); quot = uart_get_divisor(port, baud); @@ -4747,7 +4746,7 @@ /* * Read current UCR2 and save it for future use, then clear all the bits -@@ -1812,7 +1812,7 @@ imx_uart_set_termios(struct uart_port *port, struct ktermios *termios, +@@ -1810,7 +1810,7 @@ imx_uart_set_termios(struct uart_port *port, struct ktermios *termios, if (UART_ENABLE_MS(&sport->port, termios->c_cflag)) imx_uart_enable_ms(&sport->port); @@ -4756,7 +4755,7 @@ } static const char *imx_uart_type(struct uart_port *port) -@@ -1874,7 +1874,7 @@ static int imx_uart_poll_init(struct uart_port *port) +@@ -1872,7 +1872,7 @@ static int imx_uart_poll_init(struct uart_port *port) imx_uart_setup_ufcr(sport, TXTL_DEFAULT, RXTL_DEFAULT); @@ -4765,7 +4764,7 @@ /* * Be careful about the order of enabling bits here. First enable the -@@ -1902,7 +1902,7 @@ static int imx_uart_poll_init(struct uart_port *port) +@@ -1900,7 +1900,7 @@ static int imx_uart_poll_init(struct uart_port *port) imx_uart_writel(sport, ucr1 | UCR1_RRDYEN, UCR1); imx_uart_writel(sport, ucr2 | UCR2_ATEN, UCR2); @@ -4774,7 +4773,7 @@ return 0; } -@@ -2022,9 +2022,9 @@ imx_uart_console_write(struct console *co, const char *s, unsigned int count) +@@ -2015,9 +2015,9 @@ imx_uart_console_write(struct console *co, const char *s, unsigned int count) if (sport->port.sysrq) locked = 0; else if (oops_in_progress) @@ -4786,7 +4785,7 @@ /* * First, save UCR1/2/3 and then disable interrupts -@@ -2052,7 +2052,7 @@ imx_uart_console_write(struct console *co, const char *s, unsigned int count) +@@ -2045,7 +2045,7 @@ imx_uart_console_write(struct console *co, const char *s, unsigned int count) imx_uart_ucrs_restore(sport, &old_ucr); if (locked) @@ -4795,7 +4794,7 @@ } /* -@@ -2210,10 +2210,10 @@ static enum hrtimer_restart imx_trigger_start_tx(struct hrtimer *t) +@@ -2203,10 +2203,10 @@ static enum hrtimer_restart imx_trigger_start_tx(struct hrtimer *t) struct imx_port *sport = container_of(t, struct imx_port, trigger_start_tx); unsigned long flags; @@ -4808,7 +4807,7 @@ return HRTIMER_NORESTART; } -@@ -2223,10 +2223,10 @@ static enum hrtimer_restart imx_trigger_stop_tx(struct hrtimer *t) +@@ -2216,10 +2216,10 @@ static enum hrtimer_restart imx_trigger_stop_tx(struct hrtimer *t) struct imx_port *sport = container_of(t, struct imx_port, trigger_stop_tx); unsigned long flags; @@ -4821,7 +4820,7 @@ return HRTIMER_NORESTART; } -@@ -2493,9 +2493,9 @@ static void imx_uart_restore_context(struct imx_port *sport) +@@ -2486,9 +2486,9 @@ static void imx_uart_restore_context(struct imx_port *sport) { unsigned long flags; @@ -4833,7 +4832,7 @@ return; } -@@ -2510,7 +2510,7 @@ static void imx_uart_restore_context(struct imx_port *sport) +@@ -2503,7 +2503,7 @@ static void imx_uart_restore_context(struct imx_port *sport) imx_uart_writel(sport, sport->saved_reg2, UCR3); imx_uart_writel(sport, sport->saved_reg3, UCR4); sport->context_saved = false; @@ -4842,7 +4841,7 @@ } static void imx_uart_save_context(struct imx_port *sport) -@@ -2518,7 +2518,7 @@ static void imx_uart_save_context(struct imx_port *sport) +@@ -2511,7 +2511,7 @@ static void imx_uart_save_context(struct imx_port *sport) unsigned long flags; /* Save necessary regs */ @@ -4851,7 +4850,7 @@ sport->saved_reg0 = imx_uart_readl(sport, UCR1); sport->saved_reg1 = imx_uart_readl(sport, UCR2); sport->saved_reg2 = imx_uart_readl(sport, UCR3); -@@ -2530,7 +2530,7 @@ static void imx_uart_save_context(struct imx_port *sport) +@@ -2523,7 +2523,7 @@ static void imx_uart_save_context(struct imx_port *sport) sport->saved_reg8 = imx_uart_readl(sport, UBMR); sport->saved_reg9 = imx_uart_readl(sport, IMX21_UTS); sport->context_saved = true; @@ -5284,7 +5283,7 @@ /* Don't rewrite B0 */ if (tty_termios_baud_rate(termios)) diff --git a/drivers/tty/serial/ma35d1_serial.c b/drivers/tty/serial/ma35d1_serial.c -index 99225f1e0..faccd772c 100644 +index 69da24565..73910c54d 100644 --- a/drivers/tty/serial/ma35d1_serial.c +++ b/drivers/tty/serial/ma35d1_serial.c @@ -269,16 +269,16 @@ static void receive_chars(struct uart_ma35d1_port *up) @@ -5365,7 +5364,7 @@ static int __init ma35d1serial_console_setup(struct console *co, char *options) diff --git a/drivers/tty/serial/mcf.c b/drivers/tty/serial/mcf.c -index aea29b4e6..ee40af20a 100644 +index 1666ce012..91b15243f 100644 --- a/drivers/tty/serial/mcf.c +++ b/drivers/tty/serial/mcf.c @@ -135,12 +135,12 @@ static void mcf_break_ctl(struct uart_port *port, int break_state) @@ -7321,10 +7320,10 @@ static int __init sbd_console_setup(struct console *co, char *options) diff --git a/drivers/tty/serial/sc16is7xx.c b/drivers/tty/serial/sc16is7xx.c -index 7a9924d9b..be9ae5cdd 100644 +index eea662212..2aa0b7e5e 100644 --- a/drivers/tty/serial/sc16is7xx.c +++ b/drivers/tty/serial/sc16is7xx.c -@@ -817,6 +817,7 @@ static void sc16is7xx_tx_proc(struct kthread_work *ws) +@@ -806,6 +806,7 @@ static void sc16is7xx_tx_proc(struct kthread_work *ws) { struct uart_port *port = &(to_sc16is7xx_one(ws, tx_work)->port); struct sc16is7xx_one *one = to_sc16is7xx_one(port, port); @@ -7332,7 +7331,7 @@ if ((port->rs485.flags & SER_RS485_ENABLED) && (port->rs485.delay_rts_before_send > 0)) -@@ -825,6 +826,10 @@ static void sc16is7xx_tx_proc(struct kthread_work *ws) +@@ -814,6 +815,10 @@ static void sc16is7xx_tx_proc(struct kthread_work *ws) mutex_lock(&one->efr_lock); sc16is7xx_handle_tx(port); mutex_unlock(&one->efr_lock); @@ -7820,7 +7819,7 @@ return IRQ_HANDLED; } diff --git a/drivers/tty/serial/serial_port.c b/drivers/tty/serial/serial_port.c -index ed3953bd0..92a57b243 100644 +index d622a9297..7d51e66ec 100644 --- a/drivers/tty/serial/serial_port.c +++ b/drivers/tty/serial/serial_port.c @@ -35,14 +35,14 @@ static int serial_port_runtime_resume(struct device *dev) @@ -7939,7 +7938,7 @@ static void diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh-sci.c -index f793624fd..2559c9781 100644 +index a560b729f..84ab434c9 100644 --- a/drivers/tty/serial/sh-sci.c +++ b/drivers/tty/serial/sh-sci.c @@ -1205,7 +1205,7 @@ static void sci_dma_tx_complete(void *arg) @@ -7960,7 +7959,7 @@ } /* Locking: called with port lock held */ -@@ -1325,7 +1325,7 @@ static void sci_dma_rx_complete(void *arg) +@@ -1320,7 +1320,7 @@ static void sci_dma_rx_complete(void *arg) dev_dbg(port->dev, "%s(%d) active cookie %d\n", __func__, port->line, s->active_rx); @@ -7969,7 +7968,7 @@ active = sci_dma_rx_find_active(s); if (active >= 0) -@@ -1352,20 +1352,20 @@ static void sci_dma_rx_complete(void *arg) +@@ -1347,20 +1347,20 @@ static void sci_dma_rx_complete(void *arg) dma_async_issue_pending(chan); @@ -7994,7 +7993,7 @@ } static void sci_dma_tx_release(struct sci_port *s) -@@ -1414,13 +1414,13 @@ static int sci_dma_rx_submit(struct sci_port *s, bool port_lock_held) +@@ -1409,13 +1409,13 @@ static int sci_dma_rx_submit(struct sci_port *s, bool port_lock_held) fail: /* Switch to PIO */ if (!port_lock_held) @@ -8010,7 +8009,7 @@ return -EAGAIN; } -@@ -1442,14 +1442,14 @@ static void sci_dma_tx_work_fn(struct work_struct *work) +@@ -1437,14 +1437,14 @@ static void sci_dma_tx_work_fn(struct work_struct *work) * transmit till the end, and then the rest. Take the port lock to get a * consistent xmit buffer state. */ @@ -8027,7 +8026,7 @@ return; } -@@ -1457,7 +1457,7 @@ static void sci_dma_tx_work_fn(struct work_struct *work) +@@ -1452,7 +1452,7 @@ static void sci_dma_tx_work_fn(struct work_struct *work) DMA_MEM_TO_DEV, DMA_PREP_INTERRUPT | DMA_CTRL_ACK); if (!desc) { @@ -8036,7 +8035,7 @@ dev_warn(port->dev, "Failed preparing Tx DMA descriptor\n"); goto switch_to_pio; } -@@ -1469,12 +1469,12 @@ static void sci_dma_tx_work_fn(struct work_struct *work) +@@ -1464,12 +1464,12 @@ static void sci_dma_tx_work_fn(struct work_struct *work) desc->callback_param = s; s->cookie_tx = dmaengine_submit(desc); if (dma_submit_error(s->cookie_tx)) { @@ -8051,7 +8050,7 @@ dev_dbg(port->dev, "%s: %p: %d...%d, cookie %d\n", __func__, xmit->buf, tail, head, s->cookie_tx); -@@ -1482,10 +1482,10 @@ static void sci_dma_tx_work_fn(struct work_struct *work) +@@ -1477,10 +1477,10 @@ static void sci_dma_tx_work_fn(struct work_struct *work) return; switch_to_pio: @@ -8064,7 +8063,7 @@ return; } -@@ -1502,17 +1502,17 @@ static enum hrtimer_restart sci_dma_rx_timer_fn(struct hrtimer *t) +@@ -1497,17 +1497,17 @@ static enum hrtimer_restart sci_dma_rx_timer_fn(struct hrtimer *t) dev_dbg(port->dev, "DMA Rx timed out\n"); @@ -8085,7 +8084,7 @@ dev_dbg(port->dev, "Cookie %d #%d has already completed\n", s->active_rx, active); -@@ -1530,7 +1530,7 @@ static enum hrtimer_restart sci_dma_rx_timer_fn(struct hrtimer *t) +@@ -1525,7 +1525,7 @@ static enum hrtimer_restart sci_dma_rx_timer_fn(struct hrtimer *t) */ status = dmaengine_tx_status(s->chan_rx, s->active_rx, &state); if (status == DMA_COMPLETE) { @@ -8094,7 +8093,7 @@ dev_dbg(port->dev, "Transaction complete after DMA engine was stopped"); return HRTIMER_NORESTART; } -@@ -1551,7 +1551,7 @@ static enum hrtimer_restart sci_dma_rx_timer_fn(struct hrtimer *t) +@@ -1546,7 +1546,7 @@ static enum hrtimer_restart sci_dma_rx_timer_fn(struct hrtimer *t) sci_dma_rx_reenable_irq(s); @@ -8103,7 +8102,7 @@ return HRTIMER_NORESTART; } -@@ -1775,9 +1775,9 @@ static irqreturn_t sci_tx_interrupt(int irq, void *ptr) +@@ -1770,9 +1770,9 @@ static irqreturn_t sci_tx_interrupt(int irq, void *ptr) struct uart_port *port = ptr; unsigned long flags; @@ -8115,7 +8114,7 @@ return IRQ_HANDLED; } -@@ -1791,11 +1791,11 @@ static irqreturn_t sci_tx_end_interrupt(int irq, void *ptr) +@@ -1786,11 +1786,11 @@ static irqreturn_t sci_tx_end_interrupt(int irq, void *ptr) if (port->type != PORT_SCI) return sci_tx_interrupt(irq, ptr); @@ -8129,7 +8128,7 @@ return IRQ_HANDLED; } -@@ -2192,7 +2192,7 @@ static void sci_break_ctl(struct uart_port *port, int break_state) +@@ -2187,7 +2187,7 @@ static void sci_break_ctl(struct uart_port *port, int break_state) return; } @@ -8138,7 +8137,7 @@ scsptr = serial_port_in(port, SCSPTR); scscr = serial_port_in(port, SCSCR); -@@ -2206,7 +2206,7 @@ static void sci_break_ctl(struct uart_port *port, int break_state) +@@ -2201,7 +2201,7 @@ static void sci_break_ctl(struct uart_port *port, int break_state) serial_port_out(port, SCSPTR, scsptr); serial_port_out(port, SCSCR, scscr); @@ -8147,7 +8146,7 @@ } static int sci_startup(struct uart_port *port) -@@ -2238,7 +2238,7 @@ static void sci_shutdown(struct uart_port *port) +@@ -2233,7 +2233,7 @@ static void sci_shutdown(struct uart_port *port) s->autorts = false; mctrl_gpio_disable_ms(to_sci_port(port)->gpios); @@ -8156,7 +8155,7 @@ sci_stop_rx(port); sci_stop_tx(port); /* -@@ -2248,7 +2248,7 @@ static void sci_shutdown(struct uart_port *port) +@@ -2243,7 +2243,7 @@ static void sci_shutdown(struct uart_port *port) scr = serial_port_in(port, SCSCR); serial_port_out(port, SCSCR, scr & (SCSCR_CKE1 | SCSCR_CKE0 | s->hscif_tot)); @@ -8165,7 +8164,7 @@ #ifdef CONFIG_SERIAL_SH_SCI_DMA if (s->chan_rx_saved) { -@@ -2550,7 +2550,7 @@ done: +@@ -2545,7 +2545,7 @@ static void sci_set_termios(struct uart_port *port, struct ktermios *termios, serial_port_out(port, SCCKS, sccks); } @@ -8174,7 +8173,7 @@ sci_reset(port); -@@ -2672,7 +2672,7 @@ done: +@@ -2667,7 +2667,7 @@ static void sci_set_termios(struct uart_port *port, struct ktermios *termios, if ((termios->c_cflag & CREAD) != 0) sci_start_rx(port); @@ -8183,7 +8182,7 @@ sci_port_disable(s); -@@ -3057,9 +3057,9 @@ static void serial_console_write(struct console *co, const char *s, +@@ -3052,9 +3052,9 @@ static void serial_console_write(struct console *co, const char *s, if (port->sysrq) locked = 0; else if (oops_in_progress) @@ -8195,7 +8194,7 @@ /* first save SCSCR then disable interrupts, keep clock source */ ctrl = serial_port_in(port, SCSCR); -@@ -3079,7 +3079,7 @@ static void serial_console_write(struct console *co, const char *s, +@@ -3074,7 +3074,7 @@ static void serial_console_write(struct console *co, const char *s, serial_port_out(port, SCSCR, ctrl); if (locked) @@ -10101,7 +10100,7 @@ static inline void input_queue_head_incr(struct softnet_data *sd) diff --git a/include/linux/printk.h b/include/linux/printk.h -index e4878bb58..ebebc32e7 100644 +index 8ef499ab3..7a942e987 100644 --- a/include/linux/printk.h +++ b/include/linux/printk.h @@ -9,6 +9,8 @@ @@ -10168,7 +10167,7 @@ #ifdef CONFIG_SMP diff --git a/include/linux/sched.h b/include/linux/sched.h -index f40411aa7..d5b27c710 100644 +index b65d74c5e..d5fba1473 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -944,6 +944,9 @@ struct task_struct { @@ -10181,7 +10180,7 @@ /* Bit to tell LSMs we're in execve(): */ unsigned in_execve:1; -@@ -1980,6 +1983,7 @@ static inline int dl_task_check_affinity(struct task_struct *p, const struct cpu +@@ -1979,6 +1982,7 @@ static inline int dl_task_check_affinity(struct task_struct *p, const struct cpu } #endif @@ -10189,7 +10188,7 @@ extern int yield_to(struct task_struct *p, bool preempt); extern void set_user_nice(struct task_struct *p, long nice); extern int task_prio(const struct task_struct *p); -@@ -2131,17 +2135,17 @@ static inline void update_tsk_thread_flag(struct task_struct *tsk, int flag, +@@ -2130,17 +2134,17 @@ static inline void update_tsk_thread_flag(struct task_struct *tsk, int flag, update_ti_thread_flag(task_thread_info(tsk), flag, value); } @@ -10210,7 +10209,7 @@ { return test_ti_thread_flag(task_thread_info(tsk), flag); } -@@ -2154,9 +2158,11 @@ static inline void set_tsk_need_resched(struct task_struct *tsk) +@@ -2153,9 +2157,11 @@ static inline void set_tsk_need_resched(struct task_struct *tsk) static inline void clear_tsk_need_resched(struct task_struct *tsk) { clear_tsk_thread_flag(tsk,TIF_NEED_RESCHED); @@ -10223,7 +10222,7 @@ { return unlikely(test_tsk_thread_flag(tsk,TIF_NEED_RESCHED)); } -@@ -2337,7 +2343,7 @@ static inline int rwlock_needbreak(rwlock_t *lock) +@@ -2336,7 +2342,7 @@ static inline int rwlock_needbreak(rwlock_t *lock) static __always_inline bool need_resched(void) { @@ -10308,10 +10307,10 @@ int serial8250_console_exit(struct uart_port *port); diff --git a/include/linux/serial_core.h b/include/linux/serial_core.h -index 5136eade9..9c7bce638 100644 +index a7d5fa892..99d3f1e24 100644 --- a/include/linux/serial_core.h +++ b/include/linux/serial_core.h -@@ -489,6 +489,7 @@ struct uart_port { +@@ -488,6 +488,7 @@ struct uart_port { struct uart_icount icount; /* statistics */ struct console *cons; /* struct console, if any */ @@ -10319,7 +10318,7 @@ /* flags must be updated while holding port mutex */ upf_t flags; -@@ -596,6 +597,7 @@ struct uart_port { +@@ -595,6 +596,7 @@ struct uart_port { static inline void uart_port_lock(struct uart_port *up) { spin_lock(&up->lock); @@ -10327,7 +10326,7 @@ } /** -@@ -605,6 +607,7 @@ static inline void uart_port_lock(struct uart_port *up) +@@ -604,6 +606,7 @@ static inline void uart_port_lock(struct uart_port *up) static inline void uart_port_lock_irq(struct uart_port *up) { spin_lock_irq(&up->lock); @@ -10335,7 +10334,7 @@ } /** -@@ -615,6 +618,7 @@ static inline void uart_port_lock_irq(struct uart_port *up) +@@ -614,6 +617,7 @@ static inline void uart_port_lock_irq(struct uart_port *up) static inline void uart_port_lock_irqsave(struct uart_port *up, unsigned long *flags) { spin_lock_irqsave(&up->lock, *flags); @@ -10343,7 +10342,7 @@ } /** -@@ -625,7 +629,11 @@ static inline void uart_port_lock_irqsave(struct uart_port *up, unsigned long *f +@@ -624,7 +628,11 @@ static inline void uart_port_lock_irqsave(struct uart_port *up, unsigned long *f */ static inline bool uart_port_trylock(struct uart_port *up) { @@ -10356,7 +10355,7 @@ } /** -@@ -637,7 +645,11 @@ static inline bool uart_port_trylock(struct uart_port *up) +@@ -636,7 +644,11 @@ static inline bool uart_port_trylock(struct uart_port *up) */ static inline bool uart_port_trylock_irqsave(struct uart_port *up, unsigned long *flags) { @@ -10369,7 +10368,7 @@ } /** -@@ -646,6 +658,7 @@ static inline bool uart_port_trylock_irqsave(struct uart_port *up, unsigned long +@@ -645,6 +657,7 @@ static inline bool uart_port_trylock_irqsave(struct uart_port *up, unsigned long */ static inline void uart_port_unlock(struct uart_port *up) { @@ -10377,7 +10376,7 @@ spin_unlock(&up->lock); } -@@ -655,6 +668,7 @@ static inline void uart_port_unlock(struct uart_port *up) +@@ -654,6 +667,7 @@ static inline void uart_port_unlock(struct uart_port *up) */ static inline void uart_port_unlock_irq(struct uart_port *up) { @@ -10385,7 +10384,7 @@ spin_unlock_irq(&up->lock); } -@@ -664,6 +678,19 @@ static inline void uart_port_unlock_irq(struct uart_port *up) +@@ -663,6 +677,19 @@ static inline void uart_port_unlock_irq(struct uart_port *up) * @flags: The saved interrupt flags for restore */ static inline void uart_port_unlock_irqrestore(struct uart_port *up, unsigned long flags) @@ -10405,7 +10404,7 @@ { spin_unlock_irqrestore(&up->lock, flags); } -@@ -1076,14 +1103,14 @@ static inline void uart_unlock_and_check_sysrq(struct uart_port *port) +@@ -1058,14 +1085,14 @@ static inline void uart_unlock_and_check_sysrq(struct uart_port *port) u8 sysrq_ch; if (!port->has_sysrq) { @@ -10422,7 +10421,7 @@ if (sysrq_ch) handle_sysrq(sysrq_ch); -@@ -1095,14 +1122,14 @@ static inline void uart_unlock_and_check_sysrq_irqrestore(struct uart_port *port +@@ -1077,14 +1104,14 @@ static inline void uart_unlock_and_check_sysrq_irqrestore(struct uart_port *port u8 sysrq_ch; if (!port->has_sysrq) { @@ -10439,7 +10438,7 @@ if (sysrq_ch) handle_sysrq(sysrq_ch); -@@ -1118,12 +1145,12 @@ static inline int uart_prepare_sysrq_char(struct uart_port *port, u8 ch) +@@ -1100,12 +1127,12 @@ static inline int uart_prepare_sysrq_char(struct uart_port *port, u8 ch) } static inline void uart_unlock_and_check_sysrq(struct uart_port *port) { @@ -10657,7 +10656,7 @@ new_owner = top_waiter->task; /* -@@ -1002,6 +990,12 @@ retry_private: +@@ -1002,6 +990,12 @@ int futex_lock_pi(u32 __user *uaddr, unsigned int flags, ktime_t *time, int tryl goto no_block; } @@ -10670,7 +10669,7 @@ rt_mutex_init_waiter(&rt_waiter); /* -@@ -1039,19 +1033,37 @@ retry_private: +@@ -1039,19 +1033,37 @@ int futex_lock_pi(u32 __user *uaddr, unsigned int flags, ktime_t *time, int tryl ret = rt_mutex_wait_proxy_lock(&q.pi_state->pi_mutex, to, &rt_waiter); cleanup: @@ -10714,7 +10713,7 @@ no_block: /* * Fixup the pi_state owner and possibly acquire the lock if we -@@ -1132,6 +1144,7 @@ retry: +@@ -1132,6 +1144,7 @@ int futex_unlock_pi(u32 __user *uaddr, unsigned int flags) top_waiter = futex_top_waiter(hb, &key); if (top_waiter) { struct futex_pi_state *pi_state = top_waiter->pi_state; @@ -10722,7 +10721,7 @@ ret = -EINVAL; if (!pi_state) -@@ -1144,22 +1157,39 @@ retry: +@@ -1144,22 +1157,39 @@ int futex_unlock_pi(u32 __user *uaddr, unsigned int flags) if (pi_state->owner != current) goto out_unlock; @@ -10768,7 +10767,7 @@ put_pi_state(pi_state); -@@ -1187,6 +1217,7 @@ retry: +@@ -1187,6 +1217,7 @@ int futex_unlock_pi(u32 __user *uaddr, unsigned int flags) return ret; } @@ -11000,7 +10999,7 @@ } diff --git a/kernel/locking/rwsem.c b/kernel/locking/rwsem.c -index 11ed7ce65..62eac9fd8 100644 +index 9eabd585c..2340b6d90 100644 --- a/kernel/locking/rwsem.c +++ b/kernel/locking/rwsem.c @@ -1427,8 +1427,14 @@ static inline void __downgrade_write(struct rw_semaphore *sem) @@ -13074,7 +13073,7 @@ /* * We cannot access per-CPU data (e.g. per-CPU flush irq_work) before -@@ -698,9 +742,6 @@ out: +@@ -698,9 +742,6 @@ static ssize_t msg_print_ext_body(char *buf, size_t size, return len; } @@ -13093,7 +13092,7 @@ { /* * Do not use spinning in panic(). The panic CPU wants to keep the lock. -@@ -1887,7 +1928,7 @@ lockdep: +@@ -1887,7 +1928,7 @@ static void console_lock_spinning_enable(void) * * Return: 1 if the lock rights were passed, 0 otherwise. */ @@ -13102,7 +13101,7 @@ { int waiter; -@@ -2305,54 +2346,123 @@ out: +@@ -2305,54 +2346,123 @@ int vprintk_store(int facility, int level, return ret; } @@ -13449,7 +13448,7 @@ /* Skip record that has level above the console loglevel. */ if (may_suppress && suppress_message_printing(r.info->level)) goto out; -@@ -2887,6 +2945,13 @@ out: +@@ -2887,6 +2945,13 @@ static bool printk_get_next_message(struct printk_message *pmsg, u64 seq, return true; } @@ -13463,7 +13462,7 @@ /* * Print one record for the given console. The record printed is whatever * record is the next available record for the given console. -@@ -2904,12 +2969,10 @@ out: +@@ -2904,12 +2969,10 @@ static bool printk_get_next_message(struct printk_message *pmsg, u64 seq, */ static bool console_emit_next_record(struct console *con, bool *handover, int cookie) { @@ -13605,7 +13604,7 @@ if (!progress) continue; -@@ -3038,19 +3145,7 @@ abandon: +@@ -3038,19 +3145,7 @@ static bool console_flush_all(bool do_cond_resched, u64 *next_seq, bool *handove return false; } @@ -14188,7 +14187,7 @@ return NULL; } -@@ -1441,20 +1457,118 @@ fail_reopen: +@@ -1441,20 +1457,118 @@ bool prb_reserve_in_last(struct prb_reserved_entry *e, struct printk_ringbuffer return false; } @@ -14759,10 +14758,10 @@ { #ifdef CONFIG_KGDB_KDB diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c -index 781146600..7ee1c84b5 100644 +index ade42d6a9..eebb9b454 100644 --- a/kernel/rcu/rcutorture.c +++ b/kernel/rcu/rcutorture.c -@@ -2409,6 +2409,12 @@ static int rcutorture_booster_init(unsigned int cpu) +@@ -2408,6 +2408,12 @@ static int rcutorture_booster_init(unsigned int cpu) WARN_ON_ONCE(!t); sp.sched_priority = 2; sched_setscheduler_nocheck(t, SCHED_FIFO, &sp); @@ -14776,7 +14775,7 @@ /* Don't allow time recalculation while creating a new task. */ diff --git a/kernel/rcu/tree_stall.h b/kernel/rcu/tree_stall.h -index 11a1fac3a..6f085a159 100644 +index e09f4f624..311483048 100644 --- a/kernel/rcu/tree_stall.h +++ b/kernel/rcu/tree_stall.h @@ -8,6 +8,7 @@ @@ -14787,7 +14786,7 @@ ////////////////////////////////////////////////////////////////////////////// // -@@ -604,6 +605,8 @@ static void print_other_cpu_stall(unsigned long gp_seq, unsigned long gps) +@@ -603,6 +604,8 @@ static void print_other_cpu_stall(unsigned long gp_seq, unsigned long gps) if (rcu_stall_is_suppressed()) return; @@ -14796,7 +14795,7 @@ /* * OK, time to rat on our buddy... * See Documentation/RCU/stallwarn.rst for info on how to debug -@@ -658,6 +661,8 @@ static void print_other_cpu_stall(unsigned long gp_seq, unsigned long gps) +@@ -657,6 +660,8 @@ static void print_other_cpu_stall(unsigned long gp_seq, unsigned long gps) panic_on_rcu_stall(); rcu_force_quiescent_state(); /* Kick them all. */ @@ -14806,7 +14805,7 @@ static void print_cpu_stall(unsigned long gps) diff --git a/kernel/sched/core.c b/kernel/sched/core.c -index 7dd2415d9..697d165a2 100644 +index 07bcc5f2e..7a6b82e1f 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -901,14 +901,15 @@ static inline void hrtick_rq_init(struct rq *rq) @@ -14914,7 +14913,7 @@ smp_send_reschedule(cpu); else trace_sched_wake_idle_without_ipi(cpu); -@@ -6774,10 +6794,14 @@ void __noreturn do_task_dead(void) +@@ -6777,10 +6797,14 @@ void __noreturn do_task_dead(void) static inline void sched_submit_work(struct task_struct *tsk) { @@ -14931,7 +14930,7 @@ task_flags = tsk->flags; /* -@@ -6803,6 +6827,8 @@ static inline void sched_submit_work(struct task_struct *tsk) +@@ -6806,6 +6830,8 @@ static inline void sched_submit_work(struct task_struct *tsk) * make sure to submit it to avoid deadlocks. */ blk_flush_plug(tsk->plug, true); @@ -14940,7 +14939,7 @@ } static void sched_update_worker(struct task_struct *tsk) -@@ -6815,16 +6841,26 @@ static void sched_update_worker(struct task_struct *tsk) +@@ -6818,16 +6844,26 @@ static void sched_update_worker(struct task_struct *tsk) } } @@ -14972,7 +14971,7 @@ sched_update_worker(tsk); } EXPORT_SYMBOL(schedule); -@@ -6888,11 +6924,7 @@ void __sched schedule_preempt_disabled(void) +@@ -6891,11 +6927,7 @@ void __sched schedule_preempt_disabled(void) #ifdef CONFIG_PREEMPT_RT void __sched notrace schedule_rtlock(void) { @@ -14985,7 +14984,7 @@ } NOKPROBE_SYMBOL(schedule_rtlock); #endif -@@ -7088,6 +7120,32 @@ static void __setscheduler_prio(struct task_struct *p, int prio) +@@ -7091,6 +7123,32 @@ static void __setscheduler_prio(struct task_struct *p, int prio) #ifdef CONFIG_RT_MUTEXES @@ -15018,7 +15017,7 @@ static inline int __rt_effective_prio(struct task_struct *pi_task, int prio) { if (pi_task) -@@ -8950,6 +9008,21 @@ static inline void preempt_dynamic_init(void) { } +@@ -8953,6 +9011,21 @@ static inline void preempt_dynamic_init(void) { } #endif /* #ifdef CONFIG_PREEMPT_DYNAMIC */ @@ -15078,7 +15077,7 @@ } late_initcall(sched_init_debug); diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c -index 415f4b060..8e58f6744 100644 +index 8de28b182..196536f0a 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -1154,8 +1154,10 @@ static void clear_buddies(struct cfs_rq *cfs_rq, struct sched_entity *se); @@ -15146,7 +15145,7 @@ static void update_curr_fair(struct rq *rq) { update_curr(cfs_rq_of(&rq->curr->se)); -@@ -5629,7 +5645,7 @@ entity_tick(struct cfs_rq *cfs_rq, struct sched_entity *curr, int queued) +@@ -5631,7 +5647,7 @@ entity_tick(struct cfs_rq *cfs_rq, struct sched_entity *curr, int queued) /* * Update run-time statistics of the 'current'. */ @@ -15155,7 +15154,7 @@ /* * Ensure that runnable average is periodically updated. -@@ -5643,7 +5659,7 @@ entity_tick(struct cfs_rq *cfs_rq, struct sched_entity *curr, int queued) +@@ -5645,7 +5661,7 @@ entity_tick(struct cfs_rq *cfs_rq, struct sched_entity *curr, int queued) * validating it and just reschedule. */ if (queued) { @@ -15164,7 +15163,7 @@ return; } /* -@@ -5789,7 +5805,7 @@ static void __account_cfs_rq_runtime(struct cfs_rq *cfs_rq, u64 delta_exec) +@@ -5791,7 +5807,7 @@ static void __account_cfs_rq_runtime(struct cfs_rq *cfs_rq, u64 delta_exec) * hierarchy can be throttled */ if (!assign_cfs_rq_runtime(cfs_rq) && likely(cfs_rq->curr)) @@ -15173,7 +15172,7 @@ } static __always_inline -@@ -6088,7 +6104,7 @@ unthrottle_throttle: +@@ -6090,7 +6106,7 @@ void unthrottle_cfs_rq(struct cfs_rq *cfs_rq) /* Determine whether we need to wake up potentially idle CPU: */ if (rq->curr == rq->idle && rq->cfs.nr_running) @@ -15182,7 +15181,7 @@ } #ifdef CONFIG_SMP -@@ -7333,7 +7349,7 @@ static void hrtick_start_fair(struct rq *rq, struct task_struct *p) +@@ -7291,7 +7307,7 @@ static void hrtick_start_fair(struct rq *rq, struct task_struct *p) if (delta < 0) { if (task_current(rq, p)) @@ -15191,7 +15190,7 @@ return; } hrtick_start(rq, delta); -@@ -9293,7 +9309,7 @@ static void check_preempt_wakeup(struct rq *rq, struct task_struct *p, int wake_ +@@ -9231,7 +9247,7 @@ static void check_preempt_wakeup(struct rq *rq, struct task_struct *p, int wake_ * prevents us from potentially nominating it as a false LAST_BUDDY * below. */ @@ -15200,7 +15199,7 @@ return; /* Idle tasks are by definition preempted by non-idle tasks. */ -@@ -9335,7 +9351,7 @@ static void check_preempt_wakeup(struct rq *rq, struct task_struct *p, int wake_ +@@ -9273,7 +9289,7 @@ static void check_preempt_wakeup(struct rq *rq, struct task_struct *p, int wake_ return; preempt: @@ -15209,7 +15208,7 @@ } #ifdef CONFIG_QOS_SCHED -@@ -9818,8 +9834,7 @@ static bool _qos_smt_check_need_resched(int this_cpu, struct rq *rq) +@@ -9756,8 +9772,7 @@ static bool _qos_smt_check_need_resched(int this_cpu, struct rq *rq) /* * There are two cases rely on the set need_resched to drive away @@ -15219,7 +15218,7 @@ * b) The qos_smt_status of siblings cpu is offline, the task of curr cpu is idle, * and current cpu only has SCHED_IDLE tasks enqueued. */ -@@ -14193,7 +14208,7 @@ static inline void task_tick_core(struct rq *rq, struct task_struct *curr) +@@ -14139,7 +14154,7 @@ static inline void task_tick_core(struct rq *rq, struct task_struct *curr) */ if (rq->core->core_forceidle_count && rq->cfs.nr_running == 1 && __entity_slice_used(&curr->se, MIN_NR_TASKS_DURING_FORCEIDLE)) @@ -15228,7 +15227,7 @@ } /* -@@ -14509,7 +14524,7 @@ prio_changed_fair(struct rq *rq, struct task_struct *p, int oldprio) +@@ -14455,7 +14470,7 @@ prio_changed_fair(struct rq *rq, struct task_struct *p, int oldprio) */ if (task_current(rq, p)) { if (p->prio > oldprio) @@ -15238,15 +15237,15 @@ check_preempt_curr(rq, p, 0); } diff --git a/kernel/sched/features.h b/kernel/sched/features.h -index 26b1a03bd..bfba10c09 100644 +index 26b1a03bd..a08f2fcd7 100644 --- a/kernel/sched/features.h +++ b/kernel/sched/features.h -@@ -99,6 +99,8 @@ SCHED_FEAT(LATENCY_WARN, false) +@@ -98,7 +98,7 @@ SCHED_FEAT(UTIL_EST_FASTUP, true) + SCHED_FEAT(LATENCY_WARN, false) SCHED_FEAT(HZ_BW, true) - +- +SCHED_FEAT(FORCE_NEED_RESCHED, false) -+ #ifdef CONFIG_QOS_SCHED_DYNAMIC_AFFINITY /* * Use util_avg of bottom-Level taskgroup @@ -15282,20 +15281,11 @@ rd->rto_cpu = -1; diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h -index 761870540..ecf1154c3 100644 +index 9de2bac64..0f60c4654 100644 --- a/kernel/sched/sched.h +++ b/kernel/sched/sched.h -@@ -740,7 +740,7 @@ struct cfs_rq { - - #ifdef CONFIG_QOS_SCHED_SMT_EXPELLER - union { -- unsigned int qos_idle_h_nr_running; /* qos_levelï¼-1 */ -+ unsigned int qos_idle_h_nr_running; /* qos_levelï¼?1 */ - unsigned long qos_idle_h_nr_running_padding; - }; - #endif -@@ -2601,6 +2601,7 @@ extern void init_sched_fair_class(void); - extern void reweight_task(struct task_struct *p, const struct load_weight *lw); +@@ -2600,6 +2600,7 @@ extern void init_sched_fair_class(void); + extern void reweight_task(struct task_struct *p, int prio); extern void resched_curr(struct rq *rq); +extern void resched_curr_lazy(struct rq *rq); @@ -15303,7 +15293,7 @@ extern struct rt_bandwidth def_rt_bandwidth; diff --git a/kernel/signal.c b/kernel/signal.c -index f36c58ea7..0f2615143 100644 +index 28cddef39..cf2c75e3e 100644 --- a/kernel/signal.c +++ b/kernel/signal.c @@ -2332,15 +2332,35 @@ static int ptrace_stop(int exit_code, int why, unsigned long message, @@ -15348,10 +15338,10 @@ cgroup_leave_frozen(true); diff --git a/kernel/softirq.c b/kernel/softirq.c -index bd9716d7b..2fde8af88 100644 +index 210cf5f8d..cae0ae2e2 100644 --- a/kernel/softirq.c +++ b/kernel/softirq.c -@@ -247,6 +247,19 @@ out: +@@ -247,6 +247,19 @@ void __local_bh_enable_ip(unsigned long ip, unsigned int cnt) } EXPORT_SYMBOL(__local_bh_enable_ip); @@ -15371,7 +15361,7 @@ /* * Invoked from ksoftirqd_run() outside of the interrupt disabled section * to acquire the per CPU local lock for reentrancy protection. -@@ -623,6 +636,24 @@ static inline void tick_irq_exit(void) +@@ -619,6 +632,24 @@ static inline void tick_irq_exit(void) #endif } @@ -15396,7 +15386,7 @@ static inline void __irq_exit_rcu(void) { #ifndef __ARCH_IRQ_EXIT_IRQS_DISABLED -@@ -635,6 +666,10 @@ static inline void __irq_exit_rcu(void) +@@ -631,6 +662,10 @@ static inline void __irq_exit_rcu(void) if (!in_interrupt() && local_softirq_pending()) invoke_softirq(); @@ -15407,7 +15397,7 @@ tick_irq_exit(); } -@@ -967,12 +1002,70 @@ static struct smp_hotplug_thread softirq_threads = { +@@ -963,12 +998,70 @@ static struct smp_hotplug_thread softirq_threads = { .thread_comm = "ksoftirqd/%u", }; @@ -15483,7 +15473,7 @@ index edb0f821d..a72900121 100644 --- a/kernel/time/hrtimer.c +++ b/kernel/time/hrtimer.c -@@ -1809,7 +1809,7 @@ retry: +@@ -1809,7 +1809,7 @@ void hrtimer_interrupt(struct clock_event_device *dev) if (!ktime_before(now, cpu_base->softirq_expires_next)) { cpu_base->softirq_expires_next = KTIME_MAX; cpu_base->softirq_activated = 1; @@ -15595,10 +15585,10 @@ need_resched = 'p'; break; diff --git a/net/core/dev.c b/net/core/dev.c -index 4935ff1ee..3754a26b8 100644 +index 1f6c8945f..1e8928cd3 100644 --- a/net/core/dev.c +++ b/net/core/dev.c -@@ -4711,15 +4711,6 @@ static void rps_trigger_softirq(void *data) +@@ -4705,15 +4705,6 @@ static void rps_trigger_softirq(void *data) #endif /* CONFIG_RPS */ @@ -15614,7 +15604,7 @@ /* * After we queued a packet into sd->input_pkt_queue, * we need to make sure this queue is serviced soon. -@@ -6688,6 +6679,32 @@ static void skb_defer_free_flush(struct softnet_data *sd) +@@ -6682,6 +6673,32 @@ static void skb_defer_free_flush(struct softnet_data *sd) } } @@ -15647,7 +15637,7 @@ static int napi_threaded_poll(void *data) { struct napi_struct *napi = data; -@@ -11625,7 +11642,11 @@ static int __init net_dev_init(void) +@@ -11618,7 +11635,11 @@ static int __init net_dev_init(void) INIT_CSD(&sd->csd, rps_trigger_softirq, sd); sd->cpu = i; #endif @@ -15660,10 +15650,10 @@ init_gro_hash(&sd->backlog); diff --git a/net/core/skbuff.c b/net/core/skbuff.c -index f0a9ef1ae..682175af4 100644 +index 60876262b..02e2bab1e 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c -@@ -6863,8 +6863,13 @@ nodefer: __kfree_skb(skb); +@@ -6852,8 +6852,13 @@ nodefer: __kfree_skb(skb); /* Make sure to trigger NET_RX_SOFTIRQ on the remote CPU * if we are unlucky enough (this seems very unlikely). */
View file
_service:tar_scm:patch-6.6.0-6.0.0-rt20.patch
Changed
@@ -1,7 +1,7 @@ -From b000137e06f399ac756aa2374e77e724d245f19c Mon Sep 17 00:00:00 2001 +From a8b87098c93aa630d286de4af9637a247d55a370 Mon Sep 17 00:00:00 2001 From: zhangyu <zhangyu4@kylinos.cn> -Date: Thu, 22 Aug 2024 09:32:29 +0800 -Subject: PATCH rt-patrch +Date: Fri, 17 May 2024 15:06:01 +0800 +Subject: PATCH rpi-rt --- arch/arm/Kconfig | 6 +- @@ -32,7 +32,7 @@ drivers/gpu/drm/i915/Kconfig | 1 - drivers/gpu/drm/i915/display/intel_crtc.c | 15 +- drivers/gpu/drm/i915/display/intel_vblank.c | 6 +- - drivers/gpu/drm/i915/gt/intel_breadcrumbs.c | 7 +- + drivers/gpu/drm/i915/gt/intel_breadcrumbs.c | 5 +- .../drm/i915/gt/intel_execlists_submission.c | 17 +- drivers/gpu/drm/i915/gt/intel_reset.c | 12 +- drivers/gpu/drm/i915/gt/uc/intel_guc.h | 2 +- @@ -155,10 +155,10 @@ kernel/sched/core.c | 127 +- kernel/sched/debug.c | 19 + kernel/sched/fair.c | 49 +- - kernel/sched/features.h | 2 + + kernel/sched/features.h | 2 +- kernel/sched/idle.c | 3 +- kernel/sched/rt.c | 5 +- - kernel/sched/sched.h | 3 +- + kernel/sched/sched.h | 1 + kernel/signal.c | 30 +- kernel/softirq.c | 95 +- kernel/time/hrtimer.c | 4 +- @@ -168,11 +168,11 @@ kernel/trace/trace_output.c | 16 +- net/core/dev.c | 39 +- net/core/skbuff.c | 7 +- - 164 files changed, 5047 insertions(+), 1540 deletions(-) + 164 files changed, 5041 insertions(+), 1542 deletions(-) create mode 100644 kernel/printk/nbcon.c diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig -index 749935e2e..46910150c 100644 +index 2483ce304..52707a682 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -34,6 +34,7 @@ config ARM @@ -234,7 +234,7 @@ return 0; } diff --git a/arch/arm/vfp/vfpmodule.c b/arch/arm/vfp/vfpmodule.c -index 7e8773a2d..9fde36fcb 100644 +index a1ff693e4..adcc34042 100644 --- a/arch/arm/vfp/vfpmodule.c +++ b/arch/arm/vfp/vfpmodule.c @@ -55,6 +55,34 @@ extern unsigned int VFP_arch_feroceon __alias(VFP_arch); @@ -272,7 +272,7 @@ /* * Is 'thread's most up to date state stored in this CPUs hardware? * Must be called from non-preemptible context. -@@ -240,7 +268,7 @@ static void vfp_panic(char *reason, u32 inst) +@@ -243,7 +271,7 @@ static void vfp_panic(char *reason, u32 inst) /* * Process bitmask of exception conditions. */ @@ -281,7 +281,7 @@ { int si_code = 0; -@@ -248,8 +276,7 @@ static void vfp_raise_exceptions(u32 exceptions, u32 inst, u32 fpscr, struct pt_ +@@ -251,8 +279,7 @@ static void vfp_raise_exceptions(u32 exceptions, u32 inst, u32 fpscr, struct pt_ if (exceptions == VFP_EXCEPTION_ERROR) { vfp_panic("unhandled bounce", inst); @@ -291,7 +291,7 @@ } /* -@@ -277,8 +304,7 @@ static void vfp_raise_exceptions(u32 exceptions, u32 inst, u32 fpscr, struct pt_ +@@ -280,8 +307,7 @@ static void vfp_raise_exceptions(u32 exceptions, u32 inst, u32 fpscr, struct pt_ RAISE(FPSCR_OFC, FPSCR_OFE, FPE_FLTOVF); RAISE(FPSCR_IOC, FPSCR_IOE, FPE_FLTINV); @@ -301,7 +301,7 @@ } /* -@@ -324,6 +350,8 @@ static u32 vfp_emulate_instruction(u32 inst, u32 fpscr, struct pt_regs *regs) +@@ -327,6 +353,8 @@ static u32 vfp_emulate_instruction(u32 inst, u32 fpscr, struct pt_regs *regs) static void VFP_bounce(u32 trigger, u32 fpexc, struct pt_regs *regs) { u32 fpscr, orig_fpscr, fpsid, exceptions; @@ -310,7 +310,7 @@ pr_debug("VFP: bounce: trigger %08x fpexc %08x\n", trigger, fpexc); -@@ -369,8 +397,8 @@ static void VFP_bounce(u32 trigger, u32 fpexc, struct pt_regs *regs) +@@ -372,8 +400,8 @@ static void VFP_bounce(u32 trigger, u32 fpexc, struct pt_regs *regs) * unallocated VFP instruction but with FPSCR.IXE set and not * on VFP subarch 1. */ @@ -321,7 +321,7 @@ } /* -@@ -394,14 +422,14 @@ static void VFP_bounce(u32 trigger, u32 fpexc, struct pt_regs *regs) +@@ -397,14 +425,14 @@ static void VFP_bounce(u32 trigger, u32 fpexc, struct pt_regs *regs) */ exceptions = vfp_emulate_instruction(trigger, fpscr, regs); if (exceptions) @@ -338,7 +338,7 @@ /* * The barrier() here prevents fpinst2 being read -@@ -413,7 +441,13 @@ static void VFP_bounce(u32 trigger, u32 fpexc, struct pt_regs *regs) +@@ -416,7 +444,13 @@ static void VFP_bounce(u32 trigger, u32 fpexc, struct pt_regs *regs) emulate: exceptions = vfp_emulate_instruction(trigger, orig_fpscr, regs); if (exceptions) @@ -353,7 +353,7 @@ } static void vfp_enable(void *unused) -@@ -512,11 +546,9 @@ static inline void vfp_pm_init(void) { } +@@ -518,11 +552,9 @@ static inline void vfp_pm_init(void) { } */ void vfp_sync_hwstate(struct thread_info *thread) { @@ -367,7 +367,7 @@ u32 fpexc = fmrx(FPEXC); /* -@@ -527,8 +559,7 @@ void vfp_sync_hwstate(struct thread_info *thread) +@@ -534,8 +566,7 @@ void vfp_sync_hwstate(struct thread_info *thread) fmxr(FPEXC, fpexc); } @@ -377,7 +377,7 @@ } /* Ensure that the thread reloads the hardware VFP state on the next use. */ -@@ -683,7 +714,7 @@ static int vfp_support_entry(struct pt_regs *regs, u32 trigger) +@@ -695,7 +726,7 @@ static int vfp_support_entry(struct pt_regs *regs, u32 trigger) if (!user_mode(regs)) return vfp_kmode_exception(regs, trigger); @@ -386,7 +386,7 @@ fpexc = fmrx(FPEXC); /* -@@ -748,6 +779,7 @@ static int vfp_support_entry(struct pt_regs *regs, u32 trigger) +@@ -760,6 +791,7 @@ static int vfp_support_entry(struct pt_regs *regs, u32 trigger) * replay the instruction that trapped. */ fmxr(FPEXC, fpexc); @@ -394,7 +394,7 @@ } else { /* Check for synchronous or asynchronous exceptions */ if (!(fpexc & (FPEXC_EX | FPEXC_DEX))) { -@@ -762,17 +794,17 @@ static int vfp_support_entry(struct pt_regs *regs, u32 trigger) +@@ -774,17 +806,17 @@ static int vfp_support_entry(struct pt_regs *regs, u32 trigger) if (!(fpscr & FPSCR_IXE)) { if (!(fpscr & FPSCR_LENGTH_MASK)) { pr_debug("not VFP\n"); @@ -414,7 +414,7 @@ return 0; } -@@ -819,7 +851,7 @@ void kernel_neon_begin(void) +@@ -831,7 +863,7 @@ void kernel_neon_begin(void) unsigned int cpu; u32 fpexc; @@ -423,7 +423,7 @@ /* * Kernel mode NEON is only allowed outside of hardirq context with -@@ -850,7 +882,7 @@ void kernel_neon_end(void) +@@ -863,7 +895,7 @@ void kernel_neon_end(void) { /* Disable the NEON/VFP unit. */ fmxr(FPEXC, fmrx(FPEXC) & ~FPEXC_EN); @@ -433,10 +433,10 @@ EXPORT_SYMBOL(kernel_neon_end); diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig -index 501ec560a..eb0d9a8e0 100644 +index bb49f48de..699c3f58a 100644 --- a/arch/arm64/Kconfig +++ b/arch/arm64/Kconfig -@@ -99,6 +99,7 @@ config ARM64 +@@ -98,6 +98,7 @@ config ARM64 select ARCH_SUPPORTS_NUMA_BALANCING select ARCH_SUPPORTS_PAGE_TABLE_CHECK select ARCH_SUPPORTS_PER_VMA_LOCK @@ -531,7 +531,7 @@ select MPIC select OF_DYNAMIC diff --git a/arch/powerpc/platforms/pseries/iommu.c b/arch/powerpc/platforms/pseries/iommu.c -index b1e6d275c..9a8d3970d 100644 +index e8c412969..c61e29dea 100644 --- a/arch/powerpc/platforms/pseries/iommu.c +++ b/arch/powerpc/platforms/pseries/iommu.c @@ -25,6 +25,7 @@ @@ -838,10 +838,10 @@ if (has_vector()) { if (riscv_v_setup_vsize()) diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig -index 958a491fb..acb9d6f2a 100644 +index a993a3716..aa7ab6207 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig -@@ -122,6 +122,7 @@ config X86 +@@ -121,6 +121,7 @@ config X86 select ARCH_USES_CFI_TRAPS if X86_64 && CFI_CLANG select ARCH_SUPPORTS_LTO_CLANG select ARCH_SUPPORTS_LTO_CLANG_THIN @@ -849,7 +849,7 @@ select ARCH_USE_BUILTIN_BSWAP select ARCH_USE_MEMTEST select ARCH_USE_QUEUED_RWLOCKS -@@ -278,6 +279,7 @@ config X86 +@@ -277,6 +278,7 @@ config X86 select HAVE_STATIC_CALL select HAVE_STATIC_CALL_INLINE if HAVE_OBJTOOL select HAVE_PREEMPT_DYNAMIC_CALL @@ -882,10 +882,10 @@ #define _TIF_SSBD (1 << TIF_SSBD) #define _TIF_SPEC_IB (1 << TIF_SPEC_IB) diff --git a/drivers/acpi/processor_idle.c b/drivers/acpi/processor_idle.c -index 831fa4a12..5af3ebec0 100644 +index bd6a7857c..d45dfd10b 100644 --- a/drivers/acpi/processor_idle.c +++ b/drivers/acpi/processor_idle.c -@@ -107,7 +107,7 @@ static const struct dmi_system_id processor_power_dmi_table = { +@@ -108,7 +108,7 @@ static const struct dmi_system_id processor_power_dmi_table = { */ static void __cpuidle acpi_safe_halt(void) { @@ -1139,7 +1139,7 @@ DC_LOGGER_INIT(dc->ctx->logger); BW_VAL_TRACE_COUNT(); -@@ -2062,16 +2061,14 @@ validate_fail: +@@ -2062,16 +2061,14 @@ static bool dcn20_validate_bandwidth_internal(struct dc *dc, struct dc_state *co out = false; validate_out: @@ -1202,7 +1202,7 @@ DC_LOGGER_INIT(dc->ctx->logger); BW_VAL_TRACE_COUNT(); -@@ -2362,7 +2358,6 @@ validate_fail: +@@ -2362,7 +2358,6 @@ bool dcn21_validate_bandwidth_fp(struct dc *dc, out = false; validate_out: @@ -1325,25 +1325,24 @@ spin_unlock_irqrestore(&dev_priv->uncore.lock, irqflags); diff --git a/drivers/gpu/drm/i915/gt/intel_breadcrumbs.c b/drivers/gpu/drm/i915/gt/intel_breadcrumbs.c -index f2973cd1a..aa77f8601 100644 +index ecc990ec1..8d04b1068 100644 --- a/drivers/gpu/drm/i915/gt/intel_breadcrumbs.c +++ b/drivers/gpu/drm/i915/gt/intel_breadcrumbs.c -@@ -315,7 +315,12 @@ void __intel_breadcrumbs_park(struct intel_breadcrumbs *b) - return; - +@@ -312,10 +312,9 @@ void __intel_breadcrumbs_park(struct intel_breadcrumbs *b) /* Kick the work once more to drain the signalers, and disarm the irq */ -- irq_work_queue(&b->irq_work); -+ irq_work_sync(&b->irq_work); -+ while (READ_ONCE(b->irq_armed) && !atomic_read(&b->active)) { + irq_work_sync(&b->irq_work); + while (READ_ONCE(b->irq_armed) && !atomic_read(&b->active)) { +- local_irq_disable(); +- signal_irq_work(&b->irq_work); +- local_irq_enable(); + irq_work_queue(&b->irq_work); -+ cond_resched(); + cond_resched(); + irq_work_sync(&b->irq_work); -+ } + } } - void intel_breadcrumbs_free(struct kref *kref) diff --git a/drivers/gpu/drm/i915/gt/intel_execlists_submission.c b/drivers/gpu/drm/i915/gt/intel_execlists_submission.c -index 2065be5a1..73d815fc5 100644 +index 42e09f158..ac80e229f 100644 --- a/drivers/gpu/drm/i915/gt/intel_execlists_submission.c +++ b/drivers/gpu/drm/i915/gt/intel_execlists_submission.c @@ -1303,7 +1303,7 @@ static void execlists_dequeue(struct intel_engine_cs *engine) @@ -1373,7 +1372,7 @@ return; /* leave this for another sibling */ } -@@ -1591,7 +1591,7 @@ done: +@@ -1591,7 +1591,7 @@ static void execlists_dequeue(struct intel_engine_cs *engine) */ sched_engine->queue_priority_hint = queue_prio(sched_engine); i915_sched_engine_reset_on_empty(sched_engine); @@ -1382,7 +1381,7 @@ /* * We can skip poking the HW if we ended up with exactly the same set -@@ -1617,13 +1617,6 @@ done: +@@ -1617,13 +1617,6 @@ static void execlists_dequeue(struct intel_engine_cs *engine) } } @@ -1597,7 +1596,7 @@ lsr = serial_port_in(port, UART_LSR); diff --git a/drivers/tty/serial/8250/8250_bcm7271.c b/drivers/tty/serial/8250/8250_bcm7271.c -index 9afd5979c..db23b3a02 100644 +index aa5aff046..ff0662c68 100644 --- a/drivers/tty/serial/8250/8250_bcm7271.c +++ b/drivers/tty/serial/8250/8250_bcm7271.c @@ -567,7 +567,7 @@ static irqreturn_t brcmuart_isr(int irq, void *dev_id) @@ -1649,7 +1648,7 @@ serial8250_do_shutdown(port); } -@@ -807,7 +807,7 @@ static int brcmuart_handle_irq(struct uart_port *p) +@@ -788,7 +788,7 @@ static int brcmuart_handle_irq(struct uart_port *p) * interrupt but there is no data ready. */ if (((iir & UART_IIR_ID) == UART_IIR_RX_TIMEOUT) && !(priv->shutdown)) { @@ -1658,7 +1657,7 @@ status = serial_port_in(p, UART_LSR); if ((status & UART_LSR_DR) == 0) { -@@ -832,7 +832,7 @@ static int brcmuart_handle_irq(struct uart_port *p) +@@ -813,7 +813,7 @@ static int brcmuart_handle_irq(struct uart_port *p) handled = 1; } @@ -1667,7 +1666,7 @@ if (handled) return 1; } -@@ -850,7 +850,7 @@ static enum hrtimer_restart brcmuart_hrtimer_func(struct hrtimer *t) +@@ -831,7 +831,7 @@ static enum hrtimer_restart brcmuart_hrtimer_func(struct hrtimer *t) if (priv->shutdown) return HRTIMER_NORESTART; @@ -1676,7 +1675,7 @@ status = serial_port_in(p, UART_LSR); /* -@@ -874,7 +874,7 @@ static enum hrtimer_restart brcmuart_hrtimer_func(struct hrtimer *t) +@@ -855,7 +855,7 @@ static enum hrtimer_restart brcmuart_hrtimer_func(struct hrtimer *t) status |= UART_MCR_RTS; serial_port_out(p, UART_MCR, status); } @@ -1685,7 +1684,7 @@ return HRTIMER_NORESTART; } -@@ -1173,10 +1173,10 @@ static int __maybe_unused brcmuart_suspend(struct device *dev) +@@ -1154,10 +1154,10 @@ static int __maybe_unused brcmuart_suspend(struct device *dev) * This will prevent resume from enabling RTS before the * baud rate has been restored. */ @@ -1698,7 +1697,7 @@ serial8250_suspend_port(priv->line); clk_disable_unprepare(priv->baud_mux_clk); -@@ -1215,10 +1215,10 @@ static int __maybe_unused brcmuart_resume(struct device *dev) +@@ -1196,10 +1196,10 @@ static int __maybe_unused brcmuart_resume(struct device *dev) if (priv->saved_mctrl & TIOCM_RTS) { /* Restore RTS */ @@ -1712,10 +1711,10 @@ return 0; diff --git a/drivers/tty/serial/8250/8250_core.c b/drivers/tty/serial/8250/8250_core.c -index 3449f8790..30434718f 100644 +index e561f21cd..594201fbc 100644 --- a/drivers/tty/serial/8250/8250_core.c +++ b/drivers/tty/serial/8250/8250_core.c -@@ -259,7 +259,7 @@ static void serial8250_backup_timeout(struct timer_list *t) +@@ -271,7 +271,7 @@ static void serial8250_backup_timeout(struct timer_list *t) unsigned int iir, ier = 0, lsr; unsigned long flags; @@ -1724,7 +1723,7 @@ /* * Must disable interrupts or else we risk racing with the interrupt -@@ -292,7 +292,7 @@ static void serial8250_backup_timeout(struct timer_list *t) +@@ -304,7 +304,7 @@ static void serial8250_backup_timeout(struct timer_list *t) if (up->port.irq) serial_out(up, UART_IER, ier); @@ -1733,7 +1732,7 @@ /* Standard timer interval plus 0.2s to keep the port running */ mod_timer(&up->timer, -@@ -592,6 +592,7 @@ serial8250_register_ports(struct uart_driver *drv, struct device *dev) +@@ -607,6 +607,7 @@ serial8250_register_ports(struct uart_driver *drv, struct device *dev) #ifdef CONFIG_SERIAL_8250_CONSOLE @@ -1741,7 +1740,7 @@ static void univ8250_console_write(struct console *co, const char *s, unsigned int count) { -@@ -599,6 +600,37 @@ static void univ8250_console_write(struct console *co, const char *s, +@@ -614,6 +615,37 @@ static void univ8250_console_write(struct console *co, const char *s, serial8250_console_write(up, s, count); } @@ -1779,7 +1778,7 @@ static int univ8250_console_setup(struct console *co, char *options) { -@@ -698,12 +730,20 @@ static int univ8250_console_match(struct console *co, char *name, int idx, +@@ -713,12 +745,20 @@ static int univ8250_console_match(struct console *co, char *name, int idx, static struct console univ8250_console = { .name = "ttyS", @@ -1801,7 +1800,7 @@ .index = -1, .data = &serial8250_reg, }; -@@ -992,11 +1032,11 @@ static void serial_8250_overrun_backoff_work(struct work_struct *work) +@@ -1007,11 +1047,11 @@ static void serial_8250_overrun_backoff_work(struct work_struct *work) struct uart_port *port = &up->port; unsigned long flags; @@ -1815,7 +1814,7 @@ } /** -@@ -1194,9 +1234,9 @@ void serial8250_unregister_port(int line) +@@ -1209,9 +1249,9 @@ void serial8250_unregister_port(int line) if (uart->em485) { unsigned long flags; @@ -1897,10 +1896,10 @@ if (status & (UART_LSR_DR | UART_LSR_BI)) { dw8250_writel_ext(p, RZN1_UART_RDMACR, 0); diff --git a/drivers/tty/serial/8250/8250_exar.c b/drivers/tty/serial/8250/8250_exar.c -index 27430fdd9..17be6ad24 100644 +index 4d20f3aa2..342786064 100644 --- a/drivers/tty/serial/8250/8250_exar.c +++ b/drivers/tty/serial/8250/8250_exar.c -@@ -243,9 +243,9 @@ static int xr17v35x_startup(struct uart_port *port) +@@ -201,9 +201,9 @@ static int xr17v35x_startup(struct uart_port *port) * * Synchronize UART_IER access against the console. */ @@ -1940,7 +1939,7 @@ } diff --git a/drivers/tty/serial/8250/8250_mtk.c b/drivers/tty/serial/8250/8250_mtk.c -index 28f9a2679..33699e86e 100644 +index 74da5676c..23457daae 100644 --- a/drivers/tty/serial/8250/8250_mtk.c +++ b/drivers/tty/serial/8250/8250_mtk.c @@ -102,7 +102,7 @@ static void mtk8250_dma_rx_complete(void *param) @@ -1961,7 +1960,7 @@ } static void mtk8250_rx_dma(struct uart_8250_port *up) -@@ -372,7 +372,7 @@ mtk8250_set_termios(struct uart_port *port, struct ktermios *termios, +@@ -368,7 +368,7 @@ mtk8250_set_termios(struct uart_port *port, struct ktermios *termios, * Ok, we're now changing the port state. Do it with * interrupts disabled. */ @@ -1970,7 +1969,7 @@ /* * Update the per-port timeout. -@@ -420,7 +420,7 @@ mtk8250_set_termios(struct uart_port *port, struct ktermios *termios, +@@ -416,7 +416,7 @@ mtk8250_set_termios(struct uart_port *port, struct ktermios *termios, if (uart_console(port)) up->port.cons->cflag = termios->c_cflag; @@ -1980,10 +1979,10 @@ if (tty_termios_baud_rate(termios)) tty_termios_encode_baud_rate(termios, baud, baud); diff --git a/drivers/tty/serial/8250/8250_omap.c b/drivers/tty/serial/8250/8250_omap.c -index 8f472a208..78fc1f17d 100644 +index 346167afe..db5519ce0 100644 --- a/drivers/tty/serial/8250/8250_omap.c +++ b/drivers/tty/serial/8250/8250_omap.c -@@ -405,7 +405,7 @@ static void omap_8250_set_termios(struct uart_port *port, +@@ -401,7 +401,7 @@ static void omap_8250_set_termios(struct uart_port *port, * interrupts disabled. */ pm_runtime_get_sync(port->dev); @@ -1992,7 +1991,7 @@ /* * Update the per-port timeout. -@@ -508,7 +508,7 @@ static void omap_8250_set_termios(struct uart_port *port, +@@ -504,7 +504,7 @@ static void omap_8250_set_termios(struct uart_port *port, } omap8250_restore_regs(up); @@ -2001,7 +2000,7 @@ pm_runtime_mark_last_busy(port->dev); pm_runtime_put_autosuspend(port->dev); -@@ -533,7 +533,7 @@ static void omap_8250_pm(struct uart_port *port, unsigned int state, +@@ -529,7 +529,7 @@ static void omap_8250_pm(struct uart_port *port, unsigned int state, pm_runtime_get_sync(port->dev); /* Synchronize UART_IER access against the console. */ @@ -2010,7 +2009,7 @@ serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B); efr = serial_in(up, UART_EFR); -@@ -545,7 +545,7 @@ static void omap_8250_pm(struct uart_port *port, unsigned int state, +@@ -541,7 +541,7 @@ static void omap_8250_pm(struct uart_port *port, unsigned int state, serial_out(up, UART_EFR, efr); serial_out(up, UART_LCR, 0); @@ -2019,7 +2018,7 @@ pm_runtime_mark_last_busy(port->dev); pm_runtime_put_autosuspend(port->dev); -@@ -676,7 +676,7 @@ static irqreturn_t omap8250_irq(int irq, void *dev_id) +@@ -660,7 +660,7 @@ static irqreturn_t omap8250_irq(int irq, void *dev_id) unsigned long delay; /* Synchronize UART_IER access against the console. */ @@ -2028,7 +2027,7 @@ up->ier = port->serial_in(port, UART_IER); if (up->ier & (UART_IER_RLSI | UART_IER_RDI)) { port->ops->stop_rx(port); -@@ -686,7 +686,7 @@ static irqreturn_t omap8250_irq(int irq, void *dev_id) +@@ -670,7 +670,7 @@ static irqreturn_t omap8250_irq(int irq, void *dev_id) */ cancel_delayed_work(&up->overrun_backoff); } @@ -2037,7 +2036,7 @@ delay = msecs_to_jiffies(up->overrun_backoff_time_ms); schedule_delayed_work(&up->overrun_backoff, delay); -@@ -733,10 +733,10 @@ static int omap_8250_startup(struct uart_port *port) +@@ -717,10 +717,10 @@ static int omap_8250_startup(struct uart_port *port) } /* Synchronize UART_IER access against the console. */ @@ -2050,7 +2049,7 @@ #ifdef CONFIG_PM up->capabilities |= UART_CAP_RPM; -@@ -749,9 +749,9 @@ static int omap_8250_startup(struct uart_port *port) +@@ -733,9 +733,9 @@ static int omap_8250_startup(struct uart_port *port) serial_out(up, UART_OMAP_WER, priv->wer); if (up->dma && !(priv->habit & UART_HAS_EFR2)) { @@ -2062,7 +2061,7 @@ } enable_irq(up->port.irq); -@@ -777,10 +777,10 @@ static void omap_8250_shutdown(struct uart_port *port) +@@ -761,10 +761,10 @@ static void omap_8250_shutdown(struct uart_port *port) serial_out(up, UART_OMAP_EFR2, 0x0); /* Synchronize UART_IER access against the console. */ @@ -2075,7 +2074,7 @@ disable_irq_nosync(up->port.irq); dev_pm_clear_wake_irq(port->dev); -@@ -805,10 +805,10 @@ static void omap_8250_throttle(struct uart_port *port) +@@ -789,10 +789,10 @@ static void omap_8250_throttle(struct uart_port *port) pm_runtime_get_sync(port->dev); @@ -2088,7 +2087,7 @@ pm_runtime_mark_last_busy(port->dev); pm_runtime_put_autosuspend(port->dev); -@@ -823,14 +823,14 @@ static void omap_8250_unthrottle(struct uart_port *port) +@@ -807,14 +807,14 @@ static void omap_8250_unthrottle(struct uart_port *port) pm_runtime_get_sync(port->dev); /* Synchronize UART_IER access against the console. */ @@ -2105,7 +2104,7 @@ pm_runtime_mark_last_busy(port->dev); pm_runtime_put_autosuspend(port->dev); -@@ -974,7 +974,7 @@ static void __dma_rx_complete(void *param) +@@ -958,7 +958,7 @@ static void __dma_rx_complete(void *param) unsigned long flags; /* Synchronize UART_IER access against the console. */ @@ -2114,7 +2113,7 @@ /* * If the tx status is not DMA_COMPLETE, then this is a delayed -@@ -983,7 +983,7 @@ static void __dma_rx_complete(void *param) +@@ -967,7 +967,7 @@ static void __dma_rx_complete(void *param) */ if (dmaengine_tx_status(dma->rxchan, dma->rx_cookie, &state) != DMA_COMPLETE) { @@ -2123,7 +2122,7 @@ return; } __dma_rx_do_complete(p); -@@ -994,7 +994,7 @@ static void __dma_rx_complete(void *param) +@@ -978,7 +978,7 @@ static void __dma_rx_complete(void *param) omap_8250_rx_dma(p); } @@ -2132,7 +2131,7 @@ } static void omap_8250_rx_dma_flush(struct uart_8250_port *p) -@@ -1099,7 +1099,7 @@ static void omap_8250_dma_tx_complete(void *param) +@@ -1083,7 +1083,7 @@ static void omap_8250_dma_tx_complete(void *param) dma_sync_single_for_cpu(dma->txchan->device->dev, dma->tx_addr, UART_XMIT_SIZE, DMA_TO_DEVICE); @@ -2141,7 +2140,7 @@ dma->tx_running = 0; -@@ -1128,7 +1128,7 @@ static void omap_8250_dma_tx_complete(void *param) +@@ -1112,7 +1112,7 @@ static void omap_8250_dma_tx_complete(void *param) serial8250_set_THRI(p); } @@ -2150,7 +2149,7 @@ } static int omap_8250_tx_dma(struct uart_8250_port *p) -@@ -1294,7 +1294,7 @@ static int omap_8250_dma_handle_irq(struct uart_port *port) +@@ -1278,7 +1278,7 @@ static int omap_8250_dma_handle_irq(struct uart_port *port) return IRQ_HANDLED; } @@ -2159,7 +2158,7 @@ status = serial_port_in(port, UART_LSR); -@@ -1774,15 +1774,15 @@ static int omap8250_runtime_resume(struct device *dev) +@@ -1758,15 +1758,15 @@ static int omap8250_runtime_resume(struct device *dev) up = serial8250_get_port(priv->line); if (up && omap8250_lost_context(up)) { @@ -2210,7 +2209,7 @@ mutex_unlock(&tport->mutex); } diff --git a/drivers/tty/serial/8250/8250_port.c b/drivers/tty/serial/8250/8250_port.c -index a17803da8..2d4e775cd 100644 +index 8099e6a26..510bb858f 100644 --- a/drivers/tty/serial/8250/8250_port.c +++ b/drivers/tty/serial/8250/8250_port.c @@ -557,6 +557,11 @@ static int serial8250_em485_init(struct uart_8250_port *p) @@ -2387,7 +2386,7 @@ serial8250_rpm_put(p); return HRTIMER_NORESTART; -@@ -1624,12 +1641,12 @@ static enum hrtimer_restart serial8250_em485_handle_start_tx(struct hrtimer *t) +@@ -1627,12 +1644,12 @@ static enum hrtimer_restart serial8250_em485_handle_start_tx(struct hrtimer *t) struct uart_8250_port *p = em485->port; unsigned long flags; @@ -2402,7 +2401,7 @@ return HRTIMER_NORESTART; } -@@ -1912,7 +1929,7 @@ int serial8250_handle_irq(struct uart_port *port, unsigned int iir) +@@ -1921,7 +1938,7 @@ int serial8250_handle_irq(struct uart_port *port, unsigned int iir) if (iir & UART_IIR_NO_INT) return 0; @@ -2411,7 +2410,7 @@ status = serial_lsr_in(up); -@@ -1982,9 +1999,9 @@ static int serial8250_tx_threshold_handle_irq(struct uart_port *port) +@@ -1991,9 +2008,9 @@ static int serial8250_tx_threshold_handle_irq(struct uart_port *port) if ((iir & UART_IIR_ID) == UART_IIR_THRI) { struct uart_8250_port *up = up_to_u8250p(port); @@ -2423,7 +2422,7 @@ } iir = serial_port_in(port, UART_IIR); -@@ -1999,10 +2016,10 @@ static unsigned int serial8250_tx_empty(struct uart_port *port) +@@ -2008,10 +2025,10 @@ static unsigned int serial8250_tx_empty(struct uart_port *port) serial8250_rpm_get(up); @@ -2436,7 +2435,7 @@ serial8250_rpm_put(up); -@@ -2064,13 +2081,13 @@ static void serial8250_break_ctl(struct uart_port *port, int break_state) +@@ -2073,13 +2090,13 @@ static void serial8250_break_ctl(struct uart_port *port, int break_state) unsigned long flags; serial8250_rpm_get(up); @@ -2452,7 +2451,7 @@ serial8250_rpm_put(up); } -@@ -2205,7 +2222,7 @@ int serial8250_do_startup(struct uart_port *port) +@@ -2214,7 +2231,7 @@ int serial8250_do_startup(struct uart_port *port) * * Synchronize UART_IER access against the console. */ @@ -2461,7 +2460,7 @@ up->acr = 0; serial_port_out(port, UART_LCR, UART_LCR_CONF_MODE_B); serial_port_out(port, UART_EFR, UART_EFR_ECB); -@@ -2215,7 +2232,7 @@ int serial8250_do_startup(struct uart_port *port) +@@ -2224,7 +2241,7 @@ int serial8250_do_startup(struct uart_port *port) serial_port_out(port, UART_LCR, UART_LCR_CONF_MODE_B); serial_port_out(port, UART_EFR, UART_EFR_ECB); serial_port_out(port, UART_LCR, 0); @@ -2470,7 +2469,7 @@ } if (port->type == PORT_DA830) { -@@ -2224,10 +2241,10 @@ int serial8250_do_startup(struct uart_port *port) +@@ -2233,10 +2250,10 @@ int serial8250_do_startup(struct uart_port *port) * * Synchronize UART_IER access against the console. */ @@ -2483,7 +2482,7 @@ mdelay(10); /* Enable Tx, Rx and free run mode */ -@@ -2341,7 +2358,7 @@ int serial8250_do_startup(struct uart_port *port) +@@ -2350,7 +2367,7 @@ int serial8250_do_startup(struct uart_port *port) * * Synchronize UART_IER access against the console. */ @@ -2492,7 +2491,7 @@ wait_for_xmitr(up, UART_LSR_THRE); serial_port_out_sync(port, UART_IER, UART_IER_THRI); -@@ -2353,7 +2370,7 @@ int serial8250_do_startup(struct uart_port *port) +@@ -2362,7 +2379,7 @@ int serial8250_do_startup(struct uart_port *port) iir = serial_port_in(port, UART_IIR); serial_port_out(port, UART_IER, 0); @@ -2501,7 +2500,7 @@ if (port->irqflags & IRQF_SHARED) enable_irq(port->irq); -@@ -2376,7 +2393,7 @@ int serial8250_do_startup(struct uart_port *port) +@@ -2385,7 +2402,7 @@ int serial8250_do_startup(struct uart_port *port) */ serial_port_out(port, UART_LCR, UART_LCR_WLEN8); @@ -2510,7 +2509,7 @@ if (up->port.flags & UPF_FOURPORT) { if (!up->port.irq) up->port.mctrl |= TIOCM_OUT1; -@@ -2422,7 +2439,7 @@ int serial8250_do_startup(struct uart_port *port) +@@ -2431,7 +2448,7 @@ int serial8250_do_startup(struct uart_port *port) } dont_test_tx_en: @@ -2519,7 +2518,7 @@ /* * Clear the interrupt registers again for luck, and clear the -@@ -2493,17 +2510,17 @@ void serial8250_do_shutdown(struct uart_port *port) +@@ -2502,17 +2519,17 @@ void serial8250_do_shutdown(struct uart_port *port) * * Synchronize UART_IER access against the console. */ @@ -2540,7 +2539,7 @@ if (port->flags & UPF_FOURPORT) { /* reset interrupts on the AST Fourport board */ inb((port->iobase & 0xfe0) | 0x1f); -@@ -2512,7 +2529,7 @@ void serial8250_do_shutdown(struct uart_port *port) +@@ -2521,7 +2538,7 @@ void serial8250_do_shutdown(struct uart_port *port) port->mctrl &= ~TIOCM_OUT2; serial8250_set_mctrl(port, port->mctrl); @@ -2549,7 +2548,7 @@ /* * Disable break condition and FIFOs -@@ -2748,14 +2765,14 @@ void serial8250_update_uartclk(struct uart_port *port, unsigned int uartclk) +@@ -2757,14 +2774,14 @@ void serial8250_update_uartclk(struct uart_port *port, unsigned int uartclk) quot = serial8250_get_divisor(port, baud, &frac); serial8250_rpm_get(up); @@ -2566,7 +2565,7 @@ serial8250_rpm_put(up); out_unlock: -@@ -2792,7 +2809,7 @@ serial8250_do_set_termios(struct uart_port *port, struct ktermios *termios, +@@ -2801,7 +2818,7 @@ serial8250_do_set_termios(struct uart_port *port, struct ktermios *termios, * Synchronize UART_IER access against the console. */ serial8250_rpm_get(up); @@ -2575,7 +2574,7 @@ up->lcr = cval; /* Save computed LCR */ -@@ -2895,7 +2912,7 @@ serial8250_do_set_termios(struct uart_port *port, struct ktermios *termios, +@@ -2904,7 +2921,7 @@ serial8250_do_set_termios(struct uart_port *port, struct ktermios *termios, serial_port_out(port, UART_FCR, up->fcr); /* set fcr */ } serial8250_set_mctrl(port, port->mctrl); @@ -2584,7 +2583,7 @@ serial8250_rpm_put(up); /* Don't rewrite B0 */ -@@ -2918,15 +2935,15 @@ void serial8250_do_set_ldisc(struct uart_port *port, struct ktermios *termios) +@@ -2927,15 +2944,15 @@ void serial8250_do_set_ldisc(struct uart_port *port, struct ktermios *termios) { if (termios->c_line == N_PPS) { port->flags |= UPF_HARDPPS_CD; @@ -2604,7 +2603,7 @@ } } } -@@ -3322,6 +3339,11 @@ static void serial8250_console_putchar(struct uart_port *port, unsigned char ch) +@@ -3331,6 +3348,11 @@ static void serial8250_console_putchar(struct uart_port *port, unsigned char ch) wait_for_xmitr(up, UART_LSR_THRE); serial_port_out(port, UART_TX, ch); @@ -2616,7 +2615,7 @@ } /* -@@ -3350,6 +3372,7 @@ static void serial8250_console_restore(struct uart_8250_port *up) +@@ -3359,6 +3381,7 @@ static void serial8250_console_restore(struct uart_8250_port *up) serial8250_out_MCR(up, up->mcr | UART_MCR_DTR | UART_MCR_RTS); } @@ -2624,7 +2623,7 @@ /* * Print a string to the serial port using the device FIFO * -@@ -3400,15 +3423,15 @@ void serial8250_console_write(struct uart_8250_port *up, const char *s, +@@ -3409,15 +3432,15 @@ void serial8250_console_write(struct uart_8250_port *up, const char *s, touch_nmi_watchdog(); if (oops_in_progress) @@ -2643,7 +2642,7 @@ /* check scratch reg to see if port powered off during system sleep */ if (up->canary && (up->canary != serial_port_in(port, UART_SCR))) { -@@ -3472,8 +3495,137 @@ void serial8250_console_write(struct uart_8250_port *up, const char *s, +@@ -3481,8 +3504,137 @@ void serial8250_console_write(struct uart_8250_port *up, const char *s, serial8250_modem_status(up); if (locked) @@ -2782,7 +2781,7 @@ static unsigned int probe_baud(struct uart_port *port) { -@@ -3492,6 +3644,7 @@ static unsigned int probe_baud(struct uart_port *port) +@@ -3501,6 +3653,7 @@ static unsigned int probe_baud(struct uart_port *port) int serial8250_console_setup(struct uart_port *port, char *options, bool probe) { @@ -2790,7 +2789,7 @@ int baud = 9600; int bits = 8; int parity = 'n'; -@@ -3501,6 +3654,8 @@ int serial8250_console_setup(struct uart_port *port, char *options, bool probe) +@@ -3510,6 +3663,8 @@ int serial8250_console_setup(struct uart_port *port, char *options, bool probe) if (!port->iobase && !port->membase) return -ENODEV; @@ -3053,10 +3052,10 @@ } } diff --git a/drivers/tty/serial/amba-pl011.c b/drivers/tty/serial/amba-pl011.c -index 362bbcdec..9cd660edb 100644 +index a5717655b..901928dba 100644 --- a/drivers/tty/serial/amba-pl011.c +++ b/drivers/tty/serial/amba-pl011.c -@@ -347,9 +347,9 @@ static int pl011_fifo_to_tty(struct uart_amba_port *uap) +@@ -361,9 +361,9 @@ static int pl011_fifo_to_tty(struct uart_amba_port *uap) flag = TTY_FRAME; } @@ -3068,7 +3067,7 @@ if (!sysrq) uart_insert_char(&uap->port, ch, UART011_DR_OE, ch, flag); -@@ -544,7 +544,7 @@ static void pl011_dma_tx_callback(void *data) +@@ -558,7 +558,7 @@ static void pl011_dma_tx_callback(void *data) unsigned long flags; u16 dmacr; @@ -3077,7 +3076,7 @@ if (uap->dmatx.queued) dma_unmap_single(dmatx->chan->device->dev, dmatx->dma, dmatx->len, DMA_TO_DEVICE); -@@ -565,7 +565,7 @@ static void pl011_dma_tx_callback(void *data) +@@ -579,7 +579,7 @@ static void pl011_dma_tx_callback(void *data) if (!(dmacr & UART011_TXDMAE) || uart_tx_stopped(&uap->port) || uart_circ_empty(&uap->port.state->xmit)) { uap->dmatx.queued = false; @@ -3086,7 +3085,7 @@ return; } -@@ -576,7 +576,7 @@ static void pl011_dma_tx_callback(void *data) +@@ -590,7 +590,7 @@ static void pl011_dma_tx_callback(void *data) */ pl011_start_tx_pio(uap); @@ -3095,7 +3094,7 @@ } /* -@@ -1004,7 +1004,7 @@ static void pl011_dma_rx_callback(void *data) +@@ -1018,7 +1018,7 @@ static void pl011_dma_rx_callback(void *data) * routine to flush out the secondary DMA buffer while * we immediately trigger the next DMA job. */ @@ -3104,7 +3103,7 @@ /* * Rx data can be taken by the UART interrupts during * the DMA irq handler. So we check the residue here. -@@ -1020,7 +1020,7 @@ static void pl011_dma_rx_callback(void *data) +@@ -1034,7 +1034,7 @@ static void pl011_dma_rx_callback(void *data) ret = pl011_dma_rx_trigger_dma(uap); pl011_dma_rx_chars(uap, pending, lastbuf, false); @@ -3113,7 +3112,7 @@ /* * Do this check after we picked the DMA chars so we don't * get some IRQ immediately from RX. -@@ -1086,11 +1086,11 @@ static void pl011_dma_rx_poll(struct timer_list *t) +@@ -1100,11 +1100,11 @@ static void pl011_dma_rx_poll(struct timer_list *t) if (jiffies_to_msecs(jiffies - dmarx->last_jiffies) > uap->dmarx.poll_timeout) { @@ -3127,7 +3126,7 @@ uap->dmarx.running = false; dmaengine_terminate_all(rxchan); -@@ -1186,10 +1186,10 @@ static void pl011_dma_shutdown(struct uart_amba_port *uap) +@@ -1200,10 +1200,10 @@ static void pl011_dma_shutdown(struct uart_amba_port *uap) while (pl011_read(uap, REG_FR) & uap->vendor->fr_busy) cpu_relax(); @@ -3140,7 +3139,7 @@ if (uap->using_tx_dma) { /* In theory, this should already be done by pl011_dma_flush_buffer */ -@@ -1400,9 +1400,9 @@ static void pl011_throttle_rx(struct uart_port *port) +@@ -1414,9 +1414,9 @@ static void pl011_throttle_rx(struct uart_port *port) { unsigned long flags; @@ -3152,7 +3151,7 @@ } static void pl011_enable_ms(struct uart_port *port) -@@ -1420,7 +1420,7 @@ __acquires(&uap->port.lock) +@@ -1434,7 +1434,7 @@ __acquires(&uap->port.lock) { pl011_fifo_to_tty(uap); @@ -3161,7 +3160,7 @@ tty_flip_buffer_push(&uap->port.state->port); /* * If we were temporarily out of DMA mode for a while, -@@ -1445,7 +1445,7 @@ __acquires(&uap->port.lock) +@@ -1459,7 +1459,7 @@ __acquires(&uap->port.lock) #endif } } @@ -3170,7 +3169,7 @@ } static bool pl011_tx_char(struct uart_amba_port *uap, unsigned char c, -@@ -1551,7 +1551,7 @@ static irqreturn_t pl011_int(int irq, void *dev_id) +@@ -1570,7 +1570,7 @@ static irqreturn_t pl011_int(int irq, void *dev_id) unsigned int status, pass_counter = AMBA_ISR_PASS_LIMIT; int handled = 0; @@ -3179,7 +3178,7 @@ status = pl011_read(uap, REG_RIS) & uap->im; if (status) { do { -@@ -1581,7 +1581,7 @@ static irqreturn_t pl011_int(int irq, void *dev_id) +@@ -1600,7 +1600,7 @@ static irqreturn_t pl011_int(int irq, void *dev_id) handled = 1; } @@ -3188,7 +3187,7 @@ return IRQ_RETVAL(handled); } -@@ -1653,14 +1653,14 @@ static void pl011_break_ctl(struct uart_port *port, int break_state) +@@ -1672,14 +1672,14 @@ static void pl011_break_ctl(struct uart_port *port, int break_state) unsigned long flags; unsigned int lcr_h; @@ -3205,7 +3204,7 @@ } #ifdef CONFIG_CONSOLE_POLL -@@ -1799,7 +1799,7 @@ static void pl011_enable_interrupts(struct uart_amba_port *uap) +@@ -1818,7 +1818,7 @@ static void pl011_enable_interrupts(struct uart_amba_port *uap) unsigned long flags; unsigned int i; @@ -3214,7 +3213,7 @@ /* Clear out any spuriously appearing RX interrupts */ pl011_write(UART011_RTIS | UART011_RXIS, uap, REG_ICR); -@@ -1821,7 +1821,7 @@ static void pl011_enable_interrupts(struct uart_amba_port *uap) +@@ -1840,7 +1840,7 @@ static void pl011_enable_interrupts(struct uart_amba_port *uap) if (!pl011_dma_rx_running(uap)) uap->im |= UART011_RXIM; pl011_write(uap->im, uap, REG_IMSC); @@ -3223,7 +3222,7 @@ } static void pl011_unthrottle_rx(struct uart_port *port) -@@ -1829,7 +1829,7 @@ static void pl011_unthrottle_rx(struct uart_port *port) +@@ -1848,7 +1848,7 @@ static void pl011_unthrottle_rx(struct uart_port *port) struct uart_amba_port *uap = container_of(port, struct uart_amba_port, port); unsigned long flags; @@ -3232,7 +3231,7 @@ uap->im = UART011_RTIM; if (!pl011_dma_rx_running(uap)) -@@ -1837,7 +1837,7 @@ static void pl011_unthrottle_rx(struct uart_port *port) +@@ -1856,7 +1856,7 @@ static void pl011_unthrottle_rx(struct uart_port *port) pl011_write(uap->im, uap, REG_IMSC); @@ -3241,7 +3240,7 @@ } static int pl011_startup(struct uart_port *port) -@@ -1857,7 +1857,7 @@ static int pl011_startup(struct uart_port *port) +@@ -1876,7 +1876,7 @@ static int pl011_startup(struct uart_port *port) pl011_write(uap->vendor->ifls, uap, REG_IFLS); @@ -3250,7 +3249,7 @@ cr = pl011_read(uap, REG_CR); cr &= UART011_CR_RTS | UART011_CR_DTR; -@@ -1868,7 +1868,7 @@ static int pl011_startup(struct uart_port *port) +@@ -1887,7 +1887,7 @@ static int pl011_startup(struct uart_port *port) pl011_write(cr, uap, REG_CR); @@ -3259,7 +3258,7 @@ /* * initialise the old status of the modem signals -@@ -1929,12 +1929,12 @@ static void pl011_disable_uart(struct uart_amba_port *uap) +@@ -1948,12 +1948,12 @@ static void pl011_disable_uart(struct uart_amba_port *uap) unsigned int cr; uap->port.status &= ~(UPSTAT_AUTOCTS | UPSTAT_AUTORTS); @@ -3274,7 +3273,7 @@ /* * disable break condition and fifos -@@ -1946,14 +1946,14 @@ static void pl011_disable_uart(struct uart_amba_port *uap) +@@ -1965,14 +1965,14 @@ static void pl011_disable_uart(struct uart_amba_port *uap) static void pl011_disable_interrupts(struct uart_amba_port *uap) { @@ -3291,7 +3290,7 @@ } static void pl011_shutdown(struct uart_port *port) -@@ -2098,7 +2098,7 @@ pl011_set_termios(struct uart_port *port, struct ktermios *termios, +@@ -2117,7 +2117,7 @@ pl011_set_termios(struct uart_port *port, struct ktermios *termios, bits = tty_get_frame_size(termios->c_cflag); @@ -3300,7 +3299,7 @@ /* * Update the per-port timeout. -@@ -2172,7 +2172,7 @@ pl011_set_termios(struct uart_port *port, struct ktermios *termios, +@@ -2191,7 +2191,7 @@ pl011_set_termios(struct uart_port *port, struct ktermios *termios, old_cr |= UART011_CR_RXE; pl011_write(old_cr, uap, REG_CR); @@ -3309,7 +3308,7 @@ } static void -@@ -2190,10 +2190,10 @@ sbsa_uart_set_termios(struct uart_port *port, struct ktermios *termios, +@@ -2209,10 +2209,10 @@ sbsa_uart_set_termios(struct uart_port *port, struct ktermios *termios, termios->c_cflag &= ~(CMSPAR | CRTSCTS); termios->c_cflag |= CS8 | CLOCAL; @@ -3322,7 +3321,7 @@ } static const char *pl011_type(struct uart_port *port) -@@ -2328,13 +2328,10 @@ pl011_console_write(struct console *co, const char *s, unsigned int count) +@@ -2347,13 +2347,10 @@ pl011_console_write(struct console *co, const char *s, unsigned int count) clk_enable(uap->clk); @@ -3339,7 +3338,7 @@ /* * First save the CR then disable the interrupts -@@ -2360,8 +2357,7 @@ pl011_console_write(struct console *co, const char *s, unsigned int count) +@@ -2379,8 +2376,7 @@ pl011_console_write(struct console *co, const char *s, unsigned int count) pl011_write(old_cr, uap, REG_CR); if (locked) @@ -3613,7 +3612,7 @@ port->read_status_mask = ATMEL_US_OVRE; if (termios->c_iflag & INPCK) -@@ -2377,22 +2377,22 @@ gclk_fail: +@@ -2377,22 +2377,22 @@ static void atmel_set_termios(struct uart_port *port, else atmel_disable_ms(port); @@ -3642,7 +3641,7 @@ } } diff --git a/drivers/tty/serial/bcm63xx_uart.c b/drivers/tty/serial/bcm63xx_uart.c -index 44c27e5ce..b104c36ce 100644 +index 0dd8cceb8..4a08fd5ee 100644 --- a/drivers/tty/serial/bcm63xx_uart.c +++ b/drivers/tty/serial/bcm63xx_uart.c @@ -201,7 +201,7 @@ static void bcm_uart_break_ctl(struct uart_port *port, int ctl) @@ -3663,7 +3662,7 @@ } /* -@@ -335,7 +335,7 @@ static irqreturn_t bcm_uart_interrupt(int irq, void *dev_id) +@@ -332,7 +332,7 @@ static irqreturn_t bcm_uart_interrupt(int irq, void *dev_id) unsigned int irqstat; port = dev_id; @@ -3672,7 +3671,7 @@ irqstat = bcm_uart_readl(port, UART_IR_REG); if (irqstat & UART_RX_INT_STAT) -@@ -356,7 +356,7 @@ static irqreturn_t bcm_uart_interrupt(int irq, void *dev_id) +@@ -353,7 +353,7 @@ static irqreturn_t bcm_uart_interrupt(int irq, void *dev_id) estat & UART_EXTINP_DCD_MASK); } @@ -3681,7 +3680,7 @@ return IRQ_HANDLED; } -@@ -454,9 +454,9 @@ static void bcm_uart_shutdown(struct uart_port *port) +@@ -451,9 +451,9 @@ static void bcm_uart_shutdown(struct uart_port *port) { unsigned long flags; @@ -3693,7 +3692,7 @@ bcm_uart_disable(port); bcm_uart_flush(port); -@@ -473,7 +473,7 @@ static void bcm_uart_set_termios(struct uart_port *port, struct ktermios *new, +@@ -470,7 +470,7 @@ static void bcm_uart_set_termios(struct uart_port *port, struct ktermios *new, unsigned long flags; int tries; @@ -3702,7 +3701,7 @@ /* Drain the hot tub fully before we power it off for the winter. */ for (tries = 3; !bcm_uart_tx_empty(port) && tries; tries--) -@@ -549,7 +549,7 @@ static void bcm_uart_set_termios(struct uart_port *port, struct ktermios *new, +@@ -546,7 +546,7 @@ static void bcm_uart_set_termios(struct uart_port *port, struct ktermios *new, uart_update_timeout(port, new->c_cflag, baud); bcm_uart_enable(port); @@ -3711,7 +3710,7 @@ } /* -@@ -715,9 +715,9 @@ static void bcm_console_write(struct console *co, const char *s, +@@ -712,9 +712,9 @@ static void bcm_console_write(struct console *co, const char *s, /* bcm_uart_interrupt() already took the lock */ locked = 0; } else if (oops_in_progress) { @@ -3723,7 +3722,7 @@ locked = 1; } -@@ -728,7 +728,7 @@ static void bcm_console_write(struct console *co, const char *s, +@@ -725,7 +725,7 @@ static void bcm_console_write(struct console *co, const char *s, wait_for_xmitr(port); if (locked) @@ -4171,7 +4170,7 @@ while (!(readb(sport->port.membase + UARTSFIFO) & UARTSFIFO_RXEMPT)) { flg = TTY_NORMAL; -@@ -956,9 +956,9 @@ out: +@@ -956,9 +956,9 @@ static void lpuart_rxint(struct lpuart_port *sport) static void lpuart32_txint(struct lpuart_port *sport) { @@ -4207,7 +4206,7 @@ return; } -@@ -1244,7 +1244,7 @@ exit: +@@ -1244,7 +1244,7 @@ static void lpuart_copy_rx_to_tty(struct lpuart_port *sport) dma_sync_sg_for_device(chan->device->dev, &sport->rx_sgl, 1, DMA_FROM_DEVICE); @@ -4543,10 +4542,10 @@ static const char *icom_type(struct uart_port *port) diff --git a/drivers/tty/serial/imx.c b/drivers/tty/serial/imx.c -index a5d0df2ba..267c9af4b 100644 +index c77831e91..66420a992 100644 --- a/drivers/tty/serial/imx.c +++ b/drivers/tty/serial/imx.c -@@ -586,7 +586,7 @@ static void imx_uart_dma_tx_callback(void *data) +@@ -584,7 +584,7 @@ static void imx_uart_dma_tx_callback(void *data) unsigned long flags; u32 ucr1; @@ -4555,7 +4554,7 @@ dma_unmap_sg(sport->port.dev, sgl, sport->dma_tx_nents, DMA_TO_DEVICE); -@@ -611,7 +611,7 @@ static void imx_uart_dma_tx_callback(void *data) +@@ -609,7 +609,7 @@ static void imx_uart_dma_tx_callback(void *data) imx_uart_writel(sport, ucr4, UCR4); } @@ -4564,7 +4563,7 @@ } /* called with port.lock taken and irqs off */ -@@ -782,11 +782,11 @@ static irqreturn_t imx_uart_rtsint(int irq, void *dev_id) +@@ -780,11 +780,11 @@ static irqreturn_t imx_uart_rtsint(int irq, void *dev_id) struct imx_port *sport = dev_id; irqreturn_t ret; @@ -4578,7 +4577,7 @@ return ret; } -@@ -795,9 +795,9 @@ static irqreturn_t imx_uart_txint(int irq, void *dev_id) +@@ -793,9 +793,9 @@ static irqreturn_t imx_uart_txint(int irq, void *dev_id) { struct imx_port *sport = dev_id; @@ -4590,7 +4589,7 @@ return IRQ_HANDLED; } -@@ -911,11 +911,11 @@ static irqreturn_t imx_uart_rxint(int irq, void *dev_id) +@@ -909,11 +909,11 @@ static irqreturn_t imx_uart_rxint(int irq, void *dev_id) struct imx_port *sport = dev_id; irqreturn_t ret; @@ -4604,7 +4603,7 @@ return ret; } -@@ -978,7 +978,7 @@ static irqreturn_t imx_uart_int(int irq, void *dev_id) +@@ -976,7 +976,7 @@ static irqreturn_t imx_uart_int(int irq, void *dev_id) unsigned int usr1, usr2, ucr1, ucr2, ucr3, ucr4; irqreturn_t ret = IRQ_NONE; @@ -4613,7 +4612,7 @@ usr1 = imx_uart_readl(sport, USR1); usr2 = imx_uart_readl(sport, USR2); -@@ -1048,7 +1048,7 @@ static irqreturn_t imx_uart_int(int irq, void *dev_id) +@@ -1046,7 +1046,7 @@ static irqreturn_t imx_uart_int(int irq, void *dev_id) ret = IRQ_HANDLED; } @@ -4622,7 +4621,7 @@ return ret; } -@@ -1131,7 +1131,7 @@ static void imx_uart_break_ctl(struct uart_port *port, int break_state) +@@ -1129,7 +1129,7 @@ static void imx_uart_break_ctl(struct uart_port *port, int break_state) unsigned long flags; u32 ucr1; @@ -4631,7 +4630,7 @@ ucr1 = imx_uart_readl(sport, UCR1) & ~UCR1_SNDBRK; -@@ -1140,7 +1140,7 @@ static void imx_uart_break_ctl(struct uart_port *port, int break_state) +@@ -1138,7 +1138,7 @@ static void imx_uart_break_ctl(struct uart_port *port, int break_state) imx_uart_writel(sport, ucr1, UCR1); @@ -4640,7 +4639,7 @@ } /* -@@ -1153,9 +1153,9 @@ static void imx_uart_timeout(struct timer_list *t) +@@ -1151,9 +1151,9 @@ static void imx_uart_timeout(struct timer_list *t) unsigned long flags; if (sport->port.state) { @@ -4652,7 +4651,7 @@ mod_timer(&sport->timer, jiffies + MCTRL_TIMEOUT); } -@@ -1185,9 +1185,9 @@ static void imx_uart_dma_rx_callback(void *data) +@@ -1183,9 +1183,9 @@ static void imx_uart_dma_rx_callback(void *data) status = dmaengine_tx_status(chan, sport->rx_cookie, &state); if (status == DMA_ERROR) { @@ -4664,7 +4663,7 @@ return; } -@@ -1216,9 +1216,9 @@ static void imx_uart_dma_rx_callback(void *data) +@@ -1214,9 +1214,9 @@ static void imx_uart_dma_rx_callback(void *data) r_bytes = rx_ring->head - rx_ring->tail; /* If we received something, check for 0xff flood */ @@ -4676,7 +4675,7 @@ if (!(sport->port.ignore_status_mask & URXD_DUMMY_READ)) { -@@ -1476,7 +1476,7 @@ static int imx_uart_startup(struct uart_port *port) +@@ -1474,7 +1474,7 @@ static int imx_uart_startup(struct uart_port *port) if (!uart_console(port) && imx_uart_dma_init(sport) == 0) dma_is_inited = 1; @@ -4685,7 +4684,7 @@ /* Reset fifo's and state machines */ imx_uart_soft_reset(sport); -@@ -1549,7 +1549,7 @@ static int imx_uart_startup(struct uart_port *port) +@@ -1547,7 +1547,7 @@ static int imx_uart_startup(struct uart_port *port) imx_uart_disable_loopback_rs485(sport); @@ -4694,7 +4693,7 @@ return 0; } -@@ -1574,21 +1574,21 @@ static void imx_uart_shutdown(struct uart_port *port) +@@ -1572,21 +1572,21 @@ static void imx_uart_shutdown(struct uart_port *port) sport->dma_is_rxing = 0; } @@ -4720,7 +4719,7 @@ /* * Stop our timer. -@@ -1599,7 +1599,7 @@ static void imx_uart_shutdown(struct uart_port *port) +@@ -1597,7 +1597,7 @@ static void imx_uart_shutdown(struct uart_port *port) * Disable all interrupts, port and break condition. */ @@ -4729,7 +4728,7 @@ ucr1 = imx_uart_readl(sport, UCR1); ucr1 &= ~(UCR1_TRDYEN | UCR1_RRDYEN | UCR1_RTSDEN | UCR1_RXDMAEN | -@@ -1621,7 +1621,7 @@ static void imx_uart_shutdown(struct uart_port *port) +@@ -1619,7 +1619,7 @@ static void imx_uart_shutdown(struct uart_port *port) ucr4 &= ~UCR4_TCEN; imx_uart_writel(sport, ucr4, UCR4); @@ -4738,7 +4737,7 @@ clk_disable_unprepare(sport->clk_per); clk_disable_unprepare(sport->clk_ipg); -@@ -1684,7 +1684,7 @@ imx_uart_set_termios(struct uart_port *port, struct ktermios *termios, +@@ -1682,7 +1682,7 @@ imx_uart_set_termios(struct uart_port *port, struct ktermios *termios, baud = uart_get_baud_rate(port, termios, old, 50, port->uartclk / 16); quot = uart_get_divisor(port, baud); @@ -4747,7 +4746,7 @@ /* * Read current UCR2 and save it for future use, then clear all the bits -@@ -1812,7 +1812,7 @@ imx_uart_set_termios(struct uart_port *port, struct ktermios *termios, +@@ -1810,7 +1810,7 @@ imx_uart_set_termios(struct uart_port *port, struct ktermios *termios, if (UART_ENABLE_MS(&sport->port, termios->c_cflag)) imx_uart_enable_ms(&sport->port); @@ -4756,7 +4755,7 @@ } static const char *imx_uart_type(struct uart_port *port) -@@ -1874,7 +1874,7 @@ static int imx_uart_poll_init(struct uart_port *port) +@@ -1872,7 +1872,7 @@ static int imx_uart_poll_init(struct uart_port *port) imx_uart_setup_ufcr(sport, TXTL_DEFAULT, RXTL_DEFAULT); @@ -4765,7 +4764,7 @@ /* * Be careful about the order of enabling bits here. First enable the -@@ -1902,7 +1902,7 @@ static int imx_uart_poll_init(struct uart_port *port) +@@ -1900,7 +1900,7 @@ static int imx_uart_poll_init(struct uart_port *port) imx_uart_writel(sport, ucr1 | UCR1_RRDYEN, UCR1); imx_uart_writel(sport, ucr2 | UCR2_ATEN, UCR2); @@ -4774,7 +4773,7 @@ return 0; } -@@ -2022,9 +2022,9 @@ imx_uart_console_write(struct console *co, const char *s, unsigned int count) +@@ -2015,9 +2015,9 @@ imx_uart_console_write(struct console *co, const char *s, unsigned int count) if (sport->port.sysrq) locked = 0; else if (oops_in_progress) @@ -4786,7 +4785,7 @@ /* * First, save UCR1/2/3 and then disable interrupts -@@ -2052,7 +2052,7 @@ imx_uart_console_write(struct console *co, const char *s, unsigned int count) +@@ -2045,7 +2045,7 @@ imx_uart_console_write(struct console *co, const char *s, unsigned int count) imx_uart_ucrs_restore(sport, &old_ucr); if (locked) @@ -4795,7 +4794,7 @@ } /* -@@ -2210,10 +2210,10 @@ static enum hrtimer_restart imx_trigger_start_tx(struct hrtimer *t) +@@ -2203,10 +2203,10 @@ static enum hrtimer_restart imx_trigger_start_tx(struct hrtimer *t) struct imx_port *sport = container_of(t, struct imx_port, trigger_start_tx); unsigned long flags; @@ -4808,7 +4807,7 @@ return HRTIMER_NORESTART; } -@@ -2223,10 +2223,10 @@ static enum hrtimer_restart imx_trigger_stop_tx(struct hrtimer *t) +@@ -2216,10 +2216,10 @@ static enum hrtimer_restart imx_trigger_stop_tx(struct hrtimer *t) struct imx_port *sport = container_of(t, struct imx_port, trigger_stop_tx); unsigned long flags; @@ -4821,7 +4820,7 @@ return HRTIMER_NORESTART; } -@@ -2493,9 +2493,9 @@ static void imx_uart_restore_context(struct imx_port *sport) +@@ -2486,9 +2486,9 @@ static void imx_uart_restore_context(struct imx_port *sport) { unsigned long flags; @@ -4833,7 +4832,7 @@ return; } -@@ -2510,7 +2510,7 @@ static void imx_uart_restore_context(struct imx_port *sport) +@@ -2503,7 +2503,7 @@ static void imx_uart_restore_context(struct imx_port *sport) imx_uart_writel(sport, sport->saved_reg2, UCR3); imx_uart_writel(sport, sport->saved_reg3, UCR4); sport->context_saved = false; @@ -4842,7 +4841,7 @@ } static void imx_uart_save_context(struct imx_port *sport) -@@ -2518,7 +2518,7 @@ static void imx_uart_save_context(struct imx_port *sport) +@@ -2511,7 +2511,7 @@ static void imx_uart_save_context(struct imx_port *sport) unsigned long flags; /* Save necessary regs */ @@ -4851,7 +4850,7 @@ sport->saved_reg0 = imx_uart_readl(sport, UCR1); sport->saved_reg1 = imx_uart_readl(sport, UCR2); sport->saved_reg2 = imx_uart_readl(sport, UCR3); -@@ -2530,7 +2530,7 @@ static void imx_uart_save_context(struct imx_port *sport) +@@ -2523,7 +2523,7 @@ static void imx_uart_save_context(struct imx_port *sport) sport->saved_reg8 = imx_uart_readl(sport, UBMR); sport->saved_reg9 = imx_uart_readl(sport, IMX21_UTS); sport->context_saved = true; @@ -5284,7 +5283,7 @@ /* Don't rewrite B0 */ if (tty_termios_baud_rate(termios)) diff --git a/drivers/tty/serial/ma35d1_serial.c b/drivers/tty/serial/ma35d1_serial.c -index 99225f1e0..faccd772c 100644 +index 69da24565..73910c54d 100644 --- a/drivers/tty/serial/ma35d1_serial.c +++ b/drivers/tty/serial/ma35d1_serial.c @@ -269,16 +269,16 @@ static void receive_chars(struct uart_ma35d1_port *up) @@ -5365,7 +5364,7 @@ static int __init ma35d1serial_console_setup(struct console *co, char *options) diff --git a/drivers/tty/serial/mcf.c b/drivers/tty/serial/mcf.c -index aea29b4e6..ee40af20a 100644 +index 1666ce012..91b15243f 100644 --- a/drivers/tty/serial/mcf.c +++ b/drivers/tty/serial/mcf.c @@ -135,12 +135,12 @@ static void mcf_break_ctl(struct uart_port *port, int break_state) @@ -7321,10 +7320,10 @@ static int __init sbd_console_setup(struct console *co, char *options) diff --git a/drivers/tty/serial/sc16is7xx.c b/drivers/tty/serial/sc16is7xx.c -index 7a9924d9b..be9ae5cdd 100644 +index eea662212..2aa0b7e5e 100644 --- a/drivers/tty/serial/sc16is7xx.c +++ b/drivers/tty/serial/sc16is7xx.c -@@ -817,6 +817,7 @@ static void sc16is7xx_tx_proc(struct kthread_work *ws) +@@ -806,6 +806,7 @@ static void sc16is7xx_tx_proc(struct kthread_work *ws) { struct uart_port *port = &(to_sc16is7xx_one(ws, tx_work)->port); struct sc16is7xx_one *one = to_sc16is7xx_one(port, port); @@ -7332,7 +7331,7 @@ if ((port->rs485.flags & SER_RS485_ENABLED) && (port->rs485.delay_rts_before_send > 0)) -@@ -825,6 +826,10 @@ static void sc16is7xx_tx_proc(struct kthread_work *ws) +@@ -814,6 +815,10 @@ static void sc16is7xx_tx_proc(struct kthread_work *ws) mutex_lock(&one->efr_lock); sc16is7xx_handle_tx(port); mutex_unlock(&one->efr_lock); @@ -7820,7 +7819,7 @@ return IRQ_HANDLED; } diff --git a/drivers/tty/serial/serial_port.c b/drivers/tty/serial/serial_port.c -index ed3953bd0..92a57b243 100644 +index d622a9297..7d51e66ec 100644 --- a/drivers/tty/serial/serial_port.c +++ b/drivers/tty/serial/serial_port.c @@ -35,14 +35,14 @@ static int serial_port_runtime_resume(struct device *dev) @@ -7939,7 +7938,7 @@ static void diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh-sci.c -index f793624fd..2559c9781 100644 +index a560b729f..84ab434c9 100644 --- a/drivers/tty/serial/sh-sci.c +++ b/drivers/tty/serial/sh-sci.c @@ -1205,7 +1205,7 @@ static void sci_dma_tx_complete(void *arg) @@ -7960,7 +7959,7 @@ } /* Locking: called with port lock held */ -@@ -1325,7 +1325,7 @@ static void sci_dma_rx_complete(void *arg) +@@ -1320,7 +1320,7 @@ static void sci_dma_rx_complete(void *arg) dev_dbg(port->dev, "%s(%d) active cookie %d\n", __func__, port->line, s->active_rx); @@ -7969,7 +7968,7 @@ active = sci_dma_rx_find_active(s); if (active >= 0) -@@ -1352,20 +1352,20 @@ static void sci_dma_rx_complete(void *arg) +@@ -1347,20 +1347,20 @@ static void sci_dma_rx_complete(void *arg) dma_async_issue_pending(chan); @@ -7994,7 +7993,7 @@ } static void sci_dma_tx_release(struct sci_port *s) -@@ -1414,13 +1414,13 @@ static int sci_dma_rx_submit(struct sci_port *s, bool port_lock_held) +@@ -1409,13 +1409,13 @@ static int sci_dma_rx_submit(struct sci_port *s, bool port_lock_held) fail: /* Switch to PIO */ if (!port_lock_held) @@ -8010,7 +8009,7 @@ return -EAGAIN; } -@@ -1442,14 +1442,14 @@ static void sci_dma_tx_work_fn(struct work_struct *work) +@@ -1437,14 +1437,14 @@ static void sci_dma_tx_work_fn(struct work_struct *work) * transmit till the end, and then the rest. Take the port lock to get a * consistent xmit buffer state. */ @@ -8027,7 +8026,7 @@ return; } -@@ -1457,7 +1457,7 @@ static void sci_dma_tx_work_fn(struct work_struct *work) +@@ -1452,7 +1452,7 @@ static void sci_dma_tx_work_fn(struct work_struct *work) DMA_MEM_TO_DEV, DMA_PREP_INTERRUPT | DMA_CTRL_ACK); if (!desc) { @@ -8036,7 +8035,7 @@ dev_warn(port->dev, "Failed preparing Tx DMA descriptor\n"); goto switch_to_pio; } -@@ -1469,12 +1469,12 @@ static void sci_dma_tx_work_fn(struct work_struct *work) +@@ -1464,12 +1464,12 @@ static void sci_dma_tx_work_fn(struct work_struct *work) desc->callback_param = s; s->cookie_tx = dmaengine_submit(desc); if (dma_submit_error(s->cookie_tx)) { @@ -8051,7 +8050,7 @@ dev_dbg(port->dev, "%s: %p: %d...%d, cookie %d\n", __func__, xmit->buf, tail, head, s->cookie_tx); -@@ -1482,10 +1482,10 @@ static void sci_dma_tx_work_fn(struct work_struct *work) +@@ -1477,10 +1477,10 @@ static void sci_dma_tx_work_fn(struct work_struct *work) return; switch_to_pio: @@ -8064,7 +8063,7 @@ return; } -@@ -1502,17 +1502,17 @@ static enum hrtimer_restart sci_dma_rx_timer_fn(struct hrtimer *t) +@@ -1497,17 +1497,17 @@ static enum hrtimer_restart sci_dma_rx_timer_fn(struct hrtimer *t) dev_dbg(port->dev, "DMA Rx timed out\n"); @@ -8085,7 +8084,7 @@ dev_dbg(port->dev, "Cookie %d #%d has already completed\n", s->active_rx, active); -@@ -1530,7 +1530,7 @@ static enum hrtimer_restart sci_dma_rx_timer_fn(struct hrtimer *t) +@@ -1525,7 +1525,7 @@ static enum hrtimer_restart sci_dma_rx_timer_fn(struct hrtimer *t) */ status = dmaengine_tx_status(s->chan_rx, s->active_rx, &state); if (status == DMA_COMPLETE) { @@ -8094,7 +8093,7 @@ dev_dbg(port->dev, "Transaction complete after DMA engine was stopped"); return HRTIMER_NORESTART; } -@@ -1551,7 +1551,7 @@ static enum hrtimer_restart sci_dma_rx_timer_fn(struct hrtimer *t) +@@ -1546,7 +1546,7 @@ static enum hrtimer_restart sci_dma_rx_timer_fn(struct hrtimer *t) sci_dma_rx_reenable_irq(s); @@ -8103,7 +8102,7 @@ return HRTIMER_NORESTART; } -@@ -1775,9 +1775,9 @@ static irqreturn_t sci_tx_interrupt(int irq, void *ptr) +@@ -1770,9 +1770,9 @@ static irqreturn_t sci_tx_interrupt(int irq, void *ptr) struct uart_port *port = ptr; unsigned long flags; @@ -8115,7 +8114,7 @@ return IRQ_HANDLED; } -@@ -1791,11 +1791,11 @@ static irqreturn_t sci_tx_end_interrupt(int irq, void *ptr) +@@ -1786,11 +1786,11 @@ static irqreturn_t sci_tx_end_interrupt(int irq, void *ptr) if (port->type != PORT_SCI) return sci_tx_interrupt(irq, ptr); @@ -8129,7 +8128,7 @@ return IRQ_HANDLED; } -@@ -2192,7 +2192,7 @@ static void sci_break_ctl(struct uart_port *port, int break_state) +@@ -2187,7 +2187,7 @@ static void sci_break_ctl(struct uart_port *port, int break_state) return; } @@ -8138,7 +8137,7 @@ scsptr = serial_port_in(port, SCSPTR); scscr = serial_port_in(port, SCSCR); -@@ -2206,7 +2206,7 @@ static void sci_break_ctl(struct uart_port *port, int break_state) +@@ -2201,7 +2201,7 @@ static void sci_break_ctl(struct uart_port *port, int break_state) serial_port_out(port, SCSPTR, scsptr); serial_port_out(port, SCSCR, scscr); @@ -8147,7 +8146,7 @@ } static int sci_startup(struct uart_port *port) -@@ -2238,7 +2238,7 @@ static void sci_shutdown(struct uart_port *port) +@@ -2233,7 +2233,7 @@ static void sci_shutdown(struct uart_port *port) s->autorts = false; mctrl_gpio_disable_ms(to_sci_port(port)->gpios); @@ -8156,7 +8155,7 @@ sci_stop_rx(port); sci_stop_tx(port); /* -@@ -2248,7 +2248,7 @@ static void sci_shutdown(struct uart_port *port) +@@ -2243,7 +2243,7 @@ static void sci_shutdown(struct uart_port *port) scr = serial_port_in(port, SCSCR); serial_port_out(port, SCSCR, scr & (SCSCR_CKE1 | SCSCR_CKE0 | s->hscif_tot)); @@ -8165,7 +8164,7 @@ #ifdef CONFIG_SERIAL_SH_SCI_DMA if (s->chan_rx_saved) { -@@ -2550,7 +2550,7 @@ done: +@@ -2545,7 +2545,7 @@ static void sci_set_termios(struct uart_port *port, struct ktermios *termios, serial_port_out(port, SCCKS, sccks); } @@ -8174,7 +8173,7 @@ sci_reset(port); -@@ -2672,7 +2672,7 @@ done: +@@ -2667,7 +2667,7 @@ static void sci_set_termios(struct uart_port *port, struct ktermios *termios, if ((termios->c_cflag & CREAD) != 0) sci_start_rx(port); @@ -8183,7 +8182,7 @@ sci_port_disable(s); -@@ -3057,9 +3057,9 @@ static void serial_console_write(struct console *co, const char *s, +@@ -3052,9 +3052,9 @@ static void serial_console_write(struct console *co, const char *s, if (port->sysrq) locked = 0; else if (oops_in_progress) @@ -8195,7 +8194,7 @@ /* first save SCSCR then disable interrupts, keep clock source */ ctrl = serial_port_in(port, SCSCR); -@@ -3079,7 +3079,7 @@ static void serial_console_write(struct console *co, const char *s, +@@ -3074,7 +3074,7 @@ static void serial_console_write(struct console *co, const char *s, serial_port_out(port, SCSCR, ctrl); if (locked) @@ -10101,7 +10100,7 @@ static inline void input_queue_head_incr(struct softnet_data *sd) diff --git a/include/linux/printk.h b/include/linux/printk.h -index e4878bb58..ebebc32e7 100644 +index 8ef499ab3..7a942e987 100644 --- a/include/linux/printk.h +++ b/include/linux/printk.h @@ -9,6 +9,8 @@ @@ -10168,7 +10167,7 @@ #ifdef CONFIG_SMP diff --git a/include/linux/sched.h b/include/linux/sched.h -index f40411aa7..d5b27c710 100644 +index b65d74c5e..d5fba1473 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -944,6 +944,9 @@ struct task_struct { @@ -10181,7 +10180,7 @@ /* Bit to tell LSMs we're in execve(): */ unsigned in_execve:1; -@@ -1980,6 +1983,7 @@ static inline int dl_task_check_affinity(struct task_struct *p, const struct cpu +@@ -1979,6 +1982,7 @@ static inline int dl_task_check_affinity(struct task_struct *p, const struct cpu } #endif @@ -10189,7 +10188,7 @@ extern int yield_to(struct task_struct *p, bool preempt); extern void set_user_nice(struct task_struct *p, long nice); extern int task_prio(const struct task_struct *p); -@@ -2131,17 +2135,17 @@ static inline void update_tsk_thread_flag(struct task_struct *tsk, int flag, +@@ -2130,17 +2134,17 @@ static inline void update_tsk_thread_flag(struct task_struct *tsk, int flag, update_ti_thread_flag(task_thread_info(tsk), flag, value); } @@ -10210,7 +10209,7 @@ { return test_ti_thread_flag(task_thread_info(tsk), flag); } -@@ -2154,9 +2158,11 @@ static inline void set_tsk_need_resched(struct task_struct *tsk) +@@ -2153,9 +2157,11 @@ static inline void set_tsk_need_resched(struct task_struct *tsk) static inline void clear_tsk_need_resched(struct task_struct *tsk) { clear_tsk_thread_flag(tsk,TIF_NEED_RESCHED); @@ -10223,7 +10222,7 @@ { return unlikely(test_tsk_thread_flag(tsk,TIF_NEED_RESCHED)); } -@@ -2337,7 +2343,7 @@ static inline int rwlock_needbreak(rwlock_t *lock) +@@ -2336,7 +2342,7 @@ static inline int rwlock_needbreak(rwlock_t *lock) static __always_inline bool need_resched(void) { @@ -10308,10 +10307,10 @@ int serial8250_console_exit(struct uart_port *port); diff --git a/include/linux/serial_core.h b/include/linux/serial_core.h -index 5136eade9..9c7bce638 100644 +index a7d5fa892..99d3f1e24 100644 --- a/include/linux/serial_core.h +++ b/include/linux/serial_core.h -@@ -489,6 +489,7 @@ struct uart_port { +@@ -488,6 +488,7 @@ struct uart_port { struct uart_icount icount; /* statistics */ struct console *cons; /* struct console, if any */ @@ -10319,7 +10318,7 @@ /* flags must be updated while holding port mutex */ upf_t flags; -@@ -596,6 +597,7 @@ struct uart_port { +@@ -595,6 +596,7 @@ struct uart_port { static inline void uart_port_lock(struct uart_port *up) { spin_lock(&up->lock); @@ -10327,7 +10326,7 @@ } /** -@@ -605,6 +607,7 @@ static inline void uart_port_lock(struct uart_port *up) +@@ -604,6 +606,7 @@ static inline void uart_port_lock(struct uart_port *up) static inline void uart_port_lock_irq(struct uart_port *up) { spin_lock_irq(&up->lock); @@ -10335,7 +10334,7 @@ } /** -@@ -615,6 +618,7 @@ static inline void uart_port_lock_irq(struct uart_port *up) +@@ -614,6 +617,7 @@ static inline void uart_port_lock_irq(struct uart_port *up) static inline void uart_port_lock_irqsave(struct uart_port *up, unsigned long *flags) { spin_lock_irqsave(&up->lock, *flags); @@ -10343,7 +10342,7 @@ } /** -@@ -625,7 +629,11 @@ static inline void uart_port_lock_irqsave(struct uart_port *up, unsigned long *f +@@ -624,7 +628,11 @@ static inline void uart_port_lock_irqsave(struct uart_port *up, unsigned long *f */ static inline bool uart_port_trylock(struct uart_port *up) { @@ -10356,7 +10355,7 @@ } /** -@@ -637,7 +645,11 @@ static inline bool uart_port_trylock(struct uart_port *up) +@@ -636,7 +644,11 @@ static inline bool uart_port_trylock(struct uart_port *up) */ static inline bool uart_port_trylock_irqsave(struct uart_port *up, unsigned long *flags) { @@ -10369,7 +10368,7 @@ } /** -@@ -646,6 +658,7 @@ static inline bool uart_port_trylock_irqsave(struct uart_port *up, unsigned long +@@ -645,6 +657,7 @@ static inline bool uart_port_trylock_irqsave(struct uart_port *up, unsigned long */ static inline void uart_port_unlock(struct uart_port *up) { @@ -10377,7 +10376,7 @@ spin_unlock(&up->lock); } -@@ -655,6 +668,7 @@ static inline void uart_port_unlock(struct uart_port *up) +@@ -654,6 +667,7 @@ static inline void uart_port_unlock(struct uart_port *up) */ static inline void uart_port_unlock_irq(struct uart_port *up) { @@ -10385,7 +10384,7 @@ spin_unlock_irq(&up->lock); } -@@ -664,6 +678,19 @@ static inline void uart_port_unlock_irq(struct uart_port *up) +@@ -663,6 +677,19 @@ static inline void uart_port_unlock_irq(struct uart_port *up) * @flags: The saved interrupt flags for restore */ static inline void uart_port_unlock_irqrestore(struct uart_port *up, unsigned long flags) @@ -10405,7 +10404,7 @@ { spin_unlock_irqrestore(&up->lock, flags); } -@@ -1076,14 +1103,14 @@ static inline void uart_unlock_and_check_sysrq(struct uart_port *port) +@@ -1058,14 +1085,14 @@ static inline void uart_unlock_and_check_sysrq(struct uart_port *port) u8 sysrq_ch; if (!port->has_sysrq) { @@ -10422,7 +10421,7 @@ if (sysrq_ch) handle_sysrq(sysrq_ch); -@@ -1095,14 +1122,14 @@ static inline void uart_unlock_and_check_sysrq_irqrestore(struct uart_port *port +@@ -1077,14 +1104,14 @@ static inline void uart_unlock_and_check_sysrq_irqrestore(struct uart_port *port u8 sysrq_ch; if (!port->has_sysrq) { @@ -10439,7 +10438,7 @@ if (sysrq_ch) handle_sysrq(sysrq_ch); -@@ -1118,12 +1145,12 @@ static inline int uart_prepare_sysrq_char(struct uart_port *port, u8 ch) +@@ -1100,12 +1127,12 @@ static inline int uart_prepare_sysrq_char(struct uart_port *port, u8 ch) } static inline void uart_unlock_and_check_sysrq(struct uart_port *port) { @@ -10657,7 +10656,7 @@ new_owner = top_waiter->task; /* -@@ -1002,6 +990,12 @@ retry_private: +@@ -1002,6 +990,12 @@ int futex_lock_pi(u32 __user *uaddr, unsigned int flags, ktime_t *time, int tryl goto no_block; } @@ -10670,7 +10669,7 @@ rt_mutex_init_waiter(&rt_waiter); /* -@@ -1039,19 +1033,37 @@ retry_private: +@@ -1039,19 +1033,37 @@ int futex_lock_pi(u32 __user *uaddr, unsigned int flags, ktime_t *time, int tryl ret = rt_mutex_wait_proxy_lock(&q.pi_state->pi_mutex, to, &rt_waiter); cleanup: @@ -10714,7 +10713,7 @@ no_block: /* * Fixup the pi_state owner and possibly acquire the lock if we -@@ -1132,6 +1144,7 @@ retry: +@@ -1132,6 +1144,7 @@ int futex_unlock_pi(u32 __user *uaddr, unsigned int flags) top_waiter = futex_top_waiter(hb, &key); if (top_waiter) { struct futex_pi_state *pi_state = top_waiter->pi_state; @@ -10722,7 +10721,7 @@ ret = -EINVAL; if (!pi_state) -@@ -1144,22 +1157,39 @@ retry: +@@ -1144,22 +1157,39 @@ int futex_unlock_pi(u32 __user *uaddr, unsigned int flags) if (pi_state->owner != current) goto out_unlock; @@ -10768,7 +10767,7 @@ put_pi_state(pi_state); -@@ -1187,6 +1217,7 @@ retry: +@@ -1187,6 +1217,7 @@ int futex_unlock_pi(u32 __user *uaddr, unsigned int flags) return ret; } @@ -11000,7 +10999,7 @@ } diff --git a/kernel/locking/rwsem.c b/kernel/locking/rwsem.c -index 11ed7ce65..62eac9fd8 100644 +index 9eabd585c..2340b6d90 100644 --- a/kernel/locking/rwsem.c +++ b/kernel/locking/rwsem.c @@ -1427,8 +1427,14 @@ static inline void __downgrade_write(struct rw_semaphore *sem) @@ -13074,7 +13073,7 @@ /* * We cannot access per-CPU data (e.g. per-CPU flush irq_work) before -@@ -698,9 +742,6 @@ out: +@@ -698,9 +742,6 @@ static ssize_t msg_print_ext_body(char *buf, size_t size, return len; } @@ -13093,7 +13092,7 @@ { /* * Do not use spinning in panic(). The panic CPU wants to keep the lock. -@@ -1887,7 +1928,7 @@ lockdep: +@@ -1887,7 +1928,7 @@ static void console_lock_spinning_enable(void) * * Return: 1 if the lock rights were passed, 0 otherwise. */ @@ -13102,7 +13101,7 @@ { int waiter; -@@ -2305,54 +2346,123 @@ out: +@@ -2305,54 +2346,123 @@ int vprintk_store(int facility, int level, return ret; } @@ -13449,7 +13448,7 @@ /* Skip record that has level above the console loglevel. */ if (may_suppress && suppress_message_printing(r.info->level)) goto out; -@@ -2887,6 +2945,13 @@ out: +@@ -2887,6 +2945,13 @@ static bool printk_get_next_message(struct printk_message *pmsg, u64 seq, return true; } @@ -13463,7 +13462,7 @@ /* * Print one record for the given console. The record printed is whatever * record is the next available record for the given console. -@@ -2904,12 +2969,10 @@ out: +@@ -2904,12 +2969,10 @@ static bool printk_get_next_message(struct printk_message *pmsg, u64 seq, */ static bool console_emit_next_record(struct console *con, bool *handover, int cookie) { @@ -13605,7 +13604,7 @@ if (!progress) continue; -@@ -3038,19 +3145,7 @@ abandon: +@@ -3038,19 +3145,7 @@ static bool console_flush_all(bool do_cond_resched, u64 *next_seq, bool *handove return false; } @@ -14188,7 +14187,7 @@ return NULL; } -@@ -1441,20 +1457,118 @@ fail_reopen: +@@ -1441,20 +1457,118 @@ bool prb_reserve_in_last(struct prb_reserved_entry *e, struct printk_ringbuffer return false; } @@ -14759,10 +14758,10 @@ { #ifdef CONFIG_KGDB_KDB diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c -index 781146600..7ee1c84b5 100644 +index ade42d6a9..eebb9b454 100644 --- a/kernel/rcu/rcutorture.c +++ b/kernel/rcu/rcutorture.c -@@ -2409,6 +2409,12 @@ static int rcutorture_booster_init(unsigned int cpu) +@@ -2408,6 +2408,12 @@ static int rcutorture_booster_init(unsigned int cpu) WARN_ON_ONCE(!t); sp.sched_priority = 2; sched_setscheduler_nocheck(t, SCHED_FIFO, &sp); @@ -14776,7 +14775,7 @@ /* Don't allow time recalculation while creating a new task. */ diff --git a/kernel/rcu/tree_stall.h b/kernel/rcu/tree_stall.h -index 11a1fac3a..6f085a159 100644 +index e09f4f624..311483048 100644 --- a/kernel/rcu/tree_stall.h +++ b/kernel/rcu/tree_stall.h @@ -8,6 +8,7 @@ @@ -14787,7 +14786,7 @@ ////////////////////////////////////////////////////////////////////////////// // -@@ -604,6 +605,8 @@ static void print_other_cpu_stall(unsigned long gp_seq, unsigned long gps) +@@ -603,6 +604,8 @@ static void print_other_cpu_stall(unsigned long gp_seq, unsigned long gps) if (rcu_stall_is_suppressed()) return; @@ -14796,7 +14795,7 @@ /* * OK, time to rat on our buddy... * See Documentation/RCU/stallwarn.rst for info on how to debug -@@ -658,6 +661,8 @@ static void print_other_cpu_stall(unsigned long gp_seq, unsigned long gps) +@@ -657,6 +660,8 @@ static void print_other_cpu_stall(unsigned long gp_seq, unsigned long gps) panic_on_rcu_stall(); rcu_force_quiescent_state(); /* Kick them all. */ @@ -14806,7 +14805,7 @@ static void print_cpu_stall(unsigned long gps) diff --git a/kernel/sched/core.c b/kernel/sched/core.c -index 7dd2415d9..697d165a2 100644 +index 07bcc5f2e..7a6b82e1f 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -901,14 +901,15 @@ static inline void hrtick_rq_init(struct rq *rq) @@ -14914,7 +14913,7 @@ smp_send_reschedule(cpu); else trace_sched_wake_idle_without_ipi(cpu); -@@ -6774,10 +6794,14 @@ void __noreturn do_task_dead(void) +@@ -6777,10 +6797,14 @@ void __noreturn do_task_dead(void) static inline void sched_submit_work(struct task_struct *tsk) { @@ -14931,7 +14930,7 @@ task_flags = tsk->flags; /* -@@ -6803,6 +6827,8 @@ static inline void sched_submit_work(struct task_struct *tsk) +@@ -6806,6 +6830,8 @@ static inline void sched_submit_work(struct task_struct *tsk) * make sure to submit it to avoid deadlocks. */ blk_flush_plug(tsk->plug, true); @@ -14940,7 +14939,7 @@ } static void sched_update_worker(struct task_struct *tsk) -@@ -6815,16 +6841,26 @@ static void sched_update_worker(struct task_struct *tsk) +@@ -6818,16 +6844,26 @@ static void sched_update_worker(struct task_struct *tsk) } } @@ -14972,7 +14971,7 @@ sched_update_worker(tsk); } EXPORT_SYMBOL(schedule); -@@ -6888,11 +6924,7 @@ void __sched schedule_preempt_disabled(void) +@@ -6891,11 +6927,7 @@ void __sched schedule_preempt_disabled(void) #ifdef CONFIG_PREEMPT_RT void __sched notrace schedule_rtlock(void) { @@ -14985,7 +14984,7 @@ } NOKPROBE_SYMBOL(schedule_rtlock); #endif -@@ -7088,6 +7120,32 @@ static void __setscheduler_prio(struct task_struct *p, int prio) +@@ -7091,6 +7123,32 @@ static void __setscheduler_prio(struct task_struct *p, int prio) #ifdef CONFIG_RT_MUTEXES @@ -15018,7 +15017,7 @@ static inline int __rt_effective_prio(struct task_struct *pi_task, int prio) { if (pi_task) -@@ -8950,6 +9008,21 @@ static inline void preempt_dynamic_init(void) { } +@@ -8953,6 +9011,21 @@ static inline void preempt_dynamic_init(void) { } #endif /* #ifdef CONFIG_PREEMPT_DYNAMIC */ @@ -15078,7 +15077,7 @@ } late_initcall(sched_init_debug); diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c -index 415f4b060..8e58f6744 100644 +index 8de28b182..196536f0a 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -1154,8 +1154,10 @@ static void clear_buddies(struct cfs_rq *cfs_rq, struct sched_entity *se); @@ -15146,7 +15145,7 @@ static void update_curr_fair(struct rq *rq) { update_curr(cfs_rq_of(&rq->curr->se)); -@@ -5629,7 +5645,7 @@ entity_tick(struct cfs_rq *cfs_rq, struct sched_entity *curr, int queued) +@@ -5631,7 +5647,7 @@ entity_tick(struct cfs_rq *cfs_rq, struct sched_entity *curr, int queued) /* * Update run-time statistics of the 'current'. */ @@ -15155,7 +15154,7 @@ /* * Ensure that runnable average is periodically updated. -@@ -5643,7 +5659,7 @@ entity_tick(struct cfs_rq *cfs_rq, struct sched_entity *curr, int queued) +@@ -5645,7 +5661,7 @@ entity_tick(struct cfs_rq *cfs_rq, struct sched_entity *curr, int queued) * validating it and just reschedule. */ if (queued) { @@ -15164,7 +15163,7 @@ return; } /* -@@ -5789,7 +5805,7 @@ static void __account_cfs_rq_runtime(struct cfs_rq *cfs_rq, u64 delta_exec) +@@ -5791,7 +5807,7 @@ static void __account_cfs_rq_runtime(struct cfs_rq *cfs_rq, u64 delta_exec) * hierarchy can be throttled */ if (!assign_cfs_rq_runtime(cfs_rq) && likely(cfs_rq->curr)) @@ -15173,7 +15172,7 @@ } static __always_inline -@@ -6088,7 +6104,7 @@ unthrottle_throttle: +@@ -6090,7 +6106,7 @@ void unthrottle_cfs_rq(struct cfs_rq *cfs_rq) /* Determine whether we need to wake up potentially idle CPU: */ if (rq->curr == rq->idle && rq->cfs.nr_running) @@ -15182,7 +15181,7 @@ } #ifdef CONFIG_SMP -@@ -7333,7 +7349,7 @@ static void hrtick_start_fair(struct rq *rq, struct task_struct *p) +@@ -7291,7 +7307,7 @@ static void hrtick_start_fair(struct rq *rq, struct task_struct *p) if (delta < 0) { if (task_current(rq, p)) @@ -15191,7 +15190,7 @@ return; } hrtick_start(rq, delta); -@@ -9293,7 +9309,7 @@ static void check_preempt_wakeup(struct rq *rq, struct task_struct *p, int wake_ +@@ -9231,7 +9247,7 @@ static void check_preempt_wakeup(struct rq *rq, struct task_struct *p, int wake_ * prevents us from potentially nominating it as a false LAST_BUDDY * below. */ @@ -15200,7 +15199,7 @@ return; /* Idle tasks are by definition preempted by non-idle tasks. */ -@@ -9335,7 +9351,7 @@ static void check_preempt_wakeup(struct rq *rq, struct task_struct *p, int wake_ +@@ -9273,7 +9289,7 @@ static void check_preempt_wakeup(struct rq *rq, struct task_struct *p, int wake_ return; preempt: @@ -15209,7 +15208,7 @@ } #ifdef CONFIG_QOS_SCHED -@@ -9818,8 +9834,7 @@ static bool _qos_smt_check_need_resched(int this_cpu, struct rq *rq) +@@ -9756,8 +9772,7 @@ static bool _qos_smt_check_need_resched(int this_cpu, struct rq *rq) /* * There are two cases rely on the set need_resched to drive away @@ -15219,7 +15218,7 @@ * b) The qos_smt_status of siblings cpu is offline, the task of curr cpu is idle, * and current cpu only has SCHED_IDLE tasks enqueued. */ -@@ -14193,7 +14208,7 @@ static inline void task_tick_core(struct rq *rq, struct task_struct *curr) +@@ -14139,7 +14154,7 @@ static inline void task_tick_core(struct rq *rq, struct task_struct *curr) */ if (rq->core->core_forceidle_count && rq->cfs.nr_running == 1 && __entity_slice_used(&curr->se, MIN_NR_TASKS_DURING_FORCEIDLE)) @@ -15228,7 +15227,7 @@ } /* -@@ -14509,7 +14524,7 @@ prio_changed_fair(struct rq *rq, struct task_struct *p, int oldprio) +@@ -14455,7 +14470,7 @@ prio_changed_fair(struct rq *rq, struct task_struct *p, int oldprio) */ if (task_current(rq, p)) { if (p->prio > oldprio) @@ -15238,15 +15237,15 @@ check_preempt_curr(rq, p, 0); } diff --git a/kernel/sched/features.h b/kernel/sched/features.h -index 26b1a03bd..bfba10c09 100644 +index 26b1a03bd..a08f2fcd7 100644 --- a/kernel/sched/features.h +++ b/kernel/sched/features.h -@@ -99,6 +99,8 @@ SCHED_FEAT(LATENCY_WARN, false) +@@ -98,7 +98,7 @@ SCHED_FEAT(UTIL_EST_FASTUP, true) + SCHED_FEAT(LATENCY_WARN, false) SCHED_FEAT(HZ_BW, true) - +- +SCHED_FEAT(FORCE_NEED_RESCHED, false) -+ #ifdef CONFIG_QOS_SCHED_DYNAMIC_AFFINITY /* * Use util_avg of bottom-Level taskgroup @@ -15282,20 +15281,11 @@ rd->rto_cpu = -1; diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h -index 761870540..ecf1154c3 100644 +index 9de2bac64..0f60c4654 100644 --- a/kernel/sched/sched.h +++ b/kernel/sched/sched.h -@@ -740,7 +740,7 @@ struct cfs_rq { - - #ifdef CONFIG_QOS_SCHED_SMT_EXPELLER - union { -- unsigned int qos_idle_h_nr_running; /* qos_levelï¼-1 */ -+ unsigned int qos_idle_h_nr_running; /* qos_levelï¼?1 */ - unsigned long qos_idle_h_nr_running_padding; - }; - #endif -@@ -2601,6 +2601,7 @@ extern void init_sched_fair_class(void); - extern void reweight_task(struct task_struct *p, const struct load_weight *lw); +@@ -2600,6 +2600,7 @@ extern void init_sched_fair_class(void); + extern void reweight_task(struct task_struct *p, int prio); extern void resched_curr(struct rq *rq); +extern void resched_curr_lazy(struct rq *rq); @@ -15303,7 +15293,7 @@ extern struct rt_bandwidth def_rt_bandwidth; diff --git a/kernel/signal.c b/kernel/signal.c -index f36c58ea7..0f2615143 100644 +index 28cddef39..cf2c75e3e 100644 --- a/kernel/signal.c +++ b/kernel/signal.c @@ -2332,15 +2332,35 @@ static int ptrace_stop(int exit_code, int why, unsigned long message, @@ -15348,10 +15338,10 @@ cgroup_leave_frozen(true); diff --git a/kernel/softirq.c b/kernel/softirq.c -index bd9716d7b..2fde8af88 100644 +index 210cf5f8d..cae0ae2e2 100644 --- a/kernel/softirq.c +++ b/kernel/softirq.c -@@ -247,6 +247,19 @@ out: +@@ -247,6 +247,19 @@ void __local_bh_enable_ip(unsigned long ip, unsigned int cnt) } EXPORT_SYMBOL(__local_bh_enable_ip); @@ -15371,7 +15361,7 @@ /* * Invoked from ksoftirqd_run() outside of the interrupt disabled section * to acquire the per CPU local lock for reentrancy protection. -@@ -623,6 +636,24 @@ static inline void tick_irq_exit(void) +@@ -619,6 +632,24 @@ static inline void tick_irq_exit(void) #endif } @@ -15396,7 +15386,7 @@ static inline void __irq_exit_rcu(void) { #ifndef __ARCH_IRQ_EXIT_IRQS_DISABLED -@@ -635,6 +666,10 @@ static inline void __irq_exit_rcu(void) +@@ -631,6 +662,10 @@ static inline void __irq_exit_rcu(void) if (!in_interrupt() && local_softirq_pending()) invoke_softirq(); @@ -15407,7 +15397,7 @@ tick_irq_exit(); } -@@ -967,12 +1002,70 @@ static struct smp_hotplug_thread softirq_threads = { +@@ -963,12 +998,70 @@ static struct smp_hotplug_thread softirq_threads = { .thread_comm = "ksoftirqd/%u", }; @@ -15483,7 +15473,7 @@ index edb0f821d..a72900121 100644 --- a/kernel/time/hrtimer.c +++ b/kernel/time/hrtimer.c -@@ -1809,7 +1809,7 @@ retry: +@@ -1809,7 +1809,7 @@ void hrtimer_interrupt(struct clock_event_device *dev) if (!ktime_before(now, cpu_base->softirq_expires_next)) { cpu_base->softirq_expires_next = KTIME_MAX; cpu_base->softirq_activated = 1; @@ -15595,10 +15585,10 @@ need_resched = 'p'; break; diff --git a/net/core/dev.c b/net/core/dev.c -index 4935ff1ee..3754a26b8 100644 +index 1f6c8945f..1e8928cd3 100644 --- a/net/core/dev.c +++ b/net/core/dev.c -@@ -4711,15 +4711,6 @@ static void rps_trigger_softirq(void *data) +@@ -4705,15 +4705,6 @@ static void rps_trigger_softirq(void *data) #endif /* CONFIG_RPS */ @@ -15614,7 +15604,7 @@ /* * After we queued a packet into sd->input_pkt_queue, * we need to make sure this queue is serviced soon. -@@ -6688,6 +6679,32 @@ static void skb_defer_free_flush(struct softnet_data *sd) +@@ -6682,6 +6673,32 @@ static void skb_defer_free_flush(struct softnet_data *sd) } } @@ -15647,7 +15637,7 @@ static int napi_threaded_poll(void *data) { struct napi_struct *napi = data; -@@ -11625,7 +11642,11 @@ static int __init net_dev_init(void) +@@ -11618,7 +11635,11 @@ static int __init net_dev_init(void) INIT_CSD(&sd->csd, rps_trigger_softirq, sd); sd->cpu = i; #endif @@ -15660,10 +15650,10 @@ init_gro_hash(&sd->backlog); diff --git a/net/core/skbuff.c b/net/core/skbuff.c -index f0a9ef1ae..682175af4 100644 +index 60876262b..02e2bab1e 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c -@@ -6863,8 +6863,13 @@ nodefer: __kfree_skb(skb); +@@ -6852,8 +6852,13 @@ nodefer: __kfree_skb(skb); /* Make sure to trigger NET_RX_SOFTIRQ on the remote CPU * if we are unlucky enough (this seems very unlikely). */
View file
_service:tar_scm:patch-6.6.0-6.0.0-rt20.patch-openeuler_defconfig.patch
Changed
@@ -1,7 +1,7 @@ -From 9b1136bad28f0deb735f7cd220fb740eae876832 Mon Sep 17 00:00:00 2001 +From cb6750f16a7d1d5074b0f7c46270014dd348a958 Mon Sep 17 00:00:00 2001 From: zhangyu <zhangyu4@kylinos.cn> -Date: Thu, 22 Aug 2024 10:06:55 +0800 -Subject: PATCH rt111 +Date: Tue, 21 May 2024 14:50:20 +0800 +Subject: PATCH rt2 --- arch/arm64/configs/openeuler_defconfig | 4 ++-- @@ -9,7 +9,7 @@ 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/arch/arm64/configs/openeuler_defconfig b/arch/arm64/configs/openeuler_defconfig -index 650fe88cb..576b8f12d 100644 +index 3b8d78f94..6c7e6f2f9 100644 --- a/arch/arm64/configs/openeuler_defconfig +++ b/arch/arm64/configs/openeuler_defconfig @@ -97,7 +97,7 @@ CONFIG_PREEMPT_NONE=y @@ -21,17 +21,17 @@ # # CPU/Task time and stats accounting # -@@ -757,7 +757,7 @@ CONFIG_HAVE_KVM_VCPU_RUN_PID_CHANGE=y +@@ -755,7 +755,7 @@ CONFIG_HAVE_KVM_VCPU_RUN_PID_CHANGE=y CONFIG_KVM_XFER_TO_GUEST_WORK=y CONFIG_KVM_GENERIC_HARDWARE_ENABLING=y CONFIG_KVM_HISI_VIRT=y -CONFIG_VIRTUALIZATION=y +#CONFIG_VIRTUALIZATION is not set CONFIG_KVM=y - CONFIG_HISI_VIRTCCA_HOST=y + CONFIG_CVM_HOST=y # CONFIG_NVHE_EL2_DEBUG is not set diff --git a/arch/x86/configs/openeuler_defconfig b/arch/x86/configs/openeuler_defconfig -index b3403ba04..047d2c71d 100644 +index 9b5df8585..ece62e3df 100644 --- a/arch/x86/configs/openeuler_defconfig +++ b/arch/x86/configs/openeuler_defconfig @@ -112,11 +112,11 @@ CONFIG_BPF_SCHED=y @@ -57,7 +57,7 @@ CONFIG_UID16=y CONFIG_MULTIUSER=y CONFIG_SGETMASK_SYSCALL=y -@@ -746,7 +746,7 @@ CONFIG_HAVE_KVM_NO_POLL=y +@@ -744,7 +744,7 @@ CONFIG_HAVE_KVM_NO_POLL=y CONFIG_KVM_XFER_TO_GUEST_WORK=y CONFIG_HAVE_KVM_PM_NOTIFIER=y CONFIG_KVM_GENERIC_HARDWARE_ENABLING=y
View file
_service
Changed
@@ -2,7 +2,7 @@ <service name="tar_scm"> <param name="scm">git</param> <param name="url">git@gitee.com:xingmz/src-kernel.git</param> - <param name="revision">24.09-rebase-41-v2</param> + <param name="revision">24.03-rebase-41</param> <param name="submodules">disable</param> <param name="history-depth">1</param> <param name="exclude">*</param>
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.
浙ICP备2022010568号-2