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 78
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 27 +%global devel_release 38 %global maintenance_release .0.0 -%global pkg_release .4 -%global rt_release .rt30 +%global pkg_release .5 +%global rt_release .rt35 %define with_debuginfo 1 # Do not recompute the build-id of vmlinux in find-debuginfo.sh @@ -1057,6 +1057,9 @@ %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,6 +6,7 @@ %if %{with toolchain_clang} %global toolchain clang +%define with_kabichk 0 %endif %bcond_with clang_lto @@ -42,7 +43,7 @@ %global upstream_sublevel 0 %global devel_release 41 %global maintenance_release .0.0 -%global pkg_release .49 +%global pkg_release .53 %global openeuler_lts 1 %global openeuler_major 2403 @@ -445,7 +446,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 @@ -1089,11 +1090,14 @@ %endif %changelog -* Fri Sep 13 2024 Mingzheng Xing <xingmingzheng@iscas.ac.cn> - 6.6.0-41.0.0.49 +* Fri Sep 13 2024 Mingzheng Xing <xingmingzheng@iscas.ac.cn> - 6.6.0-41.0.0.51 - riscv kernel upgrade to 6.6.0-41.0.0 - 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.48 +* Fri Sep 13 2024 Taoxy2004 <221870066@smail.nju.edu.cn> - 6.6.0-41.0.0.50 +- tools: Add dynamic process-level cgroup memory monitoring tool + +* Fri Sep 06 2024 ZhangPeng <zhangpeng362@huawei.com> - 6.6.0-41.0.0.49 - !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 @@ -1231,6 +1235,9 @@ - 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 26.0.0 +%global hulkrelease 38.0.0 %global debug_package %{nil} Name: raspberrypi-kernel-rt Version: 6.6.0 -Release: %{hulkrelease}.rt.1 +Release: %{hulkrelease}.rt.3 Summary: Linux Kernel License: GPLv2 URL: http://www.kernel.org/ @@ -265,6 +265,10 @@ %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 @@ -2889,4 +2893,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 \ No newline at end of file +- package init based on openEuler 5.10.0-5.1.0
View file
_service:tar_scm:raspberrypi-kernel.spec
Changed
@@ -2,13 +2,13 @@ %global KernelVer %{version}-%{release}.raspi.%{_target_cpu} -%global hulkrelease 28.0.0 +%global hulkrelease 39.0.0 %global debug_package %{nil} Name: raspberrypi-kernel Version: 6.6.0 -Release: %{hulkrelease}.5 +Release: %{hulkrelease}.7 Summary: Linux Kernel License: GPLv2 URL: http://www.kernel.org/ @@ -260,6 +260,12 @@ /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 42a6a0e9bca5d03c3bbc4104eb93025153d4cfee Mon Sep 17 00:00:00 2001 +From c1e3be3d366faf8c19e493071f7c7a2297558c82 Mon Sep 17 00:00:00 2001 From: Yafen <yafen@iscas.ac.cn> -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) +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) --- .../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 | 17 +- + Documentation/driver-api/pwm.rst | 9 + .../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 | 137 +- + .../dma/dw-axi-dmac/dw-axi-dmac-platform.c | 135 +- drivers/dma/dw-axi-dmac/dw-axi-dmac.h | 1 + drivers/firmware/psci/psci.c | 9 +- drivers/firmware/raspberrypi.c | 149 +- @@ -565,13 +565,12 @@ 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 | 955 ++- + drivers/gpu/drm/panel/panel-ilitek-ili9881c.c | 949 ++- .../gpu/drm/panel/panel-jdi-lt070me05000.c | 19 +- .../drm/panel/panel-raspberrypi-touchscreen.c | 44 +- drivers/gpu/drm/panel/panel-simple.c | 238 +- @@ -599,7 +598,6 @@ 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 +- @@ -625,7 +623,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 | 216 +- + drivers/gpu/drm/vc4/vc4_hdmi.c | 217 +- 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 +- @@ -650,7 +648,7 @@ drivers/hwmon/aht10.c | 7 + drivers/hwmon/ds1621.c | 10 + drivers/hwmon/emc2305.c | 95 +- - drivers/hwmon/pwm-fan.c | 67 +- + drivers/hwmon/pwm-fan.c | 59 +- drivers/hwmon/rp1-adc.c | 307 + drivers/hwmon/sht3x.c | 12 +- drivers/i2c/busses/Kconfig | 19 + @@ -668,10 +666,6 @@ 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 + @@ -688,8 +682,6 @@ 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 + @@ -750,7 +742,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 | 87 +- + drivers/media/rc/pwm-ir-tx.c | 83 +- drivers/media/spi/Kconfig | 1 + drivers/media/usb/dvb-usb-v2/rtl28xxu.c | 4 + drivers/media/v4l2-core/v4l2-ctrls-defs.c | 1 + @@ -787,7 +779,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 | 45 +- + .../net/ethernet/broadcom/genet/bcmgenet.c | 29 +- .../net/ethernet/broadcom/genet/bcmgenet.h | 2 +- drivers/net/ethernet/broadcom/genet/bcmmii.c | 6 +- drivers/net/ethernet/cadence/macb.h | 25 + @@ -800,7 +792,7 @@ drivers/net/phy/broadcom.c | 48 +- drivers/net/phy/microchip.c | 27 + drivers/net/usb/lan78xx.c | 64 +- - drivers/net/usb/smsc95xx.c | 51 +- + drivers/net/usb/smsc95xx.c | 45 +- .../broadcom/brcm80211/brcmfmac/bus.h | 2 +- .../broadcom/brcm80211/brcmfmac/cfg80211.c | 364 +- .../broadcom/brcm80211/brcmfmac/cfg80211.h | 18 + @@ -841,7 +833,6 @@ 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 + @@ -851,17 +842,13 @@ drivers/pps/pps.c | 6 +- drivers/pwm/Kconfig | 9 + drivers/pwm/Makefile | 1 + - drivers/pwm/core.c | 74 +- + drivers/pwm/core.c | 62 +- 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 +- @@ -952,7 +939,6 @@ 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 + @@ -1023,9 +1009,6 @@ 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 + @@ -1034,7 +1017,6 @@ 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 + @@ -1062,7 +1044,7 @@ include/linux/mmc/sd.h | 12 + include/linux/module.h | 2 +- include/linux/platform_data/dma-bcm2708.h | 143 + - include/linux/pwm.h | 57 +- + include/linux/pwm.h | 29 +- include/linux/rp1_platform.h | 20 + include/linux/usb.h | 2 + include/linux/usb/hcd.h | 7 + @@ -1139,7 +1121,7 @@ sound/soc/soc-core.c | 14 +- sound/usb/card.c | 8 +- sound/usb/quirks.c | 2 + - 1135 files changed, 230272 insertions(+), 4326 deletions(-) + 1117 files changed, 230176 insertions(+), 4250 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 @@ -4475,16 +4457,10 @@ +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 3fdc95f7a1d1..c68ed828fba9 100644 +index ed5ec9816538..c68ed828fba9 100644 --- a/Documentation/driver-api/pwm.rst +++ b/Documentation/driver-api/pwm.rst -@@ -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); - +@@ -46,6 +46,15 @@ After being requested, a PWM has to be configured using:: This API controls both the PWM period/duty_cycle config and the enable/disable state. @@ -4500,23 +4476,6 @@ 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 @@ -5191,7 +5150,7 @@ + pixfmt-nv24 pixfmt-m420 diff --git a/MAINTAINERS b/MAINTAINERS -index 1c70622103e0..2e813db650d1 100644 +index 8d4577d29e97..f1f37169169a 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1563,6 +1563,22 @@ S: Maintained @@ -5247,7 +5206,7 @@ BROADCOM BCM47XX MIPS ARCHITECTURE M: Hauke Mehrtens <hauke@hauke-m.de> M: Rafał Miłecki <zajec5@gmail.com> -@@ -15868,6 +15907,14 @@ S: Maintained +@@ -15885,6 +15924,14 @@ S: Maintained T: git git://linuxtv.org/media_tree.git F: drivers/media/i2c/ov5695.c @@ -5262,16 +5221,16 @@ OMNIVISION OV7670 SENSOR DRIVER L: linux-media@vger.kernel.org S: Orphan -@@ -17426,7 +17473,7 @@ F: drivers/video/backlight/pwm_bl.c +@@ -17454,7 +17501,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_state|ops) +-K: pwm_(config|apply_might_sleep|ops) +K: pwm_(config|apply_might_sleep|apply_atomic|ops) PXA GPIO DRIVER M: Robert Jarzmik <robert.jarzmik@free.fr> -@@ -18618,6 +18665,13 @@ S: Supported +@@ -18646,6 +18693,13 @@ S: Supported F: drivers/iio/light/rohm-bu27008.c F: drivers/iio/light/rohm-bu27034.c @@ -5285,7 +5244,7 @@ ROHM MULTIFUNCTION BD9571MWV-M PMIC DEVICE DRIVERS M: Marek Vasut <marek.vasut+renesas@gmail.com> L: linux-kernel@vger.kernel.org -@@ -20011,7 +20065,7 @@ M: Sakari Ailus <sakari.ailus@linux.intel.com> +@@ -20039,7 +20093,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 @@ -5294,7 +5253,7 @@ F: drivers/media/i2c/imx258.c SONY IMX274 SENSOR DRIVER -@@ -20088,6 +20142,31 @@ T: git git://linuxtv.org/media_tree.git +@@ -20116,6 +20170,31 @@ T: git git://linuxtv.org/media_tree.git F: Documentation/devicetree/bindings/media/i2c/sony,imx415.yaml F: drivers/media/i2c/imx415.c @@ -56521,10 +56480,10 @@ + #endif diff --git a/arch/arm/include/asm/uaccess.h b/arch/arm/include/asm/uaccess.h -index 2162ebc6c77a..e766a121555a 100644 +index c28f5ec21e41..c59c5e63f2dd 100644 --- a/arch/arm/include/asm/uaccess.h +++ b/arch/arm/include/asm/uaccess.h -@@ -500,6 +500,9 @@ do { \ +@@ -499,6 +499,9 @@ do { \ extern unsigned long __must_check arm_copy_from_user(void *to, const void __user *from, unsigned long n); @@ -56535,10 +56494,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 9b51562b1f86..d7a1048763a2 100644 +index d2c8e5313539..bb320f08ad2f 100644 --- a/arch/arm/kernel/fiq.c +++ b/arch/arm/kernel/fiq.c -@@ -64,6 +64,8 @@ +@@ -57,6 +57,8 @@ static unsigned long dfl_fiq_insn; static struct pt_regs dfl_fiq_regs; @@ -56547,7 +56506,7 @@ /* Default reacquire function * - we always relinquish FIQ control * - we always reacquire FIQ control -@@ -148,6 +150,8 @@ static int fiq_start; +@@ -141,6 +143,8 @@ static int fiq_start; void enable_fiq(int fiq) { @@ -56584,10 +56543,10 @@ /* diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c -index 5cfc9c5056a7..0ea30401beaa 100644 +index c66b560562b3..9e312aad369f 100644 --- a/arch/arm/kernel/setup.c +++ b/arch/arm/kernel/setup.c -@@ -1277,6 +1277,8 @@ static int c_show(struct seq_file *m, void *v) +@@ -1276,6 +1276,8 @@ static int c_show(struct seq_file *m, void *v) { int i, j; u32 cpuid; @@ -56596,7 +56555,7 @@ for_each_online_cpu(i) { /* -@@ -1336,6 +1338,14 @@ static int c_show(struct seq_file *m, void *v) +@@ -1335,6 +1337,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); @@ -58467,10 +58426,10 @@ /* * Save the userland NEON/VFP state. Under UP, diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig -index fc56e4e30e29..bb49f48de832 100644 +index 501ec560a939..740deea8f801 100644 --- a/arch/arm64/Kconfig +++ b/arch/arm64/Kconfig -@@ -124,7 +124,8 @@ config ARM64 +@@ -125,7 +125,8 @@ config ARM64 select CRC32 select DCACHE_WORD_ACCESS select DYNAMIC_FTRACE if FUNCTION_TRACER @@ -63631,10 +63590,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 fd0f291e215e..b843b686affd 100644 +index 87ac0b9c0b4f..fe108a850d4d 100644 --- a/arch/arm64/kernel/armv8_deprecated.c +++ b/arch/arm64/kernel/armv8_deprecated.c -@@ -539,9 +539,14 @@ static void __init register_insn_emulation(struct insn_emulation *insn) +@@ -542,9 +542,14 @@ static void __init register_insn_emulation(struct insn_emulation *insn) switch (insn->status) { case INSN_DEPRECATED: @@ -63650,7 +63609,7 @@ break; case INSN_OBSOLETE: diff --git a/arch/arm64/kernel/cpuinfo.c b/arch/arm64/kernel/cpuinfo.c -index eecedf5b67fa..33ac8dfb30ca 100644 +index 5ad8d8697d56..1d6136f28ab0 100644 --- a/arch/arm64/kernel/cpuinfo.c +++ b/arch/arm64/kernel/cpuinfo.c @@ -17,6 +17,7 @@ @@ -63713,10 +63672,10 @@ /* diff --git a/arch/arm64/kernel/setup.c b/arch/arm64/kernel/setup.c -index 95cb22c083c8..d8cdca9144ba 100644 +index 3f00cf64059e..0290c734242a 100644 --- a/arch/arm64/kernel/setup.c +++ b/arch/arm64/kernel/setup.c -@@ -269,9 +269,9 @@ static void __init request_standard_resources(void) +@@ -270,9 +270,9 @@ static void __init request_standard_resources(void) size_t res_size; kernel_code.start = __pa_symbol(_stext); @@ -65623,10 +65582,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 c5c3197ee29f..02700cb16f90 100644 +index 4bdad9e3667f..c6c9d5d714b2 100644 --- a/drivers/char/tpm/tpm_tis_spi_main.c +++ b/drivers/char/tpm/tpm_tis_spi_main.c -@@ -347,7 +347,11 @@ static struct spi_driver tpm_tis_spi_driver = { +@@ -348,7 +348,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), @@ -66091,7 +66050,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 829406dc44a2..9b331f249a98 100644 +index 4d411408e4af..60d01131b12b 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 = { @@ -69755,7 +69714,7 @@ +MODULE_DESCRIPTION("RP1 clock driver"); +MODULE_LICENSE("GPL"); diff --git a/drivers/dma/Kconfig b/drivers/dma/Kconfig -index 7a618f629e86..60b10aed1b81 100644 +index e36506471a4f..e8e029bab078 100644 --- a/drivers/dma/Kconfig +++ b/drivers/dma/Kconfig @@ -669,6 +669,10 @@ config UNIPHIER_XDMAC @@ -71184,7 +71143,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 dd02f84e404d..43053530aa0b 100644 +index 72fb40de58b3..7387df7525c0 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 @@ @@ -71233,16 +71192,7 @@ 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); -@@ -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) +@@ -305,6 +328,48 @@ static void vchan_desc_put(struct virt_dma_desc *vdesc) axi_desc_put(vd_to_axi_desc(vdesc)); } @@ -71291,7 +71241,7 @@ static enum dma_status dma_chan_tx_status(struct dma_chan *dchan, dma_cookie_t cookie, struct dma_tx_state *txstate) -@@ -313,10 +378,7 @@ dma_chan_tx_status(struct dma_chan *dchan, dma_cookie_t cookie, +@@ -314,10 +379,7 @@ dma_chan_tx_status(struct dma_chan *dchan, dma_cookie_t cookie, enum dma_status status; u32 completed_length; unsigned long flags; @@ -71302,7 +71252,7 @@ status = dma_cookie_status(dchan, cookie, txstate); if (status == DMA_COMPLETE || !txstate) -@@ -325,16 +387,31 @@ dma_chan_tx_status(struct dma_chan *dchan, dma_cookie_t cookie, +@@ -326,16 +388,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); @@ -71341,7 +71291,7 @@ return status; } -@@ -388,8 +465,6 @@ static void axi_chan_block_xfer_start(struct axi_dma_chan *chan, +@@ -389,8 +466,6 @@ static void axi_chan_block_xfer_start(struct axi_dma_chan *chan, return; } @@ -71350,7 +71300,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; -@@ -522,7 +597,7 @@ static void dw_axi_dma_set_hw_channel(struct axi_dma_chan *chan, bool set) +@@ -523,7 +598,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) { @@ -71359,7 +71309,7 @@ return; } -@@ -626,18 +701,25 @@ static int dw_axi_dma_set_hw_desc(struct axi_dma_chan *chan, +@@ -627,18 +702,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); @@ -71387,7 +71337,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; -@@ -673,9 +755,6 @@ static int dw_axi_dma_set_hw_desc(struct axi_dma_chan *chan, +@@ -674,9 +756,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); @@ -71397,7 +71347,7 @@ hw_desc->lli->ctl_lo = cpu_to_le32(ctllo); set_desc_src_master(hw_desc); -@@ -770,6 +849,8 @@ dw_axi_dma_chan_prep_cyclic(struct dma_chan *dchan, dma_addr_t dma_addr, +@@ -771,6 +850,8 @@ dw_axi_dma_chan_prep_cyclic(struct dma_chan *dchan, dma_addr_t dma_addr, src_addr += segment_len; } @@ -71406,7 +71356,7 @@ llp = desc->hw_desc0.llp; /* Managed transfer list */ -@@ -835,6 +916,9 @@ dw_axi_dma_chan_prep_slave_sg(struct dma_chan *dchan, struct scatterlist *sgl, +@@ -836,6 +917,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); @@ -71416,7 +71366,7 @@ segment_len = DIV_ROUND_UP(sg_dma_len(sg), num_segments); do { -@@ -849,6 +933,8 @@ dw_axi_dma_chan_prep_slave_sg(struct dma_chan *dchan, struct scatterlist *sgl, +@@ -850,6 +934,8 @@ dw_axi_dma_chan_prep_slave_sg(struct dma_chan *dchan, struct scatterlist *sgl, } while (len >= segment_len); } @@ -71425,7 +71375,7 @@ /* Set end-of-link to the last link descriptor of list */ set_desc_last(&desc->hw_descnum_sgs - 1); -@@ -956,6 +1042,8 @@ dma_chan_prep_dma_memcpy(struct dma_chan *dchan, dma_addr_t dst_adr, +@@ -957,6 +1043,8 @@ dma_chan_prep_dma_memcpy(struct dma_chan *dchan, dma_addr_t dst_adr, num++; } @@ -71434,7 +71384,7 @@ /* Set end-of-link to the last link descriptor of list */ set_desc_last(&desc->hw_descnum - 1); /* Managed transfer list */ -@@ -1004,7 +1092,7 @@ static void axi_chan_dump_lli(struct axi_dma_chan *chan, +@@ -1005,7 +1093,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) { @@ -71443,7 +71393,7 @@ int i; for (i = 0; i < count; i++) -@@ -1047,11 +1135,11 @@ static noinline void axi_chan_handle_err(struct axi_dma_chan *chan, u32 status) +@@ -1048,11 +1136,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) { @@ -71456,7 +71406,7 @@ u64 llp; int i; -@@ -1073,6 +1161,7 @@ static void axi_chan_block_xfer_complete(struct axi_dma_chan *chan) +@@ -1074,6 +1162,7 @@ static void axi_chan_block_xfer_complete(struct axi_dma_chan *chan) if (chan->cyclic) { desc = vd_to_axi_desc(vd); if (desc) { @@ -71464,7 +71414,7 @@ llp = lo_hi_readq(chan->chan_regs + CH_LLP); for (i = 0; i < count; i++) { hw_desc = &desc->hw_desci; -@@ -1325,6 +1414,10 @@ static int parse_device_properties(struct axi_dma_chip *chip) +@@ -1323,6 +1412,10 @@ static int parse_device_properties(struct axi_dma_chip *chip) chip->dw->hdata->nr_masters = tmp; @@ -71476,7 +71426,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 eb267cb24f67..47c3a4f0dac3 100644 +index 8521530a34ec..3bdbc50312f1 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 { @@ -71488,7 +71438,7 @@ u32 length; u32 period_len; diff --git a/drivers/firmware/psci/psci.c b/drivers/firmware/psci/psci.c -index d9629ff87861..e2ffd734d5e8 100644 +index 2328ca58bba6..7a1e42237cf2 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, @@ -71508,10 +71458,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 f66efaa5196d..17abde1e7d55 100644 +index 428ae54d3196..f1a2505ebc9e 100644 --- a/drivers/firmware/raspberrypi.c +++ b/drivers/firmware/raspberrypi.c -@@ -13,6 +13,7 @@ +@@ -14,6 +14,7 @@ #include <linux/of.h> #include <linux/of_platform.h> #include <linux/platform_device.h> @@ -71519,7 +71469,7 @@ #include <linux/slab.h> #include <soc/bcm2835/raspberrypi-firmware.h> -@@ -31,8 +32,11 @@ struct rpi_firmware { +@@ -32,8 +33,11 @@ struct rpi_firmware { u32 enabled; struct kref consumers; @@ -71531,7 +71481,7 @@ static DEFINE_MUTEX(transaction_lock); static void response_callback(struct mbox_client *cl, void *msg) -@@ -174,15 +178,92 @@ int rpi_firmware_property(struct rpi_firmware *fw, +@@ -175,15 +179,92 @@ int rpi_firmware_property(struct rpi_firmware *fw, kfree(data); @@ -71624,7 +71574,7 @@ int ret = rpi_firmware_property(fw, RPI_FIRMWARE_GET_FIRMWARE_REVISION, &packet, sizeof(packet)); -@@ -192,7 +273,35 @@ rpi_firmware_print_firmware_revision(struct rpi_firmware *fw) +@@ -193,7 +274,35 @@ rpi_firmware_print_firmware_revision(struct rpi_firmware *fw) /* This is not compatible with y2038 */ date_and_time = packet; @@ -71661,7 +71611,7 @@ } static void -@@ -207,6 +316,11 @@ rpi_register_hwmon_driver(struct device *dev, struct rpi_firmware *fw) +@@ -208,6 +317,11 @@ rpi_register_hwmon_driver(struct device *dev, struct rpi_firmware *fw) rpi_hwmon = platform_device_register_data(dev, "raspberrypi-hwmon", -1, NULL, 0); @@ -71673,7 +71623,7 @@ } static void rpi_register_clk_driver(struct device *dev) -@@ -299,8 +413,10 @@ static int rpi_firmware_probe(struct platform_device *pdev) +@@ -300,8 +414,10 @@ static int rpi_firmware_probe(struct platform_device *pdev) kref_init(&fw->consumers); platform_set_drvdata(pdev, fw); @@ -71684,7 +71634,7 @@ rpi_register_hwmon_driver(dev, fw); rpi_register_clk_driver(dev); -@@ -327,6 +443,7 @@ static int rpi_firmware_remove(struct platform_device *pdev) +@@ -328,6 +444,7 @@ static int rpi_firmware_remove(struct platform_device *pdev) rpi_clk = NULL; rpi_firmware_put(fw); @@ -71692,7 +71642,7 @@ return 0; } -@@ -407,7 +524,35 @@ static struct platform_driver rpi_firmware_driver = { +@@ -408,7 +525,35 @@ static struct platform_driver rpi_firmware_driver = { .shutdown = rpi_firmware_shutdown, .remove = rpi_firmware_remove, }; @@ -71730,7 +71680,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 e52e8b5ae88e..7e646ea60873 100644 +index 509f42e6ab6a..0c1e188c75a4 100644 --- a/drivers/gpio/Kconfig +++ b/drivers/gpio/Kconfig @@ -207,10 +207,16 @@ config GPIO_BCM_XGS_IPROC @@ -73388,7 +73338,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 74fdf0d87b2c..7e26fa957d5e 100644 +index c9f9f4e36c89..25c08cc5cd20 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) @@ -73565,10 +73515,10 @@ } else { if (flags & BGPIOF_NO_OUTPUT) diff --git a/drivers/gpio/gpio-pca953x.c b/drivers/gpio/gpio-pca953x.c -index bdd50a78e414..52923f616222 100644 +index ce9a94e33280..11bdd678272d 100644 --- a/drivers/gpio/gpio-pca953x.c +++ b/drivers/gpio/gpio-pca953x.c -@@ -1345,6 +1345,7 @@ static const struct of_device_id pca953x_dt_ids = { +@@ -1347,6 +1347,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), }, @@ -73727,10 +73677,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 1c512ed3fa6d..d15870f7cbc0 100644 +index 5c0016c77d2a..64194a4584f6 100644 --- a/drivers/gpio/gpiolib.c +++ b/drivers/gpio/gpiolib.c -@@ -57,6 +57,8 @@ +@@ -58,6 +58,8 @@ #define extra_checks 0 #endif @@ -73739,7 +73689,7 @@ /* Device and char device-related information */ static DEFINE_IDA(gpio_ida); static dev_t gpio_devt; -@@ -2591,8 +2593,8 @@ int gpiod_direction_output(struct gpio_desc *desc, int value) +@@ -2592,8 +2594,8 @@ int gpiod_direction_output(struct gpio_desc *desc, int value) value = !!value; /* GPIOs used for enabled IRQs shall not be set as output */ @@ -73750,7 +73700,7 @@ gpiod_err(desc, "%s: tried to set a GPIO tied to an IRQ as output\n", __func__); -@@ -3470,8 +3472,8 @@ int gpiochip_lock_as_irq(struct gpio_chip *gc, unsigned int offset) +@@ -3471,8 +3473,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 */ @@ -73762,7 +73712,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 d1cad875d2f7..89eb6afe2688 100644 +index a5b92adb8aff..5352376b5c45 100644 --- a/drivers/gpu/drm/Kconfig +++ b/drivers/gpu/drm/Kconfig @@ -346,6 +346,8 @@ source "drivers/gpu/drm/v3d/Kconfig" @@ -73775,13 +73725,13 @@ source "drivers/gpu/drm/etnaviv/Kconfig" diff --git a/drivers/gpu/drm/Makefile b/drivers/gpu/drm/Makefile -index a670c0d95023..0df4a7d4f8e2 100644 +index b120267fbe40..8933dbeb2b83 100644 --- a/drivers/gpu/drm/Makefile +++ b/drivers/gpu/drm/Makefile -@@ -199,3 +199,4 @@ obj-y += solomon/ - obj-$(CONFIG_DRM_SPRD) += sprd/ +@@ -200,3 +200,4 @@ 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 @@ -74051,7 +74001,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 c44d5bcf1284..fa125167c018 100644 +index 309aad5f0c80..476ea750acf4 100644 --- a/drivers/gpu/drm/drm_connector.c +++ b/drivers/gpu/drm/drm_connector.c @@ -33,6 +33,7 @@ @@ -74195,10 +74145,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 d612133e2cf7..7d4ed1530ac2 100644 +index 117237d3528b..c7c2040bda0c 100644 --- a/drivers/gpu/drm/drm_fb_helper.c +++ b/drivers/gpu/drm/drm_fb_helper.c -@@ -1837,7 +1837,7 @@ __drm_fb_helper_initial_config_and_unlock(struct drm_fb_helper *fb_helper) +@@ -1840,7 +1840,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; @@ -74262,37 +74212,6 @@ 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 @@ -74331,7 +74250,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 869e535faefa..d3109ea534fe 100644 +index 3a2f4a9f1d46..307dd2c0fae4 100644 --- a/drivers/gpu/drm/panel/Kconfig +++ b/drivers/gpu/drm/panel/Kconfig @@ -194,6 +194,17 @@ config DRM_PANEL_ILITEK_ILI9341 @@ -74905,7 +74824,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 7838947a1bf3..971f8ee56308 100644 +index bb201f848ae9..971f8ee56308 100644 --- a/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c +++ b/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c @@ -1,6 +1,9 @@ @@ -75770,28 +75689,6 @@ * 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, }; @@ -75885,12 +75782,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; } @@ -76105,7 +76002,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 51f838befb32..0d436f0ec197 100644 +index 11ade6bac592..36cda6335369 100644 --- a/drivers/gpu/drm/panel/panel-simple.c +++ b/drivers/gpu/drm/panel/panel-simple.c @@ -40,6 +40,7 @@ @@ -76261,7 +76158,7 @@ static const struct drm_display_mode innolux_at070tn92_mode = { .clock = 33333, .hdisplay = 800, -@@ -3372,6 +3412,31 @@ static const struct panel_desc rocktech_rk043fn48h = { +@@ -3376,6 +3416,31 @@ static const struct panel_desc rocktech_rk043fn48h = { .connector_type = DRM_MODE_CONNECTOR_DPI, }; @@ -76293,7 +76190,7 @@ static const struct display_timing rocktech_rk070er9427_timing = { .pixelclock = { 26400000, 33300000, 46800000 }, .hactive = { 800, 800, 800 }, -@@ -4269,6 +4334,9 @@ static const struct of_device_id platform_of_match = { +@@ -4273,6 +4338,9 @@ static const struct of_device_id platform_of_match = { }, { .compatible = "friendlyarm,hd702e", .data = &friendlyarm_hd702e, @@ -76303,7 +76200,7 @@ }, { .compatible = "giantplus,gpg482739qs5", .data = &giantplus_gpg482739qs5 -@@ -4290,6 +4358,9 @@ static const struct of_device_id platform_of_match = { +@@ -4294,6 +4362,9 @@ static const struct of_device_id platform_of_match = { }, { .compatible = "innolux,at043tn24", .data = &innolux_at043tn24, @@ -76313,7 +76210,7 @@ }, { .compatible = "innolux,at070tn92", .data = &innolux_at070tn92, -@@ -4422,6 +4493,9 @@ static const struct of_device_id platform_of_match = { +@@ -4426,6 +4497,9 @@ static const struct of_device_id platform_of_match = { }, { .compatible = "rocktech,rk043fn48h", .data = &rocktech_rk043fn48h, @@ -76323,7 +76220,7 @@ }, { .compatible = "rocktech,rk070er9427", .data = &rocktech_rk070er9427, -@@ -4776,6 +4850,9 @@ static const struct panel_desc_dsi osd101t2045_53ts = { +@@ -4780,6 +4854,9 @@ static const struct panel_desc_dsi osd101t2045_53ts = { .lanes = 4, }; @@ -76333,7 +76230,7 @@ static const struct of_device_id dsi_of_match = { { .compatible = "auo,b080uan01", -@@ -4798,21 +4875,138 @@ static const struct of_device_id dsi_of_match = { +@@ -4802,21 +4879,138 @@ static const struct of_device_id dsi_of_match = { }, { .compatible = "osddisplays,osd101t2045-53ts", .data = &osd101t2045_53ts @@ -85219,19 +85116,6 @@ +#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 @@ -91391,7 +91275,7 @@ switch (args->madv) { diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c -index 4626fe9aac56..e42b431c29af 100644 +index 643754fa6a8a..449725618b59 100644 --- a/drivers/gpu/drm/vc4/vc4_hdmi.c +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c @@ -41,6 +41,8 @@ @@ -91690,7 +91574,7 @@ int index, len; int ret; -@@ -2717,20 +2801,15 @@ static int vc4_hdmi_audio_init(struct vc4_hdmi *vc4_hdmi) +@@ -2717,22 +2801,18 @@ static int vc4_hdmi_audio_init(struct vc4_hdmi *vc4_hdmi) } /* @@ -91705,16 +91589,19 @@ /* Before BCM2711, we don't have a named register range */ if (index < 0) index = 1; -+ iomem = platform_get_resource(vc4_hdmi->pdev, IORESOURCE_MEM, index); - 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; + - 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; -@@ -2800,6 +2879,8 @@ static int vc4_hdmi_audio_init(struct vc4_hdmi *vc4_hdmi) +@@ -2802,6 +2882,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); @@ -91723,7 +91610,7 @@ card->dai_link = dai_link; card->num_links = 1; card->name = vc4_hdmi->variant->card_name; -@@ -2829,7 +2910,7 @@ static irqreturn_t vc4_hdmi_hpd_irq_thread(int irq, void *priv) +@@ -2831,7 +2913,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; @@ -91732,7 +91619,7 @@ drm_connector_helper_hpd_irq_event(connector); return IRQ_HANDLED; -@@ -3571,6 +3652,7 @@ static int vc4_hdmi_runtime_suspend(struct device *dev) +@@ -3573,6 +3655,7 @@ static int vc4_hdmi_runtime_suspend(struct device *dev) { struct vc4_hdmi *vc4_hdmi = dev_get_drvdata(dev); @@ -91740,7 +91627,7 @@ clk_disable_unprepare(vc4_hdmi->hsm_clock); return 0; -@@ -3603,6 +3685,10 @@ static int vc4_hdmi_runtime_resume(struct device *dev) +@@ -3605,6 +3688,10 @@ static int vc4_hdmi_runtime_resume(struct device *dev) goto err_disable_clk; } @@ -91751,7 +91638,7 @@ if (vc4_hdmi->variant->reset) vc4_hdmi->variant->reset(vc4_hdmi); -@@ -3655,6 +3741,8 @@ static int vc4_hdmi_bind(struct device *dev, struct device *master, void *data) +@@ -3657,6 +3744,8 @@ static int vc4_hdmi_bind(struct device *dev, struct device *master, void *data) if (ret) return ret; @@ -91760,7 +91647,7 @@ spin_lock_init(&vc4_hdmi->hw_lock); INIT_DELAYED_WORK(&vc4_hdmi->scrambling_work, vc4_hdmi_scrambling_wq); -@@ -3723,7 +3811,9 @@ static int vc4_hdmi_bind(struct device *dev, struct device *master, void *data) +@@ -3725,7 +3814,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") || @@ -91771,7 +91658,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); -@@ -3765,8 +3855,16 @@ static int vc4_hdmi_bind(struct device *dev, struct device *master, void *data) +@@ -3767,8 +3858,16 @@ static int vc4_hdmi_bind(struct device *dev, struct device *master, void *data) return ret; } @@ -91788,7 +91675,7 @@ }; static int vc4_hdmi_dev_probe(struct platform_device *pdev) -@@ -3857,10 +3955,66 @@ static const struct vc4_hdmi_variant bcm2711_hdmi1_variant = { +@@ -3859,10 +3958,66 @@ static const struct vc4_hdmi_variant bcm2711_hdmi1_variant = { .hp_detect = vc5_hdmi_hp_detect, }; @@ -98142,7 +98029,7 @@ + VC_IMAGE_YUVINFO_CSC_REC_2020 = 9, +}; diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h -index 0a4daff4846f..a2b2fb75b5ed 100644 +index 4246348ca16e..8d5fe42d00e8 100644 --- a/drivers/hid/hid-ids.h +++ b/drivers/hid/hid-ids.h @@ -239,6 +239,9 @@ @@ -98155,7 +98042,7 @@ #define USB_VENDOR_ID_BELKIN 0x050d #define USB_DEVICE_ID_FLIP_KVM 0x3201 -@@ -1404,6 +1407,9 @@ +@@ -1407,6 +1410,9 @@ #define USB_VENDOR_ID_XIAOMI 0x2717 #define USB_DEVICE_ID_MI_SILENT_MOUSE 0x5014 @@ -98480,7 +98367,7 @@ .probe = emc2305_probe, .remove = emc2305_remove, diff --git a/drivers/hwmon/pwm-fan.c b/drivers/hwmon/pwm-fan.c -index 6e4516c2ab89..131895d5a031 100644 +index b67bc9e833c0..131895d5a031 100644 --- a/drivers/hwmon/pwm-fan.c +++ b/drivers/hwmon/pwm-fan.c @@ -12,6 +12,7 @@ @@ -98512,42 +98399,6 @@ /* 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; @@ -100400,119 +100251,6 @@ +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 @@ -101741,10 +101479,10 @@ + +#endif diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c -index 58e7d03fc27c..f98a8f13ecbe 100644 +index 28f63ad432de..0e0f399a9a74 100644 --- a/drivers/iommu/iommu.c +++ b/drivers/iommu/iommu.c -@@ -2476,11 +2476,8 @@ int iommu_map(struct iommu_domain *domain, unsigned long iova, +@@ -2487,11 +2487,8 @@ int iommu_map(struct iommu_domain *domain, unsigned long iova, return -EINVAL; ret = __iommu_map(domain, iova, paddr, size, prot, gfp); @@ -101758,7 +101496,7 @@ return ret; -@@ -2614,11 +2611,8 @@ ssize_t iommu_map_sg(struct iommu_domain *domain, unsigned long iova, +@@ -2625,11 +2622,8 @@ ssize_t iommu_map_sg(struct iommu_domain *domain, unsigned long iova, sg = sg_next(sg); } @@ -101773,7 +101511,7 @@ out_err: diff --git a/drivers/irqchip/Kconfig b/drivers/irqchip/Kconfig -index e0408e9016b9..023a963012f7 100644 +index 6ffcdad8b131..81c3c771e45d 100644 --- a/drivers/irqchip/Kconfig +++ b/drivers/irqchip/Kconfig @@ -152,6 +152,14 @@ config I8259 @@ -102466,34 +102204,6 @@ 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 @@ -108537,7 +108247,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 3afa3f79c8a2..aeab1a8cca94 100644 +index a9a8cd148f4f..91854f16c5b9 100644 --- a/drivers/media/i2c/imx219.c +++ b/drivers/media/i2c/imx219.c @@ -77,7 +77,7 @@ @@ -136488,7 +136198,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 7732054c4621..f8fdbc83b7e8 100644 +index 4a6fafe7a249..f8fdbc83b7e8 100644 --- a/drivers/media/rc/pwm-ir-tx.c +++ b/drivers/media/rc/pwm-ir-tx.c @@ -10,6 +10,8 @@ @@ -136528,22 +136238,7 @@ { struct pwm_ir *pwm_ir = dev->priv; struct pwm_device *pwm = pwm_ir->pwm; -@@ -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); - +@@ -81,6 +89,62 @@ static int pwm_ir_tx(struct rc_dev *dev, unsigned int *txbuf, return count; } @@ -136809,7 +136504,7 @@ tristate "Renesas Synchronization Management Unit with I2C" depends on I2C && OF diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile -index 700b3600eb79..3eff03c6d6ba 100644 +index 50b42df268ea..089032ef56db 100644 --- a/drivers/mfd/Makefile +++ b/drivers/mfd/Makefile @@ -268,6 +268,7 @@ obj-$(CONFIG_MFD_STMFX) += stmfx.o @@ -136820,11 +136515,11 @@ obj-$(CONFIG_LPC_CHIP3) += lpc_sunway_chip3.o obj-$(CONFIG_SUNWAY_SUPERIO_AST2400) += sunway_ast2400.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 -+ +@@ -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 ++ +obj-$(CONFIG_MFD_RP1) += rp1.o diff --git a/drivers/mfd/bcm2835-pm.c b/drivers/mfd/bcm2835-pm.c index 3cb2b9423121..8b31775da7b6 100644 @@ -138640,10 +138335,10 @@ return 0; } diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c -index 3a927452a650..450683646196 100644 +index 7e39017e440f..bcbf8468d316 100644 --- a/drivers/mmc/core/mmc.c +++ b/drivers/mmc/core/mmc.c -@@ -1910,8 +1910,8 @@ static int mmc_init_card(struct mmc_host *host, u32 ocr, +@@ -1915,8 +1915,8 @@ static int mmc_init_card(struct mmc_host *host, u32 ocr, host->cqe_enabled = true; if (card->ext_csd.cmdq_en) { @@ -143229,7 +142924,7 @@ return ret; } diff --git a/drivers/mmc/host/sdhci-brcmstb.c b/drivers/mmc/host/sdhci-brcmstb.c -index c23251bb95f3..61cea31cc891 100644 +index 25664cd5e90f..58812c22280d 100644 --- a/drivers/mmc/host/sdhci-brcmstb.c +++ b/drivers/mmc/host/sdhci-brcmstb.c @@ -11,6 +11,8 @@ @@ -143241,7 +142936,7 @@ #include "sdhci-cqhci.h" #include "sdhci-pltfm.h" -@@ -26,18 +28,43 @@ +@@ -27,18 +29,43 @@ #define BRCMSTB_PRIV_FLAGS_HAS_CQE BIT(0) #define BRCMSTB_PRIV_FLAGS_GATE_CLOCK BIT(1) @@ -143285,7 +142980,7 @@ struct sdhci_ops *ops; const unsigned int flags; }; -@@ -79,6 +106,42 @@ static void sdhci_brcmstb_hs400es(struct mmc_host *mmc, struct mmc_ios *ios) +@@ -80,6 +107,42 @@ static void sdhci_brcmstb_hs400es(struct mmc_host *mmc, struct mmc_ios *ios) writel(reg, host->ioaddr + SDHCI_VENDOR); } @@ -143328,7 +143023,7 @@ static void sdhci_brcmstb_set_clock(struct sdhci_host *host, unsigned int clock) { u16 clk; -@@ -94,6 +157,17 @@ static void sdhci_brcmstb_set_clock(struct sdhci_host *host, unsigned int clock) +@@ -95,6 +158,17 @@ static void sdhci_brcmstb_set_clock(struct sdhci_host *host, unsigned int clock) sdhci_enable_clk(host, clk); } @@ -143346,7 +143041,7 @@ static void sdhci_brcmstb_set_uhs_signaling(struct sdhci_host *host, unsigned int timing) { -@@ -123,6 +197,139 @@ static void sdhci_brcmstb_set_uhs_signaling(struct sdhci_host *host, +@@ -124,6 +198,139 @@ static void sdhci_brcmstb_set_uhs_signaling(struct sdhci_host *host, sdhci_writew(host, ctrl_2, SDHCI_HOST_CONTROL2); } @@ -143486,7 +143181,7 @@ static void sdhci_brcmstb_dumpregs(struct mmc_host *mmc) { sdhci_dumpregs(mmc_priv(mmc)); -@@ -131,6 +338,7 @@ static void sdhci_brcmstb_dumpregs(struct mmc_host *mmc) +@@ -132,6 +339,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); @@ -143494,7 +143189,7 @@ u32 reg; reg = sdhci_readl(host, SDHCI_PRESENT_STATE); -@@ -140,6 +348,9 @@ static void sdhci_brcmstb_cqe_enable(struct mmc_host *mmc) +@@ -141,6 +349,9 @@ static void sdhci_brcmstb_cqe_enable(struct mmc_host *mmc) } sdhci_cqe_enable(mmc); @@ -143504,7 +143199,7 @@ } static const struct cqhci_host_ops sdhci_brcmstb_cqhci_ops = { -@@ -155,6 +366,15 @@ static struct sdhci_ops sdhci_brcmstb_ops = { +@@ -156,6 +367,15 @@ static struct sdhci_ops sdhci_brcmstb_ops = { .set_uhs_signaling = sdhci_set_uhs_signaling, }; @@ -143520,7 +143215,7 @@ static struct sdhci_ops sdhci_brcmstb_ops_7216 = { .set_clock = sdhci_brcmstb_set_clock, .set_bus_width = sdhci_set_bus_width, -@@ -179,10 +399,18 @@ static const struct brcmstb_match_priv match_priv_7216 = { +@@ -180,10 +400,18 @@ static const struct brcmstb_match_priv match_priv_7216 = { .ops = &sdhci_brcmstb_ops_7216, }; @@ -143539,7 +143234,7 @@ {}, }; -@@ -255,6 +483,8 @@ static int sdhci_brcmstb_probe(struct platform_device *pdev) +@@ -256,6 +484,8 @@ static int sdhci_brcmstb_probe(struct platform_device *pdev) struct sdhci_brcmstb_priv *priv; u32 actual_clock_mhz; struct sdhci_host *host; @@ -143548,7 +143243,7 @@ struct clk *clk; struct clk *base_clk = NULL; int res; -@@ -277,12 +507,19 @@ static int sdhci_brcmstb_probe(struct platform_device *pdev) +@@ -278,12 +508,19 @@ static int sdhci_brcmstb_probe(struct platform_device *pdev) return PTR_ERR(host); pltfm_host = sdhci_priv(host); @@ -143568,7 +143263,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)) { -@@ -295,6 +532,43 @@ static int sdhci_brcmstb_probe(struct platform_device *pdev) +@@ -296,6 +533,43 @@ static int sdhci_brcmstb_probe(struct platform_device *pdev) if (res) goto err; @@ -143612,7 +143307,7 @@ /* * Automatic clock gating does not work for SD cards that may * voltage switch so only enable it for non-removable devices. -@@ -311,6 +585,13 @@ static int sdhci_brcmstb_probe(struct platform_device *pdev) +@@ -312,6 +586,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; @@ -143626,7 +143321,7 @@ /* * Supply the existing CAPS, but clear the UHS modes. This * will allow these modes to be specified by device tree -@@ -358,7 +639,6 @@ static int sdhci_brcmstb_probe(struct platform_device *pdev) +@@ -362,7 +643,6 @@ static int sdhci_brcmstb_probe(struct platform_device *pdev) if (res) goto err; @@ -143821,7 +143516,7 @@ { return host->private; diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c -index ff41aa56564e..7e9ec325b87c 100644 +index 9796a3cb3ca6..0661dde378ad 100644 --- a/drivers/mmc/host/sdhci.c +++ b/drivers/mmc/host/sdhci.c @@ -40,7 +40,7 @@ @@ -143846,7 +143541,7 @@ sdhci_writew(host, SDHCI_MAKE_CMD(cmd->opcode, flags), SDHCI_COMMAND); return true; -@@ -3047,6 +3053,15 @@ static void sdhci_card_event(struct mmc_host *mmc) +@@ -3050,6 +3056,15 @@ static void sdhci_card_event(struct mmc_host *mmc) spin_unlock_irqrestore(&host->lock, flags); } @@ -143862,7 +143557,7 @@ static const struct mmc_host_ops sdhci_ops = { .request = sdhci_request, .post_req = sdhci_post_req, -@@ -3062,6 +3077,7 @@ static const struct mmc_host_ops sdhci_ops = { +@@ -3065,6 +3080,7 @@ static const struct mmc_host_ops sdhci_ops = { .execute_tuning = sdhci_execute_tuning, .card_event = sdhci_card_event, .card_busy = sdhci_card_busy, @@ -143870,7 +143565,7 @@ }; /*****************************************************************************\ -@@ -3209,7 +3225,7 @@ static void sdhci_timeout_timer(struct timer_list *t) +@@ -3212,7 +3228,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)) { @@ -143879,7 +143574,7 @@ mmc_hostname(host->mmc)); sdhci_err_stats_inc(host, REQ_TIMEOUT); sdhci_dumpregs(host); -@@ -3232,7 +3248,7 @@ static void sdhci_timeout_data_timer(struct timer_list *t) +@@ -3235,7 +3251,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))) { @@ -143888,7 +143583,7 @@ mmc_hostname(host->mmc)); sdhci_err_stats_inc(host, REQ_TIMEOUT); sdhci_dumpregs(host); -@@ -3296,6 +3312,11 @@ static void sdhci_cmd_irq(struct sdhci_host *host, u32 intmask, u32 *intmask_p) +@@ -3299,6 +3315,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); @@ -143900,7 +143595,7 @@ } else { host->cmd->error = -EILSEQ; if (!mmc_op_tuning(host->cmd->opcode)) -@@ -4574,6 +4595,15 @@ int sdhci_setup_host(struct sdhci_host *host) +@@ -4583,6 +4604,15 @@ int sdhci_setup_host(struct sdhci_host *host) !(host->quirks2 & SDHCI_QUIRK2_BROKEN_DDR50)) mmc->caps |= MMC_CAP_UHS_DDR50; @@ -143917,10 +143612,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 f219bdea8f28..112402286f73 100644 +index a315cee69809..45121666b87d 100644 --- a/drivers/mmc/host/sdhci.h +++ b/drivers/mmc/host/sdhci.h -@@ -486,6 +486,14 @@ struct sdhci_host { +@@ -487,6 +487,14 @@ struct sdhci_host { /* Issue CMD and DATA reset together */ #define SDHCI_QUIRK2_ISSUE_CMD_DAT_RESET_TOGETHER (1<<19) @@ -143935,7 +143630,7 @@ int irq; /* Device IRQ */ void __iomem *ioaddr; /* Mapped address */ phys_addr_t mapbase; /* physical address base */ -@@ -668,6 +676,7 @@ struct sdhci_ops { +@@ -669,6 +677,7 @@ struct sdhci_ops { void (*request_done)(struct sdhci_host *host, struct mmc_request *mrq); void (*dump_vendor_regs)(struct sdhci_host *host); @@ -143944,7 +143639,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 89c8ddc6565a..0ca1dcc04002 100644 +index 79d096a371ae..0b7764c4ab84 100644 --- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c +++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c @@ -67,6 +67,12 @@ @@ -143960,7 +143655,7 @@ static inline void bcmgenet_writel(u32 value, void __iomem *offset) { -@@ -2491,6 +2497,11 @@ static void reset_umac(struct bcmgenet_priv *priv) +@@ -2495,6 +2501,11 @@ static void reset_umac(struct bcmgenet_priv *priv) bcmgenet_rbuf_ctrl_set(priv, 0); udelay(10); @@ -143970,9 +143665,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); - udelay(2); -@@ -2660,7 +2671,7 @@ static void bcmgenet_init_tx_ring(struct bcmgenet_priv *priv, +@@ -2666,7 +2677,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); @@ -143981,42 +143676,7 @@ /* Disable rate control for now */ bcmgenet_tdma_ring_writel(priv, index, flow_period_val, TDMA_FLOW_PERIOD); -@@ -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) +@@ -3441,6 +3452,17 @@ static int bcmgenet_open(struct net_device *dev) bcmgenet_phy_pause_set(dev, priv->rx_pause, priv->tx_pause); @@ -144034,7 +143694,7 @@ bcmgenet_netif_start(dev); netif_tx_start_all_queues(dev); -@@ -4141,9 +4171,12 @@ static int bcmgenet_probe(struct platform_device *pdev) +@@ -4161,9 +4183,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 */ @@ -144048,17 +143708,8 @@ /* 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 1985c0ec4da2..4a73c1572398 100644 +index 28e2c94ef835..44e42d7d2689 100644 --- a/drivers/net/ethernet/broadcom/genet/bcmgenet.h +++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.h @@ -31,7 +31,7 @@ @@ -144071,10 +143722,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 97ea76d443ab..7f856f5a26d6 100644 +index e7c659cd3974..7a906edbb3f7 100644 --- a/drivers/net/ethernet/broadcom/genet/bcmmii.c +++ b/drivers/net/ethernet/broadcom/genet/bcmmii.c -@@ -299,14 +299,14 @@ int bcmgenet_mii_probe(struct net_device *dev) +@@ -303,14 +303,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; @@ -144626,7 +144277,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 e6f1da66c450..59f1f156d4ea 100644 +index 8a732edac15a..7b5a96607ef4 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 { @@ -144708,7 +144359,7 @@ static void r8168fp_adjust_ocp_cmd(struct rtl8169_private *tp, u32 *cmd, int type) { /* based on RTL8168FP_OOBMAC_BASE in vendor driver */ -@@ -5259,6 +5317,7 @@ static int rtl_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) +@@ -5254,6 +5312,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); @@ -144716,7 +144367,7 @@ dev->tstats = devm_netdev_alloc_pcpu_stats(&pdev->dev, struct pcpu_sw_netstats); -@@ -5415,6 +5474,12 @@ static int rtl_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) +@@ -5410,6 +5469,12 @@ static int rtl_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) if (rc) return rc; @@ -145055,7 +144706,7 @@ buf = kmalloc(maxp, GFP_KERNEL); if (!buf) { diff --git a/drivers/net/usb/smsc95xx.c b/drivers/net/usb/smsc95xx.c -index 2fa46baa589e..44aefcb23930 100644 +index 8e82184be5e7..e00a2f62e10b 100644 --- a/drivers/net/usb/smsc95xx.c +++ b/drivers/net/usb/smsc95xx.c @@ -79,6 +79,18 @@ static bool turbo_mode = true; @@ -145133,26 +144784,6 @@ } 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 @@ -146113,10 +145744,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 80220685f5e4..21a61f092820 100644 +index a43af8269140..b29e8d64d9af 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/pcie.c -@@ -2207,7 +2207,7 @@ static void brcmf_pcie_setup(struct device *dev, int ret, +@@ -2212,7 +2212,7 @@ static void brcmf_pcie_setup(struct device *dev, int ret, init_waitqueue_head(&devinfo->mbdata_resp_wait); @@ -152200,19 +151831,6 @@ + }, +}; +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 @@ -152700,30 +152318,19 @@ 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 0c8c63239adb..65331cd64da1 100644 +index a1a355ba2383..65331cd64da1 100644 --- a/drivers/pwm/core.c +++ b/drivers/pwm/core.c -@@ -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, +@@ -489,24 +489,15 @@ static void pwm_apply_debug(struct pwm_device *pwm, } /** -- * pwm_apply_state() - atomically apply a new state to a PWM device +- * pwm_apply_might_sleep() - 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_state(struct pwm_device *pwm, const struct pwm_state *state) +-int pwm_apply_might_sleep(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; @@ -152732,7 +152339,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_state() from atomic context +- * configuration is active calling pwm_apply_might_sleep() from atomic context - * is a bad idea. So make it explicit that calling this function might - * sleep. - */ @@ -152741,16 +152348,10 @@ if (!pwm || !state || !state->period || state->duty_cycle > state->period) return -EINVAL; -@@ -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); +@@ -535,8 +526,57 @@ int pwm_apply_might_sleep(struct pwm_device *pwm, const struct pwm_state *state) return 0; } --EXPORT_SYMBOL_GPL(pwm_apply_state); + +/** + * pwm_apply_might_sleep() - atomically apply a new state to a PWM device @@ -152785,8 +152386,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(). @@ -152801,27 +152402,10 @@ + return __pwm_apply(pwm, state); +} +EXPORT_SYMBOL_GPL(pwm_apply_atomic); - ++ /** * pwm_capture() - capture and report a PWM signal -@@ -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); - + * @pwm: PWM device diff --git a/drivers/pwm/pwm-bcm2835.c b/drivers/pwm/pwm-bcm2835.c index bdfc2a5ec0d6..70e05ccd40ba 100644 --- a/drivers/pwm/pwm-bcm2835.c @@ -153332,81 +152916,6 @@ +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 @@ -153440,28 +152949,6 @@ 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 @@ -154599,7 +154086,7 @@ static int spi_gpio_probe(struct platform_device *pdev) diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c -index 1e08cd571d21..15d95f7172e2 100644 +index 91e067418bbb..5d8081e09ed7 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) @@ -154626,7 +154113,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 d13dc15cc191..6fae5510b58f 100644 +index b97206d47ec6..dd21a4ff9869 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) @@ -154648,15 +154135,15 @@ tmp |= spi->mode & ~SPI_MODE_MASK; spi->mode = tmp & SPI_MODE_USER_MASK; retval = spi_setup(spi); -@@ -704,6 +699,7 @@ static const struct file_operations spidev_fops = { - static struct class *spidev_class; +@@ -705,6 +700,7 @@ static struct class *spidev_class; static const struct spi_device_id spidev_spi_ids = { + { .name = "bh2228fv" }, + { .name = "spidev" }, { .name = "dh2228fv" }, { .name = "ltc2488" }, { .name = "sx1301" }, -@@ -724,7 +720,7 @@ MODULE_DEVICE_TABLE(spi, spidev_spi_ids); +@@ -725,7 +721,7 @@ MODULE_DEVICE_TABLE(spi, spidev_spi_ids); */ static int spidev_of_check(struct device *dev) { @@ -171745,10 +171232,10 @@ } diff --git a/drivers/tty/serial/sc16is7xx.c b/drivers/tty/serial/sc16is7xx.c -index f75b8bceb8ca..eea6622122af 100644 +index 7a9924d9b294..097dace67a41 100644 --- a/drivers/tty/serial/sc16is7xx.c +++ b/drivers/tty/serial/sc16is7xx.c -@@ -760,6 +760,8 @@ static bool sc16is7xx_port_irq(struct sc16is7xx_port *s, int portno) +@@ -773,6 +773,8 @@ static bool sc16is7xx_port_irq(struct sc16is7xx_port *s, int portno) if (rxlen) sc16is7xx_handle_rx(port, rxlen, iir); @@ -171757,7 +171244,7 @@ break; /* CTSRTS interrupt comes only when CTS goes inactive */ case SC16IS7XX_IIR_CTSRTS_SRC: -@@ -1191,6 +1193,9 @@ static int sc16is7xx_startup(struct uart_port *port) +@@ -1204,6 +1206,9 @@ static int sc16is7xx_startup(struct uart_port *port) SC16IS7XX_IER_MSI_BIT; sc16is7xx_port_write(port, SC16IS7XX_IER_REG, val); @@ -171768,7 +171255,7 @@ uart_port_lock_irqsave(port, &flags); sc16is7xx_enable_ms(port); diff --git a/drivers/usb/Makefile b/drivers/usb/Makefile -index 3a9a0dd4be70..64d602c5b238 100644 +index 949eca0adebe..80af388baede 100644 --- a/drivers/usb/Makefile +++ b/drivers/usb/Makefile @@ -9,6 +9,7 @@ obj-$(CONFIG_USB_COMMON) += common/ @@ -171813,10 +171300,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 7417972202b8..a3ed81c7674f 100644 +index 1ba3feb5e190..88e32e32929c 100644 --- a/drivers/usb/core/hub.c +++ b/drivers/usb/core/hub.c -@@ -5709,7 +5709,7 @@ static void port_event(struct usb_hub *hub, int port1) +@@ -5710,7 +5710,7 @@ static void port_event(struct usb_hub *hub, int port1) port_dev->over_current_count++; port_over_current_notify(port_dev); @@ -172095,10 +171582,10 @@ } diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c -index 7d50c81ce97e..192c22bec46e 100644 +index 674467b7638e..b9fb1c1a732d 100644 --- a/drivers/usb/dwc3/core.c +++ b/drivers/usb/dwc3/core.c -@@ -1162,6 +1162,24 @@ static void dwc3_config_threshold(struct dwc3 *dwc) +@@ -1181,6 +1181,24 @@ static void dwc3_config_threshold(struct dwc3 *dwc) } } @@ -172123,7 +171610,7 @@ /** * dwc3_core_init - Low-level initialization of DWC3 Core * @dwc: Pointer to our controller context structure -@@ -1242,6 +1260,8 @@ static int dwc3_core_init(struct dwc3 *dwc) +@@ -1246,6 +1264,8 @@ static int dwc3_core_init(struct dwc3 *dwc) dwc3_set_incr_burst_type(dwc); @@ -172132,7 +171619,7 @@ ret = dwc3_phy_power_on(dwc); if (ret) goto err_exit_phy; -@@ -1306,6 +1326,9 @@ static int dwc3_core_init(struct dwc3 *dwc) +@@ -1310,6 +1330,9 @@ static int dwc3_core_init(struct dwc3 *dwc) if (dwc->parkmode_disable_hs_quirk) reg |= DWC3_GUCTL1_PARKMODE_DISABLE_HS; @@ -172142,7 +171629,7 @@ if (DWC3_VER_IS_WITHIN(DWC3, 290A, ANY) && (dwc->maximum_speed == USB_SPEED_HIGH || dwc->maximum_speed == USB_SPEED_FULL)) -@@ -1316,6 +1339,24 @@ static int dwc3_core_init(struct dwc3 *dwc) +@@ -1320,6 +1343,24 @@ static int dwc3_core_init(struct dwc3 *dwc) dwc3_config_threshold(dwc); @@ -172167,7 +171654,7 @@ return 0; err_power_off_phy: -@@ -1459,6 +1500,7 @@ static void dwc3_get_properties(struct dwc3 *dwc) +@@ -1463,6 +1504,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; @@ -172175,7 +171662,7 @@ const char *usb_psy_name; int ret; -@@ -1481,6 +1523,9 @@ static void dwc3_get_properties(struct dwc3 *dwc) +@@ -1485,6 +1527,9 @@ static void dwc3_get_properties(struct dwc3 *dwc) */ tx_fifo_resize_max_num = 6; @@ -172185,7 +171672,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); -@@ -1582,6 +1627,8 @@ static void dwc3_get_properties(struct dwc3 *dwc) +@@ -1586,6 +1631,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"); @@ -172194,7 +171681,7 @@ dwc->gfladj_refclk_lpm_sel = device_property_read_bool(dev, "snps,gfladj-refclk-lpm-sel-quirk"); -@@ -1602,6 +1649,9 @@ static void dwc3_get_properties(struct dwc3 *dwc) +@@ -1606,6 +1653,9 @@ static void dwc3_get_properties(struct dwc3 *dwc) dwc->dis_split_quirk = device_property_read_bool(dev, "snps,dis-split-quirk"); @@ -172204,7 +171691,7 @@ dwc->lpm_nyet_threshold = lpm_nyet_threshold; dwc->tx_de_emphasis = tx_de_emphasis; -@@ -1619,6 +1669,8 @@ static void dwc3_get_properties(struct dwc3 *dwc) +@@ -1623,6 +1673,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; @@ -172213,7 +171700,7 @@ dwc->imod_interval = 0; dwc->tx_fifo_resize_max_num = tx_fifo_resize_max_num; -@@ -1894,6 +1946,12 @@ static int dwc3_probe(struct platform_device *pdev) +@@ -1898,6 +1950,12 @@ static int dwc3_probe(struct platform_device *pdev) dwc3_get_properties(dwc); @@ -172227,7 +171714,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 5e6ead35dffc..7a7af6caae91 100644 +index 07b062c2f647..d5e5e3af84d0 100644 --- a/drivers/usb/dwc3/core.h +++ b/drivers/usb/dwc3/core.h @@ -185,6 +185,9 @@ @@ -172273,7 +171760,7 @@ * @tx_de_emphasis_quirk: set if we enable Tx de-emphasis quirk * @tx_de_emphasis: Tx de-emphasis value * 0 - -6dB de-emphasis -@@ -1293,6 +1300,7 @@ struct dwc3 { +@@ -1294,6 +1301,7 @@ struct dwc3 { u8 tx_max_burst_prd; u8 tx_fifo_resize_max_num; u8 clear_stall_protocol; @@ -172281,7 +171768,7 @@ const char *hsphy_interface; -@@ -1336,6 +1344,7 @@ struct dwc3 { +@@ -1337,6 +1345,7 @@ struct dwc3 { unsigned ulpi_ext_vbus_drv:1; unsigned parkmode_disable_ss_quirk:1; unsigned parkmode_disable_hs_quirk:1; @@ -172290,10 +171777,10 @@ unsigned tx_de_emphasis_quirk:1; diff --git a/drivers/usb/dwc3/host.c b/drivers/usb/dwc3/host.c -index f6a020d77fa1..799ab2a42995 100644 +index 6c143f7d2410..53c32d58706d 100644 --- a/drivers/usb/dwc3/host.c +++ b/drivers/usb/dwc3/host.c -@@ -61,16 +61,23 @@ static int dwc3_host_get_irq(struct dwc3 *dwc) +@@ -82,16 +82,23 @@ static int dwc3_host_get_irq(struct dwc3 *dwc) int dwc3_host_init(struct dwc3 *dwc) { @@ -176000,23 +175487,6 @@ + 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 @@ -232194,7 +231664,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 44a749fdcafd..71ea283a4f23 100644 +index ac42ea2795c5..078e49b5ef87 100644 --- a/drivers/usb/host/xhci-pci.c +++ b/drivers/usb/host/xhci-pci.c @@ -27,6 +27,8 @@ @@ -232206,7 +231676,7 @@ /* Device for a quirk */ #define PCI_VENDOR_ID_FRESCO_LOGIC 0x1b73 #define PCI_DEVICE_ID_FRESCO_LOGIC_PDK 0x1000 -@@ -290,6 +292,16 @@ static int xhci_pci_reinit(struct xhci_hcd *xhci, struct pci_dev *pdev) +@@ -291,6 +293,16 @@ static int xhci_pci_reinit(struct xhci_hcd *xhci, struct pci_dev *pdev) return 0; } @@ -232223,7 +231693,7 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci) { struct pci_dev *pdev = to_pci_dev(dev); -@@ -479,8 +491,15 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci) +@@ -486,8 +498,15 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci) pdev->device == 0x3432) xhci->quirks |= XHCI_BROKEN_STREAMS; @@ -232241,7 +231711,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 c91b6348aa30..82fddeb2ffe7 100644 +index 8ef5b6773a53..3de4cb2bf5b3 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, @@ -232314,7 +231784,7 @@ } /* This function gets called from contexts where it cannot sleep */ -@@ -3596,6 +3628,48 @@ static int xhci_align_td(struct xhci_hcd *xhci, struct urb *urb, u32 enqd_len, +@@ -3627,6 +3659,48 @@ static int xhci_align_td(struct xhci_hcd *xhci, struct urb *urb, u32 enqd_len, return 1; } @@ -232363,7 +231833,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) -@@ -3752,6 +3826,8 @@ int xhci_queue_bulk_tx(struct xhci_hcd *xhci, gfp_t mem_flags, +@@ -3783,6 +3857,8 @@ int xhci_queue_bulk_tx(struct xhci_hcd *xhci, gfp_t mem_flags, } check_trb_math(urb, enqd_len); @@ -232372,7 +231842,7 @@ giveback_first_trb(xhci, slot_id, ep_index, urb->stream_id, start_cycle, start_trb); return 0; -@@ -3887,6 +3963,8 @@ int xhci_queue_ctrl_tx(struct xhci_hcd *xhci, gfp_t mem_flags, +@@ -3918,6 +3994,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); @@ -232382,10 +231852,10 @@ start_cycle, start_trb); return 0; diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c -index 573b5784d1c3..6515eb72500a 100644 +index 3c9b4ae3d33b..42711549f16c 100644 --- a/drivers/usb/host/xhci.c +++ b/drivers/usb/host/xhci.c -@@ -1486,6 +1486,109 @@ static int xhci_check_maxpacket(struct xhci_hcd *xhci, unsigned int slot_id, +@@ -1496,6 +1496,109 @@ static int xhci_check_maxpacket(struct xhci_hcd *xhci, unsigned int slot_id, return ret; } @@ -232495,7 +231965,7 @@ /* * non-error returns are a promise to giveback() the urb later * we drop ownership so next owner (or urb unlink) can get it -@@ -5316,6 +5419,7 @@ static const struct hc_driver xhci_hc_driver = { +@@ -5326,6 +5429,7 @@ static const struct hc_driver xhci_hc_driver = { .endpoint_reset = xhci_endpoint_reset, .check_bandwidth = xhci_check_bandwidth, .reset_bandwidth = xhci_reset_bandwidth, @@ -232504,10 +231974,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 d57471a9e643..56c8d5dc340f 100644 +index 53998c16f035..03ae6a902172 100644 --- a/drivers/usb/host/xhci.h +++ b/drivers/usb/host/xhci.h -@@ -1679,8 +1679,9 @@ struct urb_priv { +@@ -1680,8 +1680,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. @@ -232519,7 +231989,7 @@ /* Poll every 60 seconds */ #define POLL_TIMEOUT 60 /* Stop endpoint command timeout (secs) for URB cancellation watchdog timer */ -@@ -1914,6 +1915,11 @@ struct xhci_hcd { +@@ -1915,6 +1916,11 @@ struct xhci_hcd { #define XHCI_ZHAOXIN_TRB_FETCH BIT_ULL(45) #define XHCI_ZHAOXIN_HOST BIT_ULL(46) @@ -232579,90 +232049,6 @@ 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 @@ -232789,7 +232175,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 35b3ca2fb50a..9682b8711f71 100644 +index 2ada2b100c51..9198e18aea2d 100644 --- a/drivers/video/fbdev/Kconfig +++ b/drivers/video/fbdev/Kconfig @@ -61,6 +61,21 @@ config FB_MACMODES @@ -234569,19 +233955,6 @@ +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 @@ -237345,7 +236718,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 c0aec0d4d664..4c44d3ed89b8 100644 +index 900262f4c234..48bfdd398fb0 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); @@ -238244,7 +237617,7 @@ + +#endif /* _VC_MEM_H */ diff --git a/include/linux/fb.h b/include/linux/fb.h -index ab2a9f4163c7..703dd9cd4bd2 100644 +index 195513d589c2..146c0b309265 100644 --- a/include/linux/fb.h +++ b/include/linux/fb.h @@ -504,6 +504,7 @@ struct fb_info { @@ -238276,7 +237649,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 98acb1d50bd9..a0804d0f1f5e 100644 +index 293219ee6fb9..2a798ab6bec5 100644 --- a/include/linux/iommu.h +++ b/include/linux/iommu.h @@ -693,16 +693,20 @@ struct iommu_domain_ops { @@ -238303,7 +237676,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 aa16dc2a8230..9c7ad6eada2c 100644 +index d3056bc6f0a1..eafe6034550f 100644 --- a/include/linux/leds.h +++ b/include/linux/leds.h @@ -115,6 +115,9 @@ struct led_classdev { @@ -238680,54 +238053,9 @@ + +#endif /* _PLAT_BCM2708_DMA_H */ diff --git a/include/linux/pwm.h b/include/linux/pwm.h -index fe0f38ce1bde..4bfbd25ade06 100644 +index 63426d8255e4..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 @@ -238744,42 +238072,18 @@ /* only used internally by the PWM framework */ struct list_head list; -@@ -309,7 +311,8 @@ struct pwm_chip { - +@@ -310,6 +312,7 @@ struct pwm_chip { #if IS_ENABLED(CONFIG_PWM) /* PWM user APIs */ --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_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); /** -@@ -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); +@@ -380,6 +383,17 @@ static inline void pwm_disable(struct pwm_device *pwm) + 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 @@ -238789,22 +238093,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; @@ -238824,15 +238128,6 @@ } 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 @@ -239820,7 +239115,7 @@ #define V4L2_PIX_FMT_PRIV_MAGIC 0xfeedcafe diff --git a/kernel/cgroup/cgroup.c b/kernel/cgroup/cgroup.c -index dd8eed3c6e31..7b717aa93c47 100644 +index ef9da2e19aad..19c9df92f89b 100644 --- a/kernel/cgroup/cgroup.c +++ b/kernel/cgroup/cgroup.c @@ -6170,6 +6170,9 @@ int __init cgroup_init_early(void) @@ -239907,10 +239202,10 @@ for (;;) { tmp = *p; diff --git a/mm/page_alloc.c b/mm/page_alloc.c -index 4652dc453964..b9ab4d4b2353 100644 +index 52382ba24232..e987fac9ed69 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c -@@ -206,6 +206,27 @@ EXPORT_SYMBOL(node_states); +@@ -207,6 +207,27 @@ EXPORT_SYMBOL(node_states); gfp_t gfp_allowed_mask __read_mostly = GFP_BOOT_MASK; @@ -239938,7 +239233,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 -@@ -2123,12 +2144,13 @@ __rmqueue(struct zone *zone, unsigned int order, int migratetype, +@@ -2107,12 +2128,13 @@ __rmqueue(struct zone *zone, unsigned int order, int migratetype, if (IS_ENABLED(CONFIG_CMA)) { /* * Balance movable allocations between regular and CMA areas by @@ -239956,10 +239251,10 @@ if (page) return page; diff --git a/net/bluetooth/hci_sync.c b/net/bluetooth/hci_sync.c -index 1bc58b324b73..e2ae1bd4dfd0 100644 +index 38fee34887d8..7778e0dbaa6f 100644 --- a/net/bluetooth/hci_sync.c +++ b/net/bluetooth/hci_sync.c -@@ -4737,6 +4737,7 @@ static const struct { +@@ -4707,6 +4707,7 @@ static const struct { */ static int hci_dev_setup_sync(struct hci_dev *hdev) { @@ -239967,7 +239262,7 @@ int ret = 0; bool invalid_bdaddr; size_t i; -@@ -4765,7 +4766,8 @@ static int hci_dev_setup_sync(struct hci_dev *hdev) +@@ -4735,7 +4736,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) && @@ -241452,7 +240747,7 @@ +0x9f, +0x21, diff --git a/scripts/Makefile.dtbinst b/scripts/Makefile.dtbinst -index 4405d5b67578..9d8f14e3c732 100644 +index fa3ad33a19df..38af1db2a98e 100644 --- a/scripts/Makefile.dtbinst +++ b/scripts/Makefile.dtbinst @@ -18,9 +18,10 @@ include $(srctree)/scripts/Kbuild.include @@ -241476,10 +240771,10 @@ .PHONY: $(PHONY) diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib -index 68d0134bdbf9..116cfae5fa07 100644 +index 9443c7ca1183..0ad40aa42efe 100644 --- a/scripts/Makefile.lib +++ b/scripts/Makefile.lib -@@ -346,6 +346,7 @@ DTC_FLAGS += -Wno-interrupt_provider \ +@@ -356,6 +356,7 @@ DTC_FLAGS += -Wno-interrupt_provider \ # Disable noisy checks by default ifeq ($(findstring 1,$(KBUILD_EXTRA_WARN)),) DTC_FLAGS += -Wno-unit_address_vs_reg \ @@ -241487,7 +240782,7 @@ -Wno-avoid_unnecessary_addr_size \ -Wno-alias_paths \ -Wno-graph_child_address \ -@@ -421,6 +422,24 @@ $(obj)/%.dtb: $(src)/%.dts $(DTC) $(DT_TMP_SCHEMA) FORCE +@@ -435,6 +436,24 @@ $(obj)/%.dtb: $(src)/%.dts $(DTC) $(DT_TMP_SCHEMA) FORCE $(obj)/%.dtbo: $(src)/%.dtso $(DTC) FORCE $(call if_changed_dep,dtc) @@ -257812,10 +257107,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 09712e61c606..48e0226b2d34 100644 +index b437b14d838a..6f5a7a51f327 100644 --- a/sound/usb/quirks.c +++ b/sound/usb/quirks.c -@@ -2185,6 +2185,8 @@ static const struct usb_audio_quirk_flags_table quirk_flags_table = { +@@ -2189,6 +2189,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 a8b87098c93aa630d286de4af9637a247d55a370 Mon Sep 17 00:00:00 2001 +From b000137e06f399ac756aa2374e77e724d245f19c Mon Sep 17 00:00:00 2001 From: zhangyu <zhangyu4@kylinos.cn> -Date: Fri, 17 May 2024 15:06:01 +0800 -Subject: PATCH rpi-rt +Date: Thu, 22 Aug 2024 09:32:29 +0800 +Subject: PATCH rt-patrch --- 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 | 5 +- + drivers/gpu/drm/i915/gt/intel_breadcrumbs.c | 7 +- .../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 | 1 + + kernel/sched/sched.h | 3 +- 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, 5041 insertions(+), 1542 deletions(-) + 164 files changed, 5047 insertions(+), 1540 deletions(-) create mode 100644 kernel/printk/nbcon.c diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig -index 2483ce304..52707a682 100644 +index 749935e2e..46910150c 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 a1ff693e4..adcc34042 100644 +index 7e8773a2d..9fde36fcb 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. -@@ -243,7 +271,7 @@ static void vfp_panic(char *reason, u32 inst) +@@ -240,7 +268,7 @@ static void vfp_panic(char *reason, u32 inst) /* * Process bitmask of exception conditions. */ @@ -281,7 +281,7 @@ { int si_code = 0; -@@ -251,8 +279,7 @@ static void vfp_raise_exceptions(u32 exceptions, u32 inst, u32 fpscr, struct pt_ +@@ -248,8 +276,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 @@ } /* -@@ -280,8 +307,7 @@ static void vfp_raise_exceptions(u32 exceptions, u32 inst, u32 fpscr, struct pt_ +@@ -277,8 +304,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 @@ } /* -@@ -327,6 +353,8 @@ static u32 vfp_emulate_instruction(u32 inst, u32 fpscr, struct pt_regs *regs) +@@ -324,6 +350,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); -@@ -372,8 +400,8 @@ static void VFP_bounce(u32 trigger, u32 fpexc, struct pt_regs *regs) +@@ -369,8 +397,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 @@ } /* -@@ -397,14 +425,14 @@ static void VFP_bounce(u32 trigger, u32 fpexc, struct pt_regs *regs) +@@ -394,14 +422,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 -@@ -416,7 +444,13 @@ static void VFP_bounce(u32 trigger, u32 fpexc, struct pt_regs *regs) +@@ -413,7 +441,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) -@@ -518,11 +552,9 @@ static inline void vfp_pm_init(void) { } +@@ -512,11 +546,9 @@ static inline void vfp_pm_init(void) { } */ void vfp_sync_hwstate(struct thread_info *thread) { @@ -367,7 +367,7 @@ u32 fpexc = fmrx(FPEXC); /* -@@ -534,8 +566,7 @@ void vfp_sync_hwstate(struct thread_info *thread) +@@ -527,8 +559,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. */ -@@ -695,7 +726,7 @@ static int vfp_support_entry(struct pt_regs *regs, u32 trigger) +@@ -683,7 +714,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); /* -@@ -760,6 +791,7 @@ static int vfp_support_entry(struct pt_regs *regs, u32 trigger) +@@ -748,6 +779,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))) { -@@ -774,17 +806,17 @@ static int vfp_support_entry(struct pt_regs *regs, u32 trigger) +@@ -762,17 +794,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; } -@@ -831,7 +863,7 @@ void kernel_neon_begin(void) +@@ -819,7 +851,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 -@@ -863,7 +895,7 @@ void kernel_neon_end(void) +@@ -850,7 +882,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 bb49f48de..699c3f58a 100644 +index 501ec560a..eb0d9a8e0 100644 --- a/arch/arm64/Kconfig +++ b/arch/arm64/Kconfig -@@ -98,6 +98,7 @@ config ARM64 +@@ -99,6 +99,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 e8c412969..c61e29dea 100644 +index b1e6d275c..9a8d3970d 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 a993a3716..aa7ab6207 100644 +index 958a491fb..acb9d6f2a 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig -@@ -121,6 +121,7 @@ config X86 +@@ -122,6 +122,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 -@@ -277,6 +278,7 @@ config X86 +@@ -278,6 +279,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 bd6a7857c..d45dfd10b 100644 +index 831fa4a12..5af3ebec0 100644 --- a/drivers/acpi/processor_idle.c +++ b/drivers/acpi/processor_idle.c -@@ -108,7 +108,7 @@ static const struct dmi_system_id processor_power_dmi_table = { +@@ -107,7 +107,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 @@ static bool dcn20_validate_bandwidth_internal(struct dc *dc, struct dc_state *co +@@ -2062,16 +2061,14 @@ validate_fail: out = false; validate_out: @@ -1202,7 +1202,7 @@ DC_LOGGER_INIT(dc->ctx->logger); BW_VAL_TRACE_COUNT(); -@@ -2362,7 +2358,6 @@ bool dcn21_validate_bandwidth_fp(struct dc *dc, +@@ -2362,7 +2358,6 @@ validate_fail: out = false; validate_out: @@ -1325,24 +1325,25 @@ 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 ecc990ec1..8d04b1068 100644 +index f2973cd1a..aa77f8601 100644 --- a/drivers/gpu/drm/i915/gt/intel_breadcrumbs.c +++ b/drivers/gpu/drm/i915/gt/intel_breadcrumbs.c -@@ -312,10 +312,9 @@ void __intel_breadcrumbs_park(struct intel_breadcrumbs *b) +@@ -315,7 +315,12 @@ void __intel_breadcrumbs_park(struct intel_breadcrumbs *b) + return; + /* Kick the work once more to drain the signalers, and disarm the irq */ - 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); ++ irq_work_sync(&b->irq_work); ++ while (READ_ONCE(b->irq_armed) && !atomic_read(&b->active)) { + 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 42e09f158..ac80e229f 100644 +index 2065be5a1..73d815fc5 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) @@ -1372,7 +1373,7 @@ return; /* leave this for another sibling */ } -@@ -1591,7 +1591,7 @@ static void execlists_dequeue(struct intel_engine_cs *engine) +@@ -1591,7 +1591,7 @@ done: */ sched_engine->queue_priority_hint = queue_prio(sched_engine); i915_sched_engine_reset_on_empty(sched_engine); @@ -1381,7 +1382,7 @@ /* * We can skip poking the HW if we ended up with exactly the same set -@@ -1617,13 +1617,6 @@ static void execlists_dequeue(struct intel_engine_cs *engine) +@@ -1617,13 +1617,6 @@ done: } } @@ -1596,7 +1597,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 aa5aff046..ff0662c68 100644 +index 9afd5979c..db23b3a02 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) @@ -1648,7 +1649,7 @@ serial8250_do_shutdown(port); } -@@ -788,7 +788,7 @@ static int brcmuart_handle_irq(struct uart_port *p) +@@ -807,7 +807,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)) { @@ -1657,7 +1658,7 @@ status = serial_port_in(p, UART_LSR); if ((status & UART_LSR_DR) == 0) { -@@ -813,7 +813,7 @@ static int brcmuart_handle_irq(struct uart_port *p) +@@ -832,7 +832,7 @@ static int brcmuart_handle_irq(struct uart_port *p) handled = 1; } @@ -1666,7 +1667,7 @@ if (handled) return 1; } -@@ -831,7 +831,7 @@ static enum hrtimer_restart brcmuart_hrtimer_func(struct hrtimer *t) +@@ -850,7 +850,7 @@ static enum hrtimer_restart brcmuart_hrtimer_func(struct hrtimer *t) if (priv->shutdown) return HRTIMER_NORESTART; @@ -1675,7 +1676,7 @@ status = serial_port_in(p, UART_LSR); /* -@@ -855,7 +855,7 @@ static enum hrtimer_restart brcmuart_hrtimer_func(struct hrtimer *t) +@@ -874,7 +874,7 @@ static enum hrtimer_restart brcmuart_hrtimer_func(struct hrtimer *t) status |= UART_MCR_RTS; serial_port_out(p, UART_MCR, status); } @@ -1684,7 +1685,7 @@ return HRTIMER_NORESTART; } -@@ -1154,10 +1154,10 @@ static int __maybe_unused brcmuart_suspend(struct device *dev) +@@ -1173,10 +1173,10 @@ static int __maybe_unused brcmuart_suspend(struct device *dev) * This will prevent resume from enabling RTS before the * baud rate has been restored. */ @@ -1697,7 +1698,7 @@ serial8250_suspend_port(priv->line); clk_disable_unprepare(priv->baud_mux_clk); -@@ -1196,10 +1196,10 @@ static int __maybe_unused brcmuart_resume(struct device *dev) +@@ -1215,10 +1215,10 @@ static int __maybe_unused brcmuart_resume(struct device *dev) if (priv->saved_mctrl & TIOCM_RTS) { /* Restore RTS */ @@ -1711,10 +1712,10 @@ return 0; diff --git a/drivers/tty/serial/8250/8250_core.c b/drivers/tty/serial/8250/8250_core.c -index e561f21cd..594201fbc 100644 +index 3449f8790..30434718f 100644 --- a/drivers/tty/serial/8250/8250_core.c +++ b/drivers/tty/serial/8250/8250_core.c -@@ -271,7 +271,7 @@ static void serial8250_backup_timeout(struct timer_list *t) +@@ -259,7 +259,7 @@ static void serial8250_backup_timeout(struct timer_list *t) unsigned int iir, ier = 0, lsr; unsigned long flags; @@ -1723,7 +1724,7 @@ /* * Must disable interrupts or else we risk racing with the interrupt -@@ -304,7 +304,7 @@ static void serial8250_backup_timeout(struct timer_list *t) +@@ -292,7 +292,7 @@ static void serial8250_backup_timeout(struct timer_list *t) if (up->port.irq) serial_out(up, UART_IER, ier); @@ -1732,7 +1733,7 @@ /* Standard timer interval plus 0.2s to keep the port running */ mod_timer(&up->timer, -@@ -607,6 +607,7 @@ serial8250_register_ports(struct uart_driver *drv, struct device *dev) +@@ -592,6 +592,7 @@ serial8250_register_ports(struct uart_driver *drv, struct device *dev) #ifdef CONFIG_SERIAL_8250_CONSOLE @@ -1740,7 +1741,7 @@ static void univ8250_console_write(struct console *co, const char *s, unsigned int count) { -@@ -614,6 +615,37 @@ static void univ8250_console_write(struct console *co, const char *s, +@@ -599,6 +600,37 @@ static void univ8250_console_write(struct console *co, const char *s, serial8250_console_write(up, s, count); } @@ -1778,7 +1779,7 @@ static int univ8250_console_setup(struct console *co, char *options) { -@@ -713,12 +745,20 @@ static int univ8250_console_match(struct console *co, char *name, int idx, +@@ -698,12 +730,20 @@ static int univ8250_console_match(struct console *co, char *name, int idx, static struct console univ8250_console = { .name = "ttyS", @@ -1800,7 +1801,7 @@ .index = -1, .data = &serial8250_reg, }; -@@ -1007,11 +1047,11 @@ static void serial_8250_overrun_backoff_work(struct work_struct *work) +@@ -992,11 +1032,11 @@ static void serial_8250_overrun_backoff_work(struct work_struct *work) struct uart_port *port = &up->port; unsigned long flags; @@ -1814,7 +1815,7 @@ } /** -@@ -1209,9 +1249,9 @@ void serial8250_unregister_port(int line) +@@ -1194,9 +1234,9 @@ void serial8250_unregister_port(int line) if (uart->em485) { unsigned long flags; @@ -1896,10 +1897,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 4d20f3aa2..342786064 100644 +index 27430fdd9..17be6ad24 100644 --- a/drivers/tty/serial/8250/8250_exar.c +++ b/drivers/tty/serial/8250/8250_exar.c -@@ -201,9 +201,9 @@ static int xr17v35x_startup(struct uart_port *port) +@@ -243,9 +243,9 @@ static int xr17v35x_startup(struct uart_port *port) * * Synchronize UART_IER access against the console. */ @@ -1939,7 +1940,7 @@ } diff --git a/drivers/tty/serial/8250/8250_mtk.c b/drivers/tty/serial/8250/8250_mtk.c -index 74da5676c..23457daae 100644 +index 28f9a2679..33699e86e 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) @@ -1960,7 +1961,7 @@ } static void mtk8250_rx_dma(struct uart_8250_port *up) -@@ -368,7 +368,7 @@ mtk8250_set_termios(struct uart_port *port, struct ktermios *termios, +@@ -372,7 +372,7 @@ mtk8250_set_termios(struct uart_port *port, struct ktermios *termios, * Ok, we're now changing the port state. Do it with * interrupts disabled. */ @@ -1969,7 +1970,7 @@ /* * Update the per-port timeout. -@@ -416,7 +416,7 @@ mtk8250_set_termios(struct uart_port *port, struct ktermios *termios, +@@ -420,7 +420,7 @@ mtk8250_set_termios(struct uart_port *port, struct ktermios *termios, if (uart_console(port)) up->port.cons->cflag = termios->c_cflag; @@ -1979,10 +1980,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 346167afe..db5519ce0 100644 +index 8f472a208..78fc1f17d 100644 --- a/drivers/tty/serial/8250/8250_omap.c +++ b/drivers/tty/serial/8250/8250_omap.c -@@ -401,7 +401,7 @@ static void omap_8250_set_termios(struct uart_port *port, +@@ -405,7 +405,7 @@ static void omap_8250_set_termios(struct uart_port *port, * interrupts disabled. */ pm_runtime_get_sync(port->dev); @@ -1991,7 +1992,7 @@ /* * Update the per-port timeout. -@@ -504,7 +504,7 @@ static void omap_8250_set_termios(struct uart_port *port, +@@ -508,7 +508,7 @@ static void omap_8250_set_termios(struct uart_port *port, } omap8250_restore_regs(up); @@ -2000,7 +2001,7 @@ pm_runtime_mark_last_busy(port->dev); pm_runtime_put_autosuspend(port->dev); -@@ -529,7 +529,7 @@ static void omap_8250_pm(struct uart_port *port, unsigned int state, +@@ -533,7 +533,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. */ @@ -2009,7 +2010,7 @@ serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B); efr = serial_in(up, UART_EFR); -@@ -541,7 +541,7 @@ static void omap_8250_pm(struct uart_port *port, unsigned int state, +@@ -545,7 +545,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); @@ -2018,7 +2019,7 @@ pm_runtime_mark_last_busy(port->dev); pm_runtime_put_autosuspend(port->dev); -@@ -660,7 +660,7 @@ static irqreturn_t omap8250_irq(int irq, void *dev_id) +@@ -676,7 +676,7 @@ static irqreturn_t omap8250_irq(int irq, void *dev_id) unsigned long delay; /* Synchronize UART_IER access against the console. */ @@ -2027,7 +2028,7 @@ up->ier = port->serial_in(port, UART_IER); if (up->ier & (UART_IER_RLSI | UART_IER_RDI)) { port->ops->stop_rx(port); -@@ -670,7 +670,7 @@ static irqreturn_t omap8250_irq(int irq, void *dev_id) +@@ -686,7 +686,7 @@ static irqreturn_t omap8250_irq(int irq, void *dev_id) */ cancel_delayed_work(&up->overrun_backoff); } @@ -2036,7 +2037,7 @@ delay = msecs_to_jiffies(up->overrun_backoff_time_ms); schedule_delayed_work(&up->overrun_backoff, delay); -@@ -717,10 +717,10 @@ static int omap_8250_startup(struct uart_port *port) +@@ -733,10 +733,10 @@ static int omap_8250_startup(struct uart_port *port) } /* Synchronize UART_IER access against the console. */ @@ -2049,7 +2050,7 @@ #ifdef CONFIG_PM up->capabilities |= UART_CAP_RPM; -@@ -733,9 +733,9 @@ static int omap_8250_startup(struct uart_port *port) +@@ -749,9 +749,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)) { @@ -2061,7 +2062,7 @@ } enable_irq(up->port.irq); -@@ -761,10 +761,10 @@ static void omap_8250_shutdown(struct uart_port *port) +@@ -777,10 +777,10 @@ static void omap_8250_shutdown(struct uart_port *port) serial_out(up, UART_OMAP_EFR2, 0x0); /* Synchronize UART_IER access against the console. */ @@ -2074,7 +2075,7 @@ disable_irq_nosync(up->port.irq); dev_pm_clear_wake_irq(port->dev); -@@ -789,10 +789,10 @@ static void omap_8250_throttle(struct uart_port *port) +@@ -805,10 +805,10 @@ static void omap_8250_throttle(struct uart_port *port) pm_runtime_get_sync(port->dev); @@ -2087,7 +2088,7 @@ pm_runtime_mark_last_busy(port->dev); pm_runtime_put_autosuspend(port->dev); -@@ -807,14 +807,14 @@ static void omap_8250_unthrottle(struct uart_port *port) +@@ -823,14 +823,14 @@ static void omap_8250_unthrottle(struct uart_port *port) pm_runtime_get_sync(port->dev); /* Synchronize UART_IER access against the console. */ @@ -2104,7 +2105,7 @@ pm_runtime_mark_last_busy(port->dev); pm_runtime_put_autosuspend(port->dev); -@@ -958,7 +958,7 @@ static void __dma_rx_complete(void *param) +@@ -974,7 +974,7 @@ static void __dma_rx_complete(void *param) unsigned long flags; /* Synchronize UART_IER access against the console. */ @@ -2113,7 +2114,7 @@ /* * If the tx status is not DMA_COMPLETE, then this is a delayed -@@ -967,7 +967,7 @@ static void __dma_rx_complete(void *param) +@@ -983,7 +983,7 @@ static void __dma_rx_complete(void *param) */ if (dmaengine_tx_status(dma->rxchan, dma->rx_cookie, &state) != DMA_COMPLETE) { @@ -2122,7 +2123,7 @@ return; } __dma_rx_do_complete(p); -@@ -978,7 +978,7 @@ static void __dma_rx_complete(void *param) +@@ -994,7 +994,7 @@ static void __dma_rx_complete(void *param) omap_8250_rx_dma(p); } @@ -2131,7 +2132,7 @@ } static void omap_8250_rx_dma_flush(struct uart_8250_port *p) -@@ -1083,7 +1083,7 @@ static void omap_8250_dma_tx_complete(void *param) +@@ -1099,7 +1099,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); @@ -2140,7 +2141,7 @@ dma->tx_running = 0; -@@ -1112,7 +1112,7 @@ static void omap_8250_dma_tx_complete(void *param) +@@ -1128,7 +1128,7 @@ static void omap_8250_dma_tx_complete(void *param) serial8250_set_THRI(p); } @@ -2149,7 +2150,7 @@ } static int omap_8250_tx_dma(struct uart_8250_port *p) -@@ -1278,7 +1278,7 @@ static int omap_8250_dma_handle_irq(struct uart_port *port) +@@ -1294,7 +1294,7 @@ static int omap_8250_dma_handle_irq(struct uart_port *port) return IRQ_HANDLED; } @@ -2158,7 +2159,7 @@ status = serial_port_in(port, UART_LSR); -@@ -1758,15 +1758,15 @@ static int omap8250_runtime_resume(struct device *dev) +@@ -1774,15 +1774,15 @@ static int omap8250_runtime_resume(struct device *dev) up = serial8250_get_port(priv->line); if (up && omap8250_lost_context(up)) { @@ -2209,7 +2210,7 @@ mutex_unlock(&tport->mutex); } diff --git a/drivers/tty/serial/8250/8250_port.c b/drivers/tty/serial/8250/8250_port.c -index 8099e6a26..510bb858f 100644 +index a17803da8..2d4e775cd 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) @@ -2386,7 +2387,7 @@ serial8250_rpm_put(p); return HRTIMER_NORESTART; -@@ -1627,12 +1644,12 @@ static enum hrtimer_restart serial8250_em485_handle_start_tx(struct hrtimer *t) +@@ -1624,12 +1641,12 @@ static enum hrtimer_restart serial8250_em485_handle_start_tx(struct hrtimer *t) struct uart_8250_port *p = em485->port; unsigned long flags; @@ -2401,7 +2402,7 @@ return HRTIMER_NORESTART; } -@@ -1921,7 +1938,7 @@ int serial8250_handle_irq(struct uart_port *port, unsigned int iir) +@@ -1912,7 +1929,7 @@ int serial8250_handle_irq(struct uart_port *port, unsigned int iir) if (iir & UART_IIR_NO_INT) return 0; @@ -2410,7 +2411,7 @@ status = serial_lsr_in(up); -@@ -1991,9 +2008,9 @@ static int serial8250_tx_threshold_handle_irq(struct uart_port *port) +@@ -1982,9 +1999,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); @@ -2422,7 +2423,7 @@ } iir = serial_port_in(port, UART_IIR); -@@ -2008,10 +2025,10 @@ static unsigned int serial8250_tx_empty(struct uart_port *port) +@@ -1999,10 +2016,10 @@ static unsigned int serial8250_tx_empty(struct uart_port *port) serial8250_rpm_get(up); @@ -2435,7 +2436,7 @@ serial8250_rpm_put(up); -@@ -2073,13 +2090,13 @@ static void serial8250_break_ctl(struct uart_port *port, int break_state) +@@ -2064,13 +2081,13 @@ static void serial8250_break_ctl(struct uart_port *port, int break_state) unsigned long flags; serial8250_rpm_get(up); @@ -2451,7 +2452,7 @@ serial8250_rpm_put(up); } -@@ -2214,7 +2231,7 @@ int serial8250_do_startup(struct uart_port *port) +@@ -2205,7 +2222,7 @@ int serial8250_do_startup(struct uart_port *port) * * Synchronize UART_IER access against the console. */ @@ -2460,7 +2461,7 @@ up->acr = 0; serial_port_out(port, UART_LCR, UART_LCR_CONF_MODE_B); serial_port_out(port, UART_EFR, UART_EFR_ECB); -@@ -2224,7 +2241,7 @@ int serial8250_do_startup(struct uart_port *port) +@@ -2215,7 +2232,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); @@ -2469,7 +2470,7 @@ } if (port->type == PORT_DA830) { -@@ -2233,10 +2250,10 @@ int serial8250_do_startup(struct uart_port *port) +@@ -2224,10 +2241,10 @@ int serial8250_do_startup(struct uart_port *port) * * Synchronize UART_IER access against the console. */ @@ -2482,7 +2483,7 @@ mdelay(10); /* Enable Tx, Rx and free run mode */ -@@ -2350,7 +2367,7 @@ int serial8250_do_startup(struct uart_port *port) +@@ -2341,7 +2358,7 @@ int serial8250_do_startup(struct uart_port *port) * * Synchronize UART_IER access against the console. */ @@ -2491,7 +2492,7 @@ wait_for_xmitr(up, UART_LSR_THRE); serial_port_out_sync(port, UART_IER, UART_IER_THRI); -@@ -2362,7 +2379,7 @@ int serial8250_do_startup(struct uart_port *port) +@@ -2353,7 +2370,7 @@ int serial8250_do_startup(struct uart_port *port) iir = serial_port_in(port, UART_IIR); serial_port_out(port, UART_IER, 0); @@ -2500,7 +2501,7 @@ if (port->irqflags & IRQF_SHARED) enable_irq(port->irq); -@@ -2385,7 +2402,7 @@ int serial8250_do_startup(struct uart_port *port) +@@ -2376,7 +2393,7 @@ int serial8250_do_startup(struct uart_port *port) */ serial_port_out(port, UART_LCR, UART_LCR_WLEN8); @@ -2509,7 +2510,7 @@ if (up->port.flags & UPF_FOURPORT) { if (!up->port.irq) up->port.mctrl |= TIOCM_OUT1; -@@ -2431,7 +2448,7 @@ int serial8250_do_startup(struct uart_port *port) +@@ -2422,7 +2439,7 @@ int serial8250_do_startup(struct uart_port *port) } dont_test_tx_en: @@ -2518,7 +2519,7 @@ /* * Clear the interrupt registers again for luck, and clear the -@@ -2502,17 +2519,17 @@ void serial8250_do_shutdown(struct uart_port *port) +@@ -2493,17 +2510,17 @@ void serial8250_do_shutdown(struct uart_port *port) * * Synchronize UART_IER access against the console. */ @@ -2539,7 +2540,7 @@ if (port->flags & UPF_FOURPORT) { /* reset interrupts on the AST Fourport board */ inb((port->iobase & 0xfe0) | 0x1f); -@@ -2521,7 +2538,7 @@ void serial8250_do_shutdown(struct uart_port *port) +@@ -2512,7 +2529,7 @@ void serial8250_do_shutdown(struct uart_port *port) port->mctrl &= ~TIOCM_OUT2; serial8250_set_mctrl(port, port->mctrl); @@ -2548,7 +2549,7 @@ /* * Disable break condition and FIFOs -@@ -2757,14 +2774,14 @@ void serial8250_update_uartclk(struct uart_port *port, unsigned int uartclk) +@@ -2748,14 +2765,14 @@ void serial8250_update_uartclk(struct uart_port *port, unsigned int uartclk) quot = serial8250_get_divisor(port, baud, &frac); serial8250_rpm_get(up); @@ -2565,7 +2566,7 @@ serial8250_rpm_put(up); out_unlock: -@@ -2801,7 +2818,7 @@ serial8250_do_set_termios(struct uart_port *port, struct ktermios *termios, +@@ -2792,7 +2809,7 @@ serial8250_do_set_termios(struct uart_port *port, struct ktermios *termios, * Synchronize UART_IER access against the console. */ serial8250_rpm_get(up); @@ -2574,7 +2575,7 @@ up->lcr = cval; /* Save computed LCR */ -@@ -2904,7 +2921,7 @@ serial8250_do_set_termios(struct uart_port *port, struct ktermios *termios, +@@ -2895,7 +2912,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); @@ -2583,7 +2584,7 @@ serial8250_rpm_put(up); /* Don't rewrite B0 */ -@@ -2927,15 +2944,15 @@ void serial8250_do_set_ldisc(struct uart_port *port, struct ktermios *termios) +@@ -2918,15 +2935,15 @@ void serial8250_do_set_ldisc(struct uart_port *port, struct ktermios *termios) { if (termios->c_line == N_PPS) { port->flags |= UPF_HARDPPS_CD; @@ -2603,7 +2604,7 @@ } } } -@@ -3331,6 +3348,11 @@ static void serial8250_console_putchar(struct uart_port *port, unsigned char ch) +@@ -3322,6 +3339,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); @@ -2615,7 +2616,7 @@ } /* -@@ -3359,6 +3381,7 @@ static void serial8250_console_restore(struct uart_8250_port *up) +@@ -3350,6 +3372,7 @@ static void serial8250_console_restore(struct uart_8250_port *up) serial8250_out_MCR(up, up->mcr | UART_MCR_DTR | UART_MCR_RTS); } @@ -2623,7 +2624,7 @@ /* * Print a string to the serial port using the device FIFO * -@@ -3409,15 +3432,15 @@ void serial8250_console_write(struct uart_8250_port *up, const char *s, +@@ -3400,15 +3423,15 @@ void serial8250_console_write(struct uart_8250_port *up, const char *s, touch_nmi_watchdog(); if (oops_in_progress) @@ -2642,7 +2643,7 @@ /* check scratch reg to see if port powered off during system sleep */ if (up->canary && (up->canary != serial_port_in(port, UART_SCR))) { -@@ -3481,8 +3504,137 @@ void serial8250_console_write(struct uart_8250_port *up, const char *s, +@@ -3472,8 +3495,137 @@ void serial8250_console_write(struct uart_8250_port *up, const char *s, serial8250_modem_status(up); if (locked) @@ -2781,7 +2782,7 @@ static unsigned int probe_baud(struct uart_port *port) { -@@ -3501,6 +3653,7 @@ static unsigned int probe_baud(struct uart_port *port) +@@ -3492,6 +3644,7 @@ static unsigned int probe_baud(struct uart_port *port) int serial8250_console_setup(struct uart_port *port, char *options, bool probe) { @@ -2789,7 +2790,7 @@ int baud = 9600; int bits = 8; int parity = 'n'; -@@ -3510,6 +3663,8 @@ int serial8250_console_setup(struct uart_port *port, char *options, bool probe) +@@ -3501,6 +3654,8 @@ int serial8250_console_setup(struct uart_port *port, char *options, bool probe) if (!port->iobase && !port->membase) return -ENODEV; @@ -3052,10 +3053,10 @@ } } diff --git a/drivers/tty/serial/amba-pl011.c b/drivers/tty/serial/amba-pl011.c -index a5717655b..901928dba 100644 +index 362bbcdec..9cd660edb 100644 --- a/drivers/tty/serial/amba-pl011.c +++ b/drivers/tty/serial/amba-pl011.c -@@ -361,9 +361,9 @@ static int pl011_fifo_to_tty(struct uart_amba_port *uap) +@@ -347,9 +347,9 @@ static int pl011_fifo_to_tty(struct uart_amba_port *uap) flag = TTY_FRAME; } @@ -3067,7 +3068,7 @@ if (!sysrq) uart_insert_char(&uap->port, ch, UART011_DR_OE, ch, flag); -@@ -558,7 +558,7 @@ static void pl011_dma_tx_callback(void *data) +@@ -544,7 +544,7 @@ static void pl011_dma_tx_callback(void *data) unsigned long flags; u16 dmacr; @@ -3076,7 +3077,7 @@ if (uap->dmatx.queued) dma_unmap_single(dmatx->chan->device->dev, dmatx->dma, dmatx->len, DMA_TO_DEVICE); -@@ -579,7 +579,7 @@ static void pl011_dma_tx_callback(void *data) +@@ -565,7 +565,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; @@ -3085,7 +3086,7 @@ return; } -@@ -590,7 +590,7 @@ static void pl011_dma_tx_callback(void *data) +@@ -576,7 +576,7 @@ static void pl011_dma_tx_callback(void *data) */ pl011_start_tx_pio(uap); @@ -3094,7 +3095,7 @@ } /* -@@ -1018,7 +1018,7 @@ static void pl011_dma_rx_callback(void *data) +@@ -1004,7 +1004,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. */ @@ -3103,7 +3104,7 @@ /* * Rx data can be taken by the UART interrupts during * the DMA irq handler. So we check the residue here. -@@ -1034,7 +1034,7 @@ static void pl011_dma_rx_callback(void *data) +@@ -1020,7 +1020,7 @@ static void pl011_dma_rx_callback(void *data) ret = pl011_dma_rx_trigger_dma(uap); pl011_dma_rx_chars(uap, pending, lastbuf, false); @@ -3112,7 +3113,7 @@ /* * Do this check after we picked the DMA chars so we don't * get some IRQ immediately from RX. -@@ -1100,11 +1100,11 @@ static void pl011_dma_rx_poll(struct timer_list *t) +@@ -1086,11 +1086,11 @@ static void pl011_dma_rx_poll(struct timer_list *t) if (jiffies_to_msecs(jiffies - dmarx->last_jiffies) > uap->dmarx.poll_timeout) { @@ -3126,7 +3127,7 @@ uap->dmarx.running = false; dmaengine_terminate_all(rxchan); -@@ -1200,10 +1200,10 @@ static void pl011_dma_shutdown(struct uart_amba_port *uap) +@@ -1186,10 +1186,10 @@ static void pl011_dma_shutdown(struct uart_amba_port *uap) while (pl011_read(uap, REG_FR) & uap->vendor->fr_busy) cpu_relax(); @@ -3139,7 +3140,7 @@ if (uap->using_tx_dma) { /* In theory, this should already be done by pl011_dma_flush_buffer */ -@@ -1414,9 +1414,9 @@ static void pl011_throttle_rx(struct uart_port *port) +@@ -1400,9 +1400,9 @@ static void pl011_throttle_rx(struct uart_port *port) { unsigned long flags; @@ -3151,7 +3152,7 @@ } static void pl011_enable_ms(struct uart_port *port) -@@ -1434,7 +1434,7 @@ __acquires(&uap->port.lock) +@@ -1420,7 +1420,7 @@ __acquires(&uap->port.lock) { pl011_fifo_to_tty(uap); @@ -3160,7 +3161,7 @@ tty_flip_buffer_push(&uap->port.state->port); /* * If we were temporarily out of DMA mode for a while, -@@ -1459,7 +1459,7 @@ __acquires(&uap->port.lock) +@@ -1445,7 +1445,7 @@ __acquires(&uap->port.lock) #endif } } @@ -3169,7 +3170,7 @@ } static bool pl011_tx_char(struct uart_amba_port *uap, unsigned char c, -@@ -1570,7 +1570,7 @@ static irqreturn_t pl011_int(int irq, void *dev_id) +@@ -1551,7 +1551,7 @@ static irqreturn_t pl011_int(int irq, void *dev_id) unsigned int status, pass_counter = AMBA_ISR_PASS_LIMIT; int handled = 0; @@ -3178,7 +3179,7 @@ status = pl011_read(uap, REG_RIS) & uap->im; if (status) { do { -@@ -1600,7 +1600,7 @@ static irqreturn_t pl011_int(int irq, void *dev_id) +@@ -1581,7 +1581,7 @@ static irqreturn_t pl011_int(int irq, void *dev_id) handled = 1; } @@ -3187,7 +3188,7 @@ return IRQ_RETVAL(handled); } -@@ -1672,14 +1672,14 @@ static void pl011_break_ctl(struct uart_port *port, int break_state) +@@ -1653,14 +1653,14 @@ static void pl011_break_ctl(struct uart_port *port, int break_state) unsigned long flags; unsigned int lcr_h; @@ -3204,7 +3205,7 @@ } #ifdef CONFIG_CONSOLE_POLL -@@ -1818,7 +1818,7 @@ static void pl011_enable_interrupts(struct uart_amba_port *uap) +@@ -1799,7 +1799,7 @@ static void pl011_enable_interrupts(struct uart_amba_port *uap) unsigned long flags; unsigned int i; @@ -3213,7 +3214,7 @@ /* Clear out any spuriously appearing RX interrupts */ pl011_write(UART011_RTIS | UART011_RXIS, uap, REG_ICR); -@@ -1840,7 +1840,7 @@ static void pl011_enable_interrupts(struct uart_amba_port *uap) +@@ -1821,7 +1821,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); @@ -3222,7 +3223,7 @@ } static void pl011_unthrottle_rx(struct uart_port *port) -@@ -1848,7 +1848,7 @@ static void pl011_unthrottle_rx(struct uart_port *port) +@@ -1829,7 +1829,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; @@ -3231,7 +3232,7 @@ uap->im = UART011_RTIM; if (!pl011_dma_rx_running(uap)) -@@ -1856,7 +1856,7 @@ static void pl011_unthrottle_rx(struct uart_port *port) +@@ -1837,7 +1837,7 @@ static void pl011_unthrottle_rx(struct uart_port *port) pl011_write(uap->im, uap, REG_IMSC); @@ -3240,7 +3241,7 @@ } static int pl011_startup(struct uart_port *port) -@@ -1876,7 +1876,7 @@ static int pl011_startup(struct uart_port *port) +@@ -1857,7 +1857,7 @@ static int pl011_startup(struct uart_port *port) pl011_write(uap->vendor->ifls, uap, REG_IFLS); @@ -3249,7 +3250,7 @@ cr = pl011_read(uap, REG_CR); cr &= UART011_CR_RTS | UART011_CR_DTR; -@@ -1887,7 +1887,7 @@ static int pl011_startup(struct uart_port *port) +@@ -1868,7 +1868,7 @@ static int pl011_startup(struct uart_port *port) pl011_write(cr, uap, REG_CR); @@ -3258,7 +3259,7 @@ /* * initialise the old status of the modem signals -@@ -1948,12 +1948,12 @@ static void pl011_disable_uart(struct uart_amba_port *uap) +@@ -1929,12 +1929,12 @@ static void pl011_disable_uart(struct uart_amba_port *uap) unsigned int cr; uap->port.status &= ~(UPSTAT_AUTOCTS | UPSTAT_AUTORTS); @@ -3273,7 +3274,7 @@ /* * disable break condition and fifos -@@ -1965,14 +1965,14 @@ static void pl011_disable_uart(struct uart_amba_port *uap) +@@ -1946,14 +1946,14 @@ static void pl011_disable_uart(struct uart_amba_port *uap) static void pl011_disable_interrupts(struct uart_amba_port *uap) { @@ -3290,7 +3291,7 @@ } static void pl011_shutdown(struct uart_port *port) -@@ -2117,7 +2117,7 @@ pl011_set_termios(struct uart_port *port, struct ktermios *termios, +@@ -2098,7 +2098,7 @@ pl011_set_termios(struct uart_port *port, struct ktermios *termios, bits = tty_get_frame_size(termios->c_cflag); @@ -3299,7 +3300,7 @@ /* * Update the per-port timeout. -@@ -2191,7 +2191,7 @@ pl011_set_termios(struct uart_port *port, struct ktermios *termios, +@@ -2172,7 +2172,7 @@ pl011_set_termios(struct uart_port *port, struct ktermios *termios, old_cr |= UART011_CR_RXE; pl011_write(old_cr, uap, REG_CR); @@ -3308,7 +3309,7 @@ } static void -@@ -2209,10 +2209,10 @@ sbsa_uart_set_termios(struct uart_port *port, struct ktermios *termios, +@@ -2190,10 +2190,10 @@ sbsa_uart_set_termios(struct uart_port *port, struct ktermios *termios, termios->c_cflag &= ~(CMSPAR | CRTSCTS); termios->c_cflag |= CS8 | CLOCAL; @@ -3321,7 +3322,7 @@ } static const char *pl011_type(struct uart_port *port) -@@ -2347,13 +2347,10 @@ pl011_console_write(struct console *co, const char *s, unsigned int count) +@@ -2328,13 +2328,10 @@ pl011_console_write(struct console *co, const char *s, unsigned int count) clk_enable(uap->clk); @@ -3338,7 +3339,7 @@ /* * First save the CR then disable the interrupts -@@ -2379,8 +2376,7 @@ pl011_console_write(struct console *co, const char *s, unsigned int count) +@@ -2360,8 +2357,7 @@ pl011_console_write(struct console *co, const char *s, unsigned int count) pl011_write(old_cr, uap, REG_CR); if (locked) @@ -3612,7 +3613,7 @@ port->read_status_mask = ATMEL_US_OVRE; if (termios->c_iflag & INPCK) -@@ -2377,22 +2377,22 @@ static void atmel_set_termios(struct uart_port *port, +@@ -2377,22 +2377,22 @@ gclk_fail: else atmel_disable_ms(port); @@ -3641,7 +3642,7 @@ } } diff --git a/drivers/tty/serial/bcm63xx_uart.c b/drivers/tty/serial/bcm63xx_uart.c -index 0dd8cceb8..4a08fd5ee 100644 +index 44c27e5ce..b104c36ce 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) @@ -3662,7 +3663,7 @@ } /* -@@ -332,7 +332,7 @@ static irqreturn_t bcm_uart_interrupt(int irq, void *dev_id) +@@ -335,7 +335,7 @@ static irqreturn_t bcm_uart_interrupt(int irq, void *dev_id) unsigned int irqstat; port = dev_id; @@ -3671,7 +3672,7 @@ irqstat = bcm_uart_readl(port, UART_IR_REG); if (irqstat & UART_RX_INT_STAT) -@@ -353,7 +353,7 @@ static irqreturn_t bcm_uart_interrupt(int irq, void *dev_id) +@@ -356,7 +356,7 @@ static irqreturn_t bcm_uart_interrupt(int irq, void *dev_id) estat & UART_EXTINP_DCD_MASK); } @@ -3680,7 +3681,7 @@ return IRQ_HANDLED; } -@@ -451,9 +451,9 @@ static void bcm_uart_shutdown(struct uart_port *port) +@@ -454,9 +454,9 @@ static void bcm_uart_shutdown(struct uart_port *port) { unsigned long flags; @@ -3692,7 +3693,7 @@ bcm_uart_disable(port); bcm_uart_flush(port); -@@ -470,7 +470,7 @@ static void bcm_uart_set_termios(struct uart_port *port, struct ktermios *new, +@@ -473,7 +473,7 @@ static void bcm_uart_set_termios(struct uart_port *port, struct ktermios *new, unsigned long flags; int tries; @@ -3701,7 +3702,7 @@ /* Drain the hot tub fully before we power it off for the winter. */ for (tries = 3; !bcm_uart_tx_empty(port) && tries; tries--) -@@ -546,7 +546,7 @@ static void bcm_uart_set_termios(struct uart_port *port, struct ktermios *new, +@@ -549,7 +549,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); @@ -3710,7 +3711,7 @@ } /* -@@ -712,9 +712,9 @@ static void bcm_console_write(struct console *co, const char *s, +@@ -715,9 +715,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) { @@ -3722,7 +3723,7 @@ locked = 1; } -@@ -725,7 +725,7 @@ static void bcm_console_write(struct console *co, const char *s, +@@ -728,7 +728,7 @@ static void bcm_console_write(struct console *co, const char *s, wait_for_xmitr(port); if (locked) @@ -4170,7 +4171,7 @@ while (!(readb(sport->port.membase + UARTSFIFO) & UARTSFIFO_RXEMPT)) { flg = TTY_NORMAL; -@@ -956,9 +956,9 @@ static void lpuart_rxint(struct lpuart_port *sport) +@@ -956,9 +956,9 @@ out: static void lpuart32_txint(struct lpuart_port *sport) { @@ -4206,7 +4207,7 @@ return; } -@@ -1244,7 +1244,7 @@ static void lpuart_copy_rx_to_tty(struct lpuart_port *sport) +@@ -1244,7 +1244,7 @@ exit: dma_sync_sg_for_device(chan->device->dev, &sport->rx_sgl, 1, DMA_FROM_DEVICE); @@ -4542,10 +4543,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 c77831e91..66420a992 100644 +index a5d0df2ba..267c9af4b 100644 --- a/drivers/tty/serial/imx.c +++ b/drivers/tty/serial/imx.c -@@ -584,7 +584,7 @@ static void imx_uart_dma_tx_callback(void *data) +@@ -586,7 +586,7 @@ static void imx_uart_dma_tx_callback(void *data) unsigned long flags; u32 ucr1; @@ -4554,7 +4555,7 @@ dma_unmap_sg(sport->port.dev, sgl, sport->dma_tx_nents, DMA_TO_DEVICE); -@@ -609,7 +609,7 @@ static void imx_uart_dma_tx_callback(void *data) +@@ -611,7 +611,7 @@ static void imx_uart_dma_tx_callback(void *data) imx_uart_writel(sport, ucr4, UCR4); } @@ -4563,7 +4564,7 @@ } /* called with port.lock taken and irqs off */ -@@ -780,11 +780,11 @@ static irqreturn_t imx_uart_rtsint(int irq, void *dev_id) +@@ -782,11 +782,11 @@ static irqreturn_t imx_uart_rtsint(int irq, void *dev_id) struct imx_port *sport = dev_id; irqreturn_t ret; @@ -4577,7 +4578,7 @@ return ret; } -@@ -793,9 +793,9 @@ static irqreturn_t imx_uart_txint(int irq, void *dev_id) +@@ -795,9 +795,9 @@ static irqreturn_t imx_uart_txint(int irq, void *dev_id) { struct imx_port *sport = dev_id; @@ -4589,7 +4590,7 @@ return IRQ_HANDLED; } -@@ -909,11 +909,11 @@ static irqreturn_t imx_uart_rxint(int irq, void *dev_id) +@@ -911,11 +911,11 @@ static irqreturn_t imx_uart_rxint(int irq, void *dev_id) struct imx_port *sport = dev_id; irqreturn_t ret; @@ -4603,7 +4604,7 @@ return ret; } -@@ -976,7 +976,7 @@ static irqreturn_t imx_uart_int(int irq, void *dev_id) +@@ -978,7 +978,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; @@ -4612,7 +4613,7 @@ usr1 = imx_uart_readl(sport, USR1); usr2 = imx_uart_readl(sport, USR2); -@@ -1046,7 +1046,7 @@ static irqreturn_t imx_uart_int(int irq, void *dev_id) +@@ -1048,7 +1048,7 @@ static irqreturn_t imx_uart_int(int irq, void *dev_id) ret = IRQ_HANDLED; } @@ -4621,7 +4622,7 @@ return ret; } -@@ -1129,7 +1129,7 @@ static void imx_uart_break_ctl(struct uart_port *port, int break_state) +@@ -1131,7 +1131,7 @@ static void imx_uart_break_ctl(struct uart_port *port, int break_state) unsigned long flags; u32 ucr1; @@ -4630,7 +4631,7 @@ ucr1 = imx_uart_readl(sport, UCR1) & ~UCR1_SNDBRK; -@@ -1138,7 +1138,7 @@ static void imx_uart_break_ctl(struct uart_port *port, int break_state) +@@ -1140,7 +1140,7 @@ static void imx_uart_break_ctl(struct uart_port *port, int break_state) imx_uart_writel(sport, ucr1, UCR1); @@ -4639,7 +4640,7 @@ } /* -@@ -1151,9 +1151,9 @@ static void imx_uart_timeout(struct timer_list *t) +@@ -1153,9 +1153,9 @@ static void imx_uart_timeout(struct timer_list *t) unsigned long flags; if (sport->port.state) { @@ -4651,7 +4652,7 @@ mod_timer(&sport->timer, jiffies + MCTRL_TIMEOUT); } -@@ -1183,9 +1183,9 @@ static void imx_uart_dma_rx_callback(void *data) +@@ -1185,9 +1185,9 @@ static void imx_uart_dma_rx_callback(void *data) status = dmaengine_tx_status(chan, sport->rx_cookie, &state); if (status == DMA_ERROR) { @@ -4663,7 +4664,7 @@ return; } -@@ -1214,9 +1214,9 @@ static void imx_uart_dma_rx_callback(void *data) +@@ -1216,9 +1216,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 */ @@ -4675,7 +4676,7 @@ if (!(sport->port.ignore_status_mask & URXD_DUMMY_READ)) { -@@ -1474,7 +1474,7 @@ static int imx_uart_startup(struct uart_port *port) +@@ -1476,7 +1476,7 @@ static int imx_uart_startup(struct uart_port *port) if (!uart_console(port) && imx_uart_dma_init(sport) == 0) dma_is_inited = 1; @@ -4684,7 +4685,7 @@ /* Reset fifo's and state machines */ imx_uart_soft_reset(sport); -@@ -1547,7 +1547,7 @@ static int imx_uart_startup(struct uart_port *port) +@@ -1549,7 +1549,7 @@ static int imx_uart_startup(struct uart_port *port) imx_uart_disable_loopback_rs485(sport); @@ -4693,7 +4694,7 @@ return 0; } -@@ -1572,21 +1572,21 @@ static void imx_uart_shutdown(struct uart_port *port) +@@ -1574,21 +1574,21 @@ static void imx_uart_shutdown(struct uart_port *port) sport->dma_is_rxing = 0; } @@ -4719,7 +4720,7 @@ /* * Stop our timer. -@@ -1597,7 +1597,7 @@ static void imx_uart_shutdown(struct uart_port *port) +@@ -1599,7 +1599,7 @@ static void imx_uart_shutdown(struct uart_port *port) * Disable all interrupts, port and break condition. */ @@ -4728,7 +4729,7 @@ ucr1 = imx_uart_readl(sport, UCR1); ucr1 &= ~(UCR1_TRDYEN | UCR1_RRDYEN | UCR1_RTSDEN | UCR1_RXDMAEN | -@@ -1619,7 +1619,7 @@ static void imx_uart_shutdown(struct uart_port *port) +@@ -1621,7 +1621,7 @@ static void imx_uart_shutdown(struct uart_port *port) ucr4 &= ~UCR4_TCEN; imx_uart_writel(sport, ucr4, UCR4); @@ -4737,7 +4738,7 @@ clk_disable_unprepare(sport->clk_per); clk_disable_unprepare(sport->clk_ipg); -@@ -1682,7 +1682,7 @@ imx_uart_set_termios(struct uart_port *port, struct ktermios *termios, +@@ -1684,7 +1684,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); @@ -4746,7 +4747,7 @@ /* * Read current UCR2 and save it for future use, then clear all the bits -@@ -1810,7 +1810,7 @@ imx_uart_set_termios(struct uart_port *port, struct ktermios *termios, +@@ -1812,7 +1812,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); @@ -4755,7 +4756,7 @@ } static const char *imx_uart_type(struct uart_port *port) -@@ -1872,7 +1872,7 @@ static int imx_uart_poll_init(struct uart_port *port) +@@ -1874,7 +1874,7 @@ static int imx_uart_poll_init(struct uart_port *port) imx_uart_setup_ufcr(sport, TXTL_DEFAULT, RXTL_DEFAULT); @@ -4764,7 +4765,7 @@ /* * Be careful about the order of enabling bits here. First enable the -@@ -1900,7 +1900,7 @@ static int imx_uart_poll_init(struct uart_port *port) +@@ -1902,7 +1902,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); @@ -4773,7 +4774,7 @@ return 0; } -@@ -2015,9 +2015,9 @@ imx_uart_console_write(struct console *co, const char *s, unsigned int count) +@@ -2022,9 +2022,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) @@ -4785,7 +4786,7 @@ /* * First, save UCR1/2/3 and then disable interrupts -@@ -2045,7 +2045,7 @@ imx_uart_console_write(struct console *co, const char *s, unsigned int count) +@@ -2052,7 +2052,7 @@ imx_uart_console_write(struct console *co, const char *s, unsigned int count) imx_uart_ucrs_restore(sport, &old_ucr); if (locked) @@ -4794,7 +4795,7 @@ } /* -@@ -2203,10 +2203,10 @@ static enum hrtimer_restart imx_trigger_start_tx(struct hrtimer *t) +@@ -2210,10 +2210,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; @@ -4807,7 +4808,7 @@ return HRTIMER_NORESTART; } -@@ -2216,10 +2216,10 @@ static enum hrtimer_restart imx_trigger_stop_tx(struct hrtimer *t) +@@ -2223,10 +2223,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; @@ -4820,7 +4821,7 @@ return HRTIMER_NORESTART; } -@@ -2486,9 +2486,9 @@ static void imx_uart_restore_context(struct imx_port *sport) +@@ -2493,9 +2493,9 @@ static void imx_uart_restore_context(struct imx_port *sport) { unsigned long flags; @@ -4832,7 +4833,7 @@ return; } -@@ -2503,7 +2503,7 @@ static void imx_uart_restore_context(struct imx_port *sport) +@@ -2510,7 +2510,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; @@ -4841,7 +4842,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) +@@ -2518,7 +2518,7 @@ static void imx_uart_save_context(struct imx_port *sport) unsigned long flags; /* Save necessary regs */ @@ -4850,7 +4851,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); -@@ -2523,7 +2523,7 @@ static void imx_uart_save_context(struct imx_port *sport) +@@ -2530,7 +2530,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; @@ -5283,7 +5284,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 69da24565..73910c54d 100644 +index 99225f1e0..faccd772c 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) @@ -5364,7 +5365,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 1666ce012..91b15243f 100644 +index aea29b4e6..ee40af20a 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) @@ -7320,10 +7321,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 eea662212..2aa0b7e5e 100644 +index 7a9924d9b..be9ae5cdd 100644 --- a/drivers/tty/serial/sc16is7xx.c +++ b/drivers/tty/serial/sc16is7xx.c -@@ -806,6 +806,7 @@ static void sc16is7xx_tx_proc(struct kthread_work *ws) +@@ -817,6 +817,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); @@ -7331,7 +7332,7 @@ if ((port->rs485.flags & SER_RS485_ENABLED) && (port->rs485.delay_rts_before_send > 0)) -@@ -814,6 +815,10 @@ static void sc16is7xx_tx_proc(struct kthread_work *ws) +@@ -825,6 +826,10 @@ static void sc16is7xx_tx_proc(struct kthread_work *ws) mutex_lock(&one->efr_lock); sc16is7xx_handle_tx(port); mutex_unlock(&one->efr_lock); @@ -7819,7 +7820,7 @@ return IRQ_HANDLED; } diff --git a/drivers/tty/serial/serial_port.c b/drivers/tty/serial/serial_port.c -index d622a9297..7d51e66ec 100644 +index ed3953bd0..92a57b243 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) @@ -7938,7 +7939,7 @@ static void diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh-sci.c -index a560b729f..84ab434c9 100644 +index f793624fd..2559c9781 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) @@ -7959,7 +7960,7 @@ } /* Locking: called with port lock held */ -@@ -1320,7 +1320,7 @@ static void sci_dma_rx_complete(void *arg) +@@ -1325,7 +1325,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); @@ -7968,7 +7969,7 @@ active = sci_dma_rx_find_active(s); if (active >= 0) -@@ -1347,20 +1347,20 @@ static void sci_dma_rx_complete(void *arg) +@@ -1352,20 +1352,20 @@ static void sci_dma_rx_complete(void *arg) dma_async_issue_pending(chan); @@ -7993,7 +7994,7 @@ } static void sci_dma_tx_release(struct sci_port *s) -@@ -1409,13 +1409,13 @@ static int sci_dma_rx_submit(struct sci_port *s, bool port_lock_held) +@@ -1414,13 +1414,13 @@ static int sci_dma_rx_submit(struct sci_port *s, bool port_lock_held) fail: /* Switch to PIO */ if (!port_lock_held) @@ -8009,7 +8010,7 @@ return -EAGAIN; } -@@ -1437,14 +1437,14 @@ static void sci_dma_tx_work_fn(struct work_struct *work) +@@ -1442,14 +1442,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. */ @@ -8026,7 +8027,7 @@ return; } -@@ -1452,7 +1452,7 @@ static void sci_dma_tx_work_fn(struct work_struct *work) +@@ -1457,7 +1457,7 @@ static void sci_dma_tx_work_fn(struct work_struct *work) DMA_MEM_TO_DEV, DMA_PREP_INTERRUPT | DMA_CTRL_ACK); if (!desc) { @@ -8035,7 +8036,7 @@ dev_warn(port->dev, "Failed preparing Tx DMA descriptor\n"); goto switch_to_pio; } -@@ -1464,12 +1464,12 @@ static void sci_dma_tx_work_fn(struct work_struct *work) +@@ -1469,12 +1469,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)) { @@ -8050,7 +8051,7 @@ dev_dbg(port->dev, "%s: %p: %d...%d, cookie %d\n", __func__, xmit->buf, tail, head, s->cookie_tx); -@@ -1477,10 +1477,10 @@ static void sci_dma_tx_work_fn(struct work_struct *work) +@@ -1482,10 +1482,10 @@ static void sci_dma_tx_work_fn(struct work_struct *work) return; switch_to_pio: @@ -8063,7 +8064,7 @@ return; } -@@ -1497,17 +1497,17 @@ static enum hrtimer_restart sci_dma_rx_timer_fn(struct hrtimer *t) +@@ -1502,17 +1502,17 @@ static enum hrtimer_restart sci_dma_rx_timer_fn(struct hrtimer *t) dev_dbg(port->dev, "DMA Rx timed out\n"); @@ -8084,7 +8085,7 @@ dev_dbg(port->dev, "Cookie %d #%d has already completed\n", s->active_rx, active); -@@ -1525,7 +1525,7 @@ static enum hrtimer_restart sci_dma_rx_timer_fn(struct hrtimer *t) +@@ -1530,7 +1530,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) { @@ -8093,7 +8094,7 @@ dev_dbg(port->dev, "Transaction complete after DMA engine was stopped"); return HRTIMER_NORESTART; } -@@ -1546,7 +1546,7 @@ static enum hrtimer_restart sci_dma_rx_timer_fn(struct hrtimer *t) +@@ -1551,7 +1551,7 @@ static enum hrtimer_restart sci_dma_rx_timer_fn(struct hrtimer *t) sci_dma_rx_reenable_irq(s); @@ -8102,7 +8103,7 @@ return HRTIMER_NORESTART; } -@@ -1770,9 +1770,9 @@ static irqreturn_t sci_tx_interrupt(int irq, void *ptr) +@@ -1775,9 +1775,9 @@ static irqreturn_t sci_tx_interrupt(int irq, void *ptr) struct uart_port *port = ptr; unsigned long flags; @@ -8114,7 +8115,7 @@ return IRQ_HANDLED; } -@@ -1786,11 +1786,11 @@ static irqreturn_t sci_tx_end_interrupt(int irq, void *ptr) +@@ -1791,11 +1791,11 @@ static irqreturn_t sci_tx_end_interrupt(int irq, void *ptr) if (port->type != PORT_SCI) return sci_tx_interrupt(irq, ptr); @@ -8128,7 +8129,7 @@ return IRQ_HANDLED; } -@@ -2187,7 +2187,7 @@ static void sci_break_ctl(struct uart_port *port, int break_state) +@@ -2192,7 +2192,7 @@ static void sci_break_ctl(struct uart_port *port, int break_state) return; } @@ -8137,7 +8138,7 @@ scsptr = serial_port_in(port, SCSPTR); scscr = serial_port_in(port, SCSCR); -@@ -2201,7 +2201,7 @@ static void sci_break_ctl(struct uart_port *port, int break_state) +@@ -2206,7 +2206,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); @@ -8146,7 +8147,7 @@ } static int sci_startup(struct uart_port *port) -@@ -2233,7 +2233,7 @@ static void sci_shutdown(struct uart_port *port) +@@ -2238,7 +2238,7 @@ static void sci_shutdown(struct uart_port *port) s->autorts = false; mctrl_gpio_disable_ms(to_sci_port(port)->gpios); @@ -8155,7 +8156,7 @@ sci_stop_rx(port); sci_stop_tx(port); /* -@@ -2243,7 +2243,7 @@ static void sci_shutdown(struct uart_port *port) +@@ -2248,7 +2248,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)); @@ -8164,7 +8165,7 @@ #ifdef CONFIG_SERIAL_SH_SCI_DMA if (s->chan_rx_saved) { -@@ -2545,7 +2545,7 @@ static void sci_set_termios(struct uart_port *port, struct ktermios *termios, +@@ -2550,7 +2550,7 @@ done: serial_port_out(port, SCCKS, sccks); } @@ -8173,7 +8174,7 @@ sci_reset(port); -@@ -2667,7 +2667,7 @@ static void sci_set_termios(struct uart_port *port, struct ktermios *termios, +@@ -2672,7 +2672,7 @@ done: if ((termios->c_cflag & CREAD) != 0) sci_start_rx(port); @@ -8182,7 +8183,7 @@ sci_port_disable(s); -@@ -3052,9 +3052,9 @@ static void serial_console_write(struct console *co, const char *s, +@@ -3057,9 +3057,9 @@ static void serial_console_write(struct console *co, const char *s, if (port->sysrq) locked = 0; else if (oops_in_progress) @@ -8194,7 +8195,7 @@ /* first save SCSCR then disable interrupts, keep clock source */ ctrl = serial_port_in(port, SCSCR); -@@ -3074,7 +3074,7 @@ static void serial_console_write(struct console *co, const char *s, +@@ -3079,7 +3079,7 @@ static void serial_console_write(struct console *co, const char *s, serial_port_out(port, SCSCR, ctrl); if (locked) @@ -10100,7 +10101,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 8ef499ab3..7a942e987 100644 +index e4878bb58..ebebc32e7 100644 --- a/include/linux/printk.h +++ b/include/linux/printk.h @@ -9,6 +9,8 @@ @@ -10167,7 +10168,7 @@ #ifdef CONFIG_SMP diff --git a/include/linux/sched.h b/include/linux/sched.h -index b65d74c5e..d5fba1473 100644 +index f40411aa7..d5b27c710 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -944,6 +944,9 @@ struct task_struct { @@ -10180,7 +10181,7 @@ /* Bit to tell LSMs we're in execve(): */ unsigned in_execve:1; -@@ -1979,6 +1982,7 @@ static inline int dl_task_check_affinity(struct task_struct *p, const struct cpu +@@ -1980,6 +1983,7 @@ static inline int dl_task_check_affinity(struct task_struct *p, const struct cpu } #endif @@ -10188,7 +10189,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); -@@ -2130,17 +2134,17 @@ static inline void update_tsk_thread_flag(struct task_struct *tsk, int flag, +@@ -2131,17 +2135,17 @@ static inline void update_tsk_thread_flag(struct task_struct *tsk, int flag, update_ti_thread_flag(task_thread_info(tsk), flag, value); } @@ -10209,7 +10210,7 @@ { return test_ti_thread_flag(task_thread_info(tsk), flag); } -@@ -2153,9 +2157,11 @@ static inline void set_tsk_need_resched(struct task_struct *tsk) +@@ -2154,9 +2158,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); @@ -10222,7 +10223,7 @@ { return unlikely(test_tsk_thread_flag(tsk,TIF_NEED_RESCHED)); } -@@ -2336,7 +2342,7 @@ static inline int rwlock_needbreak(rwlock_t *lock) +@@ -2337,7 +2343,7 @@ static inline int rwlock_needbreak(rwlock_t *lock) static __always_inline bool need_resched(void) { @@ -10307,10 +10308,10 @@ int serial8250_console_exit(struct uart_port *port); diff --git a/include/linux/serial_core.h b/include/linux/serial_core.h -index a7d5fa892..99d3f1e24 100644 +index 5136eade9..9c7bce638 100644 --- a/include/linux/serial_core.h +++ b/include/linux/serial_core.h -@@ -488,6 +488,7 @@ struct uart_port { +@@ -489,6 +489,7 @@ struct uart_port { struct uart_icount icount; /* statistics */ struct console *cons; /* struct console, if any */ @@ -10318,7 +10319,7 @@ /* flags must be updated while holding port mutex */ upf_t flags; -@@ -595,6 +596,7 @@ struct uart_port { +@@ -596,6 +597,7 @@ struct uart_port { static inline void uart_port_lock(struct uart_port *up) { spin_lock(&up->lock); @@ -10326,7 +10327,7 @@ } /** -@@ -604,6 +606,7 @@ static inline void uart_port_lock(struct uart_port *up) +@@ -605,6 +607,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); @@ -10334,7 +10335,7 @@ } /** -@@ -614,6 +617,7 @@ static inline void uart_port_lock_irq(struct uart_port *up) +@@ -615,6 +618,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); @@ -10342,7 +10343,7 @@ } /** -@@ -624,7 +628,11 @@ static inline void uart_port_lock_irqsave(struct uart_port *up, unsigned long *f +@@ -625,7 +629,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) { @@ -10355,7 +10356,7 @@ } /** -@@ -636,7 +644,11 @@ static inline bool uart_port_trylock(struct uart_port *up) +@@ -637,7 +645,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) { @@ -10368,7 +10369,7 @@ } /** -@@ -645,6 +657,7 @@ static inline bool uart_port_trylock_irqsave(struct uart_port *up, unsigned long +@@ -646,6 +658,7 @@ static inline bool uart_port_trylock_irqsave(struct uart_port *up, unsigned long */ static inline void uart_port_unlock(struct uart_port *up) { @@ -10376,7 +10377,7 @@ spin_unlock(&up->lock); } -@@ -654,6 +667,7 @@ static inline void uart_port_unlock(struct uart_port *up) +@@ -655,6 +668,7 @@ static inline void uart_port_unlock(struct uart_port *up) */ static inline void uart_port_unlock_irq(struct uart_port *up) { @@ -10384,7 +10385,7 @@ spin_unlock_irq(&up->lock); } -@@ -663,6 +677,19 @@ static inline void uart_port_unlock_irq(struct uart_port *up) +@@ -664,6 +678,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) @@ -10404,7 +10405,7 @@ { spin_unlock_irqrestore(&up->lock, flags); } -@@ -1058,14 +1085,14 @@ static inline void uart_unlock_and_check_sysrq(struct uart_port *port) +@@ -1076,14 +1103,14 @@ static inline void uart_unlock_and_check_sysrq(struct uart_port *port) u8 sysrq_ch; if (!port->has_sysrq) { @@ -10421,7 +10422,7 @@ if (sysrq_ch) handle_sysrq(sysrq_ch); -@@ -1077,14 +1104,14 @@ static inline void uart_unlock_and_check_sysrq_irqrestore(struct uart_port *port +@@ -1095,14 +1122,14 @@ static inline void uart_unlock_and_check_sysrq_irqrestore(struct uart_port *port u8 sysrq_ch; if (!port->has_sysrq) { @@ -10438,7 +10439,7 @@ if (sysrq_ch) handle_sysrq(sysrq_ch); -@@ -1100,12 +1127,12 @@ static inline int uart_prepare_sysrq_char(struct uart_port *port, u8 ch) +@@ -1118,12 +1145,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) { @@ -10656,7 +10657,7 @@ new_owner = top_waiter->task; /* -@@ -1002,6 +990,12 @@ int futex_lock_pi(u32 __user *uaddr, unsigned int flags, ktime_t *time, int tryl +@@ -1002,6 +990,12 @@ retry_private: goto no_block; } @@ -10669,7 +10670,7 @@ rt_mutex_init_waiter(&rt_waiter); /* -@@ -1039,19 +1033,37 @@ int futex_lock_pi(u32 __user *uaddr, unsigned int flags, ktime_t *time, int tryl +@@ -1039,19 +1033,37 @@ retry_private: ret = rt_mutex_wait_proxy_lock(&q.pi_state->pi_mutex, to, &rt_waiter); cleanup: @@ -10713,7 +10714,7 @@ no_block: /* * Fixup the pi_state owner and possibly acquire the lock if we -@@ -1132,6 +1144,7 @@ int futex_unlock_pi(u32 __user *uaddr, unsigned int flags) +@@ -1132,6 +1144,7 @@ retry: top_waiter = futex_top_waiter(hb, &key); if (top_waiter) { struct futex_pi_state *pi_state = top_waiter->pi_state; @@ -10721,7 +10722,7 @@ ret = -EINVAL; if (!pi_state) -@@ -1144,22 +1157,39 @@ int futex_unlock_pi(u32 __user *uaddr, unsigned int flags) +@@ -1144,22 +1157,39 @@ retry: if (pi_state->owner != current) goto out_unlock; @@ -10767,7 +10768,7 @@ put_pi_state(pi_state); -@@ -1187,6 +1217,7 @@ int futex_unlock_pi(u32 __user *uaddr, unsigned int flags) +@@ -1187,6 +1217,7 @@ retry: return ret; } @@ -10999,7 +11000,7 @@ } diff --git a/kernel/locking/rwsem.c b/kernel/locking/rwsem.c -index 9eabd585c..2340b6d90 100644 +index 11ed7ce65..62eac9fd8 100644 --- a/kernel/locking/rwsem.c +++ b/kernel/locking/rwsem.c @@ -1427,8 +1427,14 @@ static inline void __downgrade_write(struct rw_semaphore *sem) @@ -13073,7 +13074,7 @@ /* * We cannot access per-CPU data (e.g. per-CPU flush irq_work) before -@@ -698,9 +742,6 @@ static ssize_t msg_print_ext_body(char *buf, size_t size, +@@ -698,9 +742,6 @@ out: return len; } @@ -13092,7 +13093,7 @@ { /* * Do not use spinning in panic(). The panic CPU wants to keep the lock. -@@ -1887,7 +1928,7 @@ static void console_lock_spinning_enable(void) +@@ -1887,7 +1928,7 @@ lockdep: * * Return: 1 if the lock rights were passed, 0 otherwise. */ @@ -13101,7 +13102,7 @@ { int waiter; -@@ -2305,54 +2346,123 @@ int vprintk_store(int facility, int level, +@@ -2305,54 +2346,123 @@ out: return ret; } @@ -13448,7 +13449,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 @@ static bool printk_get_next_message(struct printk_message *pmsg, u64 seq, +@@ -2887,6 +2945,13 @@ out: return true; } @@ -13462,7 +13463,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 @@ static bool printk_get_next_message(struct printk_message *pmsg, u64 seq, +@@ -2904,12 +2969,10 @@ out: */ static bool console_emit_next_record(struct console *con, bool *handover, int cookie) { @@ -13604,7 +13605,7 @@ if (!progress) continue; -@@ -3038,19 +3145,7 @@ static bool console_flush_all(bool do_cond_resched, u64 *next_seq, bool *handove +@@ -3038,19 +3145,7 @@ abandon: return false; } @@ -14187,7 +14188,7 @@ return NULL; } -@@ -1441,20 +1457,118 @@ bool prb_reserve_in_last(struct prb_reserved_entry *e, struct printk_ringbuffer +@@ -1441,20 +1457,118 @@ fail_reopen: return false; } @@ -14758,10 +14759,10 @@ { #ifdef CONFIG_KGDB_KDB diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c -index ade42d6a9..eebb9b454 100644 +index 781146600..7ee1c84b5 100644 --- a/kernel/rcu/rcutorture.c +++ b/kernel/rcu/rcutorture.c -@@ -2408,6 +2408,12 @@ static int rcutorture_booster_init(unsigned int cpu) +@@ -2409,6 +2409,12 @@ static int rcutorture_booster_init(unsigned int cpu) WARN_ON_ONCE(!t); sp.sched_priority = 2; sched_setscheduler_nocheck(t, SCHED_FIFO, &sp); @@ -14775,7 +14776,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 e09f4f624..311483048 100644 +index 11a1fac3a..6f085a159 100644 --- a/kernel/rcu/tree_stall.h +++ b/kernel/rcu/tree_stall.h @@ -8,6 +8,7 @@ @@ -14786,7 +14787,7 @@ ////////////////////////////////////////////////////////////////////////////// // -@@ -603,6 +604,8 @@ static void print_other_cpu_stall(unsigned long gp_seq, unsigned long gps) +@@ -604,6 +605,8 @@ static void print_other_cpu_stall(unsigned long gp_seq, unsigned long gps) if (rcu_stall_is_suppressed()) return; @@ -14795,7 +14796,7 @@ /* * OK, time to rat on our buddy... * See Documentation/RCU/stallwarn.rst for info on how to debug -@@ -657,6 +660,8 @@ static void print_other_cpu_stall(unsigned long gp_seq, unsigned long gps) +@@ -658,6 +661,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. */ @@ -14805,7 +14806,7 @@ static void print_cpu_stall(unsigned long gps) diff --git a/kernel/sched/core.c b/kernel/sched/core.c -index 07bcc5f2e..7a6b82e1f 100644 +index 7dd2415d9..697d165a2 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -901,14 +901,15 @@ static inline void hrtick_rq_init(struct rq *rq) @@ -14913,7 +14914,7 @@ smp_send_reschedule(cpu); else trace_sched_wake_idle_without_ipi(cpu); -@@ -6777,10 +6797,14 @@ void __noreturn do_task_dead(void) +@@ -6774,10 +6794,14 @@ void __noreturn do_task_dead(void) static inline void sched_submit_work(struct task_struct *tsk) { @@ -14930,7 +14931,7 @@ task_flags = tsk->flags; /* -@@ -6806,6 +6830,8 @@ static inline void sched_submit_work(struct task_struct *tsk) +@@ -6803,6 +6827,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); @@ -14939,7 +14940,7 @@ } static void sched_update_worker(struct task_struct *tsk) -@@ -6818,16 +6844,26 @@ static void sched_update_worker(struct task_struct *tsk) +@@ -6815,16 +6841,26 @@ static void sched_update_worker(struct task_struct *tsk) } } @@ -14971,7 +14972,7 @@ sched_update_worker(tsk); } EXPORT_SYMBOL(schedule); -@@ -6891,11 +6927,7 @@ void __sched schedule_preempt_disabled(void) +@@ -6888,11 +6924,7 @@ void __sched schedule_preempt_disabled(void) #ifdef CONFIG_PREEMPT_RT void __sched notrace schedule_rtlock(void) { @@ -14984,7 +14985,7 @@ } NOKPROBE_SYMBOL(schedule_rtlock); #endif -@@ -7091,6 +7123,32 @@ static void __setscheduler_prio(struct task_struct *p, int prio) +@@ -7088,6 +7120,32 @@ static void __setscheduler_prio(struct task_struct *p, int prio) #ifdef CONFIG_RT_MUTEXES @@ -15017,7 +15018,7 @@ static inline int __rt_effective_prio(struct task_struct *pi_task, int prio) { if (pi_task) -@@ -8953,6 +9011,21 @@ static inline void preempt_dynamic_init(void) { } +@@ -8950,6 +9008,21 @@ static inline void preempt_dynamic_init(void) { } #endif /* #ifdef CONFIG_PREEMPT_DYNAMIC */ @@ -15077,7 +15078,7 @@ } late_initcall(sched_init_debug); diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c -index 8de28b182..196536f0a 100644 +index 415f4b060..8e58f6744 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); @@ -15145,7 +15146,7 @@ static void update_curr_fair(struct rq *rq) { update_curr(cfs_rq_of(&rq->curr->se)); -@@ -5631,7 +5647,7 @@ entity_tick(struct cfs_rq *cfs_rq, struct sched_entity *curr, int queued) +@@ -5629,7 +5645,7 @@ entity_tick(struct cfs_rq *cfs_rq, struct sched_entity *curr, int queued) /* * Update run-time statistics of the 'current'. */ @@ -15154,7 +15155,7 @@ /* * Ensure that runnable average is periodically updated. -@@ -5645,7 +5661,7 @@ entity_tick(struct cfs_rq *cfs_rq, struct sched_entity *curr, int queued) +@@ -5643,7 +5659,7 @@ entity_tick(struct cfs_rq *cfs_rq, struct sched_entity *curr, int queued) * validating it and just reschedule. */ if (queued) { @@ -15163,7 +15164,7 @@ return; } /* -@@ -5791,7 +5807,7 @@ static void __account_cfs_rq_runtime(struct cfs_rq *cfs_rq, u64 delta_exec) +@@ -5789,7 +5805,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)) @@ -15172,7 +15173,7 @@ } static __always_inline -@@ -6090,7 +6106,7 @@ void unthrottle_cfs_rq(struct cfs_rq *cfs_rq) +@@ -6088,7 +6104,7 @@ unthrottle_throttle: /* Determine whether we need to wake up potentially idle CPU: */ if (rq->curr == rq->idle && rq->cfs.nr_running) @@ -15181,7 +15182,7 @@ } #ifdef CONFIG_SMP -@@ -7291,7 +7307,7 @@ static void hrtick_start_fair(struct rq *rq, struct task_struct *p) +@@ -7333,7 +7349,7 @@ static void hrtick_start_fair(struct rq *rq, struct task_struct *p) if (delta < 0) { if (task_current(rq, p)) @@ -15190,7 +15191,7 @@ return; } hrtick_start(rq, delta); -@@ -9231,7 +9247,7 @@ static void check_preempt_wakeup(struct rq *rq, struct task_struct *p, int wake_ +@@ -9293,7 +9309,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. */ @@ -15199,7 +15200,7 @@ return; /* Idle tasks are by definition preempted by non-idle tasks. */ -@@ -9273,7 +9289,7 @@ static void check_preempt_wakeup(struct rq *rq, struct task_struct *p, int wake_ +@@ -9335,7 +9351,7 @@ static void check_preempt_wakeup(struct rq *rq, struct task_struct *p, int wake_ return; preempt: @@ -15208,7 +15209,7 @@ } #ifdef CONFIG_QOS_SCHED -@@ -9756,8 +9772,7 @@ static bool _qos_smt_check_need_resched(int this_cpu, struct rq *rq) +@@ -9818,8 +9834,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 @@ -15218,7 +15219,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. */ -@@ -14139,7 +14154,7 @@ static inline void task_tick_core(struct rq *rq, struct task_struct *curr) +@@ -14193,7 +14208,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)) @@ -15227,7 +15228,7 @@ } /* -@@ -14455,7 +14470,7 @@ prio_changed_fair(struct rq *rq, struct task_struct *p, int oldprio) +@@ -14509,7 +14524,7 @@ prio_changed_fair(struct rq *rq, struct task_struct *p, int oldprio) */ if (task_current(rq, p)) { if (p->prio > oldprio) @@ -15237,15 +15238,15 @@ check_preempt_curr(rq, p, 0); } diff --git a/kernel/sched/features.h b/kernel/sched/features.h -index 26b1a03bd..a08f2fcd7 100644 +index 26b1a03bd..bfba10c09 100644 --- a/kernel/sched/features.h +++ b/kernel/sched/features.h -@@ -98,7 +98,7 @@ SCHED_FEAT(UTIL_EST_FASTUP, true) - SCHED_FEAT(LATENCY_WARN, false) +@@ -99,6 +99,8 @@ 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 @@ -15281,11 +15282,20 @@ rd->rto_cpu = -1; diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h -index 9de2bac64..0f60c4654 100644 +index 761870540..ecf1154c3 100644 --- a/kernel/sched/sched.h +++ b/kernel/sched/sched.h -@@ -2600,6 +2600,7 @@ extern void init_sched_fair_class(void); - extern void reweight_task(struct task_struct *p, int prio); +@@ -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); extern void resched_curr(struct rq *rq); +extern void resched_curr_lazy(struct rq *rq); @@ -15293,7 +15303,7 @@ extern struct rt_bandwidth def_rt_bandwidth; diff --git a/kernel/signal.c b/kernel/signal.c -index 28cddef39..cf2c75e3e 100644 +index f36c58ea7..0f2615143 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, @@ -15338,10 +15348,10 @@ cgroup_leave_frozen(true); diff --git a/kernel/softirq.c b/kernel/softirq.c -index 210cf5f8d..cae0ae2e2 100644 +index bd9716d7b..2fde8af88 100644 --- a/kernel/softirq.c +++ b/kernel/softirq.c -@@ -247,6 +247,19 @@ void __local_bh_enable_ip(unsigned long ip, unsigned int cnt) +@@ -247,6 +247,19 @@ out: } EXPORT_SYMBOL(__local_bh_enable_ip); @@ -15361,7 +15371,7 @@ /* * Invoked from ksoftirqd_run() outside of the interrupt disabled section * to acquire the per CPU local lock for reentrancy protection. -@@ -619,6 +632,24 @@ static inline void tick_irq_exit(void) +@@ -623,6 +636,24 @@ static inline void tick_irq_exit(void) #endif } @@ -15386,7 +15396,7 @@ static inline void __irq_exit_rcu(void) { #ifndef __ARCH_IRQ_EXIT_IRQS_DISABLED -@@ -631,6 +662,10 @@ static inline void __irq_exit_rcu(void) +@@ -635,6 +666,10 @@ static inline void __irq_exit_rcu(void) if (!in_interrupt() && local_softirq_pending()) invoke_softirq(); @@ -15397,7 +15407,7 @@ tick_irq_exit(); } -@@ -963,12 +998,70 @@ static struct smp_hotplug_thread softirq_threads = { +@@ -967,12 +1002,70 @@ static struct smp_hotplug_thread softirq_threads = { .thread_comm = "ksoftirqd/%u", }; @@ -15473,7 +15483,7 @@ index edb0f821d..a72900121 100644 --- a/kernel/time/hrtimer.c +++ b/kernel/time/hrtimer.c -@@ -1809,7 +1809,7 @@ void hrtimer_interrupt(struct clock_event_device *dev) +@@ -1809,7 +1809,7 @@ retry: if (!ktime_before(now, cpu_base->softirq_expires_next)) { cpu_base->softirq_expires_next = KTIME_MAX; cpu_base->softirq_activated = 1; @@ -15585,10 +15595,10 @@ need_resched = 'p'; break; diff --git a/net/core/dev.c b/net/core/dev.c -index 1f6c8945f..1e8928cd3 100644 +index 4935ff1ee..3754a26b8 100644 --- a/net/core/dev.c +++ b/net/core/dev.c -@@ -4705,15 +4705,6 @@ static void rps_trigger_softirq(void *data) +@@ -4711,15 +4711,6 @@ static void rps_trigger_softirq(void *data) #endif /* CONFIG_RPS */ @@ -15604,7 +15614,7 @@ /* * After we queued a packet into sd->input_pkt_queue, * we need to make sure this queue is serviced soon. -@@ -6682,6 +6673,32 @@ static void skb_defer_free_flush(struct softnet_data *sd) +@@ -6688,6 +6679,32 @@ static void skb_defer_free_flush(struct softnet_data *sd) } } @@ -15637,7 +15647,7 @@ static int napi_threaded_poll(void *data) { struct napi_struct *napi = data; -@@ -11618,7 +11635,11 @@ static int __init net_dev_init(void) +@@ -11625,7 +11642,11 @@ static int __init net_dev_init(void) INIT_CSD(&sd->csd, rps_trigger_softirq, sd); sd->cpu = i; #endif @@ -15650,10 +15660,10 @@ init_gro_hash(&sd->backlog); diff --git a/net/core/skbuff.c b/net/core/skbuff.c -index 60876262b..02e2bab1e 100644 +index f0a9ef1ae..682175af4 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c -@@ -6852,8 +6852,13 @@ nodefer: __kfree_skb(skb); +@@ -6863,8 +6863,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:0001-riscv-kernel.patch
Changed
@@ -1,6 +1,6 @@ -From 4034fd3eaf28fe7589f7bd378750724c373112f3 Mon Sep 17 00:00:00 2001 +From aaddd46d5808e8a1c6c9c84b7478e3bf263e0c65 Mon Sep 17 00:00:00 2001 From: Mingzheng Xing <xingmingzheng@iscas.ac.cn> -Date: Fri, 13 Sep 2024 13:55:24 +0800 +Date: Wed, 18 Sep 2024 20:55:22 +0800 Subject: PATCH riscv kernel Signed-off-by: Mingzheng Xing <xingmingzheng@iscas.ac.cn> @@ -60,9 +60,10 @@ .../boot/dts/thead/th1520-lichee-pi-4a.dts | 840 ++ arch/riscv/boot/dts/thead/th1520.dtsi | 1226 ++- arch/riscv/configs/defconfig | 22 +- - arch/riscv/configs/openeuler_defconfig | 1779 +++- + arch/riscv/configs/openeuler_defconfig | 975 +- arch/riscv/configs/sg2042_defconfig | 9 + - arch/riscv/configs/th1520_defconfig | 398 + + arch/riscv/configs/th1520_defconfig | 399 + + arch/riscv/configs/th1520_oe_defconfig | 174 + arch/riscv/include/asm/barrier.h | 22 + arch/riscv/include/asm/errata_list.h | 32 +- arch/riscv/include/asm/io.h | 4 + @@ -896,7 +897,7 @@ .../riscv/thead/c900-legacy/firmware.json | 68 + .../riscv/thead/c900-legacy/instruction.json | 72 + .../riscv/thead/c900-legacy/microarch.json | 80 + - 891 files changed, 356155 insertions(+), 549 deletions(-) + 892 files changed, 355633 insertions(+), 442 deletions(-) create mode 100644 Documentation/devicetree/bindings/iio/adc/thead,th1520-adc.yaml create mode 100644 Documentation/devicetree/bindings/iio/adc/xuantie,th1520-adc.yaml create mode 100644 Documentation/devicetree/bindings/mailbox/xuantie-th1520-mailbox.txt @@ -937,6 +938,7 @@ create mode 100644 arch/riscv/boot/dts/sophgo/mango.dtsi create mode 100644 arch/riscv/configs/sg2042_defconfig create mode 100644 arch/riscv/configs/th1520_defconfig + create mode 100644 arch/riscv/configs/th1520_oe_defconfig create mode 100644 arch/riscv/include/asm/membarrier.h create mode 100644 arch/riscv/include/asm/sync_core.h create mode 100644 drivers/clk/sophgo/Makefile @@ -12488,7 +12490,7 @@ +# TH1520 PMIC_WDT +CONFIG_TH1520_PMIC_WATCHDOG=y diff --git a/arch/riscv/configs/openeuler_defconfig b/arch/riscv/configs/openeuler_defconfig -index 026582613f2c..ba82a5f68da0 100644 +index 026582613f2c..4a08a469d50b 100644 --- a/arch/riscv/configs/openeuler_defconfig +++ b/arch/riscv/configs/openeuler_defconfig @@ -2,6 +2,7 @@ @@ -12499,36 +12501,7 @@ CONFIG_IRQ_WORK=y CONFIG_BUILDTIME_TABLE_SORT=y CONFIG_THREAD_INFO_IN_TASK=y -@@ -90,11 +91,12 @@ CONFIG_BPF_JIT_DEFAULT_ON=y - # CONFIG_BPF_SCHED is not set - # end of BPF subsystem - --CONFIG_PREEMPT_VOLUNTARY_BUILD=y -+CONFIG_PREEMPT_BUILD=y - # CONFIG_PREEMPT_NONE is not set --CONFIG_PREEMPT_VOLUNTARY=y --# CONFIG_PREEMPT is not set -+# CONFIG_PREEMPT_VOLUNTARY is not set -+CONFIG_PREEMPT=y - CONFIG_PREEMPT_COUNT=y -+CONFIG_PREEMPTION=y - # CONFIG_PREEMPT_DYNAMIC is not set - - # -@@ -123,10 +125,11 @@ CONFIG_CPU_ISOLATION=y - # RCU Subsystem - # - CONFIG_TREE_RCU=y -+CONFIG_PREEMPT_RCU=y - # CONFIG_RCU_EXPERT is not set - CONFIG_TREE_SRCU=y - CONFIG_TASKS_RCU_GENERIC=y --CONFIG_TASKS_RUDE_RCU=y -+CONFIG_TASKS_RCU=y - CONFIG_TASKS_TRACE_RCU=y - CONFIG_RCU_STALL_COMMON=y - CONFIG_RCU_NEED_SEGCBLIST=y -@@ -148,7 +151,7 @@ CONFIG_GENERIC_SCHED_CLOCK=y +@@ -148,7 +149,7 @@ CONFIG_GENERIC_SCHED_CLOCK=y CONFIG_ARCH_SUPPORTS_NUMA_BALANCING=y CONFIG_CC_IMPLICIT_FALLTHROUGH="-Wimplicit-fallthrough=5" @@ -12537,16 +12510,7 @@ CONFIG_CC_NO_ARRAY_BOUNDS=y CONFIG_ARCH_SUPPORTS_INT128=y CONFIG_NUMA_BALANCING=y -@@ -226,7 +229,7 @@ CONFIG_SYSFS_SYSCALL=y - CONFIG_FHANDLE=y - CONFIG_POSIX_TIMERS=y - CONFIG_PRINTK=y --CONFIG_BUG=y -+# CONFIG_BUG is not set - CONFIG_ELF_CORE=y - CONFIG_BASE_FULL=y - CONFIG_FUTEX=y -@@ -244,6 +247,8 @@ CONFIG_KALLSYMS=y +@@ -244,6 +245,8 @@ CONFIG_KALLSYMS=y # CONFIG_KALLSYMS_SELFTEST is not set CONFIG_KALLSYMS_ALL=y CONFIG_KALLSYMS_BASE_RELATIVE=y @@ -12555,48 +12519,28 @@ CONFIG_KCMP=y CONFIG_RSEQ=y CONFIG_CACHESTAT_SYSCALL=y -@@ -288,12 +293,11 @@ CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MAX=17 +@@ -288,6 +291,7 @@ CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MAX=17 CONFIG_RISCV_SBI=y CONFIG_MMU=y CONFIG_PAGE_OFFSET=0xff60000000000000 -+CONFIG_ARCH_FORCE_MAX_ORDER=15 ++CONFIG_ARCH_FORCE_MAX_ORDER=10 CONFIG_ARCH_SPARSEMEM_ENABLE=y CONFIG_ARCH_SELECT_MEMORY_MODEL=y CONFIG_ARCH_SUPPORTS_UPROBES=y - CONFIG_STACKTRACE_SUPPORT=y --CONFIG_GENERIC_BUG=y --CONFIG_GENERIC_BUG_RELATIVE_POINTERS=y - CONFIG_GENERIC_CALIBRATE_DELAY=y - CONFIG_GENERIC_CSUM=y - CONFIG_GENERIC_HWEIGHT=y -@@ -306,13 +310,15 @@ CONFIG_RISCV_DMA_NONCOHERENT=y - # SoC selection - # - # CONFIG_SOC_MICROCHIP_POLARFIRE is not set --# CONFIG_ARCH_RENESAS is not set -+CONFIG_ARCH_RENESAS=y +@@ -309,10 +313,12 @@ CONFIG_RISCV_DMA_NONCOHERENT=y + # CONFIG_ARCH_RENESAS is not set CONFIG_ARCH_SIFIVE=y CONFIG_SOC_SIFIVE=y +CONFIG_ARCH_SOPHGO=y CONFIG_ARCH_STARFIVE=y CONFIG_SOC_STARFIVE=y --# CONFIG_ARCH_SUNXI is not set -+CONFIG_ARCH_SUNXI=y + # CONFIG_ARCH_SUNXI is not set CONFIG_ARCH_THEAD=y +CONFIG_ARCH_XUANTIE=y CONFIG_ARCH_VIRT=y CONFIG_SOC_VIRT=y # end of SoC selection -@@ -339,7 +345,7 @@ CONFIG_ARCH_RV64I=y - CONFIG_CMODEL_MEDANY=y - CONFIG_MODULE_SECTIONS=y - CONFIG_SMP=y --# CONFIG_SCHED_MC is not set -+CONFIG_SCHED_MC=y - CONFIG_NR_CPUS=512 - CONFIG_HOTPLUG_CPU=y - CONFIG_TUNE_GENERIC=y -@@ -351,9 +357,8 @@ CONFIG_RISCV_ISA_C=y +@@ -351,9 +357,10 @@ CONFIG_RISCV_ISA_C=y CONFIG_RISCV_ISA_SVNAPOT=y CONFIG_RISCV_ISA_SVPBMT=y CONFIG_TOOLCHAIN_HAS_V=y @@ -12604,41 +12548,13 @@ -CONFIG_RISCV_ISA_V_DEFAULT_ENABLE=y -CONFIG_RISCV_ISA_ZICBOM=y +# CONFIG_RISCV_ISA_V is not set ++CONFIG_TOOLCHAIN_HAS_ZBB=y ++CONFIG_RISCV_ISA_ZBB=y +# CONFIG_RISCV_ISA_ZICBOM is not set CONFIG_RISCV_ISA_ZICBOZ=y CONFIG_TOOLCHAIN_HAS_ZIHINTPAUSE=y CONFIG_TOOLCHAIN_NEEDS_EXPLICIT_ZICSR_ZIFENCEI=y -@@ -400,27 +405,17 @@ CONFIG_PORTABLE=y - # - # Power management options - # --CONFIG_SUSPEND=y --CONFIG_SUSPEND_FREEZER=y --# CONFIG_SUSPEND_SKIP_SYNC is not set --CONFIG_PM_SLEEP=y --CONFIG_PM_SLEEP_SMP=y --# CONFIG_PM_AUTOSLEEP is not set --# CONFIG_PM_USERSPACE_AUTOSLEEP is not set --# CONFIG_PM_WAKELOCKS is not set -+# CONFIG_SUSPEND is not set - CONFIG_PM=y - CONFIG_PM_DEBUG=y - # CONFIG_PM_ADVANCED_DEBUG is not set --# CONFIG_PM_TEST_SUSPEND is not set --CONFIG_PM_SLEEP_DEBUG=y - # CONFIG_DPM_WATCHDOG is not set - CONFIG_PM_CLK=y - CONFIG_PM_GENERIC_DOMAINS=y - # CONFIG_WQ_POWER_EFFICIENT_DEFAULT is not set --CONFIG_PM_GENERIC_DOMAINS_SLEEP=y - CONFIG_PM_GENERIC_DOMAINS_OF=y - CONFIG_CPU_PM=y --# CONFIG_ENERGY_MODEL is not set -+CONFIG_ENERGY_MODEL=y - CONFIG_ARCH_SUSPEND_POSSIBLE=y - # end of Power management options - -@@ -471,6 +466,7 @@ CONFIG_CPU_FREQ_GOV_SCHEDUTIL=y +@@ -471,6 +478,7 @@ CONFIG_CPU_FREQ_GOV_SCHEDUTIL=y # CONFIG_CPUFREQ_DT=y CONFIG_CPUFREQ_DT_PLATDEV=y @@ -12646,37 +12562,14 @@ # end of CPU Frequency scaling # end of CPU Power Management -@@ -485,9 +481,44 @@ CONFIG_HAVE_KVM_VCPU_ASYNC_IOCTL=y +@@ -485,9 +493,22 @@ CONFIG_HAVE_KVM_VCPU_ASYNC_IOCTL=y CONFIG_KVM_XFER_TO_GUEST_WORK=y CONFIG_KVM_GENERIC_HARDWARE_ENABLING=y CONFIG_VIRTUALIZATION=y -CONFIG_KVM=m +CONFIG_KVM=y CONFIG_ARCH_SUPPORTS_ACPI=y --# CONFIG_ACPI is not set -+CONFIG_ACPI=y -+CONFIG_ACPI_GENERIC_GSI=y -+# CONFIG_ACPI_DEBUGGER is not set -+# CONFIG_ACPI_SPCR_TABLE is not set -+# CONFIG_ACPI_EC_DEBUGFS is not set -+CONFIG_ACPI_AC=y -+CONFIG_ACPI_BATTERY=y -+CONFIG_ACPI_BUTTON=y -+CONFIG_ACPI_VIDEO=m -+CONFIG_ACPI_FAN=y -+# CONFIG_ACPI_DOCK is not set -+# CONFIG_ACPI_IPMI is not set -+# CONFIG_ACPI_DEBUG is not set -+# CONFIG_ACPI_PCI_SLOT is not set -+# CONFIG_ACPI_CONTAINER is not set -+# CONFIG_ACPI_HED is not set -+# CONFIG_ACPI_CUSTOM_METHOD is not set -+CONFIG_ACPI_REDUCED_HARDWARE_ONLY=y -+# CONFIG_ACPI_NFIT is not set -+# CONFIG_ACPI_CONFIGFS is not set -+# CONFIG_ACPI_PFRUT is not set -+# CONFIG_ACPI_FFH is not set -+# CONFIG_PMIC_OPREGION is not set + # CONFIG_ACPI is not set +CONFIG_HAVE_LIVEPATCH_WO_FTRACE=y + +# @@ -12693,24 +12586,7 @@ # # General architecture-dependent options -@@ -498,7 +529,6 @@ CONFIG_GENERIC_ENTRY=y - CONFIG_KPROBES=y - CONFIG_JUMP_LABEL=y - # CONFIG_STATIC_KEYS_SELFTEST is not set --CONFIG_KPROBES_ON_FTRACE=y - CONFIG_UPROBES=y - CONFIG_HAVE_64BIT_ALIGNED_ACCESS=y - CONFIG_KRETPROBES=y -@@ -565,7 +595,7 @@ CONFIG_VMAP_STACK=y - CONFIG_ARCH_OPTIONAL_KERNEL_RWX=y - CONFIG_ARCH_OPTIONAL_KERNEL_RWX_DEFAULT=y - CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y --CONFIG_STRICT_KERNEL_RWX=y -+# CONFIG_STRICT_KERNEL_RWX is not set - CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y - CONFIG_STRICT_MODULE_RWX=y - CONFIG_ARCH_USE_MEMREMAP_PROT=y -@@ -576,7 +606,6 @@ CONFIG_HAVE_PREEMPT_DYNAMIC_KEY=y +@@ -576,7 +597,6 @@ CONFIG_HAVE_PREEMPT_DYNAMIC_KEY=y CONFIG_ARCH_WANT_LD_ORPHAN_WARN=y CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y CONFIG_ARCH_SUPPORTS_PAGE_TABLE_CHECK=y @@ -12718,7 +12594,7 @@ # # GCOV-based kernel profiling -@@ -585,6 +614,11 @@ CONFIG_DYNAMIC_SIGFRAME=y +@@ -585,6 +605,11 @@ CONFIG_DYNAMIC_SIGFRAME=y CONFIG_ARCH_HAS_GCOV_PROFILE_ALL=y # end of GCOV-based kernel profiling @@ -12730,7 +12606,7 @@ CONFIG_HAVE_GCC_PLUGINS=y CONFIG_FUNCTION_ALIGNMENT=0 # end of General architecture-dependent options -@@ -646,6 +680,7 @@ CONFIG_BLK_INLINE_ENCRYPTION=y +@@ -646,6 +671,7 @@ CONFIG_BLK_INLINE_ENCRYPTION=y CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK=y # CONFIG_BLK_DEV_DETECT_WRITING_PART0 is not set # CONFIG_BLK_DEV_WRITE_MOUNTED_DUMP is not set @@ -12738,20 +12614,7 @@ # # Partition Types -@@ -691,11 +726,7 @@ CONFIG_BFQ_GROUP_IOSCHED=y - CONFIG_PREEMPT_NOTIFIERS=y - CONFIG_PADATA=y - CONFIG_ASN1=y --CONFIG_INLINE_SPIN_UNLOCK_IRQ=y --CONFIG_INLINE_READ_UNLOCK=y --CONFIG_INLINE_READ_UNLOCK_IRQ=y --CONFIG_INLINE_WRITE_UNLOCK=y --CONFIG_INLINE_WRITE_UNLOCK_IRQ=y -+CONFIG_UNINLINE_SPIN_UNLOCK=y - CONFIG_ARCH_SUPPORTS_ATOMIC_RMW=y - CONFIG_MUTEX_SPIN_ON_OWNER=y - CONFIG_RWSEM_SPIN_ON_OWNER=y -@@ -705,6 +736,8 @@ CONFIG_QUEUED_RWLOCKS=y +@@ -705,6 +731,8 @@ CONFIG_QUEUED_RWLOCKS=y CONFIG_ARCH_HAS_MMIOWB=y CONFIG_MMIOWB=y CONFIG_ARCH_HAS_NON_OVERLAPPING_ADDRESS_SPACE=y @@ -12760,7 +12623,7 @@ CONFIG_ARCH_HAS_SYSCALL_WRAPPER=y # CONFIG_PID_MAX_PER_NAMESPACE is not set CONFIG_FREEZER=y -@@ -794,6 +827,7 @@ CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS=y +@@ -794,6 +822,7 @@ CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS=y # CONFIG_TRANSPARENT_HUGEPAGE_MADVISE is not set CONFIG_THP_SWAP=y # CONFIG_READ_ONLY_THP_FOR_FS is not set @@ -12768,7 +12631,7 @@ CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK=y CONFIG_USE_PERCPU_NUMA_NODE_ID=y CONFIG_CMA=y -@@ -1345,10 +1379,10 @@ CONFIG_L2TP_DEBUGFS=m +@@ -1345,10 +1374,10 @@ CONFIG_L2TP_DEBUGFS=m CONFIG_L2TP_V3=y CONFIG_L2TP_IP=m CONFIG_L2TP_ETH=m @@ -12781,7 +12644,7 @@ CONFIG_BRIDGE_IGMP_SNOOPING=y CONFIG_BRIDGE_VLAN_FILTERING=y # CONFIG_BRIDGE_MRP is not set -@@ -1357,7 +1391,7 @@ CONFIG_BRIDGE_VLAN_FILTERING=y +@@ -1357,7 +1386,7 @@ CONFIG_BRIDGE_VLAN_FILTERING=y CONFIG_VLAN_8021Q=m CONFIG_VLAN_8021Q_GVRP=y CONFIG_VLAN_8021Q_MVRP=y @@ -12790,40 +12653,7 @@ # CONFIG_LLC2 is not set # CONFIG_ATALK is not set # CONFIG_X25 is not set -@@ -1594,6 +1628,7 @@ CONFIG_PCIEASPM_DEFAULT=y - CONFIG_PCIE_PME=y - CONFIG_PCIE_DPC=y - # CONFIG_PCIE_PTM is not set -+# CONFIG_PCIE_EDR is not set - CONFIG_PCI_MSI=y - CONFIG_PCI_QUIRKS=y - # CONFIG_PCI_DEBUG is not set -@@ -1605,6 +1640,7 @@ CONFIG_PCI_ECAM=y - CONFIG_PCI_IOV=y - CONFIG_PCI_PRI=y - CONFIG_PCI_PASID=y -+CONFIG_PCI_LABEL=y - # CONFIG_PCI_DYNAMIC_OF_NODES is not set - # CONFIG_PCIE_BUS_TUNE_OFF is not set - CONFIG_PCIE_BUS_DEFAULT=y -@@ -1614,6 +1650,7 @@ CONFIG_PCIE_BUS_DEFAULT=y - CONFIG_VGA_ARB=y - CONFIG_VGA_ARB_MAX_GPUS=64 - CONFIG_HOTPLUG_PCI=y -+# CONFIG_HOTPLUG_PCI_ACPI is not set - # CONFIG_HOTPLUG_PCI_CPCI is not set - CONFIG_HOTPLUG_PCI_SHPC=y - -@@ -1624,6 +1661,8 @@ CONFIG_HOTPLUG_PCI_SHPC=y - CONFIG_PCI_HOST_COMMON=y - CONFIG_PCI_HOST_GENERIC=y - CONFIG_PCIE_MICROCHIP_HOST=y -+# CONFIG_PCIE_RCAR_HOST is not set -+# CONFIG_PCIE_RCAR_EP is not set - CONFIG_PCIE_XILINX=y - - # -@@ -1635,6 +1674,7 @@ CONFIG_PCIE_CADENCE_EP=y +@@ -1635,6 +1664,7 @@ CONFIG_PCIE_CADENCE_EP=y CONFIG_PCIE_CADENCE_PLAT=y CONFIG_PCIE_CADENCE_PLAT_HOST=y CONFIG_PCIE_CADENCE_PLAT_EP=y @@ -12831,53 +12661,16 @@ CONFIG_PCI_J721E=y CONFIG_PCI_J721E_HOST=y # CONFIG_PCI_J721E_EP is not set -@@ -1697,7 +1737,6 @@ CONFIG_FW_LOADER_DEBUG=y - CONFIG_EXTRA_FIRMWARE="" - # CONFIG_FW_LOADER_USER_HELPER is not set - # CONFIG_FW_LOADER_COMPRESS is not set --CONFIG_FW_CACHE=y - # CONFIG_FW_UPLOAD is not set - # end of Firmware loader - -@@ -1708,9 +1747,10 @@ CONFIG_WANT_DEV_COREDUMP=y - # CONFIG_DEBUG_TEST_DRIVER_REMOVE is not set +@@ -1709,7 +1739,7 @@ CONFIG_WANT_DEV_COREDUMP=y # CONFIG_TEST_ASYNC_DRIVER_PROBE is not set CONFIG_GENERIC_CPU_DEVICES=y -+CONFIG_SOC_BUS=y CONFIG_REGMAP=y -CONFIG_REGMAP_I2C=m --CONFIG_REGMAP_SPI=m +CONFIG_REGMAP_I2C=y -+CONFIG_REGMAP_SPI=y + CONFIG_REGMAP_SPI=m CONFIG_REGMAP_MMIO=y CONFIG_DMA_SHARED_BUFFER=y - # CONFIG_DMA_FENCE_TRACE is not set -@@ -1723,6 +1763,8 @@ CONFIG_GENERIC_ARCH_NUMA=y - # Bus devices - # - # CONFIG_MOXTET is not set -+# CONFIG_SUN50I_DE2_BUS is not set -+# CONFIG_SUNXI_RSB is not set - # CONFIG_MHI_BUS is not set - # CONFIG_MHI_BUS_EP is not set - # end of Bus devices -@@ -1746,6 +1788,7 @@ CONFIG_PROC_EVENTS=y - # end of ARM System Control and Management Interface Protocol - - # CONFIG_FIRMWARE_MEMMAP is not set -+# CONFIG_ISCSI_IBFT is not set - CONFIG_SYSFB=y - CONFIG_SYSFB_SIMPLEFB=y - # CONFIG_GOOGLE_FIRMWARE is not set -@@ -1766,6 +1809,7 @@ CONFIG_EFI_GENERIC_STUB=y - # CONFIG_RESET_ATTACK_MITIGATION is not set - # CONFIG_EFI_DISABLE_PCI_DMA is not set - CONFIG_EFI_EARLYCON=y -+# CONFIG_EFI_CUSTOM_SSDT_OVERLAYS is not set - # CONFIG_EFI_DISABLE_RUNTIME is not set - # CONFIG_EFI_COCO_SECRET is not set - # end of EFI (Extensible Firmware Interface) Support -@@ -1774,11 +1818,14 @@ CONFIG_EFI_EARLYCON=y +@@ -1774,11 +1804,14 @@ CONFIG_EFI_EARLYCON=y # Tegra firmware driver # # end of Tegra firmware driver @@ -12894,7 +12687,7 @@ # # Partition parsers -@@ -1792,9 +1839,8 @@ CONFIG_MTD_OF_PARTS=m +@@ -1792,9 +1825,8 @@ CONFIG_MTD_OF_PARTS=m # # User Modules And Translation Layers # @@ -12906,7 +12699,7 @@ # # Note that in some cases UBI block is preferred. See MTD_UBI_BLOCK. -@@ -1861,8 +1907,8 @@ CONFIG_MTD_PHYSMAP_OF=y +@@ -1861,8 +1893,8 @@ CONFIG_MTD_PHYSMAP_OF=y # CONFIG_MTD_MCHP23K256 is not set # CONFIG_MTD_MCHP48L640 is not set # CONFIG_MTD_SST25L is not set @@ -12917,7 +12710,7 @@ # CONFIG_MTD_MTDRAM is not set CONFIG_MTD_BLOCK2MTD=m -@@ -1875,13 +1921,15 @@ CONFIG_MTD_BLOCK2MTD=m +@@ -1875,13 +1907,15 @@ CONFIG_MTD_BLOCK2MTD=m # # NAND # @@ -12934,7 +12727,7 @@ # CONFIG_MTD_NAND_ECC_SW_HAMMING is not set # CONFIG_MTD_NAND_ECC_SW_BCH is not set # CONFIG_MTD_NAND_ECC_MXIC is not set -@@ -1894,12 +1942,13 @@ CONFIG_MTD_BLOCK2MTD=m +@@ -1894,12 +1928,13 @@ CONFIG_MTD_BLOCK2MTD=m # CONFIG_MTD_LPDDR is not set # end of LPDDR & LPDDR2 PCM memory drivers @@ -12950,108 +12743,7 @@ CONFIG_MTD_UBI_WL_THRESHOLD=4096 CONFIG_MTD_UBI_BEB_LIMIT=20 # CONFIG_MTD_UBI_FASTMAP is not set -@@ -1920,6 +1969,13 @@ CONFIG_OF_RESOLVE=y - CONFIG_OF_OVERLAY=y - CONFIG_OF_NUMA=y - # CONFIG_PARPORT is not set -+CONFIG_PNP=y -+CONFIG_PNP_DEBUG_MESSAGES=y -+ -+# -+# Protocols -+# -+CONFIG_PNPACPI=y - CONFIG_BLK_DEV=y - CONFIG_BLK_DEV_NULL_BLK=m - CONFIG_CDROM=y -@@ -1938,7 +1994,7 @@ CONFIG_BLK_DEV_LOOP=y - CONFIG_BLK_DEV_LOOP_MIN_COUNT=0 - CONFIG_BLK_DEV_DRBD=m - # CONFIG_DRBD_FAULT_INJECTION is not set --CONFIG_BLK_DEV_NBD=m -+CONFIG_BLK_DEV_NBD=y - CONFIG_BLK_DEV_RAM=m - CONFIG_BLK_DEV_RAM_COUNT=16 - CONFIG_BLK_DEV_RAM_SIZE=16384 -@@ -2007,7 +2063,7 @@ CONFIG_MISC_RTSX=m - # - # EEPROM support - # --# CONFIG_EEPROM_AT24 is not set -+CONFIG_EEPROM_AT24=y - # CONFIG_EEPROM_AT25 is not set - CONFIG_EEPROM_LEGACY=m - CONFIG_EEPROM_MAX6875=m -@@ -2027,7 +2083,6 @@ CONFIG_CB710_DEBUG_ASSUMPTIONS=y - # CONFIG_TI_ST is not set - # end of Texas Instruments shared transport line discipline - --# CONFIG_SENSORS_LIS3_SPI is not set - CONFIG_SENSORS_LIS3_I2C=m - CONFIG_ALTERA_STAPL=m - # CONFIG_GENWQE is not set -@@ -2155,8 +2210,11 @@ CONFIG_SCSI_DH_ALUA=y - - CONFIG_ATA=y - CONFIG_SATA_HOST=y -+CONFIG_PATA_TIMINGS=y - CONFIG_ATA_VERBOSE_ERROR=y - CONFIG_ATA_FORCE=y -+CONFIG_ATA_ACPI=y -+# CONFIG_SATA_ZPODD is not set - CONFIG_SATA_PMP=y - - # -@@ -2167,6 +2225,7 @@ CONFIG_SATA_MOBILE_LPM_POLICY=0 - CONFIG_SATA_AHCI_PLATFORM=y - # CONFIG_AHCI_DWC is not set - # CONFIG_AHCI_CEVA is not set -+# CONFIG_AHCI_SUNXI is not set - # CONFIG_SATA_INIC162X is not set - # CONFIG_SATA_ACARD_AHCI is not set - # CONFIG_SATA_SIL24 is not set -@@ -2188,6 +2247,7 @@ CONFIG_ATA_PIIX=m - # CONFIG_SATA_MV is not set - # CONFIG_SATA_NV is not set - # CONFIG_SATA_PROMISE is not set -+# CONFIG_SATA_RCAR is not set - # CONFIG_SATA_SIL is not set - # CONFIG_SATA_SIS is not set - # CONFIG_SATA_SVW is not set -@@ -2246,6 +2306,7 @@ CONFIG_ATA_PIIX=m - # - # Generic fallback / legacy drivers - # -+# CONFIG_PATA_ACPI is not set - CONFIG_ATA_GENERIC=m - # CONFIG_PATA_LEGACY is not set - CONFIG_MD=y -@@ -2264,14 +2325,14 @@ CONFIG_BCACHE=m - # CONFIG_BCACHE_CLOSURES_DEBUG is not set - # CONFIG_BCACHE_ASYNC_REGISTRATION is not set - CONFIG_BLK_DEV_DM_BUILTIN=y --CONFIG_BLK_DEV_DM=m -+CONFIG_BLK_DEV_DM=y - CONFIG_DM_DEBUG=y - CONFIG_DM_BUFIO=m - # CONFIG_DM_DEBUG_BLOCK_MANAGER_LOCKING is not set - CONFIG_DM_BIO_PRISON=m - CONFIG_DM_PERSISTENT_DATA=m - # CONFIG_DM_UNSTRIPED is not set --CONFIG_DM_CRYPT=m -+CONFIG_DM_CRYPT=y - CONFIG_DM_SNAPSHOT=m - CONFIG_DM_THIN_PROVISIONING=m - CONFIG_DM_CACHE=m -@@ -2291,6 +2352,7 @@ CONFIG_DM_MULTIPATH_ST=m - # CONFIG_DM_MULTIPATH_IOA is not set - CONFIG_DM_DELAY=m - # CONFIG_DM_DUST is not set -+# CONFIG_DM_INIT is not set - CONFIG_DM_UEVENT=y - CONFIG_DM_FLAKEY=m - CONFIG_DM_VERITY=m -@@ -2321,7 +2383,7 @@ CONFIG_ISCSI_TARGET_CXGB4=m +@@ -2321,7 +2356,7 @@ CONFIG_ISCSI_TARGET_CXGB4=m # end of IEEE 1394 (FireWire) support CONFIG_NETDEVICES=y @@ -13060,7 +12752,7 @@ CONFIG_NET_CORE=y CONFIG_BONDING=m CONFIG_DUMMY=m -@@ -2365,10 +2427,13 @@ CONFIG_VSOCKMON=m +@@ -2365,6 +2400,7 @@ CONFIG_VSOCKMON=m CONFIG_ETHERNET=y CONFIG_MDIO=m # CONFIG_NET_VENDOR_3COM is not set @@ -13068,29 +12760,7 @@ # CONFIG_NET_VENDOR_ADAPTEC is not set # CONFIG_NET_VENDOR_AGERE is not set CONFIG_NET_VENDOR_ALACRITECH=y - # CONFIG_SLICOSS is not set -+CONFIG_NET_VENDOR_ALLWINNER=y -+# CONFIG_SUN4I_EMAC is not set - # CONFIG_NET_VENDOR_ALTEON is not set - # CONFIG_ALTERA_TSE is not set - CONFIG_NET_VENDOR_AMAZON=y -@@ -2405,14 +2470,13 @@ CONFIG_BNXT_DCB=y - # CONFIG_BNXT_HWMON is not set - CONFIG_NET_VENDOR_CADENCE=y - CONFIG_MACB=y --CONFIG_MACB_USE_HWSTAMP=y - # CONFIG_MACB_PCI is not set - CONFIG_NET_VENDOR_CAVIUM=y - CONFIG_THUNDER_NIC_PF=m - CONFIG_THUNDER_NIC_VF=m - CONFIG_THUNDER_NIC_BGX=m - CONFIG_THUNDER_NIC_RGX=m --CONFIG_CAVIUM_PTP=y -+# CONFIG_CAVIUM_PTP is not set - CONFIG_LIQUIDIO_CORE=m - CONFIG_LIQUIDIO=m - CONFIG_LIQUIDIO_VF=m -@@ -2441,6 +2505,7 @@ CONFIG_NET_VENDOR_FUNGIBLE=y +@@ -2441,6 +2477,7 @@ CONFIG_NET_VENDOR_FUNGIBLE=y # CONFIG_FUN_ETH is not set CONFIG_NET_VENDOR_GOOGLE=y CONFIG_NET_VENDOR_HUAWEI=y @@ -13098,7 +12768,7 @@ # CONFIG_NET_VENDOR_I825XX is not set CONFIG_NET_VENDOR_INTEL=y # CONFIG_E100 is not set -@@ -2465,6 +2530,10 @@ CONFIG_FM10K=m +@@ -2465,6 +2502,10 @@ CONFIG_FM10K=m # CONFIG_IGC is not set CONFIG_NET_VENDOR_MUCSE=y # CONFIG_MXGBE is not set @@ -13109,13 +12779,7 @@ # CONFIG_JME is not set CONFIG_NET_VENDOR_ADI=y # CONFIG_ADIN1110 is not set -@@ -2563,13 +2632,24 @@ CONFIG_SFC_MCDI_MON=y - CONFIG_SFC_SRIOV=y - CONFIG_SFC_MCDI_LOGGING=y - # CONFIG_SFC_FALCON is not set --# CONFIG_SFC_SIENA is not set - CONFIG_NET_VENDOR_SMSC=y - CONFIG_EPIC100=m +@@ -2569,7 +2610,17 @@ CONFIG_EPIC100=m CONFIG_SMSC911X=m CONFIG_SMSC9420=m # CONFIG_NET_VENDOR_SOCIONEXT is not set @@ -13127,8 +12791,6 @@ +# CONFIG_DWMAC_DWC_QOS_ETH is not set +CONFIG_DWMAC_GENERIC=y +CONFIG_DWMAC_STARFIVE=m -+CONFIG_DWMAC_SUNXI=y -+CONFIG_DWMAC_SUN8I=y +CONFIG_DWMAC_XUANTIE=y +CONFIG_DWMAC_SOPHGO=y +# CONFIG_DWMAC_INTEL_PLAT is not set @@ -13136,7 +12798,7 @@ # CONFIG_NET_VENDOR_SUN is not set # CONFIG_NET_VENDOR_SYNOPSYS is not set # CONFIG_NET_VENDOR_TEHUTI is not set -@@ -2583,8 +2663,11 @@ CONFIG_NGBE=m +@@ -2583,6 +2634,8 @@ CONFIG_NGBE=m CONFIG_TXGBE=m # CONFIG_NET_VENDOR_WIZNET is not set # CONFIG_NET_VENDOR_XILINX is not set @@ -13144,46 +12806,8 @@ +# CONFIG_NCE is not set # CONFIG_FDDI is not set # CONFIG_HIPPI is not set -+# CONFIG_NET_SB1000 is not set CONFIG_PHYLINK=y - CONFIG_PHYLIB=y - CONFIG_SWPHY=y -@@ -2660,6 +2743,7 @@ CONFIG_CAN_CALC_BITTIMING=y - # CONFIG_CAN_GRCAN is not set - # CONFIG_CAN_KVASER_PCIEFD is not set - CONFIG_CAN_SLCAN=m -+# CONFIG_CAN_SUN4I is not set - CONFIG_CAN_C_CAN=m - CONFIG_CAN_C_CAN_PLATFORM=m - CONFIG_CAN_C_CAN_PCI=m -@@ -2671,6 +2755,8 @@ CONFIG_CAN_CC770_PLATFORM=m - # CONFIG_CAN_IFI_CANFD is not set - # CONFIG_CAN_M_CAN is not set - # CONFIG_CAN_PEAK_PCIEFD is not set -+# CONFIG_CAN_RCAR is not set -+# CONFIG_CAN_RCAR_CANFD is not set - CONFIG_CAN_SJA1000=m - CONFIG_CAN_EMS_PCI=m - # CONFIG_CAN_F81601 is not set -@@ -2710,7 +2796,9 @@ CONFIG_MDIO_DEVICE=y - CONFIG_MDIO_BUS=y - CONFIG_FWNODE_MDIO=y - CONFIG_OF_MDIO=y -+CONFIG_ACPI_MDIO=y - CONFIG_MDIO_DEVRES=y -+# CONFIG_MDIO_SUN4I is not set - CONFIG_MDIO_BITBANG=m - CONFIG_MDIO_BCM_UNIMAC=m - CONFIG_MDIO_CAVIUM=m -@@ -2727,6 +2815,7 @@ CONFIG_MDIO_THUNDER=m - # - # MDIO Multiplexers - # -+CONFIG_MDIO_BUS_MUX=y - # CONFIG_MDIO_BUS_MUX_GPIO is not set - # CONFIG_MDIO_BUS_MUX_MULTIPLEXER is not set - # CONFIG_MDIO_BUS_MUX_MMIOREG is not set -@@ -2734,7 +2823,7 @@ CONFIG_MDIO_THUNDER=m +@@ -2734,7 +2787,7 @@ CONFIG_MDIO_THUNDER=m # # PCS device drivers # @@ -13192,27 +12816,7 @@ # end of PCS device drivers CONFIG_PPP=m -@@ -2767,8 +2856,8 @@ CONFIG_USB_RTL8150=m - CONFIG_USB_RTL8152=m - CONFIG_USB_LAN78XX=m - CONFIG_USB_USBNET=m --CONFIG_USB_NET_AX8817X=m --CONFIG_USB_NET_AX88179_178A=m -+# CONFIG_USB_NET_AX8817X is not set -+# CONFIG_USB_NET_AX88179_178A is not set - CONFIG_USB_NET_CDCETHER=m - CONFIG_USB_NET_CDC_EEM=m - CONFIG_USB_NET_CDC_NCM=m -@@ -2780,7 +2869,7 @@ CONFIG_USB_NET_SR9700=m - CONFIG_USB_NET_SMSC75XX=m - CONFIG_USB_NET_SMSC95XX=m - CONFIG_USB_NET_GL620A=m --CONFIG_USB_NET_NET1080=m -+# CONFIG_USB_NET_NET1080 is not set - CONFIG_USB_NET_PLUSB=m - CONFIG_USB_NET_MCS7830=m - CONFIG_USB_NET_RNDIS_HOST=m -@@ -2864,7 +2953,39 @@ CONFIG_RT2X00_LIB_CRYPTO=y +@@ -2864,7 +2917,39 @@ CONFIG_RT2X00_LIB_CRYPTO=y CONFIG_RT2X00_LIB_LEDS=y # CONFIG_RT2X00_LIB_DEBUGFS is not set # CONFIG_RT2X00_DEBUG is not set @@ -13253,15 +12857,7 @@ # CONFIG_WLAN_VENDOR_RSI is not set CONFIG_WLAN_VENDOR_SILABS=y # CONFIG_WFX is not set -@@ -2899,6 +3020,7 @@ CONFIG_HDLC_PPP=m - # end of Wireless WAN - - # CONFIG_VMXNET3 is not set -+# CONFIG_FUJITSU_ES is not set - CONFIG_USB4_NET=m - # CONFIG_NETDEVSIM is not set - CONFIG_NET_FAILOVER=y -@@ -2929,6 +3051,7 @@ CONFIG_INPUT_EVDEV=y +@@ -2929,6 +3014,7 @@ CONFIG_INPUT_EVDEV=y # Input Device Drivers # CONFIG_INPUT_KEYBOARD=y @@ -13269,226 +12865,7 @@ # CONFIG_KEYBOARD_ADP5588 is not set # CONFIG_KEYBOARD_ADP5589 is not set CONFIG_KEYBOARD_ATKBD=y -@@ -2954,6 +3077,7 @@ CONFIG_KEYBOARD_GPIO=y - # CONFIG_KEYBOARD_GOLDFISH_EVENTS is not set - # CONFIG_KEYBOARD_STOWAWAY is not set - # CONFIG_KEYBOARD_SUNKBD is not set -+CONFIG_KEYBOARD_SUN4I_LRADC=m - # CONFIG_KEYBOARD_OMAP4 is not set - # CONFIG_KEYBOARD_TM2_TOUCHKEY is not set - # CONFIG_KEYBOARD_XTKBD is not set -@@ -2986,7 +3110,83 @@ CONFIG_MOUSE_SYNAPTICS_I2C=m - CONFIG_MOUSE_SYNAPTICS_USB=m - # CONFIG_INPUT_JOYSTICK is not set - # CONFIG_INPUT_TABLET is not set --# CONFIG_INPUT_TOUCHSCREEN is not set -+CONFIG_INPUT_TOUCHSCREEN=y -+# CONFIG_TOUCHSCREEN_ADS7846 is not set -+# CONFIG_TOUCHSCREEN_AD7877 is not set -+# CONFIG_TOUCHSCREEN_AD7879 is not set -+# CONFIG_TOUCHSCREEN_ADC is not set -+# CONFIG_TOUCHSCREEN_AR1021_I2C is not set -+# CONFIG_TOUCHSCREEN_ATMEL_MXT is not set -+# CONFIG_TOUCHSCREEN_AUO_PIXCIR is not set -+# CONFIG_TOUCHSCREEN_BU21013 is not set -+# CONFIG_TOUCHSCREEN_BU21029 is not set -+# CONFIG_TOUCHSCREEN_CHIPONE_ICN8318 is not set -+# CONFIG_TOUCHSCREEN_CHIPONE_ICN8505 is not set -+# CONFIG_TOUCHSCREEN_CY8CTMA140 is not set -+# CONFIG_TOUCHSCREEN_CY8CTMG110 is not set -+# CONFIG_TOUCHSCREEN_CYTTSP_CORE is not set -+# CONFIG_TOUCHSCREEN_CYTTSP4_CORE is not set -+# CONFIG_TOUCHSCREEN_CYTTSP5 is not set -+# CONFIG_TOUCHSCREEN_DYNAPRO is not set -+# CONFIG_TOUCHSCREEN_HAMPSHIRE is not set -+# CONFIG_TOUCHSCREEN_EETI is not set -+# CONFIG_TOUCHSCREEN_EGALAX is not set -+# CONFIG_TOUCHSCREEN_EGALAX_SERIAL is not set -+# CONFIG_TOUCHSCREEN_EXC3000 is not set -+# CONFIG_TOUCHSCREEN_FUJITSU is not set -+# CONFIG_TOUCHSCREEN_GOODIX is not set -+# CONFIG_TOUCHSCREEN_HIDEEP is not set -+# CONFIG_TOUCHSCREEN_HYCON_HY46XX is not set -+# CONFIG_TOUCHSCREEN_HYNITRON_CSTXXX is not set -+# CONFIG_TOUCHSCREEN_ILI210X is not set -+# CONFIG_TOUCHSCREEN_ILITEK is not set -+# CONFIG_TOUCHSCREEN_S6SY761 is not set -+# CONFIG_TOUCHSCREEN_GUNZE is not set -+# CONFIG_TOUCHSCREEN_EKTF2127 is not set -+# CONFIG_TOUCHSCREEN_ELAN is not set -+# CONFIG_TOUCHSCREEN_ELO is not set -+# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set -+# CONFIG_TOUCHSCREEN_WACOM_I2C is not set -+# CONFIG_TOUCHSCREEN_MAX11801 is not set -+# CONFIG_TOUCHSCREEN_MCS5000 is not set -+# CONFIG_TOUCHSCREEN_MMS114 is not set -+# CONFIG_TOUCHSCREEN_MELFAS_MIP4 is not set -+# CONFIG_TOUCHSCREEN_MSG2638 is not set -+# CONFIG_TOUCHSCREEN_MTOUCH is not set -+# CONFIG_TOUCHSCREEN_NOVATEK_NVT_TS is not set -+# CONFIG_TOUCHSCREEN_IMAGIS is not set -+# CONFIG_TOUCHSCREEN_IMX6UL_TSC is not set -+# CONFIG_TOUCHSCREEN_INEXIO is not set -+# CONFIG_TOUCHSCREEN_PENMOUNT is not set -+# CONFIG_TOUCHSCREEN_EDT_FT5X06 is not set -+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set -+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set -+# CONFIG_TOUCHSCREEN_PIXCIR is not set -+# CONFIG_TOUCHSCREEN_WDT87XX_I2C is not set -+# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set -+# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set -+# CONFIG_TOUCHSCREEN_TSC_SERIO is not set -+# CONFIG_TOUCHSCREEN_TSC2004 is not set -+# CONFIG_TOUCHSCREEN_TSC2005 is not set -+# CONFIG_TOUCHSCREEN_TSC2007 is not set -+# CONFIG_TOUCHSCREEN_RM_TS is not set -+# CONFIG_TOUCHSCREEN_SILEAD is not set -+# CONFIG_TOUCHSCREEN_SIS_I2C is not set -+# CONFIG_TOUCHSCREEN_ST1232 is not set -+# CONFIG_TOUCHSCREEN_STMFTS is not set -+# CONFIG_TOUCHSCREEN_SUN4I is not set -+# CONFIG_TOUCHSCREEN_SUR40 is not set -+# CONFIG_TOUCHSCREEN_SURFACE3_SPI is not set -+# CONFIG_TOUCHSCREEN_SX8654 is not set -+# CONFIG_TOUCHSCREEN_TPS6507X is not set -+# CONFIG_TOUCHSCREEN_ZET6223 is not set -+# CONFIG_TOUCHSCREEN_ZFORCE is not set -+# CONFIG_TOUCHSCREEN_COLIBRI_VF50 is not set -+# CONFIG_TOUCHSCREEN_ROHM_BU21023 is not set -+# CONFIG_TOUCHSCREEN_IQS5XX is not set -+# CONFIG_TOUCHSCREEN_IQS7211 is not set -+# CONFIG_TOUCHSCREEN_ZINITIX is not set -+# CONFIG_TOUCHSCREEN_HIMAX_HX83112B is not set - CONFIG_INPUT_MISC=y - # CONFIG_INPUT_AD714X is not set - # CONFIG_INPUT_ATMEL_CAPTOUCH is not set -@@ -3003,7 +3203,7 @@ CONFIG_INPUT_MISC=y - # CONFIG_INPUT_YEALINK is not set - # CONFIG_INPUT_CM109 is not set - # CONFIG_INPUT_REGULATOR_HAPTIC is not set --CONFIG_INPUT_UINPUT=m -+CONFIG_INPUT_UINPUT=y - # CONFIG_INPUT_PCF8574 is not set - # CONFIG_INPUT_PWM_BEEPER is not set - # CONFIG_INPUT_PWM_VIBRA is not set -@@ -3016,6 +3216,7 @@ CONFIG_INPUT_UINPUT=m - # CONFIG_INPUT_IQS626A is not set - # CONFIG_INPUT_IQS7222 is not set - # CONFIG_INPUT_CMA3000 is not set -+# CONFIG_INPUT_SOC_BUTTON_ARRAY is not set - # CONFIG_INPUT_DRV260X_HAPTICS is not set - # CONFIG_INPUT_DRV2665_HAPTICS is not set - # CONFIG_INPUT_DRV2667_HAPTICS is not set -@@ -3047,6 +3248,7 @@ CONFIG_SERIO_ALTERA_PS2=m - # CONFIG_SERIO_PS2MULT is not set - CONFIG_SERIO_ARC_PS2=m - # CONFIG_SERIO_APBPS2 is not set -+# CONFIG_SERIO_SUN4I_PS2 is not set - # CONFIG_SERIO_GPIO_PS2 is not set - # CONFIG_USERIO is not set - # CONFIG_GAMEPORT is not set -@@ -3060,7 +3262,6 @@ CONFIG_TTY=y - CONFIG_VT=y - CONFIG_CONSOLE_TRANSLATIONS=y - CONFIG_VT_CONSOLE=y --CONFIG_VT_CONSOLE_SLEEP=y - CONFIG_HW_CONSOLE=y - CONFIG_VT_HW_CONSOLE_BINDING=y - CONFIG_UNIX98_PTYS=y -@@ -3074,6 +3275,7 @@ CONFIG_LDISC_AUTOLOAD=y - CONFIG_SERIAL_EARLYCON=y - CONFIG_SERIAL_8250=y - # CONFIG_SERIAL_8250_DEPRECATED_OPTIONS is not set -+CONFIG_SERIAL_8250_PNP=y - CONFIG_SERIAL_8250_16550A_VARIANTS=y - # CONFIG_SERIAL_8250_FINTEK is not set - CONFIG_SERIAL_8250_CONSOLE=y -@@ -3091,6 +3293,7 @@ CONFIG_SERIAL_8250_SHARE_IRQ=y - CONFIG_SERIAL_8250_RSA=y - CONFIG_SERIAL_8250_DWLIB=y - CONFIG_SERIAL_8250_DW=y -+# CONFIG_SERIAL_8250_EM is not set - CONFIG_SERIAL_8250_RT288X=y - CONFIG_SERIAL_8250_PERICOM=y - CONFIG_SERIAL_OF_PLATFORM=y -@@ -3105,6 +3308,11 @@ CONFIG_SERIAL_OF_PLATFORM=y - # CONFIG_SERIAL_MAX3100 is not set - # CONFIG_SERIAL_MAX310X is not set - # CONFIG_SERIAL_UARTLITE is not set -+CONFIG_SERIAL_SH_SCI=y -+CONFIG_SERIAL_SH_SCI_NR_UARTS=18 -+CONFIG_SERIAL_SH_SCI_CONSOLE=y -+CONFIG_SERIAL_SH_SCI_EARLYCON=y -+CONFIG_SERIAL_SH_SCI_DMA=y - CONFIG_SERIAL_CORE=y - CONFIG_SERIAL_CORE_CONSOLE=y - CONFIG_CONSOLE_POLL=y -@@ -3153,6 +3361,7 @@ CONFIG_HW_RANDOM=y - CONFIG_HW_RANDOM_TIMERIOMEM=m - # CONFIG_HW_RANDOM_BA431 is not set - CONFIG_HW_RANDOM_VIRTIO=y -+CONFIG_HW_RANDOM_OPTEE=y - # CONFIG_HW_RANDOM_CCTRNG is not set - # CONFIG_HW_RANDOM_XIPHERA is not set - # CONFIG_HW_RANDOM_JH7110 is not set -@@ -3171,7 +3380,10 @@ CONFIG_TCG_TIS_I2C_ATMEL=m - CONFIG_TCG_TIS_I2C_INFINEON=m - CONFIG_TCG_TIS_I2C_NUVOTON=m - CONFIG_TCG_ATMEL=m -+# CONFIG_TCG_INFINEON is not set -+CONFIG_TCG_CRB=y - # CONFIG_TCG_VTPM_PROXY is not set -+# CONFIG_TCG_FTPM_TEE is not set - CONFIG_TCG_TIS_ST33ZP24=m - CONFIG_TCG_TIS_ST33ZP24_I2C=m - CONFIG_TCG_TIS_ST33ZP24_SPI=m -@@ -3183,6 +3395,7 @@ CONFIG_TCG_TIS_ST33ZP24_SPI=m - # I2C support - # - CONFIG_I2C=y -+CONFIG_ACPI_I2C_OPREGION=y - CONFIG_I2C_BOARDINFO=y - CONFIG_I2C_COMPAT=y - CONFIG_I2C_CHARDEV=y -@@ -3220,6 +3433,7 @@ CONFIG_I2C_CCGX_UCSI=m - # CONFIG_I2C_ALI15X3 is not set - # CONFIG_I2C_AMD756 is not set - # CONFIG_I2C_AMD8111 is not set -+# CONFIG_I2C_AMD_MP2 is not set - # CONFIG_I2C_I801 is not set - # CONFIG_I2C_ISCH is not set - # CONFIG_I2C_PIIX4 is not set -@@ -3231,6 +3445,11 @@ CONFIG_I2C_NFORCE2=m - # CONFIG_I2C_VIA is not set - # CONFIG_I2C_VIAPRO is not set - -+# -+# ACPI drivers -+# -+# CONFIG_I2C_SCMI is not set -+ - # - # I2C system bus drivers (mostly embedded / system-on-chip) - # -@@ -3242,12 +3461,17 @@ CONFIG_I2C_DESIGNWARE_PCI=m - # CONFIG_I2C_EMEV2 is not set - CONFIG_I2C_GPIO=m - # CONFIG_I2C_GPIO_FAULT_INJECTOR is not set -+CONFIG_I2C_MV64XXX=y - # CONFIG_I2C_NOMADIK is not set - # CONFIG_I2C_OCORES is not set - CONFIG_I2C_PCA_PLATFORM=m -+# CONFIG_I2C_RIIC is not set - # CONFIG_I2C_RK3X is not set -+# CONFIG_I2C_RZV2M is not set -+# CONFIG_I2C_SH_MOBILE is not set - CONFIG_I2C_SIMTEC=m - # CONFIG_I2C_XILINX is not set -+# CONFIG_I2C_RCAR is not set - - # - # External I2C/SMBus adapter drivers -@@ -3289,6 +3513,7 @@ CONFIG_SPI_MEM=y +@@ -3289,6 +3375,7 @@ CONFIG_SPI_MEM=y CONFIG_SPI_CADENCE=m # CONFIG_SPI_CADENCE_QUADSPI is not set # CONFIG_SPI_CADENCE_XSPI is not set @@ -13496,23 +12873,7 @@ CONFIG_SPI_DESIGNWARE=y # CONFIG_SPI_DW_DMA is not set CONFIG_SPI_DW_PCI=m -@@ -3301,9 +3526,15 @@ CONFIG_SPI_DW_MMIO=y - # CONFIG_SPI_PCI1XXXX is not set - # CONFIG_SPI_PL022 is not set - # CONFIG_SPI_PXA2XX is not set -+# CONFIG_SPI_RSPI is not set -+# CONFIG_SPI_RZV2M_CSI is not set - # CONFIG_SPI_SC18IS602 is not set -+# CONFIG_SPI_SH_MSIOF is not set -+# CONFIG_SPI_SH_HSPI is not set - CONFIG_SPI_SIFIVE=y - # CONFIG_SPI_SN_F_OSPI is not set -+# CONFIG_SPI_SUN4I is not set -+CONFIG_SPI_SUN6I=y - # CONFIG_SPI_MXIC is not set - # CONFIG_SPI_XCOMM is not set - # CONFIG_SPI_XILINX is not set -@@ -3318,7 +3549,7 @@ CONFIG_SPI_SIFIVE=y +@@ -3318,7 +3405,7 @@ CONFIG_SPI_SIFIVE=y # # SPI Protocol Masters # @@ -13521,31 +12882,7 @@ # CONFIG_SPI_LOOPBACK_TEST is not set # CONFIG_SPI_TLE62X0 is not set # CONFIG_SPI_SLAVE is not set -@@ -3342,14 +3573,8 @@ CONFIG_PPS_CLIENT_GPIO=m - # - # PTP clock support - # --CONFIG_PTP_1588_CLOCK=y -+# CONFIG_PTP_1588_CLOCK is not set - CONFIG_PTP_1588_CLOCK_OPTIONAL=y --CONFIG_DP83640_PHY=m --# CONFIG_PTP_1588_CLOCK_INES is not set --# CONFIG_PTP_1588_CLOCK_IDT82P33 is not set --# CONFIG_PTP_1588_CLOCK_IDTCM is not set --# CONFIG_PTP_1588_CLOCK_MOCK is not set --# CONFIG_PTP_1588_CLOCK_OCP is not set - # end of PTP clock support - - CONFIG_PINCTRL=y -@@ -3359,6 +3584,7 @@ CONFIG_GENERIC_PINMUX_FUNCTIONS=y - CONFIG_PINCONF=y - CONFIG_GENERIC_PINCONF=y - # CONFIG_DEBUG_PINCTRL is not set -+# CONFIG_PINCTRL_AMD is not set - # CONFIG_PINCTRL_CY8C95X0 is not set - # CONFIG_PINCTRL_MCP23S08 is not set - # CONFIG_PINCTRL_MICROCHIP_SGPIO is not set -@@ -3366,19 +3592,47 @@ CONFIG_GENERIC_PINCONF=y +@@ -3366,6 +3453,7 @@ CONFIG_GENERIC_PINCONF=y # CONFIG_PINCTRL_SINGLE is not set # CONFIG_PINCTRL_STMFX is not set # CONFIG_PINCTRL_SX150X is not set @@ -13553,63 +12890,7 @@ # # Renesas pinctrl drivers - # -+CONFIG_PINCTRL_RENESAS=y - # end of Renesas pinctrl drivers - - CONFIG_PINCTRL_STARFIVE_JH7100=y - CONFIG_PINCTRL_STARFIVE_JH7110=y - CONFIG_PINCTRL_STARFIVE_JH7110_SYS=y - CONFIG_PINCTRL_STARFIVE_JH7110_AON=y -+CONFIG_PINCTRL_SUNXI=y -+# CONFIG_PINCTRL_SUN4I_A10 is not set -+# CONFIG_PINCTRL_SUN5I is not set -+# CONFIG_PINCTRL_SUN6I_A31 is not set -+# CONFIG_PINCTRL_SUN6I_A31_R is not set -+# CONFIG_PINCTRL_SUN8I_A23 is not set -+# CONFIG_PINCTRL_SUN8I_A33 is not set -+# CONFIG_PINCTRL_SUN8I_A83T is not set -+# CONFIG_PINCTRL_SUN8I_A83T_R is not set -+# CONFIG_PINCTRL_SUN8I_A23_R is not set -+# CONFIG_PINCTRL_SUN8I_H3 is not set -+# CONFIG_PINCTRL_SUN8I_H3_R is not set -+# CONFIG_PINCTRL_SUN8I_V3S is not set -+# CONFIG_PINCTRL_SUN9I_A80 is not set -+# CONFIG_PINCTRL_SUN9I_A80_R is not set -+CONFIG_PINCTRL_SUN20I_D1=y -+# CONFIG_PINCTRL_SUN50I_A64 is not set -+# CONFIG_PINCTRL_SUN50I_A64_R is not set -+# CONFIG_PINCTRL_SUN50I_A100 is not set -+# CONFIG_PINCTRL_SUN50I_A100_R is not set -+# CONFIG_PINCTRL_SUN50I_H5 is not set -+# CONFIG_PINCTRL_SUN50I_H6 is not set -+# CONFIG_PINCTRL_SUN50I_H6_R is not set -+# CONFIG_PINCTRL_SUN50I_H616 is not set -+# CONFIG_PINCTRL_SUN50I_H616_R is not set - CONFIG_GPIOLIB=y - CONFIG_GPIOLIB_FASTPATH_LIMIT=512 - CONFIG_OF_GPIO=y -+CONFIG_GPIO_ACPI=y - CONFIG_GPIOLIB_IRQCHIP=y - # CONFIG_DEBUG_GPIO is not set - CONFIG_GPIO_SYSFS=y -@@ -3391,6 +3645,7 @@ CONFIG_GPIO_GENERIC=y - # - # CONFIG_GPIO_74XX_MMIO is not set - # CONFIG_GPIO_ALTERA is not set -+# CONFIG_GPIO_AMDPT is not set - CONFIG_GPIO_CADENCE=m - CONFIG_GPIO_DWAPB=y - # CONFIG_GPIO_EXAR is not set -@@ -3401,6 +3656,7 @@ CONFIG_GPIO_GENERIC_PLATFORM=m - # CONFIG_GPIO_LOGICVC is not set - # CONFIG_GPIO_MB86S7X is not set - # CONFIG_GPIO_PL061 is not set -+# CONFIG_GPIO_RCAR is not set - CONFIG_GPIO_SIFIVE=y - # CONFIG_GPIO_SYSCON is not set - # CONFIG_GPIO_XILINX is not set -@@ -3416,7 +3672,8 @@ CONFIG_GPIO_SIFIVE=y +@@ -3416,7 +3504,8 @@ CONFIG_GPIO_SIFIVE=y # CONFIG_GPIO_GW_PLD is not set # CONFIG_GPIO_MAX7300 is not set # CONFIG_GPIO_MAX732X is not set @@ -13619,7 +12900,7 @@ # CONFIG_GPIO_PCA9570 is not set # CONFIG_GPIO_PCF857X is not set # CONFIG_GPIO_TPIC2810 is not set -@@ -3476,6 +3733,7 @@ CONFIG_POWER_RESET_SYSCON_POWEROFF=y +@@ -3476,6 +3565,7 @@ CONFIG_POWER_RESET_SYSCON_POWEROFF=y CONFIG_POWER_SUPPLY=y # CONFIG_POWER_SUPPLY_DEBUG is not set CONFIG_POWER_SUPPLY_HWMON=y @@ -13627,7 +12908,7 @@ # CONFIG_IP5XXX_POWER is not set # CONFIG_TEST_POWER is not set # CONFIG_CHARGER_ADP5061 is not set -@@ -3564,6 +3822,7 @@ CONFIG_SENSORS_G762=m +@@ -3564,6 +3654,7 @@ CONFIG_SENSORS_G762=m # CONFIG_SENSORS_HS3001 is not set CONFIG_SENSORS_IBMAEM=m CONFIG_SENSORS_IBMPEX=m @@ -13635,7 +12916,7 @@ CONFIG_SENSORS_IT87=m CONFIG_SENSORS_JC42=m CONFIG_SENSORS_POWR1220=m -@@ -3599,7 +3858,7 @@ CONFIG_SENSORS_MAX31790=m +@@ -3599,7 +3690,7 @@ CONFIG_SENSORS_MAX31790=m CONFIG_SENSORS_MCP3021=m # CONFIG_SENSORS_TC654 is not set # CONFIG_SENSORS_TPS23861 is not set @@ -13644,7 +12925,7 @@ CONFIG_SENSORS_ADCXX=m CONFIG_SENSORS_LM63=m CONFIG_SENSORS_LM70=m -@@ -3619,6 +3878,7 @@ CONFIG_SENSORS_LM95241=m +@@ -3619,6 +3710,7 @@ CONFIG_SENSORS_LM95241=m CONFIG_SENSORS_LM95245=m CONFIG_SENSORS_PC87360=m CONFIG_SENSORS_PC87427=m @@ -13652,7 +12933,7 @@ CONFIG_SENSORS_NCT6683=m # CONFIG_SENSORS_NCT6775 is not set # CONFIG_SENSORS_NCT6775_I2C is not set -@@ -3679,7 +3939,7 @@ CONFIG_SENSORS_UCD9200=m +@@ -3679,7 +3771,7 @@ CONFIG_SENSORS_UCD9200=m # CONFIG_SENSORS_XDPE152 is not set # CONFIG_SENSORS_XDPE122 is not set CONFIG_SENSORS_ZL6100=m @@ -13661,41 +12942,13 @@ # CONFIG_SENSORS_SBTSI is not set # CONFIG_SENSORS_SBRMI is not set CONFIG_SENSORS_SHT15=m -@@ -3732,9 +3992,14 @@ CONFIG_SENSORS_W83L785TS=m - CONFIG_SENSORS_W83L786NG=m - CONFIG_SENSORS_W83627HF=m - CONFIG_SENSORS_W83627EHF=m -+ -+# -+# ACPI drivers -+# -+# CONFIG_SENSORS_ACPI_POWER is not set - CONFIG_THERMAL=y - # CONFIG_THERMAL_NETLINK is not set --# CONFIG_THERMAL_STATISTICS is not set -+CONFIG_THERMAL_STATISTICS=y - CONFIG_THERMAL_EMERGENCY_POWEROFF_DELAY_MS=0 - CONFIG_THERMAL_HWMON=y - CONFIG_THERMAL_OF=y -@@ -3742,41 +4007,62 @@ CONFIG_THERMAL_OF=y - CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y - # CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set - # CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set -+# CONFIG_THERMAL_DEFAULT_GOV_POWER_ALLOCATOR is not set - CONFIG_THERMAL_GOV_FAIR_SHARE=y - CONFIG_THERMAL_GOV_STEP_WISE=y - # CONFIG_THERMAL_GOV_BANG_BANG is not set +@@ -3748,35 +3840,44 @@ CONFIG_THERMAL_GOV_STEP_WISE=y CONFIG_THERMAL_GOV_USER_SPACE=y -+CONFIG_THERMAL_GOV_POWER_ALLOCATOR=y CONFIG_CPU_THERMAL=y CONFIG_CPU_FREQ_THERMAL=y +CONFIG_DEVFREQ_THERMAL=y CONFIG_THERMAL_EMULATION=y # CONFIG_THERMAL_MMIO is not set -+# CONFIG_SUN8I_THERMAL is not set -+# CONFIG_RCAR_THERMAL is not set -+# CONFIG_RCAR_GEN3_THERMAL is not set -+# CONFIG_RZG2L_THERMAL is not set +# CONFIG_GENERIC_ADC_THERMAL is not set CONFIG_WATCHDOG=y CONFIG_WATCHDOG_CORE=y @@ -13723,18 +12976,12 @@ CONFIG_SOFT_WATCHDOG=m +# CONFIG_SOFT_WATCHDOG_PRETIMEOUT is not set CONFIG_GPIO_WATCHDOG=m -+# CONFIG_WDAT_WDT is not set # CONFIG_XILINX_WATCHDOG is not set # CONFIG_ZIIRAVE_WATCHDOG is not set # CONFIG_CADENCE_WATCHDOG is not set -# CONFIG_DW_WATCHDOG is not set +CONFIG_DW_WATCHDOG=y -+CONFIG_SUNXI_WATCHDOG=y # CONFIG_MAX63XX_WATCHDOG is not set -+# CONFIG_RENESAS_WDT is not set -+# CONFIG_RENESAS_RZAWDT is not set -+# CONFIG_RENESAS_RZN1WDT is not set -+# CONFIG_RENESAS_RZG2LWDT is not set CONFIG_ALIM7101_WDT=m CONFIG_I6300ESB_WDT=m # CONFIG_MEN_A21_WDT is not set @@ -13743,25 +12990,15 @@ # # PCI-based Watchdog Cards -@@ -3805,6 +4091,7 @@ CONFIG_BCMA_DRIVER_GPIO=y - # - CONFIG_MFD_CORE=m - # CONFIG_MFD_ACT8945A is not set -+# CONFIG_MFD_SUN4I_GPADC is not set - # CONFIG_MFD_AS3711 is not set - # CONFIG_MFD_SMPRO is not set - # CONFIG_MFD_AS3722 is not set -@@ -3876,8 +4163,8 @@ CONFIG_MFD_CORE=m - # CONFIG_MFD_SM501 is not set +@@ -3877,7 +3978,6 @@ CONFIG_MFD_CORE=m # CONFIG_MFD_SKY81452 is not set # CONFIG_MFD_STMPE is not set -+# CONFIG_MFD_SUN6I_PRCM is not set CONFIG_MFD_SYSCON=y -# CONFIG_MFD_TI_AM335X_TSCADC is not set # CONFIG_MFD_LP3943 is not set # CONFIG_MFD_LP8788 is not set # CONFIG_MFD_TI_LMU is not set -@@ -3998,6 +4285,7 @@ CONFIG_REGULATOR_PWM=y +@@ -3998,6 +4098,7 @@ CONFIG_REGULATOR_PWM=y # CONFIG_REGULATOR_TPS65132 is not set # CONFIG_REGULATOR_TPS6524X is not set # CONFIG_REGULATOR_VCTRL is not set @@ -13769,98 +13006,7 @@ # CONFIG_RC_CORE is not set # -@@ -4130,10 +4418,12 @@ CONFIG_RADIO_ADAPTERS=m - # CONFIG_USB_RAREMONO is not set - # CONFIG_RADIO_SI470X is not set - CONFIG_MEDIA_PLATFORM_DRIVERS=y --# CONFIG_V4L_PLATFORM_DRIVERS is not set -+CONFIG_V4L_PLATFORM_DRIVERS=y - # CONFIG_SDR_PLATFORM_DRIVERS is not set - # CONFIG_DVB_PLATFORM_DRIVERS is not set --# CONFIG_V4L_MEM2MEM_DRIVERS is not set -+CONFIG_V4L_MEM2MEM_DRIVERS=y -+# CONFIG_VIDEO_MEM2MEM_DEINTERLACE is not set -+# CONFIG_VIDEO_MUX is not set - - # - # Allegro DVT media platform drivers -@@ -4172,6 +4462,7 @@ CONFIG_MEDIA_PLATFORM_DRIVERS=y - # - # Marvell media platform drivers - # -+# CONFIG_VIDEO_CAFE_CCIC is not set - - # - # Mediatek media platform drivers -@@ -4196,6 +4487,15 @@ CONFIG_MEDIA_PLATFORM_DRIVERS=y - # - # Renesas media platform drivers - # -+# CONFIG_VIDEO_RCAR_ISP is not set -+# CONFIG_VIDEO_RCAR_CSI2 is not set -+# CONFIG_VIDEO_RCAR_VIN is not set -+# CONFIG_VIDEO_RZG2L_CSI2 is not set -+# CONFIG_VIDEO_RZG2L_CRU is not set -+# CONFIG_VIDEO_RENESAS_FCP is not set -+# CONFIG_VIDEO_RENESAS_FDP1 is not set -+# CONFIG_VIDEO_RENESAS_JPU is not set -+# CONFIG_VIDEO_RENESAS_VSP1 is not set - - # - # Rockchip media platform drivers -@@ -4212,6 +4512,11 @@ CONFIG_MEDIA_PLATFORM_DRIVERS=y - # - # Sunxi media platform drivers - # -+# CONFIG_VIDEO_SUN4I_CSI is not set -+# CONFIG_VIDEO_SUN6I_CSI is not set -+# CONFIG_VIDEO_SUN8I_A83T_MIPI_CSI2 is not set -+# CONFIG_VIDEO_SUN8I_DEINTERLACE is not set -+# CONFIG_VIDEO_SUN8I_ROTATE is not set - - # - # Texas Instruments drivers -@@ -4220,6 +4525,7 @@ CONFIG_MEDIA_PLATFORM_DRIVERS=y - # - # Verisilicon media platform drivers - # -+# CONFIG_VIDEO_HANTRO is not set - - # - # VIA media platform drivers -@@ -4228,6 +4534,7 @@ CONFIG_MEDIA_PLATFORM_DRIVERS=y - # - # Xilinx media platform drivers - # -+# CONFIG_VIDEO_XILINX is not set - - # - # MMC/SDIO DVB adapters -@@ -4282,6 +4589,7 @@ CONFIG_VIDEO_CAMERA_SENSOR=y - # CONFIG_VIDEO_OV2659 is not set - # CONFIG_VIDEO_OV2680 is not set - # CONFIG_VIDEO_OV2685 is not set -+# CONFIG_VIDEO_OV2740 is not set - # CONFIG_VIDEO_OV4689 is not set - # CONFIG_VIDEO_OV5640 is not set - # CONFIG_VIDEO_OV5645 is not set -@@ -4303,6 +4611,7 @@ CONFIG_VIDEO_CAMERA_SENSOR=y - # CONFIG_VIDEO_OV9282 is not set - # CONFIG_VIDEO_OV9640 is not set - # CONFIG_VIDEO_OV9650 is not set -+# CONFIG_VIDEO_OV9734 is not set - # CONFIG_VIDEO_RDACM20 is not set - # CONFIG_VIDEO_RDACM21 is not set - # CONFIG_VIDEO_RJ54N1 is not set -@@ -4340,6 +4649,7 @@ CONFIG_VIDEO_CAMERA_SENSOR=y - # CONFIG_VIDEO_CS53L32A is not set - # CONFIG_VIDEO_MSP3400 is not set - # CONFIG_VIDEO_SONY_BTF_MPX is not set -+# CONFIG_VIDEO_TDA1997X is not set - # CONFIG_VIDEO_TDA7432 is not set - # CONFIG_VIDEO_TDA9840 is not set - # CONFIG_VIDEO_TEA6415C is not set -@@ -4667,6 +4977,7 @@ CONFIG_DVB_SP2=m +@@ -4667,6 +4768,7 @@ CONFIG_DVB_SP2=m # Graphics support # CONFIG_APERTURE_HELPERS=y @@ -13868,7 +13014,7 @@ CONFIG_VIDEO_CMDLINE=y CONFIG_VIDEO_NOMODESET=y CONFIG_AUXDISPLAY=y -@@ -4678,6 +4989,7 @@ CONFIG_AUXDISPLAY=y +@@ -4678,6 +4780,7 @@ CONFIG_AUXDISPLAY=y # CONFIG_CHARLCD_BL_ON is not set CONFIG_CHARLCD_BL_FLASH=y CONFIG_DRM=y @@ -13876,7 +13022,7 @@ # CONFIG_DRM_DEBUG_MM is not set CONFIG_DRM_KMS_HELPER=y # CONFIG_DRM_DEBUG_DP_MST_TOPOLOGY_REFS is not set -@@ -4686,7 +4998,7 @@ CONFIG_DRM_FBDEV_EMULATION=y +@@ -4686,7 +4789,7 @@ CONFIG_DRM_FBDEV_EMULATION=y CONFIG_DRM_FBDEV_OVERALLOC=100 # CONFIG_DRM_FBDEV_LEAK_PHYS_SMEM is not set CONFIG_DRM_LOAD_EDID_FIRMWARE=y @@ -13885,17 +13031,7 @@ CONFIG_DRM_DISPLAY_DP_HELPER=y CONFIG_DRM_DISPLAY_HDCP_HELPER=y CONFIG_DRM_DISPLAY_HDMI_HELPER=y -@@ -4748,6 +5060,9 @@ CONFIG_DRM_NOUVEAU_BACKLIGHT=y - CONFIG_DRM_UDL=m - CONFIG_DRM_AST=m - CONFIG_DRM_MGAG200=m -+# CONFIG_DRM_RZG2L_MIPI_DSI is not set -+# CONFIG_DRM_SHMOBILE is not set -+# CONFIG_DRM_SUN4I is not set - CONFIG_DRM_QXL=m - CONFIG_DRM_VIRTIO_GPU=m - CONFIG_DRM_VIRTIO_GPU_KMS=y -@@ -4758,36 +5073,88 @@ CONFIG_DRM_PANEL=y +@@ -4758,36 +4861,88 @@ CONFIG_DRM_PANEL=y # # CONFIG_DRM_PANEL_ABT_Y030XX067A is not set # CONFIG_DRM_PANEL_ARM_VERSATILE is not set @@ -13906,8 +13042,7 @@ +# CONFIG_DRM_PANEL_BOE_TV101WUM_NL6 is not set +# CONFIG_DRM_PANEL_DSI_CM is not set # CONFIG_DRM_PANEL_LVDS is not set --# CONFIG_DRM_PANEL_SIMPLE is not set -+CONFIG_DRM_PANEL_SIMPLE=y + # CONFIG_DRM_PANEL_SIMPLE is not set # CONFIG_DRM_PANEL_EDP is not set +# CONFIG_DRM_PANEL_EBBG_FT8719 is not set +# CONFIG_DRM_PANEL_ELIDA_KD35T133 is not set @@ -13985,19 +13120,18 @@ # end of Display Panels CONFIG_DRM_BRIDGE=y -@@ -4833,6 +5200,11 @@ CONFIG_DRM_PANEL_BRIDGE=y +@@ -4833,6 +4988,10 @@ CONFIG_DRM_PANEL_BRIDGE=y # CONFIG_DRM_I2C_ADV7511 is not set # CONFIG_DRM_CDNS_DSI is not set # CONFIG_DRM_CDNS_MHDP8546 is not set +CONFIG_DRM_DW_HDMI=y +# CONFIG_DRM_DW_HDMI_AHB_AUDIO is not set -+# CONFIG_DRM_DW_HDMI_I2S_AUDIO is not set +# CONFIG_DRM_DW_HDMI_GP_AUDIO is not set +# CONFIG_DRM_DW_HDMI_CEC is not set # end of Display Interface Bridges # CONFIG_DRM_LOONGSON is not set -@@ -4855,6 +5227,14 @@ CONFIG_DRM_CIRRUS_QEMU=m +@@ -4855,6 +5014,14 @@ CONFIG_DRM_CIRRUS_QEMU=m # CONFIG_TINYDRM_ST7735R is not set # CONFIG_DRM_GUD is not set # CONFIG_DRM_SSD130X is not set @@ -14012,15 +13146,7 @@ # CONFIG_DRM_LEGACY is not set CONFIG_DRM_PANEL_ORIENTATION_QUIRKS=y -@@ -4893,6 +5273,7 @@ CONFIG_FB_RADEON_BACKLIGHT=y - # CONFIG_FB_ARK is not set - # CONFIG_FB_PM3 is not set - # CONFIG_FB_CARMINE is not set -+# CONFIG_FB_SH_MOBILE_LCDC is not set - # CONFIG_FB_SMSCUFX is not set - # CONFIG_FB_UDL is not set - # CONFIG_FB_IBM_GXT4500 is not set -@@ -4918,6 +5299,7 @@ CONFIG_FB_SYS_IMAGEBLIT=y +@@ -4918,6 +5085,7 @@ CONFIG_FB_SYS_IMAGEBLIT=y # CONFIG_FB_FOREIGN_ENDIAN is not set CONFIG_FB_SYS_FOPS=y CONFIG_FB_DEFERRED_IO=y @@ -14028,371 +13154,7 @@ CONFIG_FB_IOMEM_HELPERS=y CONFIG_FB_SYSMEM_HELPERS=y CONFIG_FB_SYSMEM_HELPERS_DEFERRED=y -@@ -4945,7 +5327,7 @@ CONFIG_LCD_PLATFORM=m - CONFIG_BACKLIGHT_CLASS_DEVICE=y - # CONFIG_BACKLIGHT_KTD253 is not set - # CONFIG_BACKLIGHT_KTZ8866 is not set --CONFIG_BACKLIGHT_PWM=m -+CONFIG_BACKLIGHT_PWM=y - # CONFIG_BACKLIGHT_QCOM_WLED is not set - # CONFIG_BACKLIGHT_ADP8860 is not set - # CONFIG_BACKLIGHT_ADP8870 is not set -@@ -4959,6 +5341,7 @@ CONFIG_BACKLIGHT_GPIO=m - # CONFIG_BACKLIGHT_LED is not set - # end of Backlight & LCD device support - -+CONFIG_VIDEOMODE_HELPERS=y - CONFIG_HDMI=y - - # -@@ -4982,10 +5365,13 @@ CONFIG_LOGO_LINUX_CLUT224=y - # end of Graphics support - - # CONFIG_DRM_ACCEL is not set --CONFIG_SOUND=m --CONFIG_SND=m --CONFIG_SND_TIMER=m --CONFIG_SND_PCM=m -+CONFIG_SOUND=y -+CONFIG_SND=y -+CONFIG_SND_TIMER=y -+CONFIG_SND_PCM=y -+CONFIG_SND_PCM_ELD=y -+CONFIG_SND_PCM_IEC958=y -+CONFIG_SND_DMAENGINE_PCM=y - CONFIG_SND_HWDEP=m - CONFIG_SND_RAWMIDI=m - CONFIG_SND_JACK=y -@@ -5073,6 +5459,11 @@ CONFIG_SND_HDA_INTEL=m - # CONFIG_SND_HDA_RECONFIG is not set - # CONFIG_SND_HDA_INPUT_BEEP is not set - # CONFIG_SND_HDA_PATCH_LOADER is not set -+# CONFIG_SND_HDA_SCODEC_CS35L41_I2C is not set -+# CONFIG_SND_HDA_SCODEC_CS35L41_SPI is not set -+# CONFIG_SND_HDA_SCODEC_CS35L56_I2C is not set -+# CONFIG_SND_HDA_SCODEC_CS35L56_SPI is not set -+# CONFIG_SND_HDA_SCODEC_TAS2781_I2C is not set - # CONFIG_SND_HDA_CODEC_REALTEK is not set - # CONFIG_SND_HDA_CODEC_ANALOG is not set - # CONFIG_SND_HDA_CODEC_SIGMATEL is not set -@@ -5094,7 +5485,9 @@ CONFIG_SND_HDA_POWER_SAVE_DEFAULT=0 - CONFIG_SND_HDA_CORE=m - CONFIG_SND_HDA_COMPONENT=y - CONFIG_SND_HDA_PREALLOC_SIZE=64 -+CONFIG_SND_INTEL_NHLT=y - CONFIG_SND_INTEL_DSP_CONFIG=m -+CONFIG_SND_INTEL_SOUNDWIRE_ACPI=m - CONFIG_SND_SPI=y - CONFIG_SND_USB=y - CONFIG_SND_USB_AUDIO=m -@@ -5109,7 +5502,270 @@ CONFIG_SND_USB_AUDIO_USE_MEDIA_CONTROLLER=y - # CONFIG_SND_USB_PODHD is not set - # CONFIG_SND_USB_TONEPORT is not set - # CONFIG_SND_USB_VARIAX is not set --# CONFIG_SND_SOC is not set -+CONFIG_SND_SOC=y -+CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM=y -+# CONFIG_SND_SOC_ADI is not set -+# CONFIG_SND_SOC_AMD_ACP is not set -+# CONFIG_SND_AMD_ACP_CONFIG is not set -+# CONFIG_SND_ATMEL_SOC is not set -+# CONFIG_SND_BCM63XX_I2S_WHISTLER is not set -+# CONFIG_SND_DESIGNWARE_I2S is not set -+ -+# -+# SoC Audio for Freescale CPUs -+# -+ -+# -+# Common SoC Audio options for Freescale CPUs: -+# -+# CONFIG_SND_SOC_FSL_ASRC is not set -+# CONFIG_SND_SOC_FSL_SAI is not set -+# CONFIG_SND_SOC_FSL_AUDMIX is not set -+# CONFIG_SND_SOC_FSL_SSI is not set -+# CONFIG_SND_SOC_FSL_SPDIF is not set -+# CONFIG_SND_SOC_FSL_ESAI is not set -+# CONFIG_SND_SOC_FSL_MICFIL is not set -+# CONFIG_SND_SOC_FSL_XCVR is not set -+# CONFIG_SND_SOC_FSL_RPMSG is not set -+# CONFIG_SND_SOC_IMX_AUDMUX is not set -+# end of SoC Audio for Freescale CPUs -+ -+# CONFIG_SND_SOC_CHV3_I2S is not set -+# CONFIG_SND_I2S_HI6210_I2S is not set -+# CONFIG_SND_SOC_IMG is not set -+# CONFIG_SND_SOC_MTK_BTCVSD is not set -+ -+# -+# SoC Audio support for Renesas SoCs -+# -+# CONFIG_SND_SOC_SH4_FSI is not set -+# CONFIG_SND_SOC_RCAR is not set -+# end of SoC Audio support for Renesas SoCs -+ -+# CONFIG_SND_SOC_SOF_TOPLEVEL is not set -+# CONFIG_SND_SOC_STARFIVE is not set -+ -+# -+# STMicroelectronics STM32 SOC audio support -+# -+# end of STMicroelectronics STM32 SOC audio support -+ -+# -+# Allwinner SoC Audio support -+# -+# CONFIG_SND_SUN4I_CODEC is not set -+# CONFIG_SND_SUN4I_I2S is not set -+# CONFIG_SND_SUN4I_SPDIF is not set -+# CONFIG_SND_SUN50I_DMIC is not set -+# end of Allwinner SoC Audio support -+ -+# CONFIG_SND_SOC_XILINX_I2S is not set -+# CONFIG_SND_SOC_XILINX_AUDIO_FORMATTER is not set -+# CONFIG_SND_SOC_XILINX_SPDIF is not set -+# CONFIG_SND_SOC_XTFPGA_I2S is not set -+CONFIG_SND_SOC_XUANTIE=y -+CONFIG_SND_SOC_XUANTIE_TH1520_I2S=y -+# CONFIG_SND_SOC_XUANTIE_TH1520_I2S_CH8 is not set -+CONFIG_SND_SOC_XUANTIE_TH1520_HDMI_PCM=y -+CONFIG_SND_SOC_I2C_AND_SPI=y -+ -+# -+# CODEC drivers -+# -+# CONFIG_SND_SOC_AC97_CODEC is not set -+# CONFIG_SND_SOC_ADAU1372_I2C is not set -+# CONFIG_SND_SOC_ADAU1372_SPI is not set -+# CONFIG_SND_SOC_ADAU1701 is not set -+# CONFIG_SND_SOC_ADAU1761_I2C is not set -+# CONFIG_SND_SOC_ADAU1761_SPI is not set -+# CONFIG_SND_SOC_ADAU7002 is not set -+# CONFIG_SND_SOC_ADAU7118_HW is not set -+# CONFIG_SND_SOC_ADAU7118_I2C is not set -+# CONFIG_SND_SOC_AK4104 is not set -+# CONFIG_SND_SOC_AK4118 is not set -+# CONFIG_SND_SOC_AK4375 is not set -+# CONFIG_SND_SOC_AK4458 is not set -+# CONFIG_SND_SOC_AK4554 is not set -+# CONFIG_SND_SOC_AK4613 is not set -+# CONFIG_SND_SOC_AK4642 is not set -+# CONFIG_SND_SOC_AK5386 is not set -+# CONFIG_SND_SOC_AK5558 is not set -+# CONFIG_SND_SOC_ALC5623 is not set -+# CONFIG_SND_SOC_AUDIO_IIO_AUX is not set -+# CONFIG_SND_SOC_AW8738 is not set -+# CONFIG_SND_SOC_AW88395 is not set -+# CONFIG_SND_SOC_AW88261 is not set -+# CONFIG_SND_SOC_BD28623 is not set -+# CONFIG_SND_SOC_BT_SCO is not set -+# CONFIG_SND_SOC_CHV3_CODEC is not set -+# CONFIG_SND_SOC_CS35L32 is not set -+# CONFIG_SND_SOC_CS35L33 is not set -+# CONFIG_SND_SOC_CS35L34 is not set -+# CONFIG_SND_SOC_CS35L35 is not set -+# CONFIG_SND_SOC_CS35L36 is not set -+# CONFIG_SND_SOC_CS35L41_SPI is not set -+# CONFIG_SND_SOC_CS35L41_I2C is not set -+# CONFIG_SND_SOC_CS35L45_SPI is not set -+# CONFIG_SND_SOC_CS35L45_I2C is not set -+# CONFIG_SND_SOC_CS35L56_I2C is not set -+# CONFIG_SND_SOC_CS35L56_SPI is not set -+# CONFIG_SND_SOC_CS42L42 is not set -+# CONFIG_SND_SOC_CS42L51_I2C is not set -+# CONFIG_SND_SOC_CS42L52 is not set -+# CONFIG_SND_SOC_CS42L56 is not set -+# CONFIG_SND_SOC_CS42L73 is not set -+# CONFIG_SND_SOC_CS42L83 is not set -+# CONFIG_SND_SOC_CS4234 is not set -+# CONFIG_SND_SOC_CS4265 is not set -+# CONFIG_SND_SOC_CS4270 is not set -+# CONFIG_SND_SOC_CS4271_I2C is not set -+# CONFIG_SND_SOC_CS4271_SPI is not set -+# CONFIG_SND_SOC_CS42XX8_I2C is not set -+# CONFIG_SND_SOC_CS43130 is not set -+# CONFIG_SND_SOC_CS4341 is not set -+# CONFIG_SND_SOC_CS4349 is not set -+# CONFIG_SND_SOC_CS53L30 is not set -+# CONFIG_SND_SOC_CX2072X is not set -+# CONFIG_SND_SOC_DA7213 is not set -+# CONFIG_SND_SOC_DMIC is not set -+CONFIG_SND_SOC_HDMI_CODEC=m -+# CONFIG_SND_SOC_ES7134 is not set -+CONFIG_SND_SOC_ES7210=y -+# CONFIG_SND_SOC_ES7241 is not set -+CONFIG_SND_SOC_ES8156=y -+# CONFIG_SND_SOC_ES8316 is not set -+# CONFIG_SND_SOC_ES8326 is not set -+# CONFIG_SND_SOC_ES8328_I2C is not set -+# CONFIG_SND_SOC_ES8328_SPI is not set -+# CONFIG_SND_SOC_GTM601 is not set -+# CONFIG_SND_SOC_HDA is not set -+# CONFIG_SND_SOC_ICS43432 is not set -+# CONFIG_SND_SOC_IDT821034 is not set -+# CONFIG_SND_SOC_INNO_RK3036 is not set -+# CONFIG_SND_SOC_MAX98088 is not set -+# CONFIG_SND_SOC_MAX98090 is not set -+# CONFIG_SND_SOC_MAX98357A is not set -+# CONFIG_SND_SOC_MAX98504 is not set -+# CONFIG_SND_SOC_MAX9867 is not set -+# CONFIG_SND_SOC_MAX98927 is not set -+# CONFIG_SND_SOC_MAX98520 is not set -+# CONFIG_SND_SOC_MAX98373_I2C is not set -+# CONFIG_SND_SOC_MAX98388 is not set -+# CONFIG_SND_SOC_MAX98390 is not set -+# CONFIG_SND_SOC_MAX98396 is not set -+# CONFIG_SND_SOC_MAX9860 is not set -+# CONFIG_SND_SOC_MSM8916_WCD_DIGITAL is not set -+# CONFIG_SND_SOC_PCM1681 is not set -+# CONFIG_SND_SOC_PCM1789_I2C is not set -+# CONFIG_SND_SOC_PCM179X_I2C is not set -+# CONFIG_SND_SOC_PCM179X_SPI is not set -+# CONFIG_SND_SOC_PCM186X_I2C is not set -+# CONFIG_SND_SOC_PCM186X_SPI is not set -+# CONFIG_SND_SOC_PCM3060_I2C is not set -+# CONFIG_SND_SOC_PCM3060_SPI is not set -+# CONFIG_SND_SOC_PCM3168A_I2C is not set -+# CONFIG_SND_SOC_PCM3168A_SPI is not set -+# CONFIG_SND_SOC_PCM5102A is not set -+# CONFIG_SND_SOC_PCM512x_I2C is not set -+# CONFIG_SND_SOC_PCM512x_SPI is not set -+# CONFIG_SND_SOC_PEB2466 is not set -+# CONFIG_SND_SOC_RK3328 is not set -+# CONFIG_SND_SOC_RT5616 is not set -+# CONFIG_SND_SOC_RT5631 is not set -+# CONFIG_SND_SOC_RT5640 is not set -+# CONFIG_SND_SOC_RT5659 is not set -+# CONFIG_SND_SOC_RT9120 is not set -+# CONFIG_SND_SOC_SGTL5000 is not set -+# CONFIG_SND_SOC_SIMPLE_AMPLIFIER is not set -+# CONFIG_SND_SOC_SIMPLE_MUX is not set -+# CONFIG_SND_SOC_SMA1303 is not set -+# CONFIG_SND_SOC_SPDIF is not set -+# CONFIG_SND_SOC_SRC4XXX_I2C is not set -+# CONFIG_SND_SOC_SSM2305 is not set -+# CONFIG_SND_SOC_SSM2518 is not set -+# CONFIG_SND_SOC_SSM2602_SPI is not set -+# CONFIG_SND_SOC_SSM2602_I2C is not set -+# CONFIG_SND_SOC_SSM3515 is not set -+# CONFIG_SND_SOC_SSM4567 is not set -+# CONFIG_SND_SOC_STA32X is not set -+# CONFIG_SND_SOC_STA350 is not set -+# CONFIG_SND_SOC_STI_SAS is not set -+# CONFIG_SND_SOC_TAS2552 is not set -+# CONFIG_SND_SOC_TAS2562 is not set -+# CONFIG_SND_SOC_TAS2764 is not set -+# CONFIG_SND_SOC_TAS2770 is not set -+# CONFIG_SND_SOC_TAS2780 is not set -+# CONFIG_SND_SOC_TAS2781_I2C is not set -+# CONFIG_SND_SOC_TAS5086 is not set -+# CONFIG_SND_SOC_TAS571X is not set -+# CONFIG_SND_SOC_TAS5720 is not set -+# CONFIG_SND_SOC_TAS5805M is not set -+# CONFIG_SND_SOC_TAS6424 is not set -+# CONFIG_SND_SOC_TDA7419 is not set -+# CONFIG_SND_SOC_TFA9879 is not set -+# CONFIG_SND_SOC_TFA989X is not set -+# CONFIG_SND_SOC_TLV320ADC3XXX is not set -+# CONFIG_SND_SOC_TLV320AIC23_I2C is not set -+# CONFIG_SND_SOC_TLV320AIC23_SPI is not set -+# CONFIG_SND_SOC_TLV320AIC31XX is not set -+# CONFIG_SND_SOC_TLV320AIC32X4_I2C is not set -+# CONFIG_SND_SOC_TLV320AIC32X4_SPI is not set -+# CONFIG_SND_SOC_TLV320AIC3X_I2C is not set -+# CONFIG_SND_SOC_TLV320AIC3X_SPI is not set -+# CONFIG_SND_SOC_TLV320ADCX140 is not set -+# CONFIG_SND_SOC_TS3A227E is not set -+# CONFIG_SND_SOC_TSCS42XX is not set -+# CONFIG_SND_SOC_TSCS454 is not set -+# CONFIG_SND_SOC_UDA1334 is not set -+# CONFIG_SND_SOC_WM8510 is not set -+# CONFIG_SND_SOC_WM8523 is not set -+# CONFIG_SND_SOC_WM8524 is not set -+# CONFIG_SND_SOC_WM8580 is not set -+# CONFIG_SND_SOC_WM8711 is not set -+# CONFIG_SND_SOC_WM8728 is not set -+# CONFIG_SND_SOC_WM8731_I2C is not set -+# CONFIG_SND_SOC_WM8731_SPI is not set -+# CONFIG_SND_SOC_WM8737 is not set -+# CONFIG_SND_SOC_WM8741 is not set -+# CONFIG_SND_SOC_WM8750 is not set -+# CONFIG_SND_SOC_WM8753 is not set -+# CONFIG_SND_SOC_WM8770 is not set -+# CONFIG_SND_SOC_WM8776 is not set -+# CONFIG_SND_SOC_WM8782 is not set -+# CONFIG_SND_SOC_WM8804_I2C is not set -+# CONFIG_SND_SOC_WM8804_SPI is not set -+# CONFIG_SND_SOC_WM8903 is not set -+# CONFIG_SND_SOC_WM8904 is not set -+# CONFIG_SND_SOC_WM8940 is not set -+# CONFIG_SND_SOC_WM8960 is not set -+# CONFIG_SND_SOC_WM8961 is not set -+# CONFIG_SND_SOC_WM8962 is not set -+# CONFIG_SND_SOC_WM8974 is not set -+# CONFIG_SND_SOC_WM8978 is not set -+# CONFIG_SND_SOC_WM8985 is not set -+# CONFIG_SND_SOC_ZL38060 is not set -+# CONFIG_SND_SOC_MAX9759 is not set -+# CONFIG_SND_SOC_MT6351 is not set -+# CONFIG_SND_SOC_MT6358 is not set -+# CONFIG_SND_SOC_MT6660 is not set -+# CONFIG_SND_SOC_NAU8315 is not set -+# CONFIG_SND_SOC_NAU8540 is not set -+# CONFIG_SND_SOC_NAU8810 is not set -+# CONFIG_SND_SOC_NAU8821 is not set -+# CONFIG_SND_SOC_NAU8822 is not set -+# CONFIG_SND_SOC_NAU8824 is not set -+# CONFIG_SND_SOC_TPA6130A2 is not set -+# CONFIG_SND_SOC_LPASS_WSA_MACRO is not set -+# CONFIG_SND_SOC_LPASS_VA_MACRO is not set -+# CONFIG_SND_SOC_LPASS_RX_MACRO is not set -+# CONFIG_SND_SOC_LPASS_TX_MACRO is not set -+# end of CODEC drivers -+ -+CONFIG_SND_SIMPLE_CARD_UTILS=y -+CONFIG_SND_SIMPLE_CARD=y -+# CONFIG_SND_AUDIO_GRAPH_CARD is not set -+# CONFIG_SND_AUDIO_GRAPH_CARD2 is not set -+# CONFIG_SND_TEST_COMPONENT is not set - # CONFIG_SND_VIRTIO is not set - CONFIG_HID_SUPPORT=y - CONFIG_HID=y -@@ -5259,6 +5915,7 @@ CONFIG_USB_HIDDEV=y - # end of USB HID support - - CONFIG_I2C_HID=y -+# CONFIG_I2C_HID_ACPI is not set - # CONFIG_I2C_HID_OF is not set - # CONFIG_I2C_HID_OF_ELAN is not set - # CONFIG_I2C_HID_OF_GOODIX is not set -@@ -5295,6 +5952,7 @@ CONFIG_USB_XHCI_HCD=y - CONFIG_USB_XHCI_PCI=y - # CONFIG_USB_XHCI_PCI_RENESAS is not set - CONFIG_USB_XHCI_PLATFORM=y -+CONFIG_USB_XHCI_RCAR=y - CONFIG_USB_EHCI_HCD=y - CONFIG_USB_EHCI_ROOT_HUB_TT=y - CONFIG_USB_EHCI_TT_NEWSCHED=y -@@ -5312,6 +5970,7 @@ CONFIG_USB_UHCI_HCD=y - # CONFIG_USB_R8A66597_HCD is not set - # CONFIG_USB_HCD_BCMA is not set - # CONFIG_USB_HCD_TEST_MODE is not set -+# CONFIG_USB_RENESAS_USBHS is not set - - # - # USB Device Class drivers -@@ -5336,8 +5995,8 @@ CONFIG_USB_STORAGE_DATAFAB=m - CONFIG_USB_STORAGE_FREECOM=m - CONFIG_USB_STORAGE_ISD200=m - CONFIG_USB_STORAGE_USBAT=m --CONFIG_USB_STORAGE_SDDR09=m --CONFIG_USB_STORAGE_SDDR55=m -+CONFIG_USB_STORAGE_SDDR09=y -+CONFIG_USB_STORAGE_SDDR55=y - CONFIG_USB_STORAGE_JUMPSHOT=m - CONFIG_USB_STORAGE_ALAUDA=m - CONFIG_USB_STORAGE_ONETOUCH=m -@@ -5358,7 +6017,19 @@ CONFIG_USB_MICROTEK=m +@@ -5358,7 +5526,18 @@ CONFIG_USB_MICROTEK=m # # CONFIG_USB_CDNS_SUPPORT is not set # CONFIG_USB_MUSB_HDRC is not set @@ -14406,14 +13168,13 @@ +# +# Platform Glue Driver Support +# -+CONFIG_USB_DWC3_PCI=m +CONFIG_USB_DWC3_HAPS=m -+# CONFIG_USB_DWC3_OF_SIMPLE is not set ++CONFIG_USB_DWC3_OF_SIMPLE=m +CONFIG_USB_DWC3_XUANTIE=m # CONFIG_USB_DWC2 is not set # CONFIG_USB_CHIPIDEA is not set # CONFIG_USB_ISP1760 is not set -@@ -5450,7 +6121,7 @@ CONFIG_USB_HSIC_USB3503=m +@@ -5450,7 +5629,7 @@ CONFIG_USB_HSIC_USB3503=m # CONFIG_USB_HSIC_USB4604 is not set # CONFIG_USB_LINK_LAYER_TEST is not set CONFIG_USB_CHAOSKEY=m @@ -14422,7 +13183,7 @@ CONFIG_USB_ATM=m # CONFIG_USB_SPEEDTOUCH is not set CONFIG_USB_CXACRU=m -@@ -5465,7 +6136,101 @@ CONFIG_USB_XUSBATM=m +@@ -5465,7 +5644,98 @@ CONFIG_USB_XUSBATM=m # CONFIG_USB_ISP1301 is not set # end of USB Physical Layer drivers @@ -14440,8 +13201,6 @@ +# +# CONFIG_USB_GR_UDC is not set +# CONFIG_USB_R8A66597 is not set -+# CONFIG_USB_RENESAS_USB3 is not set -+# CONFIG_USB_RENESAS_USBF is not set +# CONFIG_USB_PXA27X is not set +# CONFIG_USB_MV_UDC is not set +# CONFIG_USB_MV_U3D is not set @@ -14455,7 +13214,6 @@ +# CONFIG_USB_EG20T is not set +# CONFIG_USB_GADGET_XILINX is not set +# CONFIG_USB_MAX3420_UDC is not set -+# CONFIG_USB_CDNS2_UDC is not set +# CONFIG_USB_DUMMY_HCD is not set +# end of USB Peripheral Controller + @@ -14525,15 +13283,7 @@ CONFIG_TYPEC=m CONFIG_TYPEC_TCPM=m CONFIG_TYPEC_TCPCI=m -@@ -5474,6 +6239,7 @@ CONFIG_TYPEC_TCPCI=m - # CONFIG_TYPEC_FUSB302 is not set - CONFIG_TYPEC_UCSI=m - # CONFIG_UCSI_CCG is not set -+# CONFIG_UCSI_ACPI is not set - # CONFIG_UCSI_STM32G0 is not set - # CONFIG_TYPEC_TPS6598X is not set - # CONFIG_TYPEC_ANX7411 is not set -@@ -5498,7 +6264,7 @@ CONFIG_TYPEC_DP_ALTMODE=m +@@ -5498,7 +5768,7 @@ CONFIG_TYPEC_DP_ALTMODE=m # CONFIG_TYPEC_NVIDIA_ALTMODE is not set # end of USB Type-C Alternate Mode drivers @@ -14542,11 +13292,7 @@ CONFIG_MMC=y CONFIG_PWRSEQ_EMMC=m CONFIG_PWRSEQ_SIMPLE=m -@@ -5517,15 +6283,18 @@ CONFIG_MMC_SDHCI=y - CONFIG_MMC_SDHCI_IO_ACCESSORS=y - CONFIG_MMC_SDHCI_PCI=m - CONFIG_MMC_RICOH_MMC=y -+# CONFIG_MMC_SDHCI_ACPI is not set +@@ -5520,12 +5790,13 @@ CONFIG_MMC_RICOH_MMC=y CONFIG_MMC_SDHCI_PLTFM=y # CONFIG_MMC_SDHCI_OF_ARASAN is not set # CONFIG_MMC_SDHCI_OF_AT91 is not set @@ -14558,23 +13304,10 @@ CONFIG_MMC_TIFM_SD=m CONFIG_MMC_SPI=y +CONFIG_MMC_SDHCI_SOPHGO=y -+# CONFIG_MMC_SDHI is not set CONFIG_MMC_CB710=m CONFIG_MMC_VIA_SDMMC=m CONFIG_MMC_DW=m -@@ -5536,18 +6305,18 @@ CONFIG_MMC_DW_BLUEFIELD=m - # CONFIG_MMC_DW_K3 is not set - CONFIG_MMC_DW_PCI=m - # CONFIG_MMC_DW_STARFIVE is not set -+# CONFIG_MMC_SH_MMCIF is not set - CONFIG_MMC_VUB300=m - CONFIG_MMC_USHC=m - # CONFIG_MMC_USDHI6ROL0 is not set - CONFIG_MMC_REALTEK_PCI=m - CONFIG_MMC_REALTEK_USB=m -+CONFIG_MMC_SUNXI=y - CONFIG_MMC_CQHCI=y - CONFIG_MMC_HSQ=m +@@ -5546,8 +5817,6 @@ CONFIG_MMC_HSQ=m CONFIG_MMC_TOSHIBA_PCI=m CONFIG_MMC_MTK=m CONFIG_MMC_SDHCI_XENON=m @@ -14583,7 +13316,7 @@ # CONFIG_SCSI_UFSHCD is not set CONFIG_MEMSTICK=m # CONFIG_MEMSTICK_DEBUG is not set -@@ -5670,6 +6439,7 @@ CONFIG_INFINIBAND_USER_MEM=y +@@ -5670,6 +5939,7 @@ CONFIG_INFINIBAND_USER_MEM=y CONFIG_INFINIBAND_ON_DEMAND_PAGING=y CONFIG_INFINIBAND_ADDR_TRANS=y CONFIG_INFINIBAND_ADDR_TRANS_CONFIGFS=y @@ -14591,20 +13324,8 @@ CONFIG_INFINIBAND_VIRT_DMA=y CONFIG_INFINIBAND_BNXT_RE=m CONFIG_INFINIBAND_CXGB4=m -@@ -5802,21 +6572,28 @@ CONFIG_RTC_DRV_M48T35=m - CONFIG_RTC_DRV_M48T59=m - CONFIG_RTC_DRV_MSM6242=m - CONFIG_RTC_DRV_RP5C01=m -+# CONFIG_RTC_DRV_OPTEE is not set - # CONFIG_RTC_DRV_ZYNQMP is not set - - # - # on-CPU RTC drivers - # -+# CONFIG_RTC_DRV_SH is not set - # CONFIG_RTC_DRV_PL030 is not set +@@ -5811,12 +6081,16 @@ CONFIG_RTC_DRV_RP5C01=m # CONFIG_RTC_DRV_PL031 is not set -+CONFIG_RTC_DRV_SUN6I=y # CONFIG_RTC_DRV_CADENCE is not set # CONFIG_RTC_DRV_FTRTC010 is not set +CONFIG_RTC_DRV_XGENE=m @@ -14620,29 +13341,20 @@ CONFIG_DMADEVICES=y # CONFIG_DMADEVICES_DEBUG is not set -@@ -5824,10 +6601,13 @@ CONFIG_DMADEVICES=y +@@ -5824,10 +6098,11 @@ CONFIG_DMADEVICES=y # DMA Devices # CONFIG_DMA_ENGINE=y +CONFIG_DMA_VIRTUAL_CHANNELS=y -+CONFIG_DMA_ACPI=y CONFIG_DMA_OF=y # CONFIG_ALTERA_MSGDMA is not set # CONFIG_AMBA_PL08X is not set -# CONFIG_DW_AXI_DMAC is not set -+CONFIG_DMA_SUN6I=m +CONFIG_DW_AXI_DMAC=y # CONFIG_FSL_EDMA is not set # CONFIG_INTEL_IDMA64 is not set # CONFIG_PL330_DMA is not set -@@ -5842,22 +6622,25 @@ CONFIG_DW_DMAC=m - CONFIG_DW_DMAC_PCI=m - # CONFIG_DW_EDMA is not set - # CONFIG_SF_PDMA is not set -+# CONFIG_RCAR_DMAC is not set -+# CONFIG_RENESAS_USB_DMAC is not set - - # +@@ -5847,7 +6122,8 @@ CONFIG_DW_DMAC_PCI=m # DMA Clients # CONFIG_ASYNC_TX_DMA=y @@ -14652,76 +13364,24 @@ # # DMABUF options - # - CONFIG_SYNC_FILE=y --# CONFIG_SW_SYNC is not set --# CONFIG_UDMABUF is not set -+CONFIG_SW_SYNC=y -+CONFIG_UDMABUF=y - # CONFIG_DMABUF_MOVE_NOTIFY is not set - # CONFIG_DMABUF_DEBUG is not set --# CONFIG_DMABUF_SELFTESTS is not set -+CONFIG_DMABUF_SELFTESTS=m - # CONFIG_DMABUF_HEAPS is not set - # CONFIG_DMABUF_SYSFS_STATS is not set - # end of DMABUF options -@@ -5946,6 +6729,8 @@ CONFIG_COMMON_CLK=y - # CONFIG_COMMON_CLK_VC7 is not set - # CONFIG_COMMON_CLK_FIXED_MMIO is not set - CONFIG_CLK_ANALOGBITS_WRPLL_CLN28HPC=y -+CONFIG_CLK_RENESAS=y -+# CONFIG_CLK_RCAR_USB2_CLOCK_SEL is not set - CONFIG_CLK_SIFIVE=y - CONFIG_CLK_SIFIVE_PRCI=y - CONFIG_CLK_STARFIVE_JH71X0=y -@@ -5957,15 +6742,26 @@ CONFIG_CLK_STARFIVE_JH7110_AON=m - CONFIG_CLK_STARFIVE_JH7110_STG=m - CONFIG_CLK_STARFIVE_JH7110_ISP=m +@@ -5959,6 +6235,8 @@ CONFIG_CLK_STARFIVE_JH7110_ISP=m CONFIG_CLK_STARFIVE_JH7110_VOUT=m -+CONFIG_SUNXI_CCU=y -+CONFIG_SUN20I_D1_CCU=y -+CONFIG_SUN20I_D1_R_CCU=y -+CONFIG_SUN6I_RTC_CCU=y -+CONFIG_SUN8I_DE2_CCU=m # CONFIG_XILINX_VCU is not set # CONFIG_COMMON_CLK_XLNX_CLKWZRD is not set +CONFIG_XUANTIE_CLK=y +CONFIG_CLK_TH1520_FM=y CONFIG_HWSPINLOCK=y -+# CONFIG_HWSPINLOCK_SUN6I is not set # - # Clock Source drivers - # - CONFIG_TIMER_OF=y - CONFIG_TIMER_PROBE=y -+CONFIG_CLKSRC_MMIO=y -+CONFIG_SUN4I_TIMER=y -+# CONFIG_RENESAS_OSTM is not set - CONFIG_RISCV_TIMER=y - # end of Clock Source drivers - -@@ -5974,8 +6770,11 @@ CONFIG_MAILBOX=y - # CONFIG_ARM_MHU_V2 is not set - # CONFIG_PLATFORM_MHU is not set +@@ -5976,6 +6254,7 @@ CONFIG_MAILBOX=y # CONFIG_PL320_MBOX is not set -+# CONFIG_PCC is not set # CONFIG_ALTERA_MBOX is not set # CONFIG_MAILBOX_TEST is not set -+CONFIG_SUN6I_MSGBOX=y +CONFIG_TH1520_MBOX=y CONFIG_IOMMU_API=y CONFIG_IOMMU_SUPPORT=y -@@ -5990,6 +6789,7 @@ CONFIG_IOMMU_DEFAULT_DMA_LAZY=y - # CONFIG_IOMMU_DEFAULT_PASSTHROUGH is not set - CONFIG_OF_IOMMU=y - # CONFIG_IOMMUFD is not set -+CONFIG_SUN50I_IOMMU=y - - # - # Remoteproc drivers -@@ -6005,6 +6805,7 @@ CONFIG_RPMSG_CHAR=y +@@ -6005,6 +6284,7 @@ CONFIG_RPMSG_CHAR=y CONFIG_RPMSG_CTRL=y CONFIG_RPMSG_NS=y # CONFIG_RPMSG_QCOM_GLINK_RPM is not set @@ -14729,18 +13389,7 @@ CONFIG_RPMSG_VIRTIO=y # end of Rpmsg drivers -@@ -6053,22 +6854,47 @@ CONFIG_RPMSG_VIRTIO=y - # CONFIG_QCOM_PMIC_GLINK is not set - # end of Qualcomm SoC drivers - -+CONFIG_SOC_RENESAS=y - CONFIG_SIFIVE_CCACHE=y - CONFIG_JH71XX_PMU=y -+CONFIG_SUNXI_SRAM=y -+# CONFIG_SUN20I_PPU is not set - # CONFIG_SOC_TI is not set - - # +@@ -6061,14 +6341,35 @@ CONFIG_JH71XX_PMU=y # Xilinx SoC drivers # # end of Xilinx SoC drivers @@ -14758,17 +13407,16 @@ +# +# DEVFREQ Governors +# -+CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND=y -+CONFIG_DEVFREQ_GOV_PERFORMANCE=y -+CONFIG_DEVFREQ_GOV_POWERSAVE=y -+CONFIG_DEVFREQ_GOV_USERSPACE=y -+CONFIG_DEVFREQ_GOV_PASSIVE=y ++CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND=m ++# CONFIG_DEVFREQ_GOV_PERFORMANCE is not set ++# CONFIG_DEVFREQ_GOV_POWERSAVE is not set ++# CONFIG_DEVFREQ_GOV_USERSPACE is not set ++# CONFIG_DEVFREQ_GOV_PASSIVE is not set + +# +# DEVFREQ Drivers +# -+# CONFIG_ARM_SUN8I_A33_MBUS_DEVFREQ is not set -+CONFIG_PM_DEVFREQ_EVENT=y ++# CONFIG_PM_DEVFREQ_EVENT is not set CONFIG_EXTCON=y # @@ -14778,16 +13426,16 @@ # CONFIG_EXTCON_FSA9480 is not set CONFIG_EXTCON_GPIO=m # CONFIG_EXTCON_MAX3355 is not set -@@ -6078,7 +6904,536 @@ CONFIG_EXTCON_GPIO=m +@@ -6078,7 +6379,533 @@ CONFIG_EXTCON_GPIO=m # CONFIG_EXTCON_USB_GPIO is not set # CONFIG_EXTCON_USBC_TUSB320 is not set # CONFIG_MEMORY is not set -# CONFIG_IIO is not set +CONFIG_IIO=y +# CONFIG_IIO_BUFFER is not set -+CONFIG_IIO_CONFIGFS=y ++# CONFIG_IIO_CONFIGFS is not set +# CONFIG_IIO_TRIGGER is not set -+CONFIG_IIO_SW_DEVICE=y ++# CONFIG_IIO_SW_DEVICE is not set +# CONFIG_IIO_SW_TRIGGER is not set +# CONFIG_IIO_TRIGGERED_EVENT is not set + @@ -14889,7 +13537,6 @@ +# CONFIG_NAU7802 is not set +# CONFIG_RICHTEK_RTQ6056 is not set +# CONFIG_SD_ADC_MODULATOR is not set -+# CONFIG_SUN20I_GPADC is not set +# CONFIG_TI_ADC081C is not set +# CONFIG_TI_ADC0832 is not set +# CONFIG_TI_ADC084S021 is not set @@ -15023,7 +13670,6 @@ +# +# IIO dummy driver +# -+# CONFIG_IIO_SIMPLE_DUMMY is not set +# end of IIO dummy driver + +# @@ -15124,7 +13770,6 @@ +# +# Light sensors +# -+# CONFIG_ACPI_ALS is not set +# CONFIG_ADJD_S311 is not set +# CONFIG_ADUX1020 is not set +# CONFIG_AL3010 is not set @@ -15316,41 +13961,31 @@ # CONFIG_NTB is not set CONFIG_PWM=y CONFIG_PWM_SYSFS=y -@@ -6088,7 +7443,11 @@ CONFIG_PWM_SYSFS=y - # CONFIG_PWM_DWC is not set +@@ -6089,6 +6916,7 @@ CONFIG_PWM_SYSFS=y # CONFIG_PWM_FSL_FTM is not set # CONFIG_PWM_PCA9685 is not set -+# CONFIG_PWM_RCAR is not set -+# CONFIG_PWM_RENESAS_TPU is not set CONFIG_PWM_SIFIVE=m -+# CONFIG_PWM_SUN4I is not set +CONFIG_PWM_XUANTIE=y # CONFIG_PWM_XILINX is not set # -@@ -6104,6 +7463,8 @@ CONFIG_SIFIVE_PLIC=y +@@ -6104,6 +6932,7 @@ CONFIG_SIFIVE_PLIC=y # CONFIG_IPACK_BUS is not set CONFIG_RESET_CONTROLLER=y CONFIG_RESET_SIMPLE=y -+CONFIG_RESET_SUNXI=y +CONFIG_RESET_TH1520=y # CONFIG_RESET_TI_SYSCON is not set # CONFIG_RESET_TI_TPS380X is not set CONFIG_RESET_STARFIVE_JH71X0=y -@@ -6114,7 +7475,12 @@ CONFIG_RESET_STARFIVE_JH7110=y +@@ -6114,6 +6943,7 @@ CONFIG_RESET_STARFIVE_JH7110=y # PHY Subsystem # CONFIG_GENERIC_PHY=y +CONFIG_GENERIC_PHY_MIPI_DPHY=y # CONFIG_PHY_CAN_TRANSCEIVER is not set -+CONFIG_PHY_SUN4I_USB=m -+# CONFIG_PHY_SUN6I_MIPI_DPHY is not set -+# CONFIG_PHY_SUN9I_USB is not set -+# CONFIG_PHY_SUN50I_USB3 is not set # - # PHY drivers for Broadcom platforms -@@ -6130,14 +7496,21 @@ CONFIG_GENERIC_PHY=y +@@ -6130,6 +6960,7 @@ CONFIG_GENERIC_PHY=y # CONFIG_PHY_PXA_28NM_HSIC is not set # CONFIG_PHY_PXA_28NM_USB2 is not set # CONFIG_PHY_LAN966X_SERDES is not set @@ -15358,13 +13993,7 @@ # CONFIG_PHY_MAPPHONE_MDM6600 is not set # CONFIG_PHY_OCELOT_SERDES is not set # CONFIG_PHY_QCOM_USB_HS is not set - # CONFIG_PHY_QCOM_USB_HSIC is not set -+# CONFIG_PHY_R8A779F0_ETHERNET_SERDES is not set -+# CONFIG_PHY_RCAR_GEN2 is not set -+# CONFIG_PHY_RCAR_GEN3_PCIE is not set -+# CONFIG_PHY_RCAR_GEN3_USB2 is not set -+# CONFIG_PHY_RCAR_GEN3_USB3 is not set - # CONFIG_PHY_STARFIVE_JH7110_DPHY_RX is not set +@@ -6138,6 +6969,7 @@ CONFIG_GENERIC_PHY=y # CONFIG_PHY_STARFIVE_JH7110_PCIE is not set # CONFIG_PHY_STARFIVE_JH7110_USB is not set # CONFIG_PHY_TUSB1210 is not set @@ -15372,24 +14001,15 @@ # end of PHY Subsystem # CONFIG_POWERCAP is not set -@@ -6189,6 +7562,7 @@ CONFIG_NVMEM_SYSFS=y - # end of Layout Types - - # CONFIG_NVMEM_RMEM is not set -+CONFIG_NVMEM_SUNXI_SID=y - # CONFIG_NVMEM_U_BOOT_ENV is not set - - # -@@ -6200,6 +7574,8 @@ CONFIG_NVMEM_SYSFS=y +@@ -6200,6 +7032,7 @@ CONFIG_NVMEM_SYSFS=y # CONFIG_FPGA is not set # CONFIG_FSI is not set -+CONFIG_TEE=y -+CONFIG_OPTEE=y ++# CONFIG_TEE is not set CONFIG_PM_OPP=y # CONFIG_SIOX is not set # CONFIG_SLIMBUS is not set -@@ -6233,6 +7609,7 @@ CONFIG_EXT4_FS_POSIX_ACL=y +@@ -6233,6 +7066,7 @@ CONFIG_EXT4_FS_POSIX_ACL=y CONFIG_EXT4_FS_SECURITY=y # CONFIG_EXT4_DEBUG is not set # CONFIG_EXT4_ERROR_REPORT is not set @@ -15397,12 +14017,8 @@ CONFIG_JBD2=y # CONFIG_JBD2_DEBUG is not set CONFIG_FS_MBCACHE=y -@@ -6287,10 +7664,10 @@ CONFIG_QUOTA_TREE=y - CONFIG_QFMT_V2=y - CONFIG_QUOTACTL=y - CONFIG_AUTOFS_FS=y --CONFIG_FUSE_FS=m -+CONFIG_FUSE_FS=y +@@ -6290,7 +7124,7 @@ CONFIG_AUTOFS_FS=y + CONFIG_FUSE_FS=m CONFIG_CUSE=m CONFIG_VIRTIO_FS=m -CONFIG_OVERLAY_FS=m @@ -15410,51 +14026,7 @@ # CONFIG_OVERLAY_FS_REDIRECT_DIR is not set CONFIG_OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW=y # CONFIG_OVERLAY_FS_INDEX is not set -@@ -6380,8 +7757,24 @@ CONFIG_MISC_FILESYSTEMS=y - # CONFIG_BEFS_FS is not set - # CONFIG_BFS_FS is not set - # CONFIG_EFS_FS is not set --# CONFIG_JFFS2_FS is not set --# CONFIG_UBIFS_FS is not set -+CONFIG_JFFS2_FS=y -+CONFIG_JFFS2_FS_DEBUG=0 -+CONFIG_JFFS2_FS_WRITEBUFFER=y -+# CONFIG_JFFS2_FS_WBUF_VERIFY is not set -+# CONFIG_JFFS2_SUMMARY is not set -+# CONFIG_JFFS2_FS_XATTR is not set -+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set -+CONFIG_JFFS2_ZLIB=y -+CONFIG_JFFS2_RTIME=y -+CONFIG_UBIFS_FS=y -+# CONFIG_UBIFS_FS_ADVANCED_COMPR is not set -+CONFIG_UBIFS_FS_LZO=y -+CONFIG_UBIFS_FS_ZLIB=y -+CONFIG_UBIFS_FS_ZSTD=y -+# CONFIG_UBIFS_ATIME_SUPPORT is not set -+CONFIG_UBIFS_FS_XATTR=y -+CONFIG_UBIFS_FS_SECURITY=y -+# CONFIG_UBIFS_FS_AUTHENTICATION is not set - CONFIG_CRAMFS=m - CONFIG_CRAMFS_BLOCKDEV=y - # CONFIG_CRAMFS_MTD is not set -@@ -6414,7 +7807,6 @@ CONFIG_PSTORE_DEFAULT_KMSG_BYTES=10240 - CONFIG_PSTORE_COMPRESS=y - # CONFIG_PSTORE_CONSOLE is not set - # CONFIG_PSTORE_PMSG is not set --# CONFIG_PSTORE_FTRACE is not set - CONFIG_PSTORE_RAM=m - # CONFIG_PSTORE_BLK is not set - # CONFIG_SYSV_FS is not set -@@ -6430,7 +7822,7 @@ CONFIG_NFS_V4=y - CONFIG_NFS_V4_1=y - CONFIG_NFS_V4_2=y - CONFIG_PNFS_FILE_LAYOUT=y --CONFIG_PNFS_BLOCK=m -+CONFIG_PNFS_BLOCK=y - CONFIG_PNFS_FLEXFILE_LAYOUT=m - CONFIG_NFS_V4_1_IMPLEMENTATION_ID_DOMAIN="kernel.org" - # CONFIG_NFS_V4_1_MIGRATION is not set -@@ -6516,7 +7908,7 @@ CONFIG_NLS_ISO8859_8=m +@@ -6516,7 +7350,7 @@ CONFIG_NLS_ISO8859_8=m CONFIG_NLS_CODEPAGE_1250=m CONFIG_NLS_CODEPAGE_1251=m CONFIG_NLS_ASCII=y @@ -15463,15 +14035,7 @@ CONFIG_NLS_ISO8859_2=m CONFIG_NLS_ISO8859_3=m CONFIG_NLS_ISO8859_4=m -@@ -6555,6 +7947,7 @@ CONFIG_KEYS=y - CONFIG_PERSISTENT_KEYRINGS=y - CONFIG_TRUSTED_KEYS=y - CONFIG_TRUSTED_KEYS_TPM=y -+CONFIG_TRUSTED_KEYS_TEE=y - CONFIG_ENCRYPTED_KEYS=y - # CONFIG_USER_DECRYPTED_DATA is not set - # CONFIG_KEY_DH_OPERATIONS is not set -@@ -6630,6 +8023,7 @@ CONFIG_IMA_MEASURE_ASYMMETRIC_KEYS=y +@@ -6630,6 +7464,7 @@ CONFIG_IMA_MEASURE_ASYMMETRIC_KEYS=y CONFIG_IMA_QUEUE_EARLY_BOOT_KEYS=y # CONFIG_IMA_DISABLE_HTABLE is not set # CONFIG_IMA_DIGEST_LIST is not set @@ -15479,7 +14043,7 @@ CONFIG_EVM=y # CONFIG_EVM_DEFAULT_HASH_SHA1 is not set CONFIG_EVM_DEFAULT_HASH_SHA256=y -@@ -6652,6 +8046,8 @@ CONFIG_LSM="lockdown,yama,loadpin,safesetid,integrity,selinux,smack,tomoyo,appar +@@ -6652,6 +7487,8 @@ CONFIG_LSM="lockdown,yama,loadpin,safesetid,integrity,selinux,smack,tomoyo,appar # Memory initialization # CONFIG_INIT_STACK_NONE=y @@ -15488,7 +14052,7 @@ # CONFIG_INIT_ON_ALLOC_DEFAULT_ON is not set # CONFIG_INIT_ON_FREE_DEFAULT_ON is not set # CONFIG_ZERO_CALL_USED_REGS is not set -@@ -6666,8 +8062,6 @@ CONFIG_LIST_HARDENED=y +@@ -6666,8 +7503,6 @@ CONFIG_LIST_HARDENED=y CONFIG_RANDSTRUCT_NONE=y # end of Kernel hardening options @@ -15497,7 +14061,7 @@ # end of Security options CONFIG_XOR_BLOCKS=m -@@ -6688,6 +8082,7 @@ CONFIG_CRYPTO_ALGAPI=y +@@ -6688,6 +7523,7 @@ CONFIG_CRYPTO_ALGAPI=y CONFIG_CRYPTO_ALGAPI2=y CONFIG_CRYPTO_AEAD=y CONFIG_CRYPTO_AEAD2=y @@ -15505,111 +14069,7 @@ CONFIG_CRYPTO_SIG2=y CONFIG_CRYPTO_SKCIPHER=y CONFIG_CRYPTO_SKCIPHER2=y -@@ -6699,18 +8094,18 @@ CONFIG_CRYPTO_RNG_DEFAULT=y - CONFIG_CRYPTO_AKCIPHER2=y - CONFIG_CRYPTO_AKCIPHER=y - CONFIG_CRYPTO_KPP2=y --CONFIG_CRYPTO_KPP=m -+CONFIG_CRYPTO_KPP=y - CONFIG_CRYPTO_ACOMP2=y - CONFIG_CRYPTO_MANAGER=y - CONFIG_CRYPTO_MANAGER2=y --CONFIG_CRYPTO_USER=m -+CONFIG_CRYPTO_USER=y - # CONFIG_CRYPTO_MANAGER_DISABLE_TESTS is not set - # CONFIG_CRYPTO_MANAGER_EXTRA_TESTS is not set - CONFIG_CRYPTO_NULL=y - CONFIG_CRYPTO_NULL2=y - CONFIG_CRYPTO_PCRYPT=m - CONFIG_CRYPTO_CRYPTD=m --CONFIG_CRYPTO_AUTHENC=m -+CONFIG_CRYPTO_AUTHENC=y - CONFIG_CRYPTO_TEST=m - CONFIG_CRYPTO_ENGINE=y - # end of Crypto core or helper -@@ -6719,14 +8114,14 @@ CONFIG_CRYPTO_ENGINE=y - # Public-key cryptography - # - CONFIG_CRYPTO_RSA=y --CONFIG_CRYPTO_DH=m -+CONFIG_CRYPTO_DH=y - # CONFIG_CRYPTO_DH_RFC7919_GROUPS is not set - CONFIG_CRYPTO_ECC=m - CONFIG_CRYPTO_ECDH=m - # CONFIG_CRYPTO_ECDSA is not set - # CONFIG_CRYPTO_ECRDSA is not set - CONFIG_CRYPTO_SM2=y --CONFIG_CRYPTO_CURVE25519=m -+CONFIG_CRYPTO_CURVE25519=y - # end of Public-key cryptography - - # -@@ -6742,7 +8137,7 @@ CONFIG_CRYPTO_CAMELLIA=m - CONFIG_CRYPTO_CAST_COMMON=m - CONFIG_CRYPTO_CAST5=m - CONFIG_CRYPTO_CAST6=m --CONFIG_CRYPTO_DES=m -+CONFIG_CRYPTO_DES=y - CONFIG_CRYPTO_FCRYPT=m - CONFIG_CRYPTO_KHAZAD=m - CONFIG_CRYPTO_SEED=m -@@ -6759,7 +8154,7 @@ CONFIG_CRYPTO_TWOFISH_COMMON=m - # - # CONFIG_CRYPTO_ADIANTUM is not set - CONFIG_CRYPTO_ARC4=m --CONFIG_CRYPTO_CHACHA20=m -+CONFIG_CRYPTO_CHACHA20=y - CONFIG_CRYPTO_CBC=y - # CONFIG_CRYPTO_CFB is not set - CONFIG_CRYPTO_CTR=y -@@ -6768,22 +8163,22 @@ CONFIG_CRYPTO_ECB=y - # CONFIG_CRYPTO_HCTR2 is not set - # CONFIG_CRYPTO_KEYWRAP is not set - CONFIG_CRYPTO_LRW=m --# CONFIG_CRYPTO_OFB is not set -+CONFIG_CRYPTO_OFB=y - CONFIG_CRYPTO_PCBC=m --CONFIG_CRYPTO_XTS=m -+CONFIG_CRYPTO_XTS=y - # end of Length-preserving ciphers and modes - - # - # AEAD (authenticated encryption with associated data) ciphers - # - # CONFIG_CRYPTO_AEGIS128 is not set --CONFIG_CRYPTO_CHACHA20POLY1305=m -+CONFIG_CRYPTO_CHACHA20POLY1305=y - CONFIG_CRYPTO_CCM=m - CONFIG_CRYPTO_GCM=y - CONFIG_CRYPTO_GENIV=y - CONFIG_CRYPTO_SEQIV=y - CONFIG_CRYPTO_ECHAINIV=m --CONFIG_CRYPTO_ESSIV=m -+CONFIG_CRYPTO_ESSIV=y - # end of AEAD (authenticated encryption with associated data) ciphers - - # -@@ -6796,7 +8191,7 @@ CONFIG_CRYPTO_HMAC=y - CONFIG_CRYPTO_MD4=m - CONFIG_CRYPTO_MD5=y - CONFIG_CRYPTO_MICHAEL_MIC=m --CONFIG_CRYPTO_POLY1305=m -+CONFIG_CRYPTO_POLY1305=y - CONFIG_CRYPTO_RMD160=m - CONFIG_CRYPTO_SHA1=y - CONFIG_CRYPTO_SHA256=y -@@ -6859,6 +8254,10 @@ CONFIG_CRYPTO_USER_API_ENABLE_OBSOLETE=y - - CONFIG_CRYPTO_HASH_INFO=y - CONFIG_CRYPTO_HW=y -+CONFIG_CRYPTO_DEV_ALLWINNER=y -+# CONFIG_CRYPTO_DEV_SUN4I_SS is not set -+# CONFIG_CRYPTO_DEV_SUN8I_CE is not set -+# CONFIG_CRYPTO_DEV_SUN8I_SS is not set - # CONFIG_CRYPTO_DEV_ATMEL_ECC is not set - # CONFIG_CRYPTO_DEV_ATMEL_SHA204A is not set - # CONFIG_CRYPTO_DEV_NITROX_CNN55XX is not set -@@ -6866,6 +8265,7 @@ CONFIG_CRYPTO_HW=y +@@ -6866,6 +7702,7 @@ CONFIG_CRYPTO_HW=y # CONFIG_CRYPTO_DEV_QAT_C3XXX is not set # CONFIG_CRYPTO_DEV_QAT_C62X is not set # CONFIG_CRYPTO_DEV_QAT_4XXX is not set @@ -15617,25 +14077,7 @@ # CONFIG_CRYPTO_DEV_QAT_DH895xCCVF is not set # CONFIG_CRYPTO_DEV_QAT_C3XXXVF is not set # CONFIG_CRYPTO_DEV_QAT_C62XVF is not set -@@ -6931,13 +8331,13 @@ CONFIG_CRYPTO_LIB_AES=y - CONFIG_CRYPTO_LIB_ARC4=m - CONFIG_CRYPTO_LIB_GF128MUL=y - CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y --CONFIG_CRYPTO_LIB_CHACHA_GENERIC=m -+CONFIG_CRYPTO_LIB_CHACHA_GENERIC=y - # CONFIG_CRYPTO_LIB_CHACHA is not set --CONFIG_CRYPTO_LIB_CURVE25519_GENERIC=m -+CONFIG_CRYPTO_LIB_CURVE25519_GENERIC=y - # CONFIG_CRYPTO_LIB_CURVE25519 is not set --CONFIG_CRYPTO_LIB_DES=m -+CONFIG_CRYPTO_LIB_DES=y - CONFIG_CRYPTO_LIB_POLY1305_RSIZE=1 --CONFIG_CRYPTO_LIB_POLY1305_GENERIC=m -+CONFIG_CRYPTO_LIB_POLY1305_GENERIC=y - # CONFIG_CRYPTO_LIB_POLY1305 is not set - # CONFIG_CRYPTO_LIB_CHACHA20POLY1305 is not set - CONFIG_CRYPTO_LIB_SHA1=y -@@ -7008,6 +8408,7 @@ CONFIG_HAS_IOPORT_MAP=y +@@ -7008,6 +7845,7 @@ CONFIG_HAS_IOPORT_MAP=y CONFIG_HAS_DMA=y CONFIG_NEED_DMA_MAP_STATE=y CONFIG_ARCH_DMA_ADDR_T_64BIT=y @@ -15643,7 +14085,7 @@ CONFIG_DMA_DECLARE_COHERENT=y CONFIG_ARCH_HAS_SETUP_DMA_OPS=y CONFIG_ARCH_HAS_SYNC_DMA_FOR_DEVICE=y -@@ -7038,7 +8439,6 @@ CONFIG_DMA_MAP_BENCHMARK=y +@@ -7038,7 +7876,6 @@ CONFIG_DMA_MAP_BENCHMARK=y CONFIG_SGL_ALLOC=y CONFIG_CHECK_SIGNATURE=y # CONFIG_CPUMASK_OFFSTACK is not set @@ -15651,15 +14093,7 @@ CONFIG_CPU_RMAP=y CONFIG_DQL=y CONFIG_GLOB=y -@@ -7091,7 +8491,6 @@ CONFIG_BOOT_PRINTK_DELAY=y - CONFIG_DYNAMIC_DEBUG=y - CONFIG_DYNAMIC_DEBUG_CORE=y - CONFIG_SYMBOLIC_ERRNAME=y --CONFIG_DEBUG_BUGVERBOSE=y - # end of printk and dmesg options - - CONFIG_DEBUG_KERNEL=y -@@ -7108,6 +8507,7 @@ CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT=y +@@ -7108,6 +7945,7 @@ CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT=y # CONFIG_DEBUG_INFO_REDUCED is not set CONFIG_DEBUG_INFO_COMPRESSED_NONE=y # CONFIG_DEBUG_INFO_COMPRESSED_ZLIB is not set @@ -15667,90 +14101,7 @@ CONFIG_DEBUG_INFO_BTF=y CONFIG_PAHOLE_HAS_SPLIT_BTF=y CONFIG_PAHOLE_HAS_LANG_EXCLUDE=y -@@ -7174,7 +8574,6 @@ CONFIG_SLUB_DEBUG=y - # CONFIG_PAGE_TABLE_CHECK is not set - # CONFIG_PAGE_POISONING is not set - # CONFIG_DEBUG_PAGE_REF is not set --# CONFIG_DEBUG_RODATA_TEST is not set - CONFIG_ARCH_HAS_DEBUG_WX=y - # CONFIG_DEBUG_WX is not set - CONFIG_GENERIC_PTDUMP=y -@@ -7237,6 +8636,7 @@ CONFIG_SCHEDSTATS=y - # end of Scheduler Debugging - - # CONFIG_DEBUG_TIMEKEEPING is not set -+# CONFIG_DEBUG_PREEMPT is not set - - # - # Lock Debugging (spinlocks, mutexes, etc...) -@@ -7252,7 +8652,7 @@ CONFIG_LOCK_DEBUGGING_SUPPORT=y - # CONFIG_DEBUG_LOCK_ALLOC is not set - CONFIG_DEBUG_ATOMIC_SLEEP=y - # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set --# CONFIG_LOCK_TORTURE_TEST is not set -+CONFIG_LOCK_TORTURE_TEST=m - # CONFIG_WW_MUTEX_SELFTEST is not set - # CONFIG_SCF_TORTURE_TEST is not set - # CONFIG_CSD_LOCK_WAIT_DEBUG is not set -@@ -7276,8 +8676,9 @@ CONFIG_DEBUG_LIST=y - # - # RCU Debugging - # -+CONFIG_TORTURE_TEST=m - # CONFIG_RCU_SCALE_TEST is not set --# CONFIG_RCU_TORTURE_TEST is not set -+CONFIG_RCU_TORTURE_TEST=m - # CONFIG_RCU_REF_SCALE_TEST is not set - CONFIG_RCU_CPU_STALL_TIMEOUT=60 - CONFIG_RCU_EXP_CPU_STALL_TIMEOUT=0 -@@ -7293,7 +8694,6 @@ CONFIG_RCU_EXP_CPU_STALL_TIMEOUT=0 - CONFIG_NOP_TRACER=y - CONFIG_HAVE_RETHOOK=y - CONFIG_RETHOOK=y --CONFIG_HAVE_FUNCTION_TRACER=y - CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y - CONFIG_HAVE_FUNCTION_GRAPH_RETVAL=y - CONFIG_HAVE_DYNAMIC_FTRACE=y -@@ -7310,15 +8710,8 @@ CONFIG_GENERIC_TRACER=y - CONFIG_TRACING_SUPPORT=y - CONFIG_FTRACE=y - CONFIG_BOOTTIME_TRACING=y --CONFIG_FUNCTION_TRACER=y --CONFIG_FUNCTION_GRAPH_TRACER=y --# CONFIG_FUNCTION_GRAPH_RETVAL is not set --CONFIG_DYNAMIC_FTRACE=y --CONFIG_DYNAMIC_FTRACE_WITH_REGS=y --# CONFIG_FPROBE is not set --CONFIG_FUNCTION_PROFILER=y --CONFIG_STACK_TRACER=y - # CONFIG_IRQSOFF_TRACER is not set -+# CONFIG_PREEMPT_TRACER is not set - CONFIG_SCHED_TRACER=y - CONFIG_HWLAT_TRACER=y - CONFIG_OSNOISE_TRACER=y -@@ -7331,21 +8724,17 @@ CONFIG_BRANCH_PROFILE_NONE=y - CONFIG_BLK_DEV_IO_TRACE=y - CONFIG_PROBE_EVENTS_BTF_ARGS=y - CONFIG_KPROBE_EVENTS=y --# CONFIG_KPROBE_EVENTS_ON_NOTRACE is not set - CONFIG_UPROBE_EVENTS=y - CONFIG_BPF_EVENTS=y - CONFIG_DYNAMIC_EVENTS=y - CONFIG_PROBE_EVENTS=y - # CONFIG_BPF_KPROBE_OVERRIDE is not set --CONFIG_FTRACE_MCOUNT_RECORD=y --CONFIG_FTRACE_MCOUNT_USE_RECORDMCOUNT=y - CONFIG_SYNTH_EVENTS=y - # CONFIG_USER_EVENTS is not set - # CONFIG_TRACE_EVENT_INJECT is not set - # CONFIG_TRACEPOINT_BENCHMARK is not set - CONFIG_RING_BUFFER_BENCHMARK=m - # CONFIG_TRACE_EVAL_MAP_FILE is not set --# CONFIG_FTRACE_RECORD_RECURSION is not set - # CONFIG_FTRACE_STARTUP_TEST is not set - # CONFIG_RING_BUFFER_STARTUP_TEST is not set - # CONFIG_RING_BUFFER_VALIDATE_TIME_DELTAS is not set -@@ -7353,7 +8742,37 @@ CONFIG_RING_BUFFER_BENCHMARK=m +@@ -7353,7 +8191,38 @@ CONFIG_RING_BUFFER_BENCHMARK=m # CONFIG_SYNTH_EVENT_GEN_TEST is not set # CONFIG_KPROBE_EVENT_GEN_TEST is not set # CONFIG_RV is not set @@ -15760,6 +14111,7 @@ +# CONFIG_SAMPLE_TRACE_EVENTS is not set +# CONFIG_SAMPLE_TRACE_CUSTOM_EVENTS is not set +# CONFIG_SAMPLE_TRACE_PRINTK is not set ++# CONFIG_SAMPLE_FTRACE_OPS is not set +# CONFIG_SAMPLE_TRACE_ARRAY is not set +# CONFIG_SAMPLE_KOBJECT is not set +# CONFIG_SAMPLE_KPROBES is not set @@ -15789,56 +14141,7 @@ CONFIG_STRICT_DEVMEM=y CONFIG_IO_STRICT_DEVMEM=y -@@ -7371,7 +8790,47 @@ CONFIG_FUNCTION_ERROR_INJECTION=y - # CONFIG_FAULT_INJECTION is not set - CONFIG_ARCH_HAS_KCOV=y - # CONFIG_KCOV is not set --# CONFIG_RUNTIME_TESTING_MENU is not set -+CONFIG_RUNTIME_TESTING_MENU=y -+# CONFIG_TEST_DHRY is not set -+# CONFIG_LKDTM is not set -+# CONFIG_TEST_MIN_HEAP is not set -+# CONFIG_TEST_DIV64 is not set -+# CONFIG_BACKTRACE_SELF_TEST is not set -+# CONFIG_TEST_REF_TRACKER is not set -+# CONFIG_RBTREE_TEST is not set -+# CONFIG_REED_SOLOMON_TEST is not set -+# CONFIG_INTERVAL_TREE_TEST is not set -+# CONFIG_PERCPU_TEST is not set -+# CONFIG_ATOMIC64_SELFTEST is not set -+# CONFIG_ASYNC_RAID6_TEST is not set -+# CONFIG_TEST_HEXDUMP is not set -+# CONFIG_STRING_SELFTEST is not set -+# CONFIG_TEST_STRING_HELPERS is not set -+# CONFIG_TEST_KSTRTOX is not set -+# CONFIG_TEST_PRINTF is not set -+# CONFIG_TEST_SCANF is not set -+# CONFIG_TEST_BITMAP is not set -+# CONFIG_TEST_UUID is not set -+# CONFIG_TEST_XARRAY is not set -+# CONFIG_TEST_MAPLE_TREE is not set -+# CONFIG_TEST_RHASHTABLE is not set -+# CONFIG_TEST_IDA is not set -+# CONFIG_TEST_LKM is not set -+# CONFIG_TEST_BITOPS is not set -+# CONFIG_TEST_VMALLOC is not set -+# CONFIG_TEST_USER_COPY is not set -+CONFIG_TEST_BPF=m -+# CONFIG_TEST_BLACKHOLE_DEV is not set -+# CONFIG_FIND_BIT_BENCHMARK is not set -+# CONFIG_TEST_FIRMWARE is not set -+# CONFIG_TEST_SYSCTL is not set -+# CONFIG_TEST_UDELAY is not set -+# CONFIG_TEST_STATIC_KEYS is not set -+# CONFIG_TEST_DYNAMIC_DEBUG is not set -+# CONFIG_TEST_KMOD is not set -+# CONFIG_TEST_MEMCAT_P is not set -+# CONFIG_TEST_MEMINIT is not set -+# CONFIG_TEST_FREE_PAGES is not set - CONFIG_ARCH_USE_MEMTEST=y - # CONFIG_MEMTEST is not set - # end of Kernel Testing and Coverage -@@ -7383,9 +8842,3 @@ CONFIG_ARCH_USE_MEMTEST=y +@@ -7383,9 +8252,3 @@ CONFIG_ARCH_USE_MEMTEST=y # end of Kernel hacking # CONFIG_KWORKER_NUMA_AFFINITY is not set @@ -15865,10 +14168,10 @@ + diff --git a/arch/riscv/configs/th1520_defconfig b/arch/riscv/configs/th1520_defconfig new file mode 100644 -index 000000000000..56337a80e0f4 +index 000000000000..4b41c15a3492 --- /dev/null +++ b/arch/riscv/configs/th1520_defconfig -@@ -0,0 +1,398 @@ +@@ -0,0 +1,399 @@ +CONFIG_SYSVIPC=y +CONFIG_POSIX_MQUEUE=y +CONFIG_NO_HZ_IDLE=y @@ -16194,6 +14497,7 @@ +CONFIG_SW_SYNC=y +CONFIG_UBIFS_FS=y +CONFIG_UDMABUF=y ++CONFIG_RISCV_ISA_V=y +CONFIG_CRYPTO_AUTHENC=y +CONFIG_CRYPTO_CBC=y +CONFIG_CRYPTO_CHACHA20POLY1305=y @@ -16267,6 +14571,186 @@ +CONFIG_RTW88_8723DS=m +# PowerVR Rogue GPU +CONFIG_DRM_POWERVR_ROGUE=m +diff --git a/arch/riscv/configs/th1520_oe_defconfig b/arch/riscv/configs/th1520_oe_defconfig +new file mode 100644 +index 000000000000..cdbae2cb2df8 +--- /dev/null ++++ b/arch/riscv/configs/th1520_oe_defconfig +@@ -0,0 +1,174 @@ ++# ARCH ++CONFIG_ARCH_XUANTIE=y ++ ++# TH1520 PINCTRL ++CONFIG_PINCTRL=y ++CONFIG_PINCTRL_TH1520=y ++ ++# mmc and dma ++CONFIG_MMC_SDHCI_OF_DWCMSHC=y ++CONFIG_DW_AXI_DMAC=y ++ ++# TH1520 GPIO ++CONFIG_GPIO_DWAPB=y ++ ++# TH1520 cpu thermal ++CONFIG_CPU_THERMAL=y ++CONFIG_THERMAL_EMULATION=y ++CONFIG_SENSORS_MR75203=m ++CONFIG_SENSORS_PWM_FAN=m ++ ++# TH1520 USB ++CONFIG_USB_DWC3=m ++CONFIG_USB_DWC3_DUAL_ROLE=y ++CONFIG_USB_DWC3_XUANTIE=m ++CONFIG_USB_ROLE_SWITCH=m ++CONFIG_USB_ONBOARD_HUB=m ++CONFIG_USB_GADGET=m ++CONFIG_USB_CONFIGFS=y ++CONFIG_USB_CONFIGFS_F_FS=y ++CONFIG_USB_CONFIGFS_F_ACC=y ++CONFIG_USB_ZERO=m ++CONFIG_USB_ETH=m ++CONFIG_USB_ETH_EEM=y ++CONFIG_USB_G_NCM=m ++CONFIG_USB_MASS_STORAGE=m ++CONFIG_USB_G_SERIAL=m ++CONFIG_USB_G_MULTI=m ++CONFIG_USB_G_MULTI_CDC=y ++CONFIG_TYPEC=m ++ ++# TH1520 ADC ++CONFIG_IIO=y ++CONFIG_XUANTIE_TH1520_ADC=m ++ ++# TH1520 CLOCK ++CONFIG_CLK_TH1520_FM=y ++ ++ ++# th1520 spi/qspi ++CONFIG_SPI_DW_QUAD=y ++CONFIG_SPI_DESIGNWARE=y ++CONFIG_SPI_DW_MMIO=y ++CONFIG_SPI_SPIDEV=y ++ ++# MTD ++ ++CONFIG_MTD=y ++CONFIG_MTD_TESTS=m ++CONFIG_MTD_BLOCK=y ++CONFIG_MTD_SLRAM=m ++CONFIG_MTD_PHRAM=m ++CONFIG_MTD_SPI_NAND=y ++CONFIG_MTD_SPI_NOR=y ++CONFIG_MTD_UBI=y ++ ++# TH1520 GPIO i2c expander GPIO ++ ++CONFIG_GPIO_PCA953X=y ++CONFIG_GPIO_PCA953X_IRQ=y ++ ++# TH1520 MAILBOX ++CONFIG_MAILBOX=y ++CONFIG_TH1520_MBOX=y ++ ++# builtin modules for th1520 ++CONFIG_KVM=y ++CONFIG_BRIDGE=y ++CONFIG_DRM=y ++CONFIG_OVERLAY_FS=y ++CONFIG_NLS_ISO8859_1=y ++CONFIG_DRM_PANEL_JADARD_JD9365DA_H3=y ++CONFIG_STMMAC_PLATFORM=y ++ ++## TH1520 PWM ++CONFIG_PWM_XUANTIE=y ++ ++## TH1520 dwmac ++CONFIG_DWMAC_XUANTIE=y ++ ++# TH1520 xgene rtc and rtc prescale ++CONFIG_RTC_DRV_XGENE=m ++CONFIG_RTC_DRV_XGENE_PRESCALER=y ++ ++# c906 audio ++CONFIG_RPMSG_TH1520=y ++ ++# I2C ++CONFIG_I2C_MV64XXX=y ++CONFIG_I2C_DESIGNWARE_PLATFORM=y ++CONFIG_I2C_CHARDEV=y ++ ++# th1520 event and watchdog ++CONFIG_DW_WATCHDOG=y ++CONFIG_WATCHDOG_PRETIMEOUT_GOV=y ++CONFIG_WATCHDOG_PRETIMEOUT_GOV_NOOP=y ++CONFIG_WATCHDOG_PRETIMEOUT_GOV_PANIC=y ++#CONFIG_WATCHDOG_PRETIMEOUT_DEFAULT_GOV_PANIC=y ++CONFIG_WATCHDOG_PRETIMEOUT_DEFAULT_GOV_NOOP=y ++CONFIG_WATCHDOG_OPEN_TIMEOUT=32 ++# TH1520 PMIC_WDT ++CONFIG_TH1520_PMIC_WATCHDOG=y ++ ++## DMATEST ++CONFIG_DMATEST=y ++ ++# TH1520 AON_SUBSYS ++CONFIG_TH1520_AON=y ++CONFIG_TH1520_AON_PD=y ++ ++# TH1520 CPU DVFS ++CONFIG_CPU_FREQ=y ++CONFIG_CPU_FREQ_STAT=y ++CONFIG_CPU_FREQ_GOV_POWERSAVE=y ++CONFIG_CPU_FREQ_GOV_USERSPACE=y ++CONFIG_CPU_FREQ_GOV_ONDEMAND=y ++CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y ++CONFIG_CPU_FREQ_GOV_SCHEDUTIL=y ++CONFIG_CPUFREQ_DT=y ++CONFIG_RISCV_XUANTIE_TH1520_CPUFREQ=y ++ ++# display-subsystem ++CONFIG_DRM_VERISILICON=y ++ ++# audio ++CONFIG_I2C_DESIGNWARE_PLATFORM=y ++ ++# TH1520 i2s ++CONFIG_SND_SOC_XUANTIE_TH1520_I2S=y ++# CONFIG_SND_SOC_XUANTIE_TH1520_I2S_CH8 is not set ++CONFIG_SND_SOC_XUANTIE_TH1520_HDMI_PCM=y ++ ++# plic ++CONFIG_SIFIVE_PLIC=y ++ ++# uart ++CONFIG_SERIAL_8250_CONSOLE=y ++CONFIG_SERIAL_8250_DW=y ++ ++# clock source ++CONFIG_DW_APB_TIMER_OF=y ++ ++# dsi ++CONFIG_VERISILICON_DW_MIPI_DSI=y ++CONFIG_PHY_DW_DPHY=y ++ ++# hdmi_tx ++CONFIG_VERISILICON_DW_HDMI_TH1520=y ++ ++# gpu ++CONFIG_DRM_POWERVR_ROGUE=m ++ ++# reset ++CONFIG_RESET_TH1520=y ++ ++# TH1520 codec ++CONFIG_SND_SOC_ES7210=y ++CONFIG_SND_SOC_ES8156=y ++ ++# 8723ds wifi ++CONFIG_CFG80211=m ++CONFIG_MAC80211=m ++CONFIG_RTW88=m ++CONFIG_RTW88_8723DS=m ++ diff --git a/arch/riscv/include/asm/barrier.h b/arch/riscv/include/asm/barrier.h index 110752594228..2b1f98b7e9bf 100644 --- a/arch/riscv/include/asm/barrier.h
View file
_service:tar_scm:0001-tools-Add-dynamic-process-level-cgroup-memory-monito.patch
Added
@@ -0,0 +1,1780 @@ +From 7ebd40e68808f9a159d91c3de996e91cffcf3e20 Mon Sep 17 00:00:00 2001 +From: Taoxy2004 <221870066@smail.nju.edu.cn> +Date: Fri, 6 Sep 2024 10:37:55 +0800 +Subject: PATCH OLK-6.6 tools: Add dynamic process-level cgroup memory + monitoring tool + +community inclusion +category: feature +bugzilla: https://gitee.com/openeuler/open-source-summer/issues/I9JQ4D + +---------------------------------------------------------------------- + +This patch introduces a new tool called "probeCgroup" that enables dynamic +monitoring of memory usage at the process level within cgroups. By using +kprobes at relevant cgroup functions, this tool can track memory allocations +and deallocations for individual processes within a cgroup, providing detailed +statistics on memory usage. + +The key features of the tool include: +1. Dynamic insertion of kprobes at critical points in the cgroup subsystem. +2. Tracking memory allocation and deallocation events for each process by recording page addresses in a hash table. +3. Providing real-time statistics on memory usage at the process level. +4. Providing statistics on memory usage for processes that are OOM. + +Signed-off-by: Taoxy2004 <221870066@smail.nju.edu.cn> +--- + tools/probeCgroup/Makefile | 7 + + tools/probeCgroup/README.md | 29 + + tools/probeCgroup/probeCgroup.c | 612 ++++++++++++++++++ + tools/probeCgroup/probeCgroup.h | 415 ++++++++++++ + tools/probeCgroup/run.sh | 8 + + tools/probeCgroup/scripts/script1.sh | 10 + + tools/probeCgroup/scripts/script2.sh | 14 + + tools/probeCgroup/scripts/script3.sh | 11 + + .../testcases/1_load_unload_test.py | 24 + + .../testcases/2_multiple_process_test.py | 48 ++ + .../testcases/3_multiple_cgroup_test.py | 55 ++ + tools/probeCgroup/testcases/4_oom_test.py | 52 ++ + .../testcases/5_multiple_threads_test.py | 45 ++ + tools/probeCgroup/testcases/cgroup_utils.py | 114 ++++ + tools/probeCgroup/testcases/mem-allocate.c | 35 + + .../testcases/multiple-thread-mem-allocate.c | 60 ++ + tools/probeCgroup/testcases/run.py | 32 + + .../testcases/simple-mem-allocate.c | 27 + + 18 files changed, 1598 insertions(+) + create mode 100644 tools/probeCgroup/Makefile + create mode 100644 tools/probeCgroup/README.md + create mode 100644 tools/probeCgroup/probeCgroup.c + create mode 100644 tools/probeCgroup/probeCgroup.h + create mode 100755 tools/probeCgroup/run.sh + create mode 100755 tools/probeCgroup/scripts/script1.sh + create mode 100755 tools/probeCgroup/scripts/script2.sh + create mode 100755 tools/probeCgroup/scripts/script3.sh + create mode 100755 tools/probeCgroup/testcases/1_load_unload_test.py + create mode 100755 tools/probeCgroup/testcases/2_multiple_process_test.py + create mode 100755 tools/probeCgroup/testcases/3_multiple_cgroup_test.py + create mode 100755 tools/probeCgroup/testcases/4_oom_test.py + create mode 100755 tools/probeCgroup/testcases/5_multiple_threads_test.py + create mode 100644 tools/probeCgroup/testcases/cgroup_utils.py + create mode 100644 tools/probeCgroup/testcases/mem-allocate.c + create mode 100644 tools/probeCgroup/testcases/multiple-thread-mem-allocate.c + create mode 100755 tools/probeCgroup/testcases/run.py + create mode 100644 tools/probeCgroup/testcases/simple-mem-allocate.c + +diff --git a/tools/probeCgroup/Makefile b/tools/probeCgroup/Makefile +new file mode 100644 +index 000000000000..606c951e5487 +--- /dev/null ++++ b/tools/probeCgroup/Makefile +@@ -0,0 +1,7 @@ ++obj-m := probeCgroup.o ++CROSS_COMPILE = '' ++KDIR := /lib/modules/$(shell uname -r)/build ++all: ++ make -C $(KDIR) M=$(PWD) modules ++clean: ++ rm -f *.ko *.o *.mod *.mod.o *.mod.c .*.cmd *.symvers module* +diff --git a/tools/probeCgroup/README.md b/tools/probeCgroup/README.md +new file mode 100644 +index 000000000000..ff0b6fc21228 +--- /dev/null ++++ b/tools/probeCgroup/README.md +@@ -0,0 +1,29 @@ ++# probeCgroup ++ ++#### Description ++probeCgroup is a process-level cgroup memory monitoring tool based on dynamic tracing (kprobe/kretprobe) technology. By inserting kprobes and kretprobes at the entry and exit points of relevant cgroup functions, this tool can track the memory usage of individual processes within each cgroup in real time. ++ ++#### Software Architecture ++1. Dynamic Tracing : Insert kprobes and kretprobes at critical points in cgroup functions to capture memory allocation and release events. ++2. Hash Table Recording : Record the addresses of pages currently used by each process in a hash table, so that when a page is released, the process it belongs to can be identified. ++3. Real-Time Statistics : Provide real-time statistics showing the memory usage of individual processes within each cgroup. ++ ++#### Instruction ++1. Compile and Load the Module ++ a. In the 'probeCgroup' directory, run the 'make' command to compile the module. ++ b. Load the module: 'insmod probeCgroup.ko'. ++ c. View memory statistics: 'cat /proc/cgroup_memory_usage_per_process'. ++ If an OOM (Out of Memory) event occurs in a cgroup, you can see "oom:" followed by the process that experienced the OOM and its memory usage at the time. ++ ++2. Automate OOM Scenario ++ In the 'probeCgroup' directory, run './run.sh'. This script will automatically set up an OOM scenario and output the content of '/proc/cgroup_memory_usage_per_process' after execution. ++ ++3. Perform More Tests ++ a. After compiling the module, in the 'testcases' directory, run './run.py'. ++ b. This script will perform various tests, including: ++ - Loading and unloading the module ++ - Each cgroup containing multiple processes ++ - Creating multiple cgroups ++ - OOM scenarios ++ - Multithreading ++ c. The tests will take approximately one minute to complete. +diff --git a/tools/probeCgroup/probeCgroup.c b/tools/probeCgroup/probeCgroup.c +new file mode 100644 +index 000000000000..9883cb1e082d +--- /dev/null ++++ b/tools/probeCgroup/probeCgroup.c +@@ -0,0 +1,612 @@ ++// SPDX-License-Identifier: GPL-2.0 ++/* ++ * probeCgroup.c - A tool used to get memory usage for each process in a cgroup ++ * ++ * Copyright (C) Taoxy2004 <221870066@smail.nju.edu.cn> ++ */ ++ ++#include "probeCgroup.h" ++ ++// kretprobe at mem_cgroup_charge ++struct charge_data { ++ struct cgroup *cgrp; ++ struct mem_cgroup *memcg; ++ struct task_struct *task; ++ unsigned long addr; ++}; ++ ++static int mem_cgroup_charge_entry_handler(struct kretprobe_instance *ri, ++ struct pt_regs *regs) ++{ ++ struct charge_data *data; ++ struct folio *page; ++ struct mm_struct *mm; ++ struct mem_cgroup *memcg; ++ struct cgroup_subsys_state css; ++ struct cgroup *cgrp; ++ ++ if (!current->mm) ++ return 1; ++ page = (struct folio *)regs->di; ++ mm = (struct mm_struct *)regs->si; ++ if (mm == NULL || page == NULL) ++ return -1; ++ memcg = get_mem_cgroup_from_mm(mm); ++ if (memcg != NULL) { ++ css = memcg->css; ++ cgrp = css.cgroup; ++ ++ data = (struct charge_data *)ri->data; ++ data->memcg = memcg; ++ data->addr = (unsigned long)page; ++ data->task = current; ++ data->cgrp = cgrp; ++ } ++ return 0; ++} ++ ++NOKPROBE_SYMBOL(mem_cgroup_charge_entry_handler); ++ ++static int mem_cgroup_charge_ret_handler(struct kretprobe_instance *ri, ++ struct pt_regs *regs) ++{ ++ unsigned long retval = regs_return_value(regs); ++ struct charge_data *data = (struct charge_data *)ri->data; ++ int id; ++ struct cgroup_info *cgrp_info; ++ struct task_info *tsk_info; ++ ++ if (data->memcg != NULL && retval == 0) { ++ id = ((data->memcg)->css).id; ++ ++ spin_lock(&lock); ++ cgrp_info = find_cgroup_info(id); ++ if (cgrp_info == NULL) { ++ cgrp_info = create_cgroup_info(data->cgrp, data->memcg); ++ if (cgrp_info == NULL) { ++ spin_unlock(&lock); ++ return -1; ++ } ++ add_cgroup_info(cgrp_info); ++ } ++ spin_unlock(&lock); ++ ++ read_lock(&cgrp_info->cgrp_lock); ++ tsk_info = find_task_info(cgrp_info, data->task->tgid); ++ read_unlock(&cgrp_info->cgrp_lock); ++ ++ // for some cases, task->comm changes over time ++ if (tsk_info != NULL ++ && strcmp(data->task->comm, tsk_info->comm) != 0) { ++ strscpy(tsk_info->comm, data->task->comm, ++ sizeof(tsk_info->comm)); ++ } ++ ++ if (tsk_info == NULL) { ++ tsk_info = create_task_info(data->task); ++ if (tsk_info == NULL) ++ return -1; ++ add_task_to_cgroup_info(cgrp_info, tsk_info); ++ } ++ ++ if (HashMap_insert(tsk_info->pages, data->addr)) { ++ //update counter ++ spin_lock(&(tsk_info->cnt_lock)); ++ tsk_info->count += ++ folio_nr_pages((struct folio *)data->addr); ++ spin_unlock(&(tsk_info->cnt_lock)); ++ } ++ } ++ ++ return 0; ++ ++} ++ ++NOKPROBE_SYMBOL(mem_cgroup_charge_ret_handler); ++ ++static struct kretprobe mem_cgroup_charge_kretprobe = { ++ .handler = mem_cgroup_charge_ret_handler, ++ .entry_handler = mem_cgroup_charge_entry_handler, ++ .data_size = sizeof(struct charge_data), ++ .maxactive = 20, ++}; ++ ++static int mem_cgroup_charge_kretprobe_init(void) ++{ ++ int ret; ++ ++ mem_cgroup_charge_kretprobe.kp.symbol_name = "__mem_cgroup_charge"; ++ ret = register_kretprobe(&mem_cgroup_charge_kretprobe); ++ if (ret < 0) { ++ pr_err("register_kretprobe failed, returned %d\n", ret); ++ return ret; ++ } ++ pr_info("Planted return probe at %s: %p\n", ++ mem_cgroup_charge_kretprobe.kp.symbol_name, ++ mem_cgroup_charge_kretprobe.kp.addr); ++ return 0; ++} ++ ++static void mem_cgroup_charge_kretprobe_exit(void) ++{ ++ unregister_kretprobe(&mem_cgroup_charge_kretprobe); ++ pr_info("kretprobe at %p unregistered\n", ++ mem_cgroup_charge_kretprobe.kp.addr); ++ ++ /* nmissed > 0 suggests that maxactive was set too low. */ ++ pr_info("Missed probing %d instances of %s\n", ++ mem_cgroup_charge_kretprobe.nmissed, ++ mem_cgroup_charge_kretprobe.kp.symbol_name); ++} ++ ++// kretprobe at uncharge_folio ++ ++struct uncharge_data { ++ struct cgroup *cgrp; ++ struct mem_cgroup *memcg; ++ unsigned long addr; ++ bool isKmem; ++ int nr_pages; ++}; ++ ++static int uncharge_folio_entry_handler(struct kretprobe_instance *ri, ++ struct pt_regs *regs) ++{ ++ struct uncharge_data *data; ++ struct folio *page; ++ struct mem_cgroup *memcg = NULL; ++ struct cgroup_subsys_state css; ++ struct cgroup *cgrp; ++ struct obj_cgroup *objcg; ++ int nr_pages = 0; ++ ++ data = (struct uncharge_data *)ri->data; ++ page = (struct folio *)regs->di; ++ if (page == NULL) { ++ data->memcg = NULL; ++ return -1; ++ } ++ if (page->memcg_data & MEMCG_DATA_KMEM) { // if the page belongs to kmem ++ if (!folio_test_large(page)) ++ nr_pages = 1; ++ else ++ nr_pages = page->_folio_nr_pages; ++ // nr_pages = thp_nr_pages(page); ++ objcg = __folio_objcg(page); ++ if (objcg != NULL) ++ memcg = objcg->memcg; ++ data->isKmem = true; ++ data->nr_pages = nr_pages; ++ } else { ++ memcg = __folio_memcg(page); ++ data->isKmem = false; ++ } ++ ++ if (memcg != NULL) { ++ css = memcg->css; ++ cgrp = css.cgroup; ++ ++ data->memcg = memcg; ++ data->addr = (unsigned long)page; ++ data->cgrp = cgrp; ++ } ++ return 0; ++} ++ ++NOKPROBE_SYMBOL(uncharge_folio_entry_handler); ++ ++static int uncharge_folio_ret_handler(struct kretprobe_instance *ri, ++ struct pt_regs *regs) ++{ ++ struct uncharge_data *data = (struct uncharge_data *)ri->data; ++ int id; ++ struct cgroup_info *cgrp_info; ++ int ret = -1; ++ ++ if (data->memcg != NULL) { ++ id = ((data->memcg)->css).id; ++ cgrp_info = find_cgroup_info(id); ++ if (cgrp_info == NULL) ++ return -1; ++ if (data->isKmem) ++ ret = -1; ++ else ++ ret = remove_page_from_cgroup_info(data->addr, cgrp_info); ++ } ++ ++ return ret; ++} ++ ++NOKPROBE_SYMBOL(uncharge_folio_ret_handler); ++ ++static struct kretprobe uncharge_folio_kretprobe = { ++ .handler = uncharge_folio_ret_handler, ++ .entry_handler = uncharge_folio_entry_handler, ++ .data_size = sizeof(struct uncharge_data), ++ .maxactive = 20, ++}; ++ ++static int uncharge_folio_kretprobe_init(void) ++{ ++ int ret; ++ ++ uncharge_folio_kretprobe.kp.symbol_name = "uncharge_folio"; ++ ret = register_kretprobe(&uncharge_folio_kretprobe); ++ if (ret < 0) { ++ pr_err("register_kretprobe failed, returned %d\n", ret); ++ return ret; ++ } ++ pr_info("Planted return probe at %s: %p\n", ++ uncharge_folio_kretprobe.kp.symbol_name, ++ uncharge_folio_kretprobe.kp.addr); ++ return 0; ++} ++ ++static void uncharge_folio_kretprobe_exit(void) ++{ ++ unregister_kretprobe(&uncharge_folio_kretprobe); ++ pr_info("kretprobe at %p unregistered\n", ++ uncharge_folio_kretprobe.kp.addr); ++ ++ /* nmissed > 0 suggests that maxactive was set too low. */ ++ pr_info("Missed probing %d instances of %s\n", ++ uncharge_folio_kretprobe.nmissed, ++ uncharge_folio_kretprobe.kp.symbol_name); ++} ++ ++//kprobe at do_exit ++static struct kprobe do_exit_kprobe; ++static int do_exit_kprobe_pre_handler(struct kprobe *p, struct pt_regs *regs) ++{ ++ struct task_struct *cur = current; ++ int tgid = cur->tgid; ++ struct mm_struct *mm = cur->mm; ++ struct mem_cgroup *memcg = get_mem_cgroup_from_mm(mm); ++ struct cgroup_subsys_state css; ++ struct cgroup *cgrp; ++ struct cgroup_info *cgrp_info; ++ struct task_info *tsk_info; ++ int id; ++ ++ if (memcg != NULL) { ++ css = memcg->css; ++ cgrp = css.cgroup; ++ id = (memcg->css).id; ++ cgrp_info = find_cgroup_info(id); ++ if (cgrp_info != NULL) { ++ write_lock(&cgrp_info->cgrp_lock); ++ tsk_info = find_task_info(cgrp_info, tgid); ++ if (tsk_info != NULL) { ++ list_del(&tsk_info->list); ++ write_unlock(&cgrp_info->cgrp_lock); ++ remove_task_from_cgroup_info(cgrp_info, ++ tsk_info); ++ } else { ++ write_unlock(&cgrp_info->cgrp_lock); ++ } ++ return 0; ++ } ++ } ++ return 0; ++} ++ ++static void do_exit_kprobe_post_handler(struct kprobe *p, ++ struct pt_regs *regs, ++ unsigned long flags) ++{ ++ ++} ++ ++static int do_exit_kprobe_init(void) ++{ ++ do_exit_kprobe.pre_handler = do_exit_kprobe_pre_handler; ++ do_exit_kprobe.post_handler = do_exit_kprobe_post_handler; ++ do_exit_kprobe.symbol_name = "do_exit"; ++ if (register_kprobe(&do_exit_kprobe)) { ++ pr_alert("register_kprobe on do_exit failed!\n"); ++ return -EINVAL; ++ } ++ return 0; ++} ++ ++static void do_exit_kprobe_exit(void) ++{ ++ unregister_kprobe(&do_exit_kprobe); ++} ++ ++//kprobe at mark_oom_victim ++static struct kprobe mark_oom_victim_kprobe; ++ ++static int mark_oom_victim_kprobe_pre_handler(struct kprobe *p, ++ struct pt_regs *regs) ++{ ++ struct task_struct *victim; ++ int tgid; ++ struct mm_struct *mm; ++ struct mem_cgroup *memcg; ++ struct cgroup_subsys_state css; ++ struct cgroup *cgrp; ++ struct cgroup_info *cgrp_info; ++ struct task_info *tsk_info; ++ int id; ++ struct task_info *oom_info; ++ ++ victim = (struct task_struct *)regs->di; ++ tgid = victim->tgid; ++ mm = victim->mm; ++ memcg = get_mem_cgroup_from_mm(mm); ++ if (memcg != NULL) { ++ css = memcg->css; ++ cgrp = css.cgroup; ++ id = (memcg->css).id; ++ cgrp_info = find_cgroup_info(id); ++ if (cgrp_info != NULL) { ++ read_lock(&cgrp_info->cgrp_lock); ++ tsk_info = find_task_info(cgrp_info, tgid); ++ read_unlock(&cgrp_info->cgrp_lock); ++ if (tsk_info != NULL) { ++ oom_info = create_oom_task_info(tsk_info); ++ if (oom_info != NULL) { ++ add_oom_task_to_cgroup_info(cgrp_info, ++ oom_info); ++ } ++ return 0; ++ } ++ } ++ } ++ return 0; ++} ++ ++static void mark_oom_victim_kprobe_post_handler(struct kprobe *p, ++ struct pt_regs *regs, ++ unsigned long flags) ++{ ++ ++} ++ ++static int mark_oom_victim_kprobe_init(void) ++{ ++ mark_oom_victim_kprobe.pre_handler = mark_oom_victim_kprobe_pre_handler; ++ mark_oom_victim_kprobe.post_handler = ++ mark_oom_victim_kprobe_post_handler; ++ mark_oom_victim_kprobe.symbol_name = "mark_oom_victim"; ++ if (register_kprobe(&mark_oom_victim_kprobe)) { ++ pr_alert("register_kprobe on mark_oom_victim failed!\n"); ++ return -EINVAL; ++ } ++ return 0; ++} ++ ++static void mark_oom_victim_kprobe_exit(void) ++{ ++ unregister_kprobe(&mark_oom_victim_kprobe); ++} ++ ++//kretporbe at cgroup_destroy_locked ++struct destroy_data { ++ struct cgroup *cgrp; ++}; ++ ++static int cgroup_destroy_locked_entry_handler(struct kretprobe_instance ++ *ri, struct pt_regs *regs) ++{ ++ struct destroy_data *data; ++ ++ data = (struct destroy_data *)ri->data; ++ data->cgrp = (struct cgroup *)regs->di; ++ return 0; ++} ++ ++NOKPROBE_SYMBOL(cgroup_destroy_locked_entry_handler); ++ ++static int cgroup_destroy_locked_ret_handler(struct kretprobe_instance *ri, ++ struct pt_regs *regs) ++{ ++ struct destroy_data *data = (struct destroy_data *)ri->data; ++ struct cgroup *cgrp = data->cgrp; ++ struct cgroup_info *cgrp_info = NULL; ++ unsigned long retval = regs_return_value(regs); ++ ++ if (!cgrp) ++ return -1; ++ if (retval != 0) ++ return -1; ++ list_for_each_entry(cgrp_info, &all_cgroup_info, list) { ++ if (cgrp_info->cgrp == cgrp) { ++ spin_lock(&lock); ++ list_del(&cgrp_info->list); ++ spin_unlock(&lock); ++ destroy_cgroup_info(cgrp_info); ++ return 0; ++ } ++ } ++ return -1; ++} ++ ++NOKPROBE_SYMBOL(cgroup_destroy_locked_ret_handler); ++ ++static struct kretprobe cgroup_destroy_locked_kretprobe = { ++ .handler = cgroup_destroy_locked_ret_handler, ++ .entry_handler = cgroup_destroy_locked_entry_handler, ++ .data_size = sizeof(struct destroy_data), ++ .maxactive = 20, ++}; ++ ++static int cgroup_destroy_locked_kretprobe_init(void) ++{ ++ int ret; ++ ++ cgroup_destroy_locked_kretprobe.kp.symbol_name = ++ "cgroup_destroy_locked"; ++ ret = register_kretprobe(&cgroup_destroy_locked_kretprobe); ++ if (ret < 0) { ++ pr_err("register_kretprobe failed, returned %d\n", ret); ++ return ret; ++ } ++ pr_info("Planted return probe at %s: %p\n", ++ cgroup_destroy_locked_kretprobe.kp.symbol_name, ++ cgroup_destroy_locked_kretprobe.kp.addr); ++ return 0; ++} ++ ++static void cgroup_destroy_locked_kretprobe_exit(void) ++{ ++ unregister_kretprobe(&cgroup_destroy_locked_kretprobe); ++ pr_info("kretprobe at %p unregistered\n", ++ cgroup_destroy_locked_kretprobe.kp.addr); ++ ++ /* nmissed > 0 suggests that maxactive was set too low. */ ++ pr_info("Missed probing %d instances of %s\n", ++ cgroup_destroy_locked_kretprobe.nmissed, ++ cgroup_destroy_locked_kretprobe.kp.symbol_name); ++} ++ ++// print the tasks in order of their memory usage ++static void print_sorted_tasks_list(struct cgroup_info *cgrp_info, ++ int type, struct seq_file *m) ++{ ++ struct list_head *cur, *insert_pos; ++ struct task_info *task, *insert_task; ++ struct list_head new_list = LIST_HEAD_INIT(new_list); ++ struct list_head *old_list; ++ struct task_info *new_task, *next_task; ++ ++ if (type == 0) { ++ if (cgrp_info == NULL) ++ return; ++ read_lock(&cgrp_info->cgrp_lock); ++ old_list = &cgrp_info->tasks_list; ++ } else { ++ if (cgrp_info == NULL) ++ return; ++ old_list = &cgrp_info->oom_list; ++ } ++ ++ list_for_each_entry_safe(task, insert_task, old_list, list) { ++ new_task = kmalloc(sizeof(struct task_info), GFP_ATOMIC); ++ if (!new_task) ++ return; ++ new_task->tgid = task->tgid; ++ strscpy(new_task->comm, task->comm, sizeof(new_task->comm)); ++ new_task->count = task->count; ++ new_task->pages = NULL; ++ INIT_LIST_HEAD(&new_task->list); ++ ++ //insertion sort ++ cur = &new_list; ++ insert_pos = cur->next; ++ while (insert_pos != &new_list) { ++ next_task = ++ list_entry(insert_pos, struct task_info, list); ++ if (new_task->count >= next_task->count) ++ break; ++ cur = insert_pos; ++ insert_pos = insert_pos->next; ++ } ++ ++ (&new_task->list)->prev = insert_pos->prev; ++ (insert_pos->prev)->next = (&new_task->list); ++ (&new_task->list)->next = insert_pos; ++ insert_pos->prev = (&new_task->list); ++ } ++ if (type == 0) ++ read_unlock(&cgrp_info->cgrp_lock); ++ ++ //print ++ if (type == 1 && (&new_list) != new_list.next) { ++ seq_puts(m, "oom:\n"); ++ seq_printf(m, "%10s %20s %20s\n", "pid", "command", ++ "memory usage (KB)"); ++ } ++ if (type == 0) ++ seq_printf(m, "%10s %20s %20s\n", "pid", "command", ++ "memory usage (KB)"); ++ list_for_each_entry_safe(task, insert_task, &new_list, list) { ++ seq_printf(m, "%10d %20s %20d\n", task->tgid, task->comm, ++ (task->count) * 4); ++ } ++ ++ list_for_each_entry_safe(task, insert_task, &new_list, list) { ++ list_del(&task->list); ++ kfree(task); ++ } ++} ++ ++static struct proc_dir_entry *cgroup_info_read; ++#define procfs_file_read "cgroup_memory_usage_per_process" ++ ++void seq_print_tasks(struct cgroup_info *cgroup_info, struct seq_file *m) ++{ ++ if (!cgroup_info) ++ return; ++ ++ print_sorted_tasks_list(cgroup_info, 0, m); ++} ++ ++void seq_print_oom_tasks(struct cgroup_info *cgroup_info, struct seq_file *m) ++{ ++ if (!cgroup_info) ++ return; ++ ++ print_sorted_tasks_list(cgroup_info, 1, m); ++} ++ ++void seq_print_cgroups(struct seq_file *m) ++{ ++ struct cgroup_info *cgrp, *pos; ++ ++ spin_lock(&lock); ++ list_for_each_entry_safe(cgrp, pos, &all_cgroup_info, list) { ++ seq_printf(m, "cgroup name : %s\n", cgrp->name); ++ seq_print_tasks(cgrp, m); ++ seq_print_oom_tasks(cgrp, m); ++ seq_puts(m, "\n"); ++ } ++ spin_unlock(&lock); ++} ++ ++static int memory_usage_show(struct seq_file *m, void *v) ++{ ++ seq_print_cgroups(m); ++ return 0; ++} ++ ++static int __init global_init(void) ++{ ++ int ret = 0; ++ ++ cgroup_info_read = ++ proc_create_single(procfs_file_read, 0, NULL, memory_usage_show); ++ if (!cgroup_info_read) ++ return -ENOMEM; ++ ret = mem_cgroup_charge_kretprobe_init(); ++ uncharge_folio_kretprobe_init(); ++ do_exit_kprobe_init(); ++ mark_oom_victim_kprobe_init(); ++ cgroup_destroy_locked_kretprobe_init(); ++ ++ return ret; ++} ++ ++static void __exit global_exit(void) ++{ ++ struct cgroup_info *cgrp_info, *pos; ++ ++ mem_cgroup_charge_kretprobe_exit(); ++ uncharge_folio_kretprobe_exit(); ++ do_exit_kprobe_exit(); ++ mark_oom_victim_kprobe_exit(); ++ cgroup_destroy_locked_kretprobe_exit(); ++ ++ remove_proc_entry(procfs_file_read, NULL); ++ ++ //release all memory use ++ list_for_each_entry_safe(cgrp_info, pos, &all_cgroup_info, list) { ++ list_del(&cgrp_info->list); ++ destroy_cgroup_info(cgrp_info); ++ } ++} ++ ++module_init(global_init) ++module_exit(global_exit) ++MODULE_LICENSE("GPL"); +diff --git a/tools/probeCgroup/probeCgroup.h b/tools/probeCgroup/probeCgroup.h +new file mode 100644 +index 000000000000..953a6e0aca31 +--- /dev/null ++++ b/tools/probeCgroup/probeCgroup.h +@@ -0,0 +1,415 @@ ++/* SPDX-License-Identifier: GPL-2.0*/ ++/* ++ * probeCgroup.h ++ * ++ * Copyright (C) Taoxy2004 <221870066@smail.nju.edu.cn> ++ */ ++ ++#include <linux/kernel.h> ++#include <linux/module.h> ++#include <linux/kprobes.h> ++#include <linux/ktime.h> ++#include <linux/limits.h> ++#include <linux/sched.h> ++#include <linux/mm_types.h> ++#include <linux/memcontrol.h> ++#include <linux/cgroup-defs.h> ++#include <linux/kernfs.h> ++#include <linux/string.h> ++#include <linux/list.h> ++#include <linux/oom.h> ++#include <linux/fs.h> ++#include <linux/proc_fs.h> ++#include <linux/huge_mm.h> ++#include <linux/page-flags.h> ++#include <linux/spinlock.h> ++#include <linux/rwlock.h> ++ ++static spinlock_t lock; // global lock for the list of cgroup_info ++ ++struct HashNode { ++ unsigned long addr; ++ struct HashNode *next; ++}; ++ ++struct HashNode *HashNode_create(unsigned long addr) ++{ ++ struct HashNode *node = NULL; ++ ++ node = kzalloc(sizeof(struct HashNode), GFP_ATOMIC); ++ if (node == NULL) ++ return NULL; ++ node->addr = addr; ++ node->next = NULL; ++ return node; ++} ++ ++struct HashBucket { ++ struct HashNode *head; ++ spinlock_t bkt_lock; ++}; ++ ++void HashBucket_init(struct HashBucket *bkt) ++{ ++ bkt->head = NULL; ++ spin_lock_init(&bkt->bkt_lock); ++} ++ ++bool HashBucket_insert(struct HashBucket *bkt, unsigned long addr) ++{ ++ struct HashNode *new_node; ++ struct HashNode *node; ++ struct HashNode *prev; ++ bool ret = true; ++ ++ if (bkt == NULL) ++ return false; ++ ++ prev = NULL; ++ new_node = NULL; ++ new_node = HashNode_create(addr); ++ ++ spin_lock(&bkt->bkt_lock); ++ node = bkt->head; ++ while (node != NULL && node->addr != addr) { ++ prev = node; ++ node = node->next; ++ } ++ if (node == NULL) { ++ if (new_node == NULL) { ++ pr_info("not enough memory for HashNode\n"); ++ spin_unlock(&bkt->bkt_lock); ++ return false; ++ } ++ if (bkt->head == NULL) ++ bkt->head = new_node; ++ else ++ prev->next = new_node; ++ spin_unlock(&bkt->bkt_lock); ++ ret = true; ++ } else { ++ spin_unlock(&bkt->bkt_lock); ++ kfree(new_node); ++ ret = false; ++ } ++ ++ return ret; ++} ++ ++bool HashBucket_erase(struct HashBucket *bkt, unsigned long addr) ++{ ++ struct HashNode *node; ++ struct HashNode *prev; ++ bool ret = true; ++ ++ if (bkt == NULL) ++ return false; ++ ++ spin_lock(&bkt->bkt_lock); ++ node = bkt->head; ++ prev = NULL; ++ while (node != NULL && node->addr != addr) { ++ prev = node; ++ node = node->next; ++ } ++ if (node == NULL) { ++ spin_unlock(&bkt->bkt_lock); ++ ret = false; ++ } else { ++ if (bkt->head == node) ++ bkt->head = node->next; ++ else ++ prev->next = node->next; ++ kfree(node); ++ spin_unlock(&bkt->bkt_lock); ++ ret = true; ++ } ++ ++ return ret; ++} ++ ++void HashBucket_clear(struct HashBucket *bkt) ++{ ++ struct HashNode *node; ++ struct HashNode *prev; ++ ++ if (bkt == NULL) ++ return; ++ ++ spin_lock(&bkt->bkt_lock); ++ node = bkt->head; ++ prev = NULL; ++ bkt->head = NULL; ++ while (node != NULL) { ++ prev = node; ++ node = node->next; ++ kfree(prev); ++ } ++ spin_unlock(&bkt->bkt_lock); ++} ++ ++struct HashMap { ++ unsigned long size; ++ struct HashBucket *HashTable; ++}; ++ ++unsigned long hash_func(unsigned long addr, unsigned long size) ++{ ++ return addr % size; ++} ++ ++struct HashMap *HashMap_create(unsigned long size) ++{ ++ struct HashMap *hm = NULL; ++ struct HashBucket *ht = NULL; ++ int i = 0; ++ ++ hm = kmalloc(sizeof(struct HashMap), GFP_ATOMIC); ++ if (hm == NULL) ++ return NULL; ++ ht = kmalloc((size * sizeof(struct HashBucket)), GFP_ATOMIC); ++ if (ht == NULL) { ++ kfree(hm); ++ return NULL; ++ } ++ for (i = 0; i < size; i++) ++ HashBucket_init(&(hti)); ++ ++ hm->size = size; ++ hm->HashTable = ht; ++ return hm; ++} ++ ++bool HashMap_insert(struct HashMap *hm, unsigned long addr) ++{ ++ unsigned long index; ++ ++ if (hm == NULL) ++ return false; ++ index = hash_func(addr, hm->size); ++ if (hm->HashTable == NULL) ++ return false; ++ return HashBucket_insert(&(hm->HashTableindex), addr); ++} ++ ++bool HashMap_erase(struct HashMap *hm, unsigned long addr) ++{ ++ unsigned long index; ++ ++ if (hm == NULL) ++ return false; ++ index = hash_func(addr, hm->size); ++ if (hm->HashTable == NULL) ++ return false; ++ return HashBucket_erase(&(hm->HashTableindex), addr); ++} ++ ++void HashMap_clear(struct HashMap *hm) ++{ ++ unsigned long size; ++ struct HashBucket *ht; ++ int i; ++ ++ if (hm == NULL) ++ return; ++ size = hm->size; ++ ht = hm->HashTable; ++ if (ht == NULL) ++ return; ++ hm->HashTable = NULL; ++ for (i = 0; i < size; i++) ++ HashBucket_clear(&(hti)); ++ ++ kfree(ht); ++ kfree(hm); ++} ++ ++//struct that save the information for each task ++struct task_info { ++ int tgid; ++ char commTASK_COMM_LEN; ++ int count; // number of pages ++ struct HashMap *pages; ++ struct list_head list; ++ spinlock_t cnt_lock; ++}; ++ ++// struct that save the information for each cgroup ++struct cgroup_info { ++ struct cgroup *cgrp; ++ struct mem_cgroup *memcg; ++ int id; ++ char name64; ++ struct list_head list; ++ struct list_head tasks_list; ++ struct list_head oom_list; ++ rwlock_t cgrp_lock; ++ unsigned int cached_bytes; ++}; ++ ++static LIST_HEAD(all_cgroup_info); // a list that linked all the cgroup_info struct ++ ++static struct task_info *create_task_info(struct task_struct *cur_task) ++{ ++ struct task_info *tsk_info = ++ kmalloc(sizeof(struct task_info), GFP_ATOMIC); ++ if (!tsk_info) ++ return NULL; ++ ++ // initialization ++ tsk_info->tgid = cur_task->tgid; ++ strscpy(tsk_info->comm, cur_task->comm, sizeof(tsk_info->comm)); ++ tsk_info->count = 0; ++ tsk_info->pages = NULL; ++ tsk_info->pages = HashMap_create(1023); ++ INIT_LIST_HEAD(&tsk_info->list); ++ spin_lock_init(&(tsk_info->cnt_lock)); ++ ++ return tsk_info; ++} ++ ++static int ++add_task_to_cgroup_info(struct cgroup_info *cgrp, struct task_info *task) ++{ ++ if (!cgrp || !task) ++ return -EINVAL; ++ ++ write_lock(&cgrp->cgrp_lock); ++ list_add_tail(&task->list, &cgrp->tasks_list); ++ write_unlock(&cgrp->cgrp_lock); ++ return 0; ++} ++ ++static int ++remove_task_from_cgroup_info(struct cgroup_info *cgrp, struct task_info *task) ++{ ++ if (cgrp == NULL || task == NULL) ++ return -EINVAL; ++ ++ HashMap_clear(task->pages); ++ // kfree(task->pages); ++ kfree(task); ++ return 0; ++} ++ ++static struct task_info *find_task_info(struct cgroup_info *cgrp, int tgid) ++{ ++ struct task_info *tsk_info, *pos; ++ ++ list_for_each_entry_safe(tsk_info, pos, &cgrp->tasks_list, list) { ++ if (tsk_info->tgid == tgid) ++ return tsk_info; ++ } ++ return NULL; ++} ++ ++static int ++remove_page_from_cgroup_info(unsigned long addr, struct cgroup_info *cgrp) ++{ ++ struct task_info *tsk_info, *pos; ++ ++ read_lock(&cgrp->cgrp_lock); ++ list_for_each_entry_safe(tsk_info, pos, &cgrp->tasks_list, list) { ++ if (HashMap_erase(tsk_info->pages, addr)) { ++ spin_lock(&(tsk_info->cnt_lock)); ++ tsk_info->count -= folio_nr_pages((struct folio *)addr); ++ spin_unlock(&(tsk_info->cnt_lock)); ++ read_unlock(&cgrp->cgrp_lock); ++ return 0; ++ } ++ } ++ read_unlock(&cgrp->cgrp_lock); ++ return -1; ++} ++ ++static struct cgroup_info *create_cgroup_info(struct cgroup *cgrp, ++ struct mem_cgroup *memcg) ++{ ++ struct cgroup_info *cgrp_info = ++ kmalloc(sizeof(struct cgroup_info), GFP_ATOMIC); ++ struct kernfs_node *kn; ++ ++ if (!cgrp_info) ++ return NULL; ++ ++ cgrp_info->cgrp = cgrp; ++ cgrp_info->memcg = memcg; ++ cgrp_info->id = (memcg->css).id; ++ kn = cgrp->kn; ++ strscpy(cgrp_info->name, kn->name, sizeof(cgrp_info->name)); ++ INIT_LIST_HEAD(&cgrp_info->list); ++ INIT_LIST_HEAD(&cgrp_info->tasks_list); ++ INIT_LIST_HEAD(&cgrp_info->oom_list); ++ rwlock_init(&(cgrp_info->cgrp_lock)); ++ cgrp_info->cached_bytes = 0; ++ ++ return cgrp_info; ++} ++ ++static void destroy_cgroup_info(struct cgroup_info *cgrp_info) ++{ ++ struct task_info *task, *tmp; ++ ++ if (!cgrp_info) ++ return; ++ ++ write_lock(&cgrp_info->cgrp_lock); ++ list_for_each_entry_safe(task, tmp, &cgrp_info->tasks_list, list) { ++ list_del(&task->list); ++ remove_task_from_cgroup_info(cgrp_info, task); ++ } ++ write_unlock(&cgrp_info->cgrp_lock); ++ list_for_each_entry_safe(task, tmp, &cgrp_info->oom_list, list) { ++ list_del(&task->list); ++ remove_task_from_cgroup_info(cgrp_info, task); ++ } ++ ++ kfree(cgrp_info); ++} ++ ++static int add_cgroup_info(struct cgroup_info *cgrp_info) ++{ ++ if (!cgrp_info) ++ return -EINVAL; ++ ++ list_add_tail(&cgrp_info->list, &all_cgroup_info); ++ return 0; ++} ++ ++static struct cgroup_info *find_cgroup_info(int id) ++{ ++ struct cgroup_info *cgrp_info = NULL; ++ ++ list_for_each_entry(cgrp_info, &all_cgroup_info, list) { ++ if (cgrp_info->id == id) ++ return cgrp_info; ++ } ++ ++ return NULL; ++} ++ ++static struct task_info *create_oom_task_info(struct task_info *tsk_info) ++{ ++ struct task_info *oom_tsk_info = ++ kmalloc(sizeof(struct task_info), GFP_ATOMIC); ++ if (!oom_tsk_info) ++ return NULL; ++ ++ oom_tsk_info->tgid = tsk_info->tgid; ++ strscpy(oom_tsk_info->comm, tsk_info->comm, sizeof(oom_tsk_info->comm)); ++ oom_tsk_info->count = tsk_info->count; ++ oom_tsk_info->pages = NULL; ++ INIT_LIST_HEAD(&oom_tsk_info->list); ++ ++ return oom_tsk_info; ++} ++ ++static int ++add_oom_task_to_cgroup_info(struct cgroup_info *cgrp, ++ struct task_info *oom_task) ++{ ++ if (!cgrp || !oom_task) ++ return -EINVAL; ++ list_add_tail(&oom_task->list, &cgrp->oom_list); ++ return 0; ++} +diff --git a/tools/probeCgroup/run.sh b/tools/probeCgroup/run.sh +new file mode 100755 +index 000000000000..7e1ffefe66d1 +--- /dev/null ++++ b/tools/probeCgroup/run.sh +@@ -0,0 +1,8 @@ ++#! /bin/bash ++# SPDX-License-Identifier: GPL-2.0 ++# Copyright (C) Taoxy2004 <221870066@smail.nju.edu.cn> ++ ++cd scripts ++./script1.sh ++./script2.sh ++./script3.sh +diff --git a/tools/probeCgroup/scripts/script1.sh b/tools/probeCgroup/scripts/script1.sh +new file mode 100755 +index 000000000000..539e8258afb9 +--- /dev/null ++++ b/tools/probeCgroup/scripts/script1.sh +@@ -0,0 +1,10 @@ ++#! /bin/bash ++# SPDX-License-Identifier: GPL-2.0 ++# Copyright (C) Taoxy2004 <221870066@smail.nju.edu.cn> ++ ++cd .. ++make ++insmod probeCgroup.ko ++ ++cd testcases ++gcc simple-mem-allocate.c -o simple-mem-allocate +diff --git a/tools/probeCgroup/scripts/script2.sh b/tools/probeCgroup/scripts/script2.sh +new file mode 100755 +index 000000000000..2ad515cfb912 +--- /dev/null ++++ b/tools/probeCgroup/scripts/script2.sh +@@ -0,0 +1,14 @@ ++#! /bin/bash ++# SPDX-License-Identifier: GPL-2.0 ++# Copyright (C) Taoxy2004 <221870066@smail.nju.edu.cn> ++ ++current_dir=$(pwd) ++cd /sys/fs/cgroup/memory ++mkdir test ++cd test ++sh -c "echo $$ >> cgroup.procs" ++sh -c "echo 5M > memory.limit_in_bytes" ++sh -c "echo 0 > memory.swappiness" ++cd "$current_dir" ++cd ../testcases ++./simple-mem-allocate +diff --git a/tools/probeCgroup/scripts/script3.sh b/tools/probeCgroup/scripts/script3.sh +new file mode 100755 +index 000000000000..127eb45de5c9 +--- /dev/null ++++ b/tools/probeCgroup/scripts/script3.sh +@@ -0,0 +1,11 @@ ++#! /bin/bash ++# SPDX-License-Identifier: GPL-2.0 ++# Copyright (C) Taoxy2004 <221870066@smail.nju.edu.cn> ++ ++cd /proc ++cat cgroup_memory_usage_per_process ++ ++cat /sys/fs/cgroup/memory/test/cgroup.procs > /sys/fs/cgroup/memory/cgroup.procs ++rmdir /sys/fs/cgroup/memory/test ++# cat cgroup_memory_usage_per_process ++rmmod probeCgroup +diff --git a/tools/probeCgroup/testcases/1_load_unload_test.py b/tools/probeCgroup/testcases/1_load_unload_test.py +new file mode 100755 +index 000000000000..5389a14a1dac +--- /dev/null ++++ b/tools/probeCgroup/testcases/1_load_unload_test.py +@@ -0,0 +1,24 @@ ++#!/usr/bin/env python ++# SPDX-License-Identifier: GPL-2.0 ++# Copyright (C) Taoxy2004 <221870066@smail.nju.edu.cn> ++ ++import os ++import subprocess ++import time ++ ++def test_module_load_unload(): ++ try: ++ subprocess.check_call('insmod', '../probeCgroup.ko') ++ time.sleep(1) ++ print('loading module successfully!') ++ subprocess.check_call('rmmod', 'probeCgroup') ++ output = subprocess.check_output('lsmod') ++ assert b'probeCgroup' not in output ++ print('unloading module successfully!') ++ except subprocess.CalledProcessError as e: ++ print('Load unload test failed. Insmod failed.') ++ except AssertionError as e: ++ print('Load unload test failed. Cannot remove module.') ++ ++if __name__ == '__main__': ++ test_module_load_unload() +\ No newline at end of file +diff --git a/tools/probeCgroup/testcases/2_multiple_process_test.py b/tools/probeCgroup/testcases/2_multiple_process_test.py +new file mode 100755 +index 000000000000..d88c7f7f2952 +--- /dev/null ++++ b/tools/probeCgroup/testcases/2_multiple_process_test.py +@@ -0,0 +1,48 @@ ++#!/usr/bin/env python ++# SPDX-License-Identifier: GPL-2.0 ++# Copyright (C) Taoxy2004 <221870066@smail.nju.edu.cn> ++ ++from cgroup_utils import create_cgroup, add_process_to_cgroup, get_process_memory_usage, remove_cgroup, check_memory_usage, cleanup, check_kmem_usage ++import os ++import subprocess ++import time ++ ++def test_multiple_process(num_procs): ++ subprocess.check_call('insmod', '../probeCgroup.ko') ++ time.sleep(1) ++ ++ cgroup_name = 'test' ++ cgroup_path = create_cgroup(cgroup_name) ++ ++ processes = ++ pids = ++ ++ for i in range(num_procs): ++ process = subprocess.Popen('./mem-allocate') ++ pid = process.pid ++ add_process_to_cgroup(cgroup_path, pid) ++ processes.append(process) ++ pids.append(pid) ++ ++ time.sleep(0.1) ++ try: ++ count = 0 ++ for i in range (2000): ++ count += check_memory_usage(cgroup_name, pids, False) ++ time.sleep(0.01) ++ assert count <= 50, f"Memory read by probeCgroup is not accurate" ++ ++ remove_cgroup(cgroup_path, pids) ++ check_memory_usage(cgroup_name, pids, True) ++ cleanup(processes) ++ subprocess.check_call('rmmod', 'probeCgroup') ++ ++ print('pass multiple process test!') ++ except AssertionError as e: ++ print(f"Assertion failed: {e}") ++ remove_cgroup(cgroup_path, pids) ++ cleanup(processes) ++ subprocess.check_call('rmmod', 'probeCgroup') ++ ++if __name__ == '__main__': ++ test_multiple_process(3) +\ No newline at end of file +diff --git a/tools/probeCgroup/testcases/3_multiple_cgroup_test.py b/tools/probeCgroup/testcases/3_multiple_cgroup_test.py +new file mode 100755 +index 000000000000..592a716df877 +--- /dev/null ++++ b/tools/probeCgroup/testcases/3_multiple_cgroup_test.py +@@ -0,0 +1,55 @@ ++#!/usr/bin/env python ++# SPDX-License-Identifier: GPL-2.0 ++# Copyright (C) Taoxy2004 <221870066@smail.nju.edu.cn> ++ ++from cgroup_utils import create_cgroup, add_process_to_cgroup, get_process_memory_usage, remove_cgroup, check_memory_usage, cleanup ++import os ++import subprocess ++import time ++ ++def test_multiple_cgroup(num_procs, num_cgroups): ++ subprocess.check_call('insmod', '../probeCgroup.ko') ++ time.sleep(1) ++ ++ cgroups = ++ processes = {} ++ pids = {} ++ for i in range(num_cgroups): ++ cgroup_name = f'test_{i}' ++ cgroup_path = create_cgroup(cgroup_name) ++ cgroups.append((cgroup_name, cgroup_path)) ++ ++ for j in range(num_procs): ++ process = subprocess.Popen('./mem-allocate') ++ pid = process.pid ++ add_process_to_cgroup(cgroup_path, pid) ++ if cgroup_path not in processes: ++ processescgroup_path = ++ processescgroup_path.append(process) ++ if cgroup_path not in pids: ++ pidscgroup_path = ++ pidscgroup_path.append(pid) ++ ++ time.sleep(0.1) ++ try: ++ for i in range (100): ++ for cgroup_name, cgroup_path in cgroups: ++ check_memory_usage(cgroup_name, pidscgroup_path, False) ++ time.sleep(0.01) ++ ++ for cgroup_name, cgroup_path in cgroups: ++ remove_cgroup(cgroup_path, pidscgroup_path) ++ check_memory_usage(cgroup_name, pidscgroup_path, True) ++ cleanup(processescgroup_path) ++ subprocess.check_call('rmmod', 'probeCgroup') ++ ++ print('pass multiple cgroup test!') ++ except AssertionError as e: ++ print(f"Assertion failed: {e}") ++ for cgroup_name, cgroup_path in cgroups: ++ remove_cgroup(cgroup_path, pidscgroup_path) ++ cleanup(processescgroup_path) ++ subprocess.check_call('rmmod', 'probeCgroup') ++ ++if __name__ == '__main__': ++ test_multiple_cgroup(2,2) +\ No newline at end of file +diff --git a/tools/probeCgroup/testcases/4_oom_test.py b/tools/probeCgroup/testcases/4_oom_test.py +new file mode 100755 +index 000000000000..128a258c56f5 +--- /dev/null ++++ b/tools/probeCgroup/testcases/4_oom_test.py +@@ -0,0 +1,52 @@ ++#!/usr/bin/env python ++# SPDX-License-Identifier: GPL-2.0 ++# Copyright (C) Taoxy2004 <221870066@smail.nju.edu.cn> ++ ++from cgroup_utils import create_cgroup, add_process_to_cgroup, get_process_memory_usage, remove_cgroup, check_memory_usage, cleanup, get_oom_process_memory_usage ++import os ++import subprocess ++import time ++ ++def test_oom(num_procs): ++ subprocess.check_call('insmod', '../probeCgroup.ko') ++ time.sleep(1) ++ ++ cgroup_name = 'test' ++ cgroup_path = create_cgroup(cgroup_name) ++ ++ with open(f"/sys/fs/cgroup/memory/{cgroup_name}/memory.limit_in_bytes", 'w') as limit_file: ++ limit_file.write("5M") ++ with open(f"/sys/fs/cgroup/memory/{cgroup_name}/memory.swappiness", 'w') as swap_file: ++ swap_file.write("0") ++ ++ processes = ++ pids = ++ for i in range(num_procs): ++ process = subprocess.Popen('./simple-mem-allocate') ++ pid = process.pid ++ add_process_to_cgroup(cgroup_path, pid) ++ processes.append(process) ++ pids.append(pid) ++ ++ time.sleep(6) ++ ++ try: ++ for pid in pids: ++ memory_usage = get_oom_process_memory_usage(pid, cgroup_name) ++ assert memory_usage is not None, f"Memory usage(oom) not found for PID {pid}" ++ assert memory_usage > 0, f"Memory usage should be greater than zero for PID {pid}" ++ ++ remove_cgroup(cgroup_path, pids) ++ check_memory_usage(cgroup_name, pids, True) ++ cleanup(processes) ++ subprocess.check_call('rmmod', 'probeCgroup') ++ ++ print('pass oom test!') ++ except AssertionError as e: ++ print(f"Assertion failed: {e}") ++ remove_cgroup(cgroup_path, pids) ++ cleanup(processes) ++ subprocess.check_call('rmmod', 'probeCgroup') ++ ++if __name__ == '__main__': ++ test_oom(1) +\ No newline at end of file +diff --git a/tools/probeCgroup/testcases/5_multiple_threads_test.py b/tools/probeCgroup/testcases/5_multiple_threads_test.py +new file mode 100755 +index 000000000000..7e1b86dabe48 +--- /dev/null ++++ b/tools/probeCgroup/testcases/5_multiple_threads_test.py +@@ -0,0 +1,45 @@ ++#!/usr/bin/env python ++# SPDX-License-Identifier: GPL-2.0 ++# Copyright (C) Taoxy2004 <221870066@smail.nju.edu.cn> ++ ++from cgroup_utils import create_cgroup, add_process_to_cgroup, get_process_memory_usage, remove_cgroup, check_memory_usage, cleanup, check_kmem_usage ++import os ++import subprocess ++import time ++ ++def test_multiple_thread(num_procs): ++ subprocess.check_call('insmod', '../probeCgroup.ko') ++ time.sleep(1) ++ ++ cgroup_name = 'test' ++ cgroup_path = create_cgroup(cgroup_name) ++ ++ processes = ++ pids = ++ for i in range(num_procs): ++ process = subprocess.Popen('./multiple-thread-mem-allocate') ++ pid = process.pid ++ add_process_to_cgroup(cgroup_path, pid) ++ processes.append(process) ++ pids.append(pid) ++ ++ time.sleep(1) ++ try: ++ for i in range (200): ++ check_memory_usage(cgroup_name, pids, False) ++ time.sleep(0.01) ++ ++ remove_cgroup(cgroup_path, pids) ++ check_memory_usage(cgroup_name, pids, True) ++ cleanup(processes) ++ subprocess.check_call('rmmod', 'probeCgroup') ++ ++ print('pass multiple threads test!') ++ except AssertionError as e: ++ print(f"Assertion failed: {e}") ++ remove_cgroup(cgroup_path, pids) ++ cleanup(processes) ++ subprocess.check_call('rmmod', 'probeCgroup') ++ ++if __name__ == '__main__': ++ test_multiple_thread(5) +\ No newline at end of file +diff --git a/tools/probeCgroup/testcases/cgroup_utils.py b/tools/probeCgroup/testcases/cgroup_utils.py +new file mode 100644 +index 000000000000..e00c580e724e +--- /dev/null ++++ b/tools/probeCgroup/testcases/cgroup_utils.py +@@ -0,0 +1,114 @@ ++# SPDX-License-Identifier: GPL-2.0 ++# Copyright (C) Taoxy2004 <221870066@smail.nju.edu.cn> ++ ++import os ++import subprocess ++import time ++ ++def create_cgroup(cgroup_name): ++ cgroup_path = f'/sys/fs/cgroup/memory/{cgroup_name}' ++ ++ try: ++ os.makedirs(cgroup_path) ++ except FileExistsError: ++ pass ++ ++ return cgroup_path ++ ++def add_process_to_cgroup(cgroup_path, pid): ++ with open(os.path.join(cgroup_path, 'cgroup.procs'), 'w') as procs_file: ++ procs_file.write(str(pid)) ++ ++def get_process_memory_usage(pid, cgroup_name): ++ cur_name = '' ++ with open('/proc/cgroup_memory_usage_per_process', 'r') as file: ++ for line in file: ++ parts = line.strip().split() ++ if len(parts) >= 4 and parts0 == 'cgroup': ++ cur_name = parts3 ++ if len(parts) >= 3 and parts0 != 'cgroup' and cur_name == cgroup_name and parts0 != 'pid' and int(parts0) == pid: ++ return int(parts2) ++ return None ++ ++def get_process_kmem_usage(pid, cgroup_name): ++ cur_name = '' ++ with open('/proc/cgroup_memory_usage_per_process', 'r') as file: ++ for line in file: ++ parts = line.strip().split() ++ if len(parts) >= 4 and parts0 == 'cgroup': ++ cur_name = parts3 ++ if len(parts) >= 4 and parts0 != 'cgroup' and cur_name == cgroup_name and parts0 != 'pid' and int(parts0) == pid: ++ return int(parts3) ++ return None ++ ++def remove_cgroup(cgroup_path, pids): ++ for pid in pids: ++ with open('/sys/fs/cgroup/memory/cgroup.procs', 'w') as backup_file: ++ backup_file.write(str(pid)) ++ os.rmdir(cgroup_path) ++ return ++ ++def check_memory_usage(cgroup_name, pids, delete): ++ memory_sum = 0 ++ for pid in pids: ++ memory_usage = get_process_memory_usage(pid, cgroup_name) ++ if delete == False: ++ assert memory_usage is not None, f"Memory usage not found for PID {pid}" ++ assert memory_usage >= 0, f"Memory usage should be greater than zero for PID {pid}" ++ memory_sum += memory_usage ++ else: ++ assert memory_usage is None, f"Error: Memory usage should not be available for PID {pid} after deleting the cgroup." ++ if delete == False: ++ with open(f"/sys/fs/cgroup/memory/{cgroup_name}/memory.usage_in_bytes", 'r') as file: ++ content = file.readline().strip() ++ memory_read = int(content) ++ memory_sum *= 1024 ++ delta = abs(memory_read - memory_sum) ++ # print(f"read: {memory_read}") ++ # print(f"sum : {memory_sum}") ++ if (delta > max(memory_read, memory_sum) * 0.1): ++ return 1 ++ else: ++ return 0 ++ else: ++ return 0 ++ ++def check_kmem_usage(cgroup_name, pids, delete): ++ kmem_sum = 0 ++ for pid in pids: ++ kmem_usage = get_process_kmem_usage(pid, cgroup_name) ++ if delete == False: ++ assert kmem_usage is not None, f"Kmem usage not found for PID {pid}" ++ assert kmem_usage >= 0, f"Kmem usage should be greater than zero for PID {pid}" ++ kmem_sum += kmem_usage ++ else: ++ assert kmem_usage is None, f"Error: Kmem usage should not be available for PID {pid} after deleting the cgroup." ++ if delete == False: ++ with open(f"/sys/fs/cgroup/memory/{cgroup_name}/memory.kmem.usage_in_bytes", 'r') as file: ++ content = file.readline().strip() ++ kmem_read = int(content) ++ kmem_sum *= 1024 ++ delta = abs(kmem_read - kmem_sum) ++ # print(f"kmem read: {kmem_read}") ++ # print(f"kmem sum : {kmem_sum}") ++ # assert delta <= max(kmem_read, kmem_sum) * 0.2, f"Kmem read by probeCgroup is not accurate, {kmem_read}, {kmem_sum}" ++ ++def cleanup(processes): ++ for process in processes: ++ process.terminate() ++ process.wait() ++ ++def get_oom_process_memory_usage(pid, cgroup_name): ++ cur_name = '' ++ oom = False ++ with open('/proc/cgroup_memory_usage_per_process', 'r') as file: ++ for line in file: ++ parts = line.strip().split() ++ if len(parts) >= 4 and parts0 == 'cgroup': ++ cur_name = parts3 ++ oom = False ++ if len(parts) >= 1 and parts0 == 'oom:': ++ oom = True ++ if len(parts) >= 3 and parts0 != 'cgroup' and cur_name == cgroup_name and parts0 != 'pid' and int(parts0) == pid and oom == True: ++ return int(parts2) ++ return None +\ No newline at end of file +diff --git a/tools/probeCgroup/testcases/mem-allocate.c b/tools/probeCgroup/testcases/mem-allocate.c +new file mode 100644 +index 000000000000..e78e37cae61b +--- /dev/null ++++ b/tools/probeCgroup/testcases/mem-allocate.c +@@ -0,0 +1,35 @@ ++// SPDX-License-Identifier: GPL-2.0 ++/* ++ * mem-allocate.c - The program to test probeCgroup ++ * ++ * Copyright (C) Taoxy2004 <221870066@smail.nju.edu.cn> ++ */ ++ ++#include <stdio.h> ++#include <stdlib.h> ++#include <string.h> ++#include <unistd.h> ++ ++#define MB (1024 * 1024) ++ ++char *arr40; ++ ++int main(int argc, char *argv) ++{ ++ char *p; ++ int i = 0; ++ ++ while (1) { ++ for (i = 0; i < 40; i++) { ++ p = (char *)malloc(MB); ++ memset(p, 0, MB); ++ arri = p; ++ usleep(100000); ++ } ++ for (int i = 0; i < 40; i++) { ++ free(arri); ++ usleep(100000); ++ } ++ } ++ return 0; ++} +diff --git a/tools/probeCgroup/testcases/multiple-thread-mem-allocate.c b/tools/probeCgroup/testcases/multiple-thread-mem-allocate.c +new file mode 100644 +index 000000000000..55f4c068f55e +--- /dev/null ++++ b/tools/probeCgroup/testcases/multiple-thread-mem-allocate.c +@@ -0,0 +1,60 @@ ++// SPDX-License-Identifier: GPL-2.0 ++/* ++ * multiple-thread-mem-allocate.c - The program to test probeCgroup ++ * ++ * Copyright (C) Taoxy2004 <221870066@smail.nju.edu.cn> ++ */ ++ ++#include <stdio.h> ++#include <stdlib.h> ++#include <string.h> ++#include <unistd.h> ++#include <pthread.h> ++ ++#define MB (1024 * 1024) ++ ++void *memory_test(void *) ++{ ++ char *arr25; ++ char *p; ++ int i = 0; ++ int cnt = 0; ++ ++ while (1) { ++ for (i = 0; i < 20; i++) { ++ p = (char *)malloc(MB); ++ memset(p, 0, MB); ++ arri = p; ++ usleep(10000); ++ } ++ for (int i = 0; i < 20; i++) { ++ free(arri); ++ usleep(10000); ++ } ++ } ++} ++ ++int main(int argc, char *argv) ++{ ++ pthread_t threads4; ++ int rc; ++ ++ // create threads ++ for (int i = 0; i < 4; i++) { ++ rc = pthread_create(&threadsi, NULL, memory_test, NULL); ++ if (rc != 0) { ++ fprintf(stderr, "Error creating thread: %d\n", rc); ++ return 1; ++ } ++ } ++ ++ for (int i = 0; i < 4; i++) { ++ rc = pthread_join(threadsi, NULL); ++ if (rc != 0) { ++ fprintf(stderr, "Error joining thread: %d\n", rc); ++ return 1; ++ } ++ } ++ ++ return 0; ++} +diff --git a/tools/probeCgroup/testcases/run.py b/tools/probeCgroup/testcases/run.py +new file mode 100755 +index 000000000000..8ffd0ca720d8 +--- /dev/null ++++ b/tools/probeCgroup/testcases/run.py +@@ -0,0 +1,32 @@ ++#!/usr/bin/env python ++# SPDX-License-Identifier: GPL-2.0 ++# Copyright (C) Taoxy2004 <221870066@smail.nju.edu.cn> ++ ++import os ++import subprocess ++import sys ++ ++def run_tests(directory): ++ """Run all Python scripts in the given directory.""" ++ python_files = f for f in os.listdir(directory) if f.endswith('test.py') ++ python_files.sort() ++ ++ for filename in python_files: ++ try: ++ filepath = os.path.join(directory, filename) ++ ++ subprocess.check_call(sys.executable, filepath) ++ except subprocess.CalledProcessError as e: ++ print(f"Error executing {filename}:") ++ return ++ except Exception as e: ++ print(f"Error executing {filename}:") ++ print(e) ++ return ++ ++if __name__ == '__main__': ++ tests_directory = '.' ++ subprocess.check_call('gcc', 'mem-allocate.c', '-o', 'mem-allocate') ++ subprocess.check_call('gcc', 'simple-mem-allocate.c', '-o', 'simple-mem-allocate') ++ subprocess.check_call('gcc', 'multiple-thread-mem-allocate.c', '-o', 'multiple-thread-mem-allocate') ++ run_tests(tests_directory) +\ No newline at end of file +diff --git a/tools/probeCgroup/testcases/simple-mem-allocate.c b/tools/probeCgroup/testcases/simple-mem-allocate.c +new file mode 100644 +index 000000000000..16328b10ba48 +--- /dev/null ++++ b/tools/probeCgroup/testcases/simple-mem-allocate.c +@@ -0,0 +1,27 @@ ++// SPDX-License-Identifier: GPL-2.0 ++/* ++ * mem-allocate.c - The program to test probeCgroup ++ * ++ * Copyright (C) Taoxy2004 <221870066@smail.nju.edu.cn> ++ */ ++ ++#include <stdio.h> ++#include <stdlib.h> ++#include <string.h> ++#include <unistd.h> ++ ++#define MB (1024 * 1024) ++ ++int main(int argc, char *argv) ++{ ++ char *p; ++ int i = 0; ++ ++ while (1) { ++ p = (char *)malloc(MB); ++ memset(p, 0, MB); ++ sleep(1); ++ } ++ ++ return 0; ++} +-- +2.43.0 +
View file
_service:tar_scm:patch-6.6.0-6.0.0-rt20.patch
Changed
@@ -1,7 +1,7 @@ -From a8b87098c93aa630d286de4af9637a247d55a370 Mon Sep 17 00:00:00 2001 +From b000137e06f399ac756aa2374e77e724d245f19c Mon Sep 17 00:00:00 2001 From: zhangyu <zhangyu4@kylinos.cn> -Date: Fri, 17 May 2024 15:06:01 +0800 -Subject: PATCH rpi-rt +Date: Thu, 22 Aug 2024 09:32:29 +0800 +Subject: PATCH rt-patrch --- 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 | 5 +- + drivers/gpu/drm/i915/gt/intel_breadcrumbs.c | 7 +- .../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 | 1 + + kernel/sched/sched.h | 3 +- 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, 5041 insertions(+), 1542 deletions(-) + 164 files changed, 5047 insertions(+), 1540 deletions(-) create mode 100644 kernel/printk/nbcon.c diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig -index 2483ce304..52707a682 100644 +index 749935e2e..46910150c 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 a1ff693e4..adcc34042 100644 +index 7e8773a2d..9fde36fcb 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. -@@ -243,7 +271,7 @@ static void vfp_panic(char *reason, u32 inst) +@@ -240,7 +268,7 @@ static void vfp_panic(char *reason, u32 inst) /* * Process bitmask of exception conditions. */ @@ -281,7 +281,7 @@ { int si_code = 0; -@@ -251,8 +279,7 @@ static void vfp_raise_exceptions(u32 exceptions, u32 inst, u32 fpscr, struct pt_ +@@ -248,8 +276,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 @@ } /* -@@ -280,8 +307,7 @@ static void vfp_raise_exceptions(u32 exceptions, u32 inst, u32 fpscr, struct pt_ +@@ -277,8 +304,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 @@ } /* -@@ -327,6 +353,8 @@ static u32 vfp_emulate_instruction(u32 inst, u32 fpscr, struct pt_regs *regs) +@@ -324,6 +350,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); -@@ -372,8 +400,8 @@ static void VFP_bounce(u32 trigger, u32 fpexc, struct pt_regs *regs) +@@ -369,8 +397,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 @@ } /* -@@ -397,14 +425,14 @@ static void VFP_bounce(u32 trigger, u32 fpexc, struct pt_regs *regs) +@@ -394,14 +422,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 -@@ -416,7 +444,13 @@ static void VFP_bounce(u32 trigger, u32 fpexc, struct pt_regs *regs) +@@ -413,7 +441,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) -@@ -518,11 +552,9 @@ static inline void vfp_pm_init(void) { } +@@ -512,11 +546,9 @@ static inline void vfp_pm_init(void) { } */ void vfp_sync_hwstate(struct thread_info *thread) { @@ -367,7 +367,7 @@ u32 fpexc = fmrx(FPEXC); /* -@@ -534,8 +566,7 @@ void vfp_sync_hwstate(struct thread_info *thread) +@@ -527,8 +559,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. */ -@@ -695,7 +726,7 @@ static int vfp_support_entry(struct pt_regs *regs, u32 trigger) +@@ -683,7 +714,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); /* -@@ -760,6 +791,7 @@ static int vfp_support_entry(struct pt_regs *regs, u32 trigger) +@@ -748,6 +779,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))) { -@@ -774,17 +806,17 @@ static int vfp_support_entry(struct pt_regs *regs, u32 trigger) +@@ -762,17 +794,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; } -@@ -831,7 +863,7 @@ void kernel_neon_begin(void) +@@ -819,7 +851,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 -@@ -863,7 +895,7 @@ void kernel_neon_end(void) +@@ -850,7 +882,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 bb49f48de..699c3f58a 100644 +index 501ec560a..eb0d9a8e0 100644 --- a/arch/arm64/Kconfig +++ b/arch/arm64/Kconfig -@@ -98,6 +98,7 @@ config ARM64 +@@ -99,6 +99,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 e8c412969..c61e29dea 100644 +index b1e6d275c..9a8d3970d 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 a993a3716..aa7ab6207 100644 +index 958a491fb..acb9d6f2a 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig -@@ -121,6 +121,7 @@ config X86 +@@ -122,6 +122,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 -@@ -277,6 +278,7 @@ config X86 +@@ -278,6 +279,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 bd6a7857c..d45dfd10b 100644 +index 831fa4a12..5af3ebec0 100644 --- a/drivers/acpi/processor_idle.c +++ b/drivers/acpi/processor_idle.c -@@ -108,7 +108,7 @@ static const struct dmi_system_id processor_power_dmi_table = { +@@ -107,7 +107,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 @@ static bool dcn20_validate_bandwidth_internal(struct dc *dc, struct dc_state *co +@@ -2062,16 +2061,14 @@ validate_fail: out = false; validate_out: @@ -1202,7 +1202,7 @@ DC_LOGGER_INIT(dc->ctx->logger); BW_VAL_TRACE_COUNT(); -@@ -2362,7 +2358,6 @@ bool dcn21_validate_bandwidth_fp(struct dc *dc, +@@ -2362,7 +2358,6 @@ validate_fail: out = false; validate_out: @@ -1325,24 +1325,25 @@ 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 ecc990ec1..8d04b1068 100644 +index f2973cd1a..aa77f8601 100644 --- a/drivers/gpu/drm/i915/gt/intel_breadcrumbs.c +++ b/drivers/gpu/drm/i915/gt/intel_breadcrumbs.c -@@ -312,10 +312,9 @@ void __intel_breadcrumbs_park(struct intel_breadcrumbs *b) +@@ -315,7 +315,12 @@ void __intel_breadcrumbs_park(struct intel_breadcrumbs *b) + return; + /* Kick the work once more to drain the signalers, and disarm the irq */ - 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); ++ irq_work_sync(&b->irq_work); ++ while (READ_ONCE(b->irq_armed) && !atomic_read(&b->active)) { + 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 42e09f158..ac80e229f 100644 +index 2065be5a1..73d815fc5 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) @@ -1372,7 +1373,7 @@ return; /* leave this for another sibling */ } -@@ -1591,7 +1591,7 @@ static void execlists_dequeue(struct intel_engine_cs *engine) +@@ -1591,7 +1591,7 @@ done: */ sched_engine->queue_priority_hint = queue_prio(sched_engine); i915_sched_engine_reset_on_empty(sched_engine); @@ -1381,7 +1382,7 @@ /* * We can skip poking the HW if we ended up with exactly the same set -@@ -1617,13 +1617,6 @@ static void execlists_dequeue(struct intel_engine_cs *engine) +@@ -1617,13 +1617,6 @@ done: } } @@ -1596,7 +1597,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 aa5aff046..ff0662c68 100644 +index 9afd5979c..db23b3a02 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) @@ -1648,7 +1649,7 @@ serial8250_do_shutdown(port); } -@@ -788,7 +788,7 @@ static int brcmuart_handle_irq(struct uart_port *p) +@@ -807,7 +807,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)) { @@ -1657,7 +1658,7 @@ status = serial_port_in(p, UART_LSR); if ((status & UART_LSR_DR) == 0) { -@@ -813,7 +813,7 @@ static int brcmuart_handle_irq(struct uart_port *p) +@@ -832,7 +832,7 @@ static int brcmuart_handle_irq(struct uart_port *p) handled = 1; } @@ -1666,7 +1667,7 @@ if (handled) return 1; } -@@ -831,7 +831,7 @@ static enum hrtimer_restart brcmuart_hrtimer_func(struct hrtimer *t) +@@ -850,7 +850,7 @@ static enum hrtimer_restart brcmuart_hrtimer_func(struct hrtimer *t) if (priv->shutdown) return HRTIMER_NORESTART; @@ -1675,7 +1676,7 @@ status = serial_port_in(p, UART_LSR); /* -@@ -855,7 +855,7 @@ static enum hrtimer_restart brcmuart_hrtimer_func(struct hrtimer *t) +@@ -874,7 +874,7 @@ static enum hrtimer_restart brcmuart_hrtimer_func(struct hrtimer *t) status |= UART_MCR_RTS; serial_port_out(p, UART_MCR, status); } @@ -1684,7 +1685,7 @@ return HRTIMER_NORESTART; } -@@ -1154,10 +1154,10 @@ static int __maybe_unused brcmuart_suspend(struct device *dev) +@@ -1173,10 +1173,10 @@ static int __maybe_unused brcmuart_suspend(struct device *dev) * This will prevent resume from enabling RTS before the * baud rate has been restored. */ @@ -1697,7 +1698,7 @@ serial8250_suspend_port(priv->line); clk_disable_unprepare(priv->baud_mux_clk); -@@ -1196,10 +1196,10 @@ static int __maybe_unused brcmuart_resume(struct device *dev) +@@ -1215,10 +1215,10 @@ static int __maybe_unused brcmuart_resume(struct device *dev) if (priv->saved_mctrl & TIOCM_RTS) { /* Restore RTS */ @@ -1711,10 +1712,10 @@ return 0; diff --git a/drivers/tty/serial/8250/8250_core.c b/drivers/tty/serial/8250/8250_core.c -index e561f21cd..594201fbc 100644 +index 3449f8790..30434718f 100644 --- a/drivers/tty/serial/8250/8250_core.c +++ b/drivers/tty/serial/8250/8250_core.c -@@ -271,7 +271,7 @@ static void serial8250_backup_timeout(struct timer_list *t) +@@ -259,7 +259,7 @@ static void serial8250_backup_timeout(struct timer_list *t) unsigned int iir, ier = 0, lsr; unsigned long flags; @@ -1723,7 +1724,7 @@ /* * Must disable interrupts or else we risk racing with the interrupt -@@ -304,7 +304,7 @@ static void serial8250_backup_timeout(struct timer_list *t) +@@ -292,7 +292,7 @@ static void serial8250_backup_timeout(struct timer_list *t) if (up->port.irq) serial_out(up, UART_IER, ier); @@ -1732,7 +1733,7 @@ /* Standard timer interval plus 0.2s to keep the port running */ mod_timer(&up->timer, -@@ -607,6 +607,7 @@ serial8250_register_ports(struct uart_driver *drv, struct device *dev) +@@ -592,6 +592,7 @@ serial8250_register_ports(struct uart_driver *drv, struct device *dev) #ifdef CONFIG_SERIAL_8250_CONSOLE @@ -1740,7 +1741,7 @@ static void univ8250_console_write(struct console *co, const char *s, unsigned int count) { -@@ -614,6 +615,37 @@ static void univ8250_console_write(struct console *co, const char *s, +@@ -599,6 +600,37 @@ static void univ8250_console_write(struct console *co, const char *s, serial8250_console_write(up, s, count); } @@ -1778,7 +1779,7 @@ static int univ8250_console_setup(struct console *co, char *options) { -@@ -713,12 +745,20 @@ static int univ8250_console_match(struct console *co, char *name, int idx, +@@ -698,12 +730,20 @@ static int univ8250_console_match(struct console *co, char *name, int idx, static struct console univ8250_console = { .name = "ttyS", @@ -1800,7 +1801,7 @@ .index = -1, .data = &serial8250_reg, }; -@@ -1007,11 +1047,11 @@ static void serial_8250_overrun_backoff_work(struct work_struct *work) +@@ -992,11 +1032,11 @@ static void serial_8250_overrun_backoff_work(struct work_struct *work) struct uart_port *port = &up->port; unsigned long flags; @@ -1814,7 +1815,7 @@ } /** -@@ -1209,9 +1249,9 @@ void serial8250_unregister_port(int line) +@@ -1194,9 +1234,9 @@ void serial8250_unregister_port(int line) if (uart->em485) { unsigned long flags; @@ -1896,10 +1897,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 4d20f3aa2..342786064 100644 +index 27430fdd9..17be6ad24 100644 --- a/drivers/tty/serial/8250/8250_exar.c +++ b/drivers/tty/serial/8250/8250_exar.c -@@ -201,9 +201,9 @@ static int xr17v35x_startup(struct uart_port *port) +@@ -243,9 +243,9 @@ static int xr17v35x_startup(struct uart_port *port) * * Synchronize UART_IER access against the console. */ @@ -1939,7 +1940,7 @@ } diff --git a/drivers/tty/serial/8250/8250_mtk.c b/drivers/tty/serial/8250/8250_mtk.c -index 74da5676c..23457daae 100644 +index 28f9a2679..33699e86e 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) @@ -1960,7 +1961,7 @@ } static void mtk8250_rx_dma(struct uart_8250_port *up) -@@ -368,7 +368,7 @@ mtk8250_set_termios(struct uart_port *port, struct ktermios *termios, +@@ -372,7 +372,7 @@ mtk8250_set_termios(struct uart_port *port, struct ktermios *termios, * Ok, we're now changing the port state. Do it with * interrupts disabled. */ @@ -1969,7 +1970,7 @@ /* * Update the per-port timeout. -@@ -416,7 +416,7 @@ mtk8250_set_termios(struct uart_port *port, struct ktermios *termios, +@@ -420,7 +420,7 @@ mtk8250_set_termios(struct uart_port *port, struct ktermios *termios, if (uart_console(port)) up->port.cons->cflag = termios->c_cflag; @@ -1979,10 +1980,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 346167afe..db5519ce0 100644 +index 8f472a208..78fc1f17d 100644 --- a/drivers/tty/serial/8250/8250_omap.c +++ b/drivers/tty/serial/8250/8250_omap.c -@@ -401,7 +401,7 @@ static void omap_8250_set_termios(struct uart_port *port, +@@ -405,7 +405,7 @@ static void omap_8250_set_termios(struct uart_port *port, * interrupts disabled. */ pm_runtime_get_sync(port->dev); @@ -1991,7 +1992,7 @@ /* * Update the per-port timeout. -@@ -504,7 +504,7 @@ static void omap_8250_set_termios(struct uart_port *port, +@@ -508,7 +508,7 @@ static void omap_8250_set_termios(struct uart_port *port, } omap8250_restore_regs(up); @@ -2000,7 +2001,7 @@ pm_runtime_mark_last_busy(port->dev); pm_runtime_put_autosuspend(port->dev); -@@ -529,7 +529,7 @@ static void omap_8250_pm(struct uart_port *port, unsigned int state, +@@ -533,7 +533,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. */ @@ -2009,7 +2010,7 @@ serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B); efr = serial_in(up, UART_EFR); -@@ -541,7 +541,7 @@ static void omap_8250_pm(struct uart_port *port, unsigned int state, +@@ -545,7 +545,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); @@ -2018,7 +2019,7 @@ pm_runtime_mark_last_busy(port->dev); pm_runtime_put_autosuspend(port->dev); -@@ -660,7 +660,7 @@ static irqreturn_t omap8250_irq(int irq, void *dev_id) +@@ -676,7 +676,7 @@ static irqreturn_t omap8250_irq(int irq, void *dev_id) unsigned long delay; /* Synchronize UART_IER access against the console. */ @@ -2027,7 +2028,7 @@ up->ier = port->serial_in(port, UART_IER); if (up->ier & (UART_IER_RLSI | UART_IER_RDI)) { port->ops->stop_rx(port); -@@ -670,7 +670,7 @@ static irqreturn_t omap8250_irq(int irq, void *dev_id) +@@ -686,7 +686,7 @@ static irqreturn_t omap8250_irq(int irq, void *dev_id) */ cancel_delayed_work(&up->overrun_backoff); } @@ -2036,7 +2037,7 @@ delay = msecs_to_jiffies(up->overrun_backoff_time_ms); schedule_delayed_work(&up->overrun_backoff, delay); -@@ -717,10 +717,10 @@ static int omap_8250_startup(struct uart_port *port) +@@ -733,10 +733,10 @@ static int omap_8250_startup(struct uart_port *port) } /* Synchronize UART_IER access against the console. */ @@ -2049,7 +2050,7 @@ #ifdef CONFIG_PM up->capabilities |= UART_CAP_RPM; -@@ -733,9 +733,9 @@ static int omap_8250_startup(struct uart_port *port) +@@ -749,9 +749,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)) { @@ -2061,7 +2062,7 @@ } enable_irq(up->port.irq); -@@ -761,10 +761,10 @@ static void omap_8250_shutdown(struct uart_port *port) +@@ -777,10 +777,10 @@ static void omap_8250_shutdown(struct uart_port *port) serial_out(up, UART_OMAP_EFR2, 0x0); /* Synchronize UART_IER access against the console. */ @@ -2074,7 +2075,7 @@ disable_irq_nosync(up->port.irq); dev_pm_clear_wake_irq(port->dev); -@@ -789,10 +789,10 @@ static void omap_8250_throttle(struct uart_port *port) +@@ -805,10 +805,10 @@ static void omap_8250_throttle(struct uart_port *port) pm_runtime_get_sync(port->dev); @@ -2087,7 +2088,7 @@ pm_runtime_mark_last_busy(port->dev); pm_runtime_put_autosuspend(port->dev); -@@ -807,14 +807,14 @@ static void omap_8250_unthrottle(struct uart_port *port) +@@ -823,14 +823,14 @@ static void omap_8250_unthrottle(struct uart_port *port) pm_runtime_get_sync(port->dev); /* Synchronize UART_IER access against the console. */ @@ -2104,7 +2105,7 @@ pm_runtime_mark_last_busy(port->dev); pm_runtime_put_autosuspend(port->dev); -@@ -958,7 +958,7 @@ static void __dma_rx_complete(void *param) +@@ -974,7 +974,7 @@ static void __dma_rx_complete(void *param) unsigned long flags; /* Synchronize UART_IER access against the console. */ @@ -2113,7 +2114,7 @@ /* * If the tx status is not DMA_COMPLETE, then this is a delayed -@@ -967,7 +967,7 @@ static void __dma_rx_complete(void *param) +@@ -983,7 +983,7 @@ static void __dma_rx_complete(void *param) */ if (dmaengine_tx_status(dma->rxchan, dma->rx_cookie, &state) != DMA_COMPLETE) { @@ -2122,7 +2123,7 @@ return; } __dma_rx_do_complete(p); -@@ -978,7 +978,7 @@ static void __dma_rx_complete(void *param) +@@ -994,7 +994,7 @@ static void __dma_rx_complete(void *param) omap_8250_rx_dma(p); } @@ -2131,7 +2132,7 @@ } static void omap_8250_rx_dma_flush(struct uart_8250_port *p) -@@ -1083,7 +1083,7 @@ static void omap_8250_dma_tx_complete(void *param) +@@ -1099,7 +1099,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); @@ -2140,7 +2141,7 @@ dma->tx_running = 0; -@@ -1112,7 +1112,7 @@ static void omap_8250_dma_tx_complete(void *param) +@@ -1128,7 +1128,7 @@ static void omap_8250_dma_tx_complete(void *param) serial8250_set_THRI(p); } @@ -2149,7 +2150,7 @@ } static int omap_8250_tx_dma(struct uart_8250_port *p) -@@ -1278,7 +1278,7 @@ static int omap_8250_dma_handle_irq(struct uart_port *port) +@@ -1294,7 +1294,7 @@ static int omap_8250_dma_handle_irq(struct uart_port *port) return IRQ_HANDLED; } @@ -2158,7 +2159,7 @@ status = serial_port_in(port, UART_LSR); -@@ -1758,15 +1758,15 @@ static int omap8250_runtime_resume(struct device *dev) +@@ -1774,15 +1774,15 @@ static int omap8250_runtime_resume(struct device *dev) up = serial8250_get_port(priv->line); if (up && omap8250_lost_context(up)) { @@ -2209,7 +2210,7 @@ mutex_unlock(&tport->mutex); } diff --git a/drivers/tty/serial/8250/8250_port.c b/drivers/tty/serial/8250/8250_port.c -index 8099e6a26..510bb858f 100644 +index a17803da8..2d4e775cd 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) @@ -2386,7 +2387,7 @@ serial8250_rpm_put(p); return HRTIMER_NORESTART; -@@ -1627,12 +1644,12 @@ static enum hrtimer_restart serial8250_em485_handle_start_tx(struct hrtimer *t) +@@ -1624,12 +1641,12 @@ static enum hrtimer_restart serial8250_em485_handle_start_tx(struct hrtimer *t) struct uart_8250_port *p = em485->port; unsigned long flags; @@ -2401,7 +2402,7 @@ return HRTIMER_NORESTART; } -@@ -1921,7 +1938,7 @@ int serial8250_handle_irq(struct uart_port *port, unsigned int iir) +@@ -1912,7 +1929,7 @@ int serial8250_handle_irq(struct uart_port *port, unsigned int iir) if (iir & UART_IIR_NO_INT) return 0; @@ -2410,7 +2411,7 @@ status = serial_lsr_in(up); -@@ -1991,9 +2008,9 @@ static int serial8250_tx_threshold_handle_irq(struct uart_port *port) +@@ -1982,9 +1999,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); @@ -2422,7 +2423,7 @@ } iir = serial_port_in(port, UART_IIR); -@@ -2008,10 +2025,10 @@ static unsigned int serial8250_tx_empty(struct uart_port *port) +@@ -1999,10 +2016,10 @@ static unsigned int serial8250_tx_empty(struct uart_port *port) serial8250_rpm_get(up); @@ -2435,7 +2436,7 @@ serial8250_rpm_put(up); -@@ -2073,13 +2090,13 @@ static void serial8250_break_ctl(struct uart_port *port, int break_state) +@@ -2064,13 +2081,13 @@ static void serial8250_break_ctl(struct uart_port *port, int break_state) unsigned long flags; serial8250_rpm_get(up); @@ -2451,7 +2452,7 @@ serial8250_rpm_put(up); } -@@ -2214,7 +2231,7 @@ int serial8250_do_startup(struct uart_port *port) +@@ -2205,7 +2222,7 @@ int serial8250_do_startup(struct uart_port *port) * * Synchronize UART_IER access against the console. */ @@ -2460,7 +2461,7 @@ up->acr = 0; serial_port_out(port, UART_LCR, UART_LCR_CONF_MODE_B); serial_port_out(port, UART_EFR, UART_EFR_ECB); -@@ -2224,7 +2241,7 @@ int serial8250_do_startup(struct uart_port *port) +@@ -2215,7 +2232,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); @@ -2469,7 +2470,7 @@ } if (port->type == PORT_DA830) { -@@ -2233,10 +2250,10 @@ int serial8250_do_startup(struct uart_port *port) +@@ -2224,10 +2241,10 @@ int serial8250_do_startup(struct uart_port *port) * * Synchronize UART_IER access against the console. */ @@ -2482,7 +2483,7 @@ mdelay(10); /* Enable Tx, Rx and free run mode */ -@@ -2350,7 +2367,7 @@ int serial8250_do_startup(struct uart_port *port) +@@ -2341,7 +2358,7 @@ int serial8250_do_startup(struct uart_port *port) * * Synchronize UART_IER access against the console. */ @@ -2491,7 +2492,7 @@ wait_for_xmitr(up, UART_LSR_THRE); serial_port_out_sync(port, UART_IER, UART_IER_THRI); -@@ -2362,7 +2379,7 @@ int serial8250_do_startup(struct uart_port *port) +@@ -2353,7 +2370,7 @@ int serial8250_do_startup(struct uart_port *port) iir = serial_port_in(port, UART_IIR); serial_port_out(port, UART_IER, 0); @@ -2500,7 +2501,7 @@ if (port->irqflags & IRQF_SHARED) enable_irq(port->irq); -@@ -2385,7 +2402,7 @@ int serial8250_do_startup(struct uart_port *port) +@@ -2376,7 +2393,7 @@ int serial8250_do_startup(struct uart_port *port) */ serial_port_out(port, UART_LCR, UART_LCR_WLEN8); @@ -2509,7 +2510,7 @@ if (up->port.flags & UPF_FOURPORT) { if (!up->port.irq) up->port.mctrl |= TIOCM_OUT1; -@@ -2431,7 +2448,7 @@ int serial8250_do_startup(struct uart_port *port) +@@ -2422,7 +2439,7 @@ int serial8250_do_startup(struct uart_port *port) } dont_test_tx_en: @@ -2518,7 +2519,7 @@ /* * Clear the interrupt registers again for luck, and clear the -@@ -2502,17 +2519,17 @@ void serial8250_do_shutdown(struct uart_port *port) +@@ -2493,17 +2510,17 @@ void serial8250_do_shutdown(struct uart_port *port) * * Synchronize UART_IER access against the console. */ @@ -2539,7 +2540,7 @@ if (port->flags & UPF_FOURPORT) { /* reset interrupts on the AST Fourport board */ inb((port->iobase & 0xfe0) | 0x1f); -@@ -2521,7 +2538,7 @@ void serial8250_do_shutdown(struct uart_port *port) +@@ -2512,7 +2529,7 @@ void serial8250_do_shutdown(struct uart_port *port) port->mctrl &= ~TIOCM_OUT2; serial8250_set_mctrl(port, port->mctrl); @@ -2548,7 +2549,7 @@ /* * Disable break condition and FIFOs -@@ -2757,14 +2774,14 @@ void serial8250_update_uartclk(struct uart_port *port, unsigned int uartclk) +@@ -2748,14 +2765,14 @@ void serial8250_update_uartclk(struct uart_port *port, unsigned int uartclk) quot = serial8250_get_divisor(port, baud, &frac); serial8250_rpm_get(up); @@ -2565,7 +2566,7 @@ serial8250_rpm_put(up); out_unlock: -@@ -2801,7 +2818,7 @@ serial8250_do_set_termios(struct uart_port *port, struct ktermios *termios, +@@ -2792,7 +2809,7 @@ serial8250_do_set_termios(struct uart_port *port, struct ktermios *termios, * Synchronize UART_IER access against the console. */ serial8250_rpm_get(up); @@ -2574,7 +2575,7 @@ up->lcr = cval; /* Save computed LCR */ -@@ -2904,7 +2921,7 @@ serial8250_do_set_termios(struct uart_port *port, struct ktermios *termios, +@@ -2895,7 +2912,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); @@ -2583,7 +2584,7 @@ serial8250_rpm_put(up); /* Don't rewrite B0 */ -@@ -2927,15 +2944,15 @@ void serial8250_do_set_ldisc(struct uart_port *port, struct ktermios *termios) +@@ -2918,15 +2935,15 @@ void serial8250_do_set_ldisc(struct uart_port *port, struct ktermios *termios) { if (termios->c_line == N_PPS) { port->flags |= UPF_HARDPPS_CD; @@ -2603,7 +2604,7 @@ } } } -@@ -3331,6 +3348,11 @@ static void serial8250_console_putchar(struct uart_port *port, unsigned char ch) +@@ -3322,6 +3339,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); @@ -2615,7 +2616,7 @@ } /* -@@ -3359,6 +3381,7 @@ static void serial8250_console_restore(struct uart_8250_port *up) +@@ -3350,6 +3372,7 @@ static void serial8250_console_restore(struct uart_8250_port *up) serial8250_out_MCR(up, up->mcr | UART_MCR_DTR | UART_MCR_RTS); } @@ -2623,7 +2624,7 @@ /* * Print a string to the serial port using the device FIFO * -@@ -3409,15 +3432,15 @@ void serial8250_console_write(struct uart_8250_port *up, const char *s, +@@ -3400,15 +3423,15 @@ void serial8250_console_write(struct uart_8250_port *up, const char *s, touch_nmi_watchdog(); if (oops_in_progress) @@ -2642,7 +2643,7 @@ /* check scratch reg to see if port powered off during system sleep */ if (up->canary && (up->canary != serial_port_in(port, UART_SCR))) { -@@ -3481,8 +3504,137 @@ void serial8250_console_write(struct uart_8250_port *up, const char *s, +@@ -3472,8 +3495,137 @@ void serial8250_console_write(struct uart_8250_port *up, const char *s, serial8250_modem_status(up); if (locked) @@ -2781,7 +2782,7 @@ static unsigned int probe_baud(struct uart_port *port) { -@@ -3501,6 +3653,7 @@ static unsigned int probe_baud(struct uart_port *port) +@@ -3492,6 +3644,7 @@ static unsigned int probe_baud(struct uart_port *port) int serial8250_console_setup(struct uart_port *port, char *options, bool probe) { @@ -2789,7 +2790,7 @@ int baud = 9600; int bits = 8; int parity = 'n'; -@@ -3510,6 +3663,8 @@ int serial8250_console_setup(struct uart_port *port, char *options, bool probe) +@@ -3501,6 +3654,8 @@ int serial8250_console_setup(struct uart_port *port, char *options, bool probe) if (!port->iobase && !port->membase) return -ENODEV; @@ -3052,10 +3053,10 @@ } } diff --git a/drivers/tty/serial/amba-pl011.c b/drivers/tty/serial/amba-pl011.c -index a5717655b..901928dba 100644 +index 362bbcdec..9cd660edb 100644 --- a/drivers/tty/serial/amba-pl011.c +++ b/drivers/tty/serial/amba-pl011.c -@@ -361,9 +361,9 @@ static int pl011_fifo_to_tty(struct uart_amba_port *uap) +@@ -347,9 +347,9 @@ static int pl011_fifo_to_tty(struct uart_amba_port *uap) flag = TTY_FRAME; } @@ -3067,7 +3068,7 @@ if (!sysrq) uart_insert_char(&uap->port, ch, UART011_DR_OE, ch, flag); -@@ -558,7 +558,7 @@ static void pl011_dma_tx_callback(void *data) +@@ -544,7 +544,7 @@ static void pl011_dma_tx_callback(void *data) unsigned long flags; u16 dmacr; @@ -3076,7 +3077,7 @@ if (uap->dmatx.queued) dma_unmap_single(dmatx->chan->device->dev, dmatx->dma, dmatx->len, DMA_TO_DEVICE); -@@ -579,7 +579,7 @@ static void pl011_dma_tx_callback(void *data) +@@ -565,7 +565,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; @@ -3085,7 +3086,7 @@ return; } -@@ -590,7 +590,7 @@ static void pl011_dma_tx_callback(void *data) +@@ -576,7 +576,7 @@ static void pl011_dma_tx_callback(void *data) */ pl011_start_tx_pio(uap); @@ -3094,7 +3095,7 @@ } /* -@@ -1018,7 +1018,7 @@ static void pl011_dma_rx_callback(void *data) +@@ -1004,7 +1004,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. */ @@ -3103,7 +3104,7 @@ /* * Rx data can be taken by the UART interrupts during * the DMA irq handler. So we check the residue here. -@@ -1034,7 +1034,7 @@ static void pl011_dma_rx_callback(void *data) +@@ -1020,7 +1020,7 @@ static void pl011_dma_rx_callback(void *data) ret = pl011_dma_rx_trigger_dma(uap); pl011_dma_rx_chars(uap, pending, lastbuf, false); @@ -3112,7 +3113,7 @@ /* * Do this check after we picked the DMA chars so we don't * get some IRQ immediately from RX. -@@ -1100,11 +1100,11 @@ static void pl011_dma_rx_poll(struct timer_list *t) +@@ -1086,11 +1086,11 @@ static void pl011_dma_rx_poll(struct timer_list *t) if (jiffies_to_msecs(jiffies - dmarx->last_jiffies) > uap->dmarx.poll_timeout) { @@ -3126,7 +3127,7 @@ uap->dmarx.running = false; dmaengine_terminate_all(rxchan); -@@ -1200,10 +1200,10 @@ static void pl011_dma_shutdown(struct uart_amba_port *uap) +@@ -1186,10 +1186,10 @@ static void pl011_dma_shutdown(struct uart_amba_port *uap) while (pl011_read(uap, REG_FR) & uap->vendor->fr_busy) cpu_relax(); @@ -3139,7 +3140,7 @@ if (uap->using_tx_dma) { /* In theory, this should already be done by pl011_dma_flush_buffer */ -@@ -1414,9 +1414,9 @@ static void pl011_throttle_rx(struct uart_port *port) +@@ -1400,9 +1400,9 @@ static void pl011_throttle_rx(struct uart_port *port) { unsigned long flags; @@ -3151,7 +3152,7 @@ } static void pl011_enable_ms(struct uart_port *port) -@@ -1434,7 +1434,7 @@ __acquires(&uap->port.lock) +@@ -1420,7 +1420,7 @@ __acquires(&uap->port.lock) { pl011_fifo_to_tty(uap); @@ -3160,7 +3161,7 @@ tty_flip_buffer_push(&uap->port.state->port); /* * If we were temporarily out of DMA mode for a while, -@@ -1459,7 +1459,7 @@ __acquires(&uap->port.lock) +@@ -1445,7 +1445,7 @@ __acquires(&uap->port.lock) #endif } } @@ -3169,7 +3170,7 @@ } static bool pl011_tx_char(struct uart_amba_port *uap, unsigned char c, -@@ -1570,7 +1570,7 @@ static irqreturn_t pl011_int(int irq, void *dev_id) +@@ -1551,7 +1551,7 @@ static irqreturn_t pl011_int(int irq, void *dev_id) unsigned int status, pass_counter = AMBA_ISR_PASS_LIMIT; int handled = 0; @@ -3178,7 +3179,7 @@ status = pl011_read(uap, REG_RIS) & uap->im; if (status) { do { -@@ -1600,7 +1600,7 @@ static irqreturn_t pl011_int(int irq, void *dev_id) +@@ -1581,7 +1581,7 @@ static irqreturn_t pl011_int(int irq, void *dev_id) handled = 1; } @@ -3187,7 +3188,7 @@ return IRQ_RETVAL(handled); } -@@ -1672,14 +1672,14 @@ static void pl011_break_ctl(struct uart_port *port, int break_state) +@@ -1653,14 +1653,14 @@ static void pl011_break_ctl(struct uart_port *port, int break_state) unsigned long flags; unsigned int lcr_h; @@ -3204,7 +3205,7 @@ } #ifdef CONFIG_CONSOLE_POLL -@@ -1818,7 +1818,7 @@ static void pl011_enable_interrupts(struct uart_amba_port *uap) +@@ -1799,7 +1799,7 @@ static void pl011_enable_interrupts(struct uart_amba_port *uap) unsigned long flags; unsigned int i; @@ -3213,7 +3214,7 @@ /* Clear out any spuriously appearing RX interrupts */ pl011_write(UART011_RTIS | UART011_RXIS, uap, REG_ICR); -@@ -1840,7 +1840,7 @@ static void pl011_enable_interrupts(struct uart_amba_port *uap) +@@ -1821,7 +1821,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); @@ -3222,7 +3223,7 @@ } static void pl011_unthrottle_rx(struct uart_port *port) -@@ -1848,7 +1848,7 @@ static void pl011_unthrottle_rx(struct uart_port *port) +@@ -1829,7 +1829,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; @@ -3231,7 +3232,7 @@ uap->im = UART011_RTIM; if (!pl011_dma_rx_running(uap)) -@@ -1856,7 +1856,7 @@ static void pl011_unthrottle_rx(struct uart_port *port) +@@ -1837,7 +1837,7 @@ static void pl011_unthrottle_rx(struct uart_port *port) pl011_write(uap->im, uap, REG_IMSC); @@ -3240,7 +3241,7 @@ } static int pl011_startup(struct uart_port *port) -@@ -1876,7 +1876,7 @@ static int pl011_startup(struct uart_port *port) +@@ -1857,7 +1857,7 @@ static int pl011_startup(struct uart_port *port) pl011_write(uap->vendor->ifls, uap, REG_IFLS); @@ -3249,7 +3250,7 @@ cr = pl011_read(uap, REG_CR); cr &= UART011_CR_RTS | UART011_CR_DTR; -@@ -1887,7 +1887,7 @@ static int pl011_startup(struct uart_port *port) +@@ -1868,7 +1868,7 @@ static int pl011_startup(struct uart_port *port) pl011_write(cr, uap, REG_CR); @@ -3258,7 +3259,7 @@ /* * initialise the old status of the modem signals -@@ -1948,12 +1948,12 @@ static void pl011_disable_uart(struct uart_amba_port *uap) +@@ -1929,12 +1929,12 @@ static void pl011_disable_uart(struct uart_amba_port *uap) unsigned int cr; uap->port.status &= ~(UPSTAT_AUTOCTS | UPSTAT_AUTORTS); @@ -3273,7 +3274,7 @@ /* * disable break condition and fifos -@@ -1965,14 +1965,14 @@ static void pl011_disable_uart(struct uart_amba_port *uap) +@@ -1946,14 +1946,14 @@ static void pl011_disable_uart(struct uart_amba_port *uap) static void pl011_disable_interrupts(struct uart_amba_port *uap) { @@ -3290,7 +3291,7 @@ } static void pl011_shutdown(struct uart_port *port) -@@ -2117,7 +2117,7 @@ pl011_set_termios(struct uart_port *port, struct ktermios *termios, +@@ -2098,7 +2098,7 @@ pl011_set_termios(struct uart_port *port, struct ktermios *termios, bits = tty_get_frame_size(termios->c_cflag); @@ -3299,7 +3300,7 @@ /* * Update the per-port timeout. -@@ -2191,7 +2191,7 @@ pl011_set_termios(struct uart_port *port, struct ktermios *termios, +@@ -2172,7 +2172,7 @@ pl011_set_termios(struct uart_port *port, struct ktermios *termios, old_cr |= UART011_CR_RXE; pl011_write(old_cr, uap, REG_CR); @@ -3308,7 +3309,7 @@ } static void -@@ -2209,10 +2209,10 @@ sbsa_uart_set_termios(struct uart_port *port, struct ktermios *termios, +@@ -2190,10 +2190,10 @@ sbsa_uart_set_termios(struct uart_port *port, struct ktermios *termios, termios->c_cflag &= ~(CMSPAR | CRTSCTS); termios->c_cflag |= CS8 | CLOCAL; @@ -3321,7 +3322,7 @@ } static const char *pl011_type(struct uart_port *port) -@@ -2347,13 +2347,10 @@ pl011_console_write(struct console *co, const char *s, unsigned int count) +@@ -2328,13 +2328,10 @@ pl011_console_write(struct console *co, const char *s, unsigned int count) clk_enable(uap->clk); @@ -3338,7 +3339,7 @@ /* * First save the CR then disable the interrupts -@@ -2379,8 +2376,7 @@ pl011_console_write(struct console *co, const char *s, unsigned int count) +@@ -2360,8 +2357,7 @@ pl011_console_write(struct console *co, const char *s, unsigned int count) pl011_write(old_cr, uap, REG_CR); if (locked) @@ -3612,7 +3613,7 @@ port->read_status_mask = ATMEL_US_OVRE; if (termios->c_iflag & INPCK) -@@ -2377,22 +2377,22 @@ static void atmel_set_termios(struct uart_port *port, +@@ -2377,22 +2377,22 @@ gclk_fail: else atmel_disable_ms(port); @@ -3641,7 +3642,7 @@ } } diff --git a/drivers/tty/serial/bcm63xx_uart.c b/drivers/tty/serial/bcm63xx_uart.c -index 0dd8cceb8..4a08fd5ee 100644 +index 44c27e5ce..b104c36ce 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) @@ -3662,7 +3663,7 @@ } /* -@@ -332,7 +332,7 @@ static irqreturn_t bcm_uart_interrupt(int irq, void *dev_id) +@@ -335,7 +335,7 @@ static irqreturn_t bcm_uart_interrupt(int irq, void *dev_id) unsigned int irqstat; port = dev_id; @@ -3671,7 +3672,7 @@ irqstat = bcm_uart_readl(port, UART_IR_REG); if (irqstat & UART_RX_INT_STAT) -@@ -353,7 +353,7 @@ static irqreturn_t bcm_uart_interrupt(int irq, void *dev_id) +@@ -356,7 +356,7 @@ static irqreturn_t bcm_uart_interrupt(int irq, void *dev_id) estat & UART_EXTINP_DCD_MASK); } @@ -3680,7 +3681,7 @@ return IRQ_HANDLED; } -@@ -451,9 +451,9 @@ static void bcm_uart_shutdown(struct uart_port *port) +@@ -454,9 +454,9 @@ static void bcm_uart_shutdown(struct uart_port *port) { unsigned long flags; @@ -3692,7 +3693,7 @@ bcm_uart_disable(port); bcm_uart_flush(port); -@@ -470,7 +470,7 @@ static void bcm_uart_set_termios(struct uart_port *port, struct ktermios *new, +@@ -473,7 +473,7 @@ static void bcm_uart_set_termios(struct uart_port *port, struct ktermios *new, unsigned long flags; int tries; @@ -3701,7 +3702,7 @@ /* Drain the hot tub fully before we power it off for the winter. */ for (tries = 3; !bcm_uart_tx_empty(port) && tries; tries--) -@@ -546,7 +546,7 @@ static void bcm_uart_set_termios(struct uart_port *port, struct ktermios *new, +@@ -549,7 +549,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); @@ -3710,7 +3711,7 @@ } /* -@@ -712,9 +712,9 @@ static void bcm_console_write(struct console *co, const char *s, +@@ -715,9 +715,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) { @@ -3722,7 +3723,7 @@ locked = 1; } -@@ -725,7 +725,7 @@ static void bcm_console_write(struct console *co, const char *s, +@@ -728,7 +728,7 @@ static void bcm_console_write(struct console *co, const char *s, wait_for_xmitr(port); if (locked) @@ -4170,7 +4171,7 @@ while (!(readb(sport->port.membase + UARTSFIFO) & UARTSFIFO_RXEMPT)) { flg = TTY_NORMAL; -@@ -956,9 +956,9 @@ static void lpuart_rxint(struct lpuart_port *sport) +@@ -956,9 +956,9 @@ out: static void lpuart32_txint(struct lpuart_port *sport) { @@ -4206,7 +4207,7 @@ return; } -@@ -1244,7 +1244,7 @@ static void lpuart_copy_rx_to_tty(struct lpuart_port *sport) +@@ -1244,7 +1244,7 @@ exit: dma_sync_sg_for_device(chan->device->dev, &sport->rx_sgl, 1, DMA_FROM_DEVICE); @@ -4542,10 +4543,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 c77831e91..66420a992 100644 +index a5d0df2ba..267c9af4b 100644 --- a/drivers/tty/serial/imx.c +++ b/drivers/tty/serial/imx.c -@@ -584,7 +584,7 @@ static void imx_uart_dma_tx_callback(void *data) +@@ -586,7 +586,7 @@ static void imx_uart_dma_tx_callback(void *data) unsigned long flags; u32 ucr1; @@ -4554,7 +4555,7 @@ dma_unmap_sg(sport->port.dev, sgl, sport->dma_tx_nents, DMA_TO_DEVICE); -@@ -609,7 +609,7 @@ static void imx_uart_dma_tx_callback(void *data) +@@ -611,7 +611,7 @@ static void imx_uart_dma_tx_callback(void *data) imx_uart_writel(sport, ucr4, UCR4); } @@ -4563,7 +4564,7 @@ } /* called with port.lock taken and irqs off */ -@@ -780,11 +780,11 @@ static irqreturn_t imx_uart_rtsint(int irq, void *dev_id) +@@ -782,11 +782,11 @@ static irqreturn_t imx_uart_rtsint(int irq, void *dev_id) struct imx_port *sport = dev_id; irqreturn_t ret; @@ -4577,7 +4578,7 @@ return ret; } -@@ -793,9 +793,9 @@ static irqreturn_t imx_uart_txint(int irq, void *dev_id) +@@ -795,9 +795,9 @@ static irqreturn_t imx_uart_txint(int irq, void *dev_id) { struct imx_port *sport = dev_id; @@ -4589,7 +4590,7 @@ return IRQ_HANDLED; } -@@ -909,11 +909,11 @@ static irqreturn_t imx_uart_rxint(int irq, void *dev_id) +@@ -911,11 +911,11 @@ static irqreturn_t imx_uart_rxint(int irq, void *dev_id) struct imx_port *sport = dev_id; irqreturn_t ret; @@ -4603,7 +4604,7 @@ return ret; } -@@ -976,7 +976,7 @@ static irqreturn_t imx_uart_int(int irq, void *dev_id) +@@ -978,7 +978,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; @@ -4612,7 +4613,7 @@ usr1 = imx_uart_readl(sport, USR1); usr2 = imx_uart_readl(sport, USR2); -@@ -1046,7 +1046,7 @@ static irqreturn_t imx_uart_int(int irq, void *dev_id) +@@ -1048,7 +1048,7 @@ static irqreturn_t imx_uart_int(int irq, void *dev_id) ret = IRQ_HANDLED; } @@ -4621,7 +4622,7 @@ return ret; } -@@ -1129,7 +1129,7 @@ static void imx_uart_break_ctl(struct uart_port *port, int break_state) +@@ -1131,7 +1131,7 @@ static void imx_uart_break_ctl(struct uart_port *port, int break_state) unsigned long flags; u32 ucr1; @@ -4630,7 +4631,7 @@ ucr1 = imx_uart_readl(sport, UCR1) & ~UCR1_SNDBRK; -@@ -1138,7 +1138,7 @@ static void imx_uart_break_ctl(struct uart_port *port, int break_state) +@@ -1140,7 +1140,7 @@ static void imx_uart_break_ctl(struct uart_port *port, int break_state) imx_uart_writel(sport, ucr1, UCR1); @@ -4639,7 +4640,7 @@ } /* -@@ -1151,9 +1151,9 @@ static void imx_uart_timeout(struct timer_list *t) +@@ -1153,9 +1153,9 @@ static void imx_uart_timeout(struct timer_list *t) unsigned long flags; if (sport->port.state) { @@ -4651,7 +4652,7 @@ mod_timer(&sport->timer, jiffies + MCTRL_TIMEOUT); } -@@ -1183,9 +1183,9 @@ static void imx_uart_dma_rx_callback(void *data) +@@ -1185,9 +1185,9 @@ static void imx_uart_dma_rx_callback(void *data) status = dmaengine_tx_status(chan, sport->rx_cookie, &state); if (status == DMA_ERROR) { @@ -4663,7 +4664,7 @@ return; } -@@ -1214,9 +1214,9 @@ static void imx_uart_dma_rx_callback(void *data) +@@ -1216,9 +1216,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 */ @@ -4675,7 +4676,7 @@ if (!(sport->port.ignore_status_mask & URXD_DUMMY_READ)) { -@@ -1474,7 +1474,7 @@ static int imx_uart_startup(struct uart_port *port) +@@ -1476,7 +1476,7 @@ static int imx_uart_startup(struct uart_port *port) if (!uart_console(port) && imx_uart_dma_init(sport) == 0) dma_is_inited = 1; @@ -4684,7 +4685,7 @@ /* Reset fifo's and state machines */ imx_uart_soft_reset(sport); -@@ -1547,7 +1547,7 @@ static int imx_uart_startup(struct uart_port *port) +@@ -1549,7 +1549,7 @@ static int imx_uart_startup(struct uart_port *port) imx_uart_disable_loopback_rs485(sport); @@ -4693,7 +4694,7 @@ return 0; } -@@ -1572,21 +1572,21 @@ static void imx_uart_shutdown(struct uart_port *port) +@@ -1574,21 +1574,21 @@ static void imx_uart_shutdown(struct uart_port *port) sport->dma_is_rxing = 0; } @@ -4719,7 +4720,7 @@ /* * Stop our timer. -@@ -1597,7 +1597,7 @@ static void imx_uart_shutdown(struct uart_port *port) +@@ -1599,7 +1599,7 @@ static void imx_uart_shutdown(struct uart_port *port) * Disable all interrupts, port and break condition. */ @@ -4728,7 +4729,7 @@ ucr1 = imx_uart_readl(sport, UCR1); ucr1 &= ~(UCR1_TRDYEN | UCR1_RRDYEN | UCR1_RTSDEN | UCR1_RXDMAEN | -@@ -1619,7 +1619,7 @@ static void imx_uart_shutdown(struct uart_port *port) +@@ -1621,7 +1621,7 @@ static void imx_uart_shutdown(struct uart_port *port) ucr4 &= ~UCR4_TCEN; imx_uart_writel(sport, ucr4, UCR4); @@ -4737,7 +4738,7 @@ clk_disable_unprepare(sport->clk_per); clk_disable_unprepare(sport->clk_ipg); -@@ -1682,7 +1682,7 @@ imx_uart_set_termios(struct uart_port *port, struct ktermios *termios, +@@ -1684,7 +1684,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); @@ -4746,7 +4747,7 @@ /* * Read current UCR2 and save it for future use, then clear all the bits -@@ -1810,7 +1810,7 @@ imx_uart_set_termios(struct uart_port *port, struct ktermios *termios, +@@ -1812,7 +1812,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); @@ -4755,7 +4756,7 @@ } static const char *imx_uart_type(struct uart_port *port) -@@ -1872,7 +1872,7 @@ static int imx_uart_poll_init(struct uart_port *port) +@@ -1874,7 +1874,7 @@ static int imx_uart_poll_init(struct uart_port *port) imx_uart_setup_ufcr(sport, TXTL_DEFAULT, RXTL_DEFAULT); @@ -4764,7 +4765,7 @@ /* * Be careful about the order of enabling bits here. First enable the -@@ -1900,7 +1900,7 @@ static int imx_uart_poll_init(struct uart_port *port) +@@ -1902,7 +1902,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); @@ -4773,7 +4774,7 @@ return 0; } -@@ -2015,9 +2015,9 @@ imx_uart_console_write(struct console *co, const char *s, unsigned int count) +@@ -2022,9 +2022,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) @@ -4785,7 +4786,7 @@ /* * First, save UCR1/2/3 and then disable interrupts -@@ -2045,7 +2045,7 @@ imx_uart_console_write(struct console *co, const char *s, unsigned int count) +@@ -2052,7 +2052,7 @@ imx_uart_console_write(struct console *co, const char *s, unsigned int count) imx_uart_ucrs_restore(sport, &old_ucr); if (locked) @@ -4794,7 +4795,7 @@ } /* -@@ -2203,10 +2203,10 @@ static enum hrtimer_restart imx_trigger_start_tx(struct hrtimer *t) +@@ -2210,10 +2210,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; @@ -4807,7 +4808,7 @@ return HRTIMER_NORESTART; } -@@ -2216,10 +2216,10 @@ static enum hrtimer_restart imx_trigger_stop_tx(struct hrtimer *t) +@@ -2223,10 +2223,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; @@ -4820,7 +4821,7 @@ return HRTIMER_NORESTART; } -@@ -2486,9 +2486,9 @@ static void imx_uart_restore_context(struct imx_port *sport) +@@ -2493,9 +2493,9 @@ static void imx_uart_restore_context(struct imx_port *sport) { unsigned long flags; @@ -4832,7 +4833,7 @@ return; } -@@ -2503,7 +2503,7 @@ static void imx_uart_restore_context(struct imx_port *sport) +@@ -2510,7 +2510,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; @@ -4841,7 +4842,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) +@@ -2518,7 +2518,7 @@ static void imx_uart_save_context(struct imx_port *sport) unsigned long flags; /* Save necessary regs */ @@ -4850,7 +4851,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); -@@ -2523,7 +2523,7 @@ static void imx_uart_save_context(struct imx_port *sport) +@@ -2530,7 +2530,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; @@ -5283,7 +5284,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 69da24565..73910c54d 100644 +index 99225f1e0..faccd772c 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) @@ -5364,7 +5365,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 1666ce012..91b15243f 100644 +index aea29b4e6..ee40af20a 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) @@ -7320,10 +7321,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 eea662212..2aa0b7e5e 100644 +index 7a9924d9b..be9ae5cdd 100644 --- a/drivers/tty/serial/sc16is7xx.c +++ b/drivers/tty/serial/sc16is7xx.c -@@ -806,6 +806,7 @@ static void sc16is7xx_tx_proc(struct kthread_work *ws) +@@ -817,6 +817,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); @@ -7331,7 +7332,7 @@ if ((port->rs485.flags & SER_RS485_ENABLED) && (port->rs485.delay_rts_before_send > 0)) -@@ -814,6 +815,10 @@ static void sc16is7xx_tx_proc(struct kthread_work *ws) +@@ -825,6 +826,10 @@ static void sc16is7xx_tx_proc(struct kthread_work *ws) mutex_lock(&one->efr_lock); sc16is7xx_handle_tx(port); mutex_unlock(&one->efr_lock); @@ -7819,7 +7820,7 @@ return IRQ_HANDLED; } diff --git a/drivers/tty/serial/serial_port.c b/drivers/tty/serial/serial_port.c -index d622a9297..7d51e66ec 100644 +index ed3953bd0..92a57b243 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) @@ -7938,7 +7939,7 @@ static void diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh-sci.c -index a560b729f..84ab434c9 100644 +index f793624fd..2559c9781 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) @@ -7959,7 +7960,7 @@ } /* Locking: called with port lock held */ -@@ -1320,7 +1320,7 @@ static void sci_dma_rx_complete(void *arg) +@@ -1325,7 +1325,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); @@ -7968,7 +7969,7 @@ active = sci_dma_rx_find_active(s); if (active >= 0) -@@ -1347,20 +1347,20 @@ static void sci_dma_rx_complete(void *arg) +@@ -1352,20 +1352,20 @@ static void sci_dma_rx_complete(void *arg) dma_async_issue_pending(chan); @@ -7993,7 +7994,7 @@ } static void sci_dma_tx_release(struct sci_port *s) -@@ -1409,13 +1409,13 @@ static int sci_dma_rx_submit(struct sci_port *s, bool port_lock_held) +@@ -1414,13 +1414,13 @@ static int sci_dma_rx_submit(struct sci_port *s, bool port_lock_held) fail: /* Switch to PIO */ if (!port_lock_held) @@ -8009,7 +8010,7 @@ return -EAGAIN; } -@@ -1437,14 +1437,14 @@ static void sci_dma_tx_work_fn(struct work_struct *work) +@@ -1442,14 +1442,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. */ @@ -8026,7 +8027,7 @@ return; } -@@ -1452,7 +1452,7 @@ static void sci_dma_tx_work_fn(struct work_struct *work) +@@ -1457,7 +1457,7 @@ static void sci_dma_tx_work_fn(struct work_struct *work) DMA_MEM_TO_DEV, DMA_PREP_INTERRUPT | DMA_CTRL_ACK); if (!desc) { @@ -8035,7 +8036,7 @@ dev_warn(port->dev, "Failed preparing Tx DMA descriptor\n"); goto switch_to_pio; } -@@ -1464,12 +1464,12 @@ static void sci_dma_tx_work_fn(struct work_struct *work) +@@ -1469,12 +1469,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)) { @@ -8050,7 +8051,7 @@ dev_dbg(port->dev, "%s: %p: %d...%d, cookie %d\n", __func__, xmit->buf, tail, head, s->cookie_tx); -@@ -1477,10 +1477,10 @@ static void sci_dma_tx_work_fn(struct work_struct *work) +@@ -1482,10 +1482,10 @@ static void sci_dma_tx_work_fn(struct work_struct *work) return; switch_to_pio: @@ -8063,7 +8064,7 @@ return; } -@@ -1497,17 +1497,17 @@ static enum hrtimer_restart sci_dma_rx_timer_fn(struct hrtimer *t) +@@ -1502,17 +1502,17 @@ static enum hrtimer_restart sci_dma_rx_timer_fn(struct hrtimer *t) dev_dbg(port->dev, "DMA Rx timed out\n"); @@ -8084,7 +8085,7 @@ dev_dbg(port->dev, "Cookie %d #%d has already completed\n", s->active_rx, active); -@@ -1525,7 +1525,7 @@ static enum hrtimer_restart sci_dma_rx_timer_fn(struct hrtimer *t) +@@ -1530,7 +1530,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) { @@ -8093,7 +8094,7 @@ dev_dbg(port->dev, "Transaction complete after DMA engine was stopped"); return HRTIMER_NORESTART; } -@@ -1546,7 +1546,7 @@ static enum hrtimer_restart sci_dma_rx_timer_fn(struct hrtimer *t) +@@ -1551,7 +1551,7 @@ static enum hrtimer_restart sci_dma_rx_timer_fn(struct hrtimer *t) sci_dma_rx_reenable_irq(s); @@ -8102,7 +8103,7 @@ return HRTIMER_NORESTART; } -@@ -1770,9 +1770,9 @@ static irqreturn_t sci_tx_interrupt(int irq, void *ptr) +@@ -1775,9 +1775,9 @@ static irqreturn_t sci_tx_interrupt(int irq, void *ptr) struct uart_port *port = ptr; unsigned long flags; @@ -8114,7 +8115,7 @@ return IRQ_HANDLED; } -@@ -1786,11 +1786,11 @@ static irqreturn_t sci_tx_end_interrupt(int irq, void *ptr) +@@ -1791,11 +1791,11 @@ static irqreturn_t sci_tx_end_interrupt(int irq, void *ptr) if (port->type != PORT_SCI) return sci_tx_interrupt(irq, ptr); @@ -8128,7 +8129,7 @@ return IRQ_HANDLED; } -@@ -2187,7 +2187,7 @@ static void sci_break_ctl(struct uart_port *port, int break_state) +@@ -2192,7 +2192,7 @@ static void sci_break_ctl(struct uart_port *port, int break_state) return; } @@ -8137,7 +8138,7 @@ scsptr = serial_port_in(port, SCSPTR); scscr = serial_port_in(port, SCSCR); -@@ -2201,7 +2201,7 @@ static void sci_break_ctl(struct uart_port *port, int break_state) +@@ -2206,7 +2206,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); @@ -8146,7 +8147,7 @@ } static int sci_startup(struct uart_port *port) -@@ -2233,7 +2233,7 @@ static void sci_shutdown(struct uart_port *port) +@@ -2238,7 +2238,7 @@ static void sci_shutdown(struct uart_port *port) s->autorts = false; mctrl_gpio_disable_ms(to_sci_port(port)->gpios); @@ -8155,7 +8156,7 @@ sci_stop_rx(port); sci_stop_tx(port); /* -@@ -2243,7 +2243,7 @@ static void sci_shutdown(struct uart_port *port) +@@ -2248,7 +2248,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)); @@ -8164,7 +8165,7 @@ #ifdef CONFIG_SERIAL_SH_SCI_DMA if (s->chan_rx_saved) { -@@ -2545,7 +2545,7 @@ static void sci_set_termios(struct uart_port *port, struct ktermios *termios, +@@ -2550,7 +2550,7 @@ done: serial_port_out(port, SCCKS, sccks); } @@ -8173,7 +8174,7 @@ sci_reset(port); -@@ -2667,7 +2667,7 @@ static void sci_set_termios(struct uart_port *port, struct ktermios *termios, +@@ -2672,7 +2672,7 @@ done: if ((termios->c_cflag & CREAD) != 0) sci_start_rx(port); @@ -8182,7 +8183,7 @@ sci_port_disable(s); -@@ -3052,9 +3052,9 @@ static void serial_console_write(struct console *co, const char *s, +@@ -3057,9 +3057,9 @@ static void serial_console_write(struct console *co, const char *s, if (port->sysrq) locked = 0; else if (oops_in_progress) @@ -8194,7 +8195,7 @@ /* first save SCSCR then disable interrupts, keep clock source */ ctrl = serial_port_in(port, SCSCR); -@@ -3074,7 +3074,7 @@ static void serial_console_write(struct console *co, const char *s, +@@ -3079,7 +3079,7 @@ static void serial_console_write(struct console *co, const char *s, serial_port_out(port, SCSCR, ctrl); if (locked) @@ -10100,7 +10101,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 8ef499ab3..7a942e987 100644 +index e4878bb58..ebebc32e7 100644 --- a/include/linux/printk.h +++ b/include/linux/printk.h @@ -9,6 +9,8 @@ @@ -10167,7 +10168,7 @@ #ifdef CONFIG_SMP diff --git a/include/linux/sched.h b/include/linux/sched.h -index b65d74c5e..d5fba1473 100644 +index f40411aa7..d5b27c710 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -944,6 +944,9 @@ struct task_struct { @@ -10180,7 +10181,7 @@ /* Bit to tell LSMs we're in execve(): */ unsigned in_execve:1; -@@ -1979,6 +1982,7 @@ static inline int dl_task_check_affinity(struct task_struct *p, const struct cpu +@@ -1980,6 +1983,7 @@ static inline int dl_task_check_affinity(struct task_struct *p, const struct cpu } #endif @@ -10188,7 +10189,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); -@@ -2130,17 +2134,17 @@ static inline void update_tsk_thread_flag(struct task_struct *tsk, int flag, +@@ -2131,17 +2135,17 @@ static inline void update_tsk_thread_flag(struct task_struct *tsk, int flag, update_ti_thread_flag(task_thread_info(tsk), flag, value); } @@ -10209,7 +10210,7 @@ { return test_ti_thread_flag(task_thread_info(tsk), flag); } -@@ -2153,9 +2157,11 @@ static inline void set_tsk_need_resched(struct task_struct *tsk) +@@ -2154,9 +2158,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); @@ -10222,7 +10223,7 @@ { return unlikely(test_tsk_thread_flag(tsk,TIF_NEED_RESCHED)); } -@@ -2336,7 +2342,7 @@ static inline int rwlock_needbreak(rwlock_t *lock) +@@ -2337,7 +2343,7 @@ static inline int rwlock_needbreak(rwlock_t *lock) static __always_inline bool need_resched(void) { @@ -10307,10 +10308,10 @@ int serial8250_console_exit(struct uart_port *port); diff --git a/include/linux/serial_core.h b/include/linux/serial_core.h -index a7d5fa892..99d3f1e24 100644 +index 5136eade9..9c7bce638 100644 --- a/include/linux/serial_core.h +++ b/include/linux/serial_core.h -@@ -488,6 +488,7 @@ struct uart_port { +@@ -489,6 +489,7 @@ struct uart_port { struct uart_icount icount; /* statistics */ struct console *cons; /* struct console, if any */ @@ -10318,7 +10319,7 @@ /* flags must be updated while holding port mutex */ upf_t flags; -@@ -595,6 +596,7 @@ struct uart_port { +@@ -596,6 +597,7 @@ struct uart_port { static inline void uart_port_lock(struct uart_port *up) { spin_lock(&up->lock); @@ -10326,7 +10327,7 @@ } /** -@@ -604,6 +606,7 @@ static inline void uart_port_lock(struct uart_port *up) +@@ -605,6 +607,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); @@ -10334,7 +10335,7 @@ } /** -@@ -614,6 +617,7 @@ static inline void uart_port_lock_irq(struct uart_port *up) +@@ -615,6 +618,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); @@ -10342,7 +10343,7 @@ } /** -@@ -624,7 +628,11 @@ static inline void uart_port_lock_irqsave(struct uart_port *up, unsigned long *f +@@ -625,7 +629,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) { @@ -10355,7 +10356,7 @@ } /** -@@ -636,7 +644,11 @@ static inline bool uart_port_trylock(struct uart_port *up) +@@ -637,7 +645,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) { @@ -10368,7 +10369,7 @@ } /** -@@ -645,6 +657,7 @@ static inline bool uart_port_trylock_irqsave(struct uart_port *up, unsigned long +@@ -646,6 +658,7 @@ static inline bool uart_port_trylock_irqsave(struct uart_port *up, unsigned long */ static inline void uart_port_unlock(struct uart_port *up) { @@ -10376,7 +10377,7 @@ spin_unlock(&up->lock); } -@@ -654,6 +667,7 @@ static inline void uart_port_unlock(struct uart_port *up) +@@ -655,6 +668,7 @@ static inline void uart_port_unlock(struct uart_port *up) */ static inline void uart_port_unlock_irq(struct uart_port *up) { @@ -10384,7 +10385,7 @@ spin_unlock_irq(&up->lock); } -@@ -663,6 +677,19 @@ static inline void uart_port_unlock_irq(struct uart_port *up) +@@ -664,6 +678,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) @@ -10404,7 +10405,7 @@ { spin_unlock_irqrestore(&up->lock, flags); } -@@ -1058,14 +1085,14 @@ static inline void uart_unlock_and_check_sysrq(struct uart_port *port) +@@ -1076,14 +1103,14 @@ static inline void uart_unlock_and_check_sysrq(struct uart_port *port) u8 sysrq_ch; if (!port->has_sysrq) { @@ -10421,7 +10422,7 @@ if (sysrq_ch) handle_sysrq(sysrq_ch); -@@ -1077,14 +1104,14 @@ static inline void uart_unlock_and_check_sysrq_irqrestore(struct uart_port *port +@@ -1095,14 +1122,14 @@ static inline void uart_unlock_and_check_sysrq_irqrestore(struct uart_port *port u8 sysrq_ch; if (!port->has_sysrq) { @@ -10438,7 +10439,7 @@ if (sysrq_ch) handle_sysrq(sysrq_ch); -@@ -1100,12 +1127,12 @@ static inline int uart_prepare_sysrq_char(struct uart_port *port, u8 ch) +@@ -1118,12 +1145,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) { @@ -10656,7 +10657,7 @@ new_owner = top_waiter->task; /* -@@ -1002,6 +990,12 @@ int futex_lock_pi(u32 __user *uaddr, unsigned int flags, ktime_t *time, int tryl +@@ -1002,6 +990,12 @@ retry_private: goto no_block; } @@ -10669,7 +10670,7 @@ rt_mutex_init_waiter(&rt_waiter); /* -@@ -1039,19 +1033,37 @@ int futex_lock_pi(u32 __user *uaddr, unsigned int flags, ktime_t *time, int tryl +@@ -1039,19 +1033,37 @@ retry_private: ret = rt_mutex_wait_proxy_lock(&q.pi_state->pi_mutex, to, &rt_waiter); cleanup: @@ -10713,7 +10714,7 @@ no_block: /* * Fixup the pi_state owner and possibly acquire the lock if we -@@ -1132,6 +1144,7 @@ int futex_unlock_pi(u32 __user *uaddr, unsigned int flags) +@@ -1132,6 +1144,7 @@ retry: top_waiter = futex_top_waiter(hb, &key); if (top_waiter) { struct futex_pi_state *pi_state = top_waiter->pi_state; @@ -10721,7 +10722,7 @@ ret = -EINVAL; if (!pi_state) -@@ -1144,22 +1157,39 @@ int futex_unlock_pi(u32 __user *uaddr, unsigned int flags) +@@ -1144,22 +1157,39 @@ retry: if (pi_state->owner != current) goto out_unlock; @@ -10767,7 +10768,7 @@ put_pi_state(pi_state); -@@ -1187,6 +1217,7 @@ int futex_unlock_pi(u32 __user *uaddr, unsigned int flags) +@@ -1187,6 +1217,7 @@ retry: return ret; } @@ -10999,7 +11000,7 @@ } diff --git a/kernel/locking/rwsem.c b/kernel/locking/rwsem.c -index 9eabd585c..2340b6d90 100644 +index 11ed7ce65..62eac9fd8 100644 --- a/kernel/locking/rwsem.c +++ b/kernel/locking/rwsem.c @@ -1427,8 +1427,14 @@ static inline void __downgrade_write(struct rw_semaphore *sem) @@ -13073,7 +13074,7 @@ /* * We cannot access per-CPU data (e.g. per-CPU flush irq_work) before -@@ -698,9 +742,6 @@ static ssize_t msg_print_ext_body(char *buf, size_t size, +@@ -698,9 +742,6 @@ out: return len; } @@ -13092,7 +13093,7 @@ { /* * Do not use spinning in panic(). The panic CPU wants to keep the lock. -@@ -1887,7 +1928,7 @@ static void console_lock_spinning_enable(void) +@@ -1887,7 +1928,7 @@ lockdep: * * Return: 1 if the lock rights were passed, 0 otherwise. */ @@ -13101,7 +13102,7 @@ { int waiter; -@@ -2305,54 +2346,123 @@ int vprintk_store(int facility, int level, +@@ -2305,54 +2346,123 @@ out: return ret; } @@ -13448,7 +13449,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 @@ static bool printk_get_next_message(struct printk_message *pmsg, u64 seq, +@@ -2887,6 +2945,13 @@ out: return true; } @@ -13462,7 +13463,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 @@ static bool printk_get_next_message(struct printk_message *pmsg, u64 seq, +@@ -2904,12 +2969,10 @@ out: */ static bool console_emit_next_record(struct console *con, bool *handover, int cookie) { @@ -13604,7 +13605,7 @@ if (!progress) continue; -@@ -3038,19 +3145,7 @@ static bool console_flush_all(bool do_cond_resched, u64 *next_seq, bool *handove +@@ -3038,19 +3145,7 @@ abandon: return false; } @@ -14187,7 +14188,7 @@ return NULL; } -@@ -1441,20 +1457,118 @@ bool prb_reserve_in_last(struct prb_reserved_entry *e, struct printk_ringbuffer +@@ -1441,20 +1457,118 @@ fail_reopen: return false; } @@ -14758,10 +14759,10 @@ { #ifdef CONFIG_KGDB_KDB diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c -index ade42d6a9..eebb9b454 100644 +index 781146600..7ee1c84b5 100644 --- a/kernel/rcu/rcutorture.c +++ b/kernel/rcu/rcutorture.c -@@ -2408,6 +2408,12 @@ static int rcutorture_booster_init(unsigned int cpu) +@@ -2409,6 +2409,12 @@ static int rcutorture_booster_init(unsigned int cpu) WARN_ON_ONCE(!t); sp.sched_priority = 2; sched_setscheduler_nocheck(t, SCHED_FIFO, &sp); @@ -14775,7 +14776,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 e09f4f624..311483048 100644 +index 11a1fac3a..6f085a159 100644 --- a/kernel/rcu/tree_stall.h +++ b/kernel/rcu/tree_stall.h @@ -8,6 +8,7 @@ @@ -14786,7 +14787,7 @@ ////////////////////////////////////////////////////////////////////////////// // -@@ -603,6 +604,8 @@ static void print_other_cpu_stall(unsigned long gp_seq, unsigned long gps) +@@ -604,6 +605,8 @@ static void print_other_cpu_stall(unsigned long gp_seq, unsigned long gps) if (rcu_stall_is_suppressed()) return; @@ -14795,7 +14796,7 @@ /* * OK, time to rat on our buddy... * See Documentation/RCU/stallwarn.rst for info on how to debug -@@ -657,6 +660,8 @@ static void print_other_cpu_stall(unsigned long gp_seq, unsigned long gps) +@@ -658,6 +661,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. */ @@ -14805,7 +14806,7 @@ static void print_cpu_stall(unsigned long gps) diff --git a/kernel/sched/core.c b/kernel/sched/core.c -index 07bcc5f2e..7a6b82e1f 100644 +index 7dd2415d9..697d165a2 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -901,14 +901,15 @@ static inline void hrtick_rq_init(struct rq *rq) @@ -14913,7 +14914,7 @@ smp_send_reschedule(cpu); else trace_sched_wake_idle_without_ipi(cpu); -@@ -6777,10 +6797,14 @@ void __noreturn do_task_dead(void) +@@ -6774,10 +6794,14 @@ void __noreturn do_task_dead(void) static inline void sched_submit_work(struct task_struct *tsk) { @@ -14930,7 +14931,7 @@ task_flags = tsk->flags; /* -@@ -6806,6 +6830,8 @@ static inline void sched_submit_work(struct task_struct *tsk) +@@ -6803,6 +6827,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); @@ -14939,7 +14940,7 @@ } static void sched_update_worker(struct task_struct *tsk) -@@ -6818,16 +6844,26 @@ static void sched_update_worker(struct task_struct *tsk) +@@ -6815,16 +6841,26 @@ static void sched_update_worker(struct task_struct *tsk) } } @@ -14971,7 +14972,7 @@ sched_update_worker(tsk); } EXPORT_SYMBOL(schedule); -@@ -6891,11 +6927,7 @@ void __sched schedule_preempt_disabled(void) +@@ -6888,11 +6924,7 @@ void __sched schedule_preempt_disabled(void) #ifdef CONFIG_PREEMPT_RT void __sched notrace schedule_rtlock(void) { @@ -14984,7 +14985,7 @@ } NOKPROBE_SYMBOL(schedule_rtlock); #endif -@@ -7091,6 +7123,32 @@ static void __setscheduler_prio(struct task_struct *p, int prio) +@@ -7088,6 +7120,32 @@ static void __setscheduler_prio(struct task_struct *p, int prio) #ifdef CONFIG_RT_MUTEXES @@ -15017,7 +15018,7 @@ static inline int __rt_effective_prio(struct task_struct *pi_task, int prio) { if (pi_task) -@@ -8953,6 +9011,21 @@ static inline void preempt_dynamic_init(void) { } +@@ -8950,6 +9008,21 @@ static inline void preempt_dynamic_init(void) { } #endif /* #ifdef CONFIG_PREEMPT_DYNAMIC */ @@ -15077,7 +15078,7 @@ } late_initcall(sched_init_debug); diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c -index 8de28b182..196536f0a 100644 +index 415f4b060..8e58f6744 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); @@ -15145,7 +15146,7 @@ static void update_curr_fair(struct rq *rq) { update_curr(cfs_rq_of(&rq->curr->se)); -@@ -5631,7 +5647,7 @@ entity_tick(struct cfs_rq *cfs_rq, struct sched_entity *curr, int queued) +@@ -5629,7 +5645,7 @@ entity_tick(struct cfs_rq *cfs_rq, struct sched_entity *curr, int queued) /* * Update run-time statistics of the 'current'. */ @@ -15154,7 +15155,7 @@ /* * Ensure that runnable average is periodically updated. -@@ -5645,7 +5661,7 @@ entity_tick(struct cfs_rq *cfs_rq, struct sched_entity *curr, int queued) +@@ -5643,7 +5659,7 @@ entity_tick(struct cfs_rq *cfs_rq, struct sched_entity *curr, int queued) * validating it and just reschedule. */ if (queued) { @@ -15163,7 +15164,7 @@ return; } /* -@@ -5791,7 +5807,7 @@ static void __account_cfs_rq_runtime(struct cfs_rq *cfs_rq, u64 delta_exec) +@@ -5789,7 +5805,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)) @@ -15172,7 +15173,7 @@ } static __always_inline -@@ -6090,7 +6106,7 @@ void unthrottle_cfs_rq(struct cfs_rq *cfs_rq) +@@ -6088,7 +6104,7 @@ unthrottle_throttle: /* Determine whether we need to wake up potentially idle CPU: */ if (rq->curr == rq->idle && rq->cfs.nr_running) @@ -15181,7 +15182,7 @@ } #ifdef CONFIG_SMP -@@ -7291,7 +7307,7 @@ static void hrtick_start_fair(struct rq *rq, struct task_struct *p) +@@ -7333,7 +7349,7 @@ static void hrtick_start_fair(struct rq *rq, struct task_struct *p) if (delta < 0) { if (task_current(rq, p)) @@ -15190,7 +15191,7 @@ return; } hrtick_start(rq, delta); -@@ -9231,7 +9247,7 @@ static void check_preempt_wakeup(struct rq *rq, struct task_struct *p, int wake_ +@@ -9293,7 +9309,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. */ @@ -15199,7 +15200,7 @@ return; /* Idle tasks are by definition preempted by non-idle tasks. */ -@@ -9273,7 +9289,7 @@ static void check_preempt_wakeup(struct rq *rq, struct task_struct *p, int wake_ +@@ -9335,7 +9351,7 @@ static void check_preempt_wakeup(struct rq *rq, struct task_struct *p, int wake_ return; preempt: @@ -15208,7 +15209,7 @@ } #ifdef CONFIG_QOS_SCHED -@@ -9756,8 +9772,7 @@ static bool _qos_smt_check_need_resched(int this_cpu, struct rq *rq) +@@ -9818,8 +9834,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 @@ -15218,7 +15219,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. */ -@@ -14139,7 +14154,7 @@ static inline void task_tick_core(struct rq *rq, struct task_struct *curr) +@@ -14193,7 +14208,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)) @@ -15227,7 +15228,7 @@ } /* -@@ -14455,7 +14470,7 @@ prio_changed_fair(struct rq *rq, struct task_struct *p, int oldprio) +@@ -14509,7 +14524,7 @@ prio_changed_fair(struct rq *rq, struct task_struct *p, int oldprio) */ if (task_current(rq, p)) { if (p->prio > oldprio) @@ -15237,15 +15238,15 @@ check_preempt_curr(rq, p, 0); } diff --git a/kernel/sched/features.h b/kernel/sched/features.h -index 26b1a03bd..a08f2fcd7 100644 +index 26b1a03bd..bfba10c09 100644 --- a/kernel/sched/features.h +++ b/kernel/sched/features.h -@@ -98,7 +98,7 @@ SCHED_FEAT(UTIL_EST_FASTUP, true) - SCHED_FEAT(LATENCY_WARN, false) +@@ -99,6 +99,8 @@ 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 @@ -15281,11 +15282,20 @@ rd->rto_cpu = -1; diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h -index 9de2bac64..0f60c4654 100644 +index 761870540..ecf1154c3 100644 --- a/kernel/sched/sched.h +++ b/kernel/sched/sched.h -@@ -2600,6 +2600,7 @@ extern void init_sched_fair_class(void); - extern void reweight_task(struct task_struct *p, int prio); +@@ -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); extern void resched_curr(struct rq *rq); +extern void resched_curr_lazy(struct rq *rq); @@ -15293,7 +15303,7 @@ extern struct rt_bandwidth def_rt_bandwidth; diff --git a/kernel/signal.c b/kernel/signal.c -index 28cddef39..cf2c75e3e 100644 +index f36c58ea7..0f2615143 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, @@ -15338,10 +15348,10 @@ cgroup_leave_frozen(true); diff --git a/kernel/softirq.c b/kernel/softirq.c -index 210cf5f8d..cae0ae2e2 100644 +index bd9716d7b..2fde8af88 100644 --- a/kernel/softirq.c +++ b/kernel/softirq.c -@@ -247,6 +247,19 @@ void __local_bh_enable_ip(unsigned long ip, unsigned int cnt) +@@ -247,6 +247,19 @@ out: } EXPORT_SYMBOL(__local_bh_enable_ip); @@ -15361,7 +15371,7 @@ /* * Invoked from ksoftirqd_run() outside of the interrupt disabled section * to acquire the per CPU local lock for reentrancy protection. -@@ -619,6 +632,24 @@ static inline void tick_irq_exit(void) +@@ -623,6 +636,24 @@ static inline void tick_irq_exit(void) #endif } @@ -15386,7 +15396,7 @@ static inline void __irq_exit_rcu(void) { #ifndef __ARCH_IRQ_EXIT_IRQS_DISABLED -@@ -631,6 +662,10 @@ static inline void __irq_exit_rcu(void) +@@ -635,6 +666,10 @@ static inline void __irq_exit_rcu(void) if (!in_interrupt() && local_softirq_pending()) invoke_softirq(); @@ -15397,7 +15407,7 @@ tick_irq_exit(); } -@@ -963,12 +998,70 @@ static struct smp_hotplug_thread softirq_threads = { +@@ -967,12 +1002,70 @@ static struct smp_hotplug_thread softirq_threads = { .thread_comm = "ksoftirqd/%u", }; @@ -15473,7 +15483,7 @@ index edb0f821d..a72900121 100644 --- a/kernel/time/hrtimer.c +++ b/kernel/time/hrtimer.c -@@ -1809,7 +1809,7 @@ void hrtimer_interrupt(struct clock_event_device *dev) +@@ -1809,7 +1809,7 @@ retry: if (!ktime_before(now, cpu_base->softirq_expires_next)) { cpu_base->softirq_expires_next = KTIME_MAX; cpu_base->softirq_activated = 1; @@ -15585,10 +15595,10 @@ need_resched = 'p'; break; diff --git a/net/core/dev.c b/net/core/dev.c -index 1f6c8945f..1e8928cd3 100644 +index 4935ff1ee..3754a26b8 100644 --- a/net/core/dev.c +++ b/net/core/dev.c -@@ -4705,15 +4705,6 @@ static void rps_trigger_softirq(void *data) +@@ -4711,15 +4711,6 @@ static void rps_trigger_softirq(void *data) #endif /* CONFIG_RPS */ @@ -15604,7 +15614,7 @@ /* * After we queued a packet into sd->input_pkt_queue, * we need to make sure this queue is serviced soon. -@@ -6682,6 +6673,32 @@ static void skb_defer_free_flush(struct softnet_data *sd) +@@ -6688,6 +6679,32 @@ static void skb_defer_free_flush(struct softnet_data *sd) } } @@ -15637,7 +15647,7 @@ static int napi_threaded_poll(void *data) { struct napi_struct *napi = data; -@@ -11618,7 +11635,11 @@ static int __init net_dev_init(void) +@@ -11625,7 +11642,11 @@ static int __init net_dev_init(void) INIT_CSD(&sd->csd, rps_trigger_softirq, sd); sd->cpu = i; #endif @@ -15650,10 +15660,10 @@ init_gro_hash(&sd->backlog); diff --git a/net/core/skbuff.c b/net/core/skbuff.c -index 60876262b..02e2bab1e 100644 +index f0a9ef1ae..682175af4 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c -@@ -6852,8 +6852,13 @@ nodefer: __kfree_skb(skb); +@@ -6863,8 +6863,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 cb6750f16a7d1d5074b0f7c46270014dd348a958 Mon Sep 17 00:00:00 2001 +From 9b1136bad28f0deb735f7cd220fb740eae876832 Mon Sep 17 00:00:00 2001 From: zhangyu <zhangyu4@kylinos.cn> -Date: Tue, 21 May 2024 14:50:20 +0800 -Subject: PATCH rt2 +Date: Thu, 22 Aug 2024 10:06:55 +0800 +Subject: PATCH rt111 --- 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 3b8d78f94..6c7e6f2f9 100644 +index 650fe88cb..576b8f12d 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 # -@@ -755,7 +755,7 @@ CONFIG_HAVE_KVM_VCPU_RUN_PID_CHANGE=y +@@ -757,7 +757,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_CVM_HOST=y + CONFIG_HISI_VIRTCCA_HOST=y # CONFIG_NVHE_EL2_DEBUG is not set diff --git a/arch/x86/configs/openeuler_defconfig b/arch/x86/configs/openeuler_defconfig -index 9b5df8585..ece62e3df 100644 +index b3403ba04..047d2c71d 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 -@@ -744,7 +744,7 @@ CONFIG_HAVE_KVM_NO_POLL=y +@@ -746,7 +746,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.03-rebase-41</param> + <param name="revision">24.09-rebase-41-v4</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