Linux 6.1.52
Greg Kroah-Hartman
maintainerI'm announcing the release of the 6.1.52 kernel.
All users of the 6.1 kernel series must upgrade.
The updated 6.1.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.1.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Documentation/devicetree/bindings/serial/nxp,sc16is7xx.txt | 46 +++++++++++++ Makefile | 2 arch/arm/mach-pxa/sharpsl_pm.c | 2 arch/arm/mach-pxa/spitz.c | 14 --- arch/mips/alchemy/devboards/db1000.c | 8 -- arch/mips/alchemy/devboards/db1200.c | 19 ----- arch/mips/alchemy/devboards/db1300.c | 10 -- drivers/bluetooth/btsdio.c | 1 drivers/firmware/stratix10-svc.c | 2 drivers/fsi/fsi-master-ast-cf.c | 1 drivers/hid/wacom.h | 1 drivers/hid/wacom_sys.c | 25 +++++-- drivers/hid/wacom_wac.c | 1 drivers/hid/wacom_wac.h | 1 drivers/mmc/host/Kconfig | 5 - drivers/net/ethernet/freescale/enetc/enetc_ptp.c | 2 drivers/net/wireless/mediatek/mt76/mt76_connac_mac.c | 7 + drivers/net/wireless/mediatek/mt76/mt7921/main.c | 2 drivers/pinctrl/pinctrl-amd.c | 4 - drivers/rtc/rtc-ds1685.c | 2 drivers/staging/rtl8712/os_intfs.c | 1 drivers/staging/rtl8712/usb_intf.c | 1 drivers/tty/serial/qcom_geni_serial.c | 5 + drivers/tty/serial/sc16is7xx.c | 17 ++++ drivers/usb/chipidea/ci_hdrc_imx.c | 10 +- drivers/usb/chipidea/usbmisc_imx.c | 6 + drivers/usb/dwc3/dwc3-meson-g12a.c | 6 + drivers/usb/serial/option.c | 7 + drivers/usb/typec/tcpm/tcpci.c | 4 + drivers/usb/typec/tcpm/tcpm.c | 7 + fs/erofs/zdata.c | 2 fs/nilfs2/alloc.c | 3 fs/nilfs2/inode.c | 7 + fs/nilfs2/segment.c | 5 + fs/smb/server/auth.c | 3 fs/smb/server/oplock.c | 2 fs/smb/server/smb2pdu.c | 2 fs/smb/server/smb2pdu.h | 2 fs/smb/server/transport_rdma.c | 25 +++++-- include/linux/usb/tcpci.h | 1 kernel/module/main.c | 14 +++ sound/usb/stream.c | 11 ++- 42 files changed, 208 insertions(+), 88 deletions(-)
Aaron Armstrong Skomra (1):
HID: wacom: remove the battery when the EKR is off
Arnd Bergmann (1):
ARM: pxa: remove use of symbol_get()
Badhri Jagan Sridharan (1):
tcpm: Avoid soft reset when partner does not support get_status
Christoph Hellwig (4):
mmc: au1xmmc: force non-modular build and remove symbol_get usage
net: enetc: use EXPORT_SYMBOL_GPL for enetc_phc_index
rtc: ds1685: use EXPORT_SYMBOL_GPL for ds1685_rtc_poweroff
modules: only allow symbol_get of EXPORT_SYMBOL_GPL modules
Deren Wu (2):
wifi: mt76: mt7921: do not support one stream on secondary antenna only
wifi: mt76: mt7921: fix skb leak by txs missing in AMSDU
Gao Xiang (1):
erofs: ensure that the post-EOF tails are all zeroed
Greg Kroah-Hartman (1):
Linux 6.1.52
Hugo Villeneuve (3):
serial: sc16is7xx: fix broken port 0 uart init
serial: sc16is7xx: fix bug when first setting GPIO direction
dt-bindings: sc16is7xx: Add property to change GPIO function
Johan Hovold (1):
serial: qcom-geni: fix opp vote on shutdown
Juerg Haefliger (1):
fsi: master-ast-cf: Add MODULE_FIRMWARE macro
Luke Lu (1):
usb: dwc3: meson-g12a: do post init to fix broken usb after resumption
Marco Felsch (1):
usb: typec: tcpci: clear the fault status bit
Mario Limonciello (1):
pinctrl: amd: Don't show Invalid config param errors
Martin Kohn (1):
USB: serial: option: add Quectel EM05G variant (0x030e)
Nam Cao (1):
staging: rtl8712: fix race condition
Namjae Jeon (4):
ksmbd: fix wrong DataOffset validation of create context
ksmbd: fix slub overflow in ksmbd_decode_ntlmssp_auth_blob()
ksmbd: replace one-element array with flex-array member in struct smb2_ea_info
ksmbd: reduce descriptor size if remaining bytes is less than request size
Ryusuke Konishi (2):
nilfs2: fix general protection fault in nilfs_lookup_dirty_data_buffers()
nilfs2: fix WARNING in mark_buffer_dirty due to discarded buffer reuse
Slark Xiao (1):
USB: serial: option: add FOXCONN T99W368/T99W373 product
Takashi Iwai (1):
ALSA: usb-audio: Fix init call orders for UAC1
Wang Ming (1):
firmware: stratix10-svc: Fix an NULL vs IS_ERR() bug in probe
Xu Yang (1):
usb: chipidea: imx: improve logic if samsung,picophy-* parameter is 0
Zheng Wang (1):
Bluetooth: btsdio: fix use after free bug in btsdio_remove due to race condition
Greg Kroah-Hartman
maintainerDocumentation/devicetree/bindings/serial/nxp,sc16is7xx.txt +46 -0
@@ -23,6 +23,9 @@ Optional properties: 1 = active low. - irda-mode-ports: An array that lists the indices of the port that should operate in IrDA mode. +- nxp,modem-control-line-ports: An array that lists the indices of the port that + should have shared GPIO lines configured as + modem control lines. Example: sc16is750: sc16is750@51 {
@@ -35,6 +38,26 @@ Example: #gpio-cells = <2>; }; + sc16is752: sc16is752@53 { + compatible = "nxp,sc16is752"; + reg = <0x53>; + clocks = <&clk20m>; + interrupt-parent = <&gpio3>; + interrupts = <7 IRQ_TYPE_EDGE_FALLING>; + nxp,modem-control-line-ports = <1>; /* Port 1 as modem control lines */ + gpio-controller; /* Port 0 as GPIOs */ + #gpio-cells = <2>; + }; + + sc16is752: sc16is752@54 { + compatible = "nxp,sc16is752"; + reg = <0x54>; + clocks = <&clk20m>; + interrupt-parent = <&gpio3>; + interrupts = <7 IRQ_TYPE_EDGE_FALLING>; + nxp,modem-control-line-ports = <0 1>; /* Ports 0 and 1 as modem control lines */ + }; + * spi as bus Required properties:
@@ -59,6 +82,9 @@ Optional properties: 1 = active low. - irda-mode-ports: An array that lists the indices of the port that should operate in IrDA mode. +- nxp,modem-control-line-ports: An array that lists the indices of the port that + should have shared GPIO lines configured as + modem control lines. Example: sc16is750: sc16is750@0 {
@@ -70,3 +96,23 @@ Example: gpio-controller; #gpio-cells = <2>; }; + + sc16is752: sc16is752@1 { + compatible = "nxp,sc16is752"; + reg = <1>; + clocks = <&clk20m>; + interrupt-parent = <&gpio3>; + interrupts = <7 IRQ_TYPE_EDGE_FALLING>; + nxp,modem-control-line-ports = <1>; /* Port 1 as modem control lines */ + gpio-controller; /* Port 0 as GPIOs */ + #gpio-cells = <2>; + }; + + sc16is752: sc16is752@2 { + compatible = "nxp,sc16is752"; + reg = <2>; + clocks = <&clk20m>; + interrupt-parent = <&gpio3>; + interrupts = <7 IRQ_TYPE_EDGE_FALLING>; + nxp,modem-control-line-ports = <0 1>; /* Ports 0 and 1 as modem control lines */ + };
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 1 -SUBLEVEL = 51 +SUBLEVEL = 52 EXTRAVERSION = NAME = Curry Ramen
arch/arm/mach-pxa/sharpsl_pm.c +0 -2
@@ -220,8 +220,6 @@ void sharpsl_battery_kick(void) {schedule_delayed_work (&sharpsl_bat,msecs_to_jiffies (125 )); } -EXPORT_SYMBOL (sharpsl_battery_kick); -static void sharpsl_battery_thread (struct work_struct *private_) {
arch/arm/mach-pxa/spitz.c +1 -13
@@ -9,7 +9,6 @@*/ #include <linux/kernel.h> -#include <linux/module.h> /* symbol_get ; symbol_put */ #include <linux/platform_device.h> #include <linux/delay.h> #include <linux/gpio_keys.h>
@@ -510,17 +509,6 @@ static struct ads7846_platform_data spitz_ads7846_info = { .wait_for_sync = spitz_ads7846_wait_for_hsync, }; -static void spitz_bl_kick_battery (void ) -{ -void (*kick_batt)(void ); - - kick_batt =symbol_get (sharpsl_battery_kick); -if (kick_batt) { -kick_batt (); -symbol_put (sharpsl_battery_kick); - } -} -static struct gpiod_lookup_table spitz_lcdcon_gpio_table = { .dev_id ="spi2.1" , .table = {
@@ -548,7 +536,7 @@ static struct corgi_lcd_platform_data spitz_lcdcon_info = { .max_intensity = 0x2f, .default_intensity = 0x1f, .limit_mask = 0x0b, - .kick_battery = spitz_bl_kick_battery, + .kick_battery = sharpsl_battery_kick, };static struct spi_board_info spitz_spi_devices[] = {
arch/mips/alchemy/devboards/db1000.c +1 -7
@@ -14,7 +14,6 @@#include <linux/interrupt.h> #include <linux/leds.h> #include <linux/mmc/host.h> -#include <linux/module.h> #include <linux/platform_device.h> #include <linux/pm.h> #include <linux/spi/spi.h>
@@ -167,12 +166,7 @@ static struct platform_device db1x00_audio_dev = {static irqreturn_t db1100_mmc_cd (int irq,void *ptr) { -void (*mmc_cd)(struct mmc_host *,unsigned long ); -/* link against CONFIG_MMC=m */ - mmc_cd =symbol_get (mmc_detect_change); -mmc_cd (ptr,msecs_to_jiffies (500 )); -symbol_put (mmc_detect_change); - +mmc_detect_change (ptr,msecs_to_jiffies (500 ));return IRQ_HANDLED ; }
arch/mips/alchemy/devboards/db1200.c +2 -17
@@ -10,7 +10,6 @@#include <linux/gpio.h> #include <linux/i2c.h> #include <linux/init.h> -#include <linux/module.h> #include <linux/interrupt.h> #include <linux/io.h> #include <linux/leds.h>
@@ -340,14 +339,7 @@ static irqreturn_t db1200_mmc_cd(int irq, void *ptr)static irqreturn_t db1200_mmc_cdfn (int irq,void *ptr) { -void (*mmc_cd)(struct mmc_host *,unsigned long ); - -/* link against CONFIG_MMC=m */ - mmc_cd =symbol_get (mmc_detect_change); -if (mmc_cd) { -mmc_cd (ptr,msecs_to_jiffies (200 )); -symbol_put (mmc_detect_change); - } +mmc_detect_change (ptr,msecs_to_jiffies (200 ));msleep (100 );/* debounce */ if (irq ==DB1200_SD0_INSERT_INT )
@@ -431,14 +423,7 @@ static irqreturn_t pb1200_mmc1_cd(int irq, void *ptr)static irqreturn_t pb1200_mmc1_cdfn (int irq,void *ptr) { -void (*mmc_cd)(struct mmc_host *,unsigned long ); - -/* link against CONFIG_MMC=m */ - mmc_cd =symbol_get (mmc_detect_change); -if (mmc_cd) { -mmc_cd (ptr,msecs_to_jiffies (200 )); -symbol_put (mmc_detect_change); - } +mmc_detect_change (ptr,msecs_to_jiffies (200 ));msleep (100 );/* debounce */ if (irq ==PB1200_SD1_INSERT_INT )
arch/mips/alchemy/devboards/db1300.c +1 -9
@@ -17,7 +17,6 @@#include <linux/interrupt.h> #include <linux/ata_platform.h> #include <linux/mmc/host.h> -#include <linux/module.h> #include <linux/mtd/mtd.h> #include <linux/mtd/platnand.h> #include <linux/platform_device.h>
@@ -459,14 +458,7 @@ static irqreturn_t db1300_mmc_cd(int irq, void *ptr)static irqreturn_t db1300_mmc_cdfn (int irq,void *ptr) { -void (*mmc_cd)(struct mmc_host *,unsigned long ); - -/* link against CONFIG_MMC=m. We can only be called once MMC core has -* initialized the controller, so symbol_get() should always succeed. -*/ - mmc_cd =symbol_get (mmc_detect_change); -mmc_cd (ptr,msecs_to_jiffies (200 )); -symbol_put (mmc_detect_change); +mmc_detect_change (ptr,msecs_to_jiffies (200 ));msleep (100 );/* debounce */ if (irq ==DB1300_SD1_INSERT_INT )
drivers/bluetooth/btsdio.c +1 -0
@@ -357,6 +357,7 @@ static void btsdio_remove(struct sdio_func *func)if (!data)return ; +cancel_work_sync (&data->work); hdev = data->hdev;sdio_set_drvdata (func,NULL );
drivers/firmware/stratix10-svc.c +1 -1
@@ -756,7 +756,7 @@ svc_create_memory_pool(struct platform_device *pdev, paddr = begin; size = end - begin; va =devm_memremap (dev, paddr, size,MEMREMAP_WC ); -if (!va) { +if (IS_ERR (va)) {dev_err (dev,"fail to remap shared memory\n" );return ERR_PTR (-EINVAL ); }
drivers/fsi/fsi-master-ast-cf.c +1 -0
@@ -1441,3 +1441,4 @@ static struct platform_driver fsi_master_acf = {module_platform_driver (fsi_master_acf);MODULE_LICENSE ("GPL" ); +MODULE_FIRMWARE (FW_FILE_NAME );
drivers/hid/wacom.h +1 -0
@@ -150,6 +150,7 @@ struct wacom_remote {struct input_dev *input;bool registered;struct wacom_battery battery; +ktime_t active_time; } remotes[WACOM_MAX_REMOTES ]; };
drivers/hid/wacom_sys.c +21 -4
@@ -2527,6 +2527,18 @@ static void wacom_wireless_work(struct work_struct *work)return ; } +static void wacom_remote_destroy_battery (struct wacom *wacom,int index) +{ +struct wacom_remote *remote = wacom->remote; + +if (remote->remotes[index].battery.battery) { +devres_release_group (&wacom->hdev->dev, + &remote->remotes[index].battery.bat_desc); + remote->remotes[index].battery.battery =NULL ; + remote->remotes[index].active_time =0 ; + } +} +static void wacom_remote_destroy_one (struct wacom *wacom,unsigned int index) {struct wacom_remote *remote = wacom->remote;
@@ -2541,9 +2553,7 @@ static void wacom_remote_destroy_one(struct wacom *wacom, unsigned int index) remote->remotes[i].registered = false;spin_unlock_irqrestore (&remote->remote_lock, flags); -if (remote->remotes[i].battery.battery) -devres_release_group (&wacom->hdev->dev, - &remote->remotes[i].battery.bat_desc); +wacom_remote_destroy_battery (wacom, i);if (remote->remotes[i].group.name) devres_release_group(&wacom->hdev->dev,
@@ -2551,7 +2561,6 @@ static void wacom_remote_destroy_one(struct wacom *wacom, unsigned int index) remote->remotes[i].serial =0 ; remote->remotes[i].group.name =NULL ; - remote->remotes[i].battery.battery =NULL ; wacom->led.groups[i].select =WACOM_STATUS_UNKNOWN ; } }
@@ -2636,6 +2645,9 @@ static int wacom_remote_attach_battery(struct wacom *wacom, int index)if (remote->remotes[index].battery.battery)return 0 ; +if (!remote->remotes[index].active_time) +return 0 ; +if (wacom->led.groups[index].select ==WACOM_STATUS_UNKNOWN )return 0 ;
@@ -2651,6 +2663,7 @@ static void wacom_remote_work(struct work_struct *work) { struct wacom *wacom = container_of(work, struct wacom, remote_work);struct wacom_remote *remote = wacom->remote; +ktime_t kt =ktime_get ();struct wacom_remote_data data;unsigned long flags;unsigned int count;
@@ -2677,6 +2690,10 @@ static void wacom_remote_work(struct work_struct *work) serial = data.remote[i].serial;if (data.remote[i].connected) { +if (kt - remote->remotes[i].active_time >WACOM_REMOTE_BATTERY_TIMEOUT + && remote->remotes[i].active_time !=0 ) +wacom_remote_destroy_battery (wacom, i); +if (remote->remotes[i].serial == serial) {wacom_remote_attach_battery (wacom, i);continue ;
drivers/hid/wacom_wac.c +1 -0
@@ -1129,6 +1129,7 @@ static int wacom_remote_irq(struct wacom_wac *wacom_wac, size_t len)if (index <0 || !remote->remotes[index].registered) goto out; + remote->remotes[i].active_time =ktime_get (); input = remote->remotes[index].input;input_report_key (input,BTN_0 , (data[9 ] &0x01 ));
drivers/hid/wacom_wac.h +1 -0
@@ -13,6 +13,7 @@#define WACOM_NAME_MAX 64#define WACOM_MAX_REMOTES 5#define WACOM_STATUS_UNKNOWN 255 +#define WACOM_REMOTE_BATTERY_TIMEOUT 21000000000ll/* packet length for individual models */ #define WACOM_PKGLEN_BBFUN 9
drivers/mmc/host/Kconfig +3 -2
@@ -528,11 +528,12 @@ config MMC_ALCOR of Alcor Micro PCI-E card reader config MMC_AU1X - tristate "Alchemy AU1XX0 MMC Card Interface support" + bool "Alchemy AU1XX0 MMC Card Interface support" depends on MIPS_ALCHEMY + depends on MMC=y help This selects the AMD Alchemy(R) Multimedia card interface. - If you have a Alchemy platform with a MMC slot, say Y or M here. + If you have a Alchemy platform with a MMC slot, say Y here. If unsure, say N.
drivers/net/ethernet/freescale/enetc/enetc_ptp.c +1 -1
@@ -8,7 +8,7 @@#include "enetc.h" int enetc_phc_index =-1 ; -EXPORT_SYMBOL (enetc_phc_index); +EXPORT_SYMBOL_GPL (enetc_phc_index);static struct ptp_clock_info enetc_ptp_caps = { .owner =THIS_MODULE ,
drivers/net/wireless/mediatek/mt76/mt76_connac_mac.c +5 -2
@@ -465,6 +465,7 @@ void mt76_connac2_mac_write_txwi(struct mt76_dev *dev, __le32 *txwi, BSS_CHANGED_BEACON_ENABLED));bool inband_disc = !!(changed & (BSS_CHANGED_UNSOL_BCAST_PROBE_RESP |BSS_CHANGED_FILS_DISCOVERY )); +bool amsdu_en = wcid->amsdu;if (vif) {struct mt76_vif *mvif = (struct mt76_vif *)vif->drv_priv;
@@ -524,12 +525,14 @@ void mt76_connac2_mac_write_txwi(struct mt76_dev *dev, __le32 *txwi, txwi[4 ] =0 ; val =FIELD_PREP (MT_TXD5_PID , pid); -if (pid >=MT_PACKET_ID_FIRST ) +if (pid >=MT_PACKET_ID_FIRST ) { val |=MT_TXD5_TX_STATUS_HOST ; + amsdu_en = amsdu_en && !is_mt7921 (dev); + } txwi[5 ] =cpu_to_le32 (val); txwi[6 ] =0 ; - txwi[7 ] = wcid->amsdu ?cpu_to_le32 (MT_TXD7_HW_AMSDU ) :0 ; + txwi[7 ] = amsdu_en ?cpu_to_le32 (MT_TXD7_HW_AMSDU ) :0 ;if (is_8023)mt76_connac2_mac_write_txwi_8023 (txwi, skb, wcid);
drivers/net/wireless/mediatek/mt76/mt7921/main.c +1 -1
@@ -1280,7 +1280,7 @@ mt7921_set_antenna(struct ieee80211_hw *hw, u32 tx_ant, u32 rx_ant)return -EINVAL ;if ((BIT (hweight8 (tx_ant)) -1 ) != tx_ant) - tx_ant =BIT (ffs (tx_ant) -1 ) -1 ; +return -EINVAL ;mt7921_mutex_acquire (dev);
drivers/pinctrl/pinctrl-amd.c +2 -2
@@ -748,7 +748,7 @@ static int amd_pinconf_get(struct pinctrl_dev *pctldev,break ;default : -dev_err (&gpio_dev->pdev->dev,"Invalid config param %04x\n" , +dev_dbg (&gpio_dev->pdev->dev,"Invalid config param %04x\n" , param);return -ENOTSUPP ; }
@@ -798,7 +798,7 @@ static int amd_pinconf_set(struct pinctrl_dev *pctldev, unsigned int pin,break ;default : -dev_err (&gpio_dev->pdev->dev, +dev_dbg (&gpio_dev->pdev->dev,"Invalid config param %04x\n" , param); ret = -ENOTSUPP ; }
drivers/rtc/rtc-ds1685.c +1 -1
@@ -1434,7 +1434,7 @@ ds1685_rtc_poweroff(struct platform_device *pdev)unreachable (); } } -EXPORT_SYMBOL (ds1685_rtc_poweroff); +EXPORT_SYMBOL_GPL (ds1685_rtc_poweroff);/* ----------------------------------------------------------------------- */
drivers/staging/rtl8712/os_intfs.c +1 -0
@@ -323,6 +323,7 @@ int r8712_init_drv_sw(struct _adapter *padapter)mp871xinit (padapter);init_default_value (padapter);r8712_InitSwLeds (padapter); +mutex_init (&padapter->mutex_start);return ret; }
drivers/staging/rtl8712/usb_intf.c +0 -1
@@ -567,7 +567,6 @@ static int r871xu_drv_init(struct usb_interface *pusb_intf,if (rtl871x_load_fw (padapter)) goto deinit_drv_sw;init_completion (&padapter->rx_filter_ready); -mutex_init (&padapter->mutex_start);return 0 ; deinit_drv_sw:
drivers/tty/serial/qcom_geni_serial.c +5 -0
@@ -129,6 +129,7 @@ struct qcom_geni_serial_port {u32 tx_fifo_width;u32 rx_fifo_depth;bool setup; +unsigned long clk_rate;int (*handle_rx)(struct uart_port *uport,u32 bytes,bool drop);unsigned int baud;void *rx_fifo;
@@ -1061,6 +1062,7 @@ static void qcom_geni_serial_set_termios(struct uart_port *uport, baud * sampling_rate, clk_rate, clk_div); uport->uartclk = clk_rate; + port->clk_rate = clk_rate;dev_pm_opp_set_rate (uport->dev, clk_rate); ser_clk_cfg =SER_CLK_EN ; ser_clk_cfg |= clk_div <<CLK_DIV_SHFT ;
@@ -1330,10 +1332,13 @@ static void qcom_geni_serial_pm(struct uart_port *uport,if (new_state ==UART_PM_STATE_ON && old_state ==UART_PM_STATE_OFF ) {geni_icc_enable (&port->se); +if (port->clk_rate) +dev_pm_opp_set_rate (uport->dev, port->clk_rate);geni_se_resources_on (&port->se); }else if (new_state ==UART_PM_STATE_OFF && old_state ==UART_PM_STATE_ON ) {geni_se_resources_off (&port->se); +dev_pm_opp_set_rate (uport->dev,0 );geni_icc_disable (&port->se); } }
drivers/tty/serial/sc16is7xx.c +16 -1
@@ -1345,9 +1345,18 @@ static int sc16is7xx_gpio_direction_output(struct gpio_chip *chip, state |=BIT (offset); else state &= ~BIT(offset); -sc16is7xx_port_write (port,SC16IS7XX_IOSTATE_REG , state); + +/* +* If we write IOSTATE first, and then IODIR, the output value is not +* transferred to the corresponding I/O pin. +* The datasheet states that each register bit will be transferred to +* the corresponding I/O pin programmed as output when writing to +* IOSTATE. Therefore, configure direction first with IODIR, and then +* set value after with IOSTATE. +*/ sc16is7xx_port_update (port,SC16IS7XX_IODIR_REG ,BIT (offset),BIT (offset)); +sc16is7xx_port_write (port,SC16IS7XX_IOSTATE_REG , state);return 0 ; }
@@ -1439,6 +1448,12 @@ static int sc16is7xx_probe(struct device *dev, s->p[i].port.fifosize =SC16IS7XX_FIFO_SIZE ; s->p[i].port.flags =UPF_FIXED_TYPE |UPF_LOW_LATENCY ; s->p[i].port.iobase = i; +/* +* Use all ones as membase to make sure uart_configure_port() in +* serial_core.c does not abort for SPI/I2C devices where the +* membase address is not applicable. +*/ + s->p[i].port.membase = (void __iomem *)~0 ; s->p[i].port.iotype =UPIO_PORT ; s->p[i].port.uartclk = freq; s->p[i].port.rs485_config = sc16is7xx_config_rs485;
drivers/usb/chipidea/ci_hdrc_imx.c +6 -4
@@ -175,10 +175,12 @@ static struct imx_usbmisc_data *usbmisc_get_init_data(struct device *dev)if (of_usb_get_phy_mode (np) ==USBPHY_INTERFACE_MODE_ULPI ) data->ulpi =1 ; -of_property_read_u32 (np,"samsung,picophy-pre-emp-curr-control" , - &data->emp_curr_control); -of_property_read_u32 (np,"samsung,picophy-dc-vol-level-adjust" , - &data->dc_vol_level_adjust); +if (of_property_read_u32 (np,"samsung,picophy-pre-emp-curr-control" , + &data->emp_curr_control)) + data->emp_curr_control =-1 ; +if (of_property_read_u32 (np,"samsung,picophy-dc-vol-level-adjust" , + &data->dc_vol_level_adjust)) + data->dc_vol_level_adjust =-1 ;return data; }
drivers/usb/chipidea/usbmisc_imx.c +4 -2
@@ -657,13 +657,15 @@ static int usbmisc_imx7d_init(struct imx_usbmisc_data *data) usbmisc->base + MX7D_USBNC_USB_CTRL2);/* PHY tuning for signal quality */ reg =readl (usbmisc->base +MX7D_USB_OTG_PHY_CFG1 ); -if (data->emp_curr_control && data->emp_curr_control <= +if (data->emp_curr_control >=0 && + data->emp_curr_control <= (TXPREEMPAMPTUNE0_MASK >>TXPREEMPAMPTUNE0_BIT )) { reg &= ~TXPREEMPAMPTUNE0_MASK ; reg |= (data->emp_curr_control <<TXPREEMPAMPTUNE0_BIT ); } -if (data->dc_vol_level_adjust && data->dc_vol_level_adjust <= +if (data->dc_vol_level_adjust >=0 && + data->dc_vol_level_adjust <= (TXVREFTUNE0_MASK >>TXVREFTUNE0_BIT )) { reg &= ~TXVREFTUNE0_MASK ; reg |= (data->dc_vol_level_adjust <<TXVREFTUNE0_BIT );
drivers/usb/dwc3/dwc3-meson-g12a.c +6 -0
@@ -938,6 +938,12 @@ static int __maybe_unused dwc3_meson_g12a_resume(struct device *dev)return ret; } +if (priv->drvdata->usb_post_init) { + ret = priv->drvdata->usb_post_init (priv); +if (ret) +return ret; + } +return 0 ; }
drivers/usb/serial/option.c +7 -0
@@ -259,6 +259,7 @@ static void option_instat_callback(struct urb *urb);#define QUECTEL_PRODUCT_EM05G 0x030a#define QUECTEL_PRODUCT_EM060K 0x030b#define QUECTEL_PRODUCT_EM05G_CS 0x030c +#define QUECTEL_PRODUCT_EM05GV2 0x030e#define QUECTEL_PRODUCT_EM05CN_SG 0x0310#define QUECTEL_PRODUCT_EM05G_SG 0x0311#define QUECTEL_PRODUCT_EM05CN 0x0312
@@ -1190,6 +1191,8 @@ static const struct usb_device_id option_ids[] = { .driver_info = RSVD(6) | ZLP }, { USB_DEVICE_INTERFACE_CLASS(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM05G_GR, 0xff), .driver_info = RSVD(6) | ZLP }, + { USB_DEVICE_INTERFACE_CLASS(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM05GV2, 0xff), + .driver_info = RSVD(4) | ZLP }, { USB_DEVICE_INTERFACE_CLASS(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM05G_CS, 0xff), .driver_info = RSVD(6) | ZLP }, { USB_DEVICE_INTERFACE_CLASS(QUECTEL_VENDOR_ID, QUECTEL_PRODUCT_EM05G_RS, 0xff),
@@ -2232,6 +2235,10 @@ static const struct usb_device_id option_ids[] = { .driver_info = RSVD(0) | RSVD(1) | RSVD(6) }, { USB_DEVICE_INTERFACE_CLASS(0x0489, 0xe0db, 0xff), /* Foxconn T99W265 MBIM */ .driver_info = RSVD(3) }, + { USB_DEVICE_INTERFACE_CLASS(0x0489, 0xe0ee, 0xff), /* Foxconn T99W368 MBIM */ + .driver_info = RSVD(3) }, + { USB_DEVICE_INTERFACE_CLASS(0x0489, 0xe0f0, 0xff), /* Foxconn T99W373 MBIM */ + .driver_info = RSVD(3) }, { USB_DEVICE(0x1508, 0x1001), /* Fibocom NL668 (IOT version) */ .driver_info = RSVD(4) | RSVD(5) | RSVD(6) }, { USB_DEVICE(0x1782, 0x4d10) }, /* Fibocom L610 (AT mode) */
drivers/usb/typec/tcpm/tcpci.c +4 -0
@@ -593,6 +593,10 @@ static int tcpci_init(struct tcpc_dev *tcpc)if (time_after (jiffies, timeout))return -ETIMEDOUT ; + ret =tcpci_write16 (tcpci,TCPC_FAULT_STATUS ,TCPC_FAULT_STATUS_ALL_REG_RST_TO_DEFAULT ); +if (ret <0 ) +return ret; +/* Handle vendor init */ if (tcpci->data->init) { ret = tcpci->data->init (tcpci, tcpci->data);
drivers/usb/typec/tcpm/tcpm.c +7 -0
@@ -2747,6 +2747,13 @@ static void tcpm_pd_ctrl_request(struct tcpm_port *port, port->sink_cap_done = true;tcpm_set_state (port,ready_state (port),0 );break ; +/* +* Some port partners do not support GET_STATUS, avoid soft reset the link to +* prevent redundant power re-negotiation +*/ +case GET_STATUS_SEND : +tcpm_set_state (port,ready_state (port),0 ); +break ;case SRC_READY :case SNK_READY :if (port->vdm_state >VDM_STATE_READY ) {
fs/erofs/zdata.c +2 -0
@@ -869,6 +869,8 @@ static int z_erofs_do_read_page(struct z_erofs_decompress_frontend *fe, cur = end -min_t (erofs_off_t, offset + end - map->m_la, end);if (!(map->m_flags &EROFS_MAP_MAPPED )) {zero_user_segment (page, cur, end); + ++spiltted; + tight = false; goto next_part; }if (map->m_flags &EROFS_MAP_FRAGMENT ) {
fs/nilfs2/alloc.c +2 -1
@@ -205,7 +205,8 @@ static int nilfs_palloc_get_block(struct inode *inode, unsigned long blkoff,int ret;spin_lock (lock); -if (prev->bh && blkoff == prev->blkoff) { +if (prev->bh && blkoff == prev->blkoff && +likely (buffer_uptodate (prev->bh))) {get_bh (prev->bh); *bhp = prev->bh;spin_unlock (lock);
fs/nilfs2/inode.c +5 -2
@@ -1025,7 +1025,7 @@ int nilfs_load_inode_block(struct inode *inode, struct buffer_head **pbh)int err;spin_lock (&nilfs->ns_inode_lock); -if (ii->i_bh ==NULL ) { +if (ii->i_bh ==NULL ||unlikely (!buffer_uptodate (ii->i_bh))) {spin_unlock (&nilfs->ns_inode_lock); err =nilfs_ifile_get_inode_block (ii->i_root->ifile, inode->i_ino, pbh);
@@ -1034,7 +1034,10 @@ int nilfs_load_inode_block(struct inode *inode, struct buffer_head **pbh)spin_lock (&nilfs->ns_inode_lock);if (ii->i_bh ==NULL ) ii->i_bh = *pbh; -else { +else if (unlikely (!buffer_uptodate (ii->i_bh))) { +__brelse (ii->i_bh); + ii->i_bh = *pbh; + }else {brelse (*pbh); *pbh = ii->i_bh; }
fs/nilfs2/segment.c +5 -0
@@ -725,6 +725,11 @@ static size_t nilfs_lookup_dirty_data_buffers(struct inode *inode,struct page *page = pvec.pages[i];lock_page (page); +if (unlikely (page->mapping != mapping)) { +/* Exclude pages removed from the address space */ +unlock_page (page); +continue ; + }if (!page_has_buffers (page))create_empty_buffers (page,i_blocksize (inode),0 );unlock_page (page);
fs/smb/server/auth.c +3 -0
@@ -355,6 +355,9 @@ int ksmbd_decode_ntlmssp_auth_blob(struct authenticate_message *authblob,if (blob_len < (u64 )sess_key_off + sess_key_len)return -EINVAL ; +if (sess_key_len >CIFS_KEY_SIZE ) +return -EINVAL ; + ctx_arc4 =kmalloc (sizeof (*ctx_arc4),GFP_KERNEL );if (!ctx_arc4)return -ENOMEM ;
fs/smb/server/oplock.c +1 -1
@@ -1492,7 +1492,7 @@ struct create_context *smb2_find_context_vals(void *open_req, const char *tag, i name_len < 4 || name_off + name_len > cc_len || (value_off & 0x7) != 0 || - (value_off && (value_off < name_off + name_len)) || + (value_len && value_off < name_off + (name_len < 8 ? 8 : name_len)) || ((u64)value_off + value_len > cc_len))return ERR_PTR (-EINVAL );
fs/smb/server/smb2pdu.c +1 -1
@@ -4322,7 +4322,7 @@ static int smb2_get_ea(struct ksmbd_work *work, struct ksmbd_file *fp,if (!strncmp (name,XATTR_USER_PREFIX ,XATTR_USER_PREFIX_LEN )) name_len -=XATTR_USER_PREFIX_LEN ; - ptr = (char *)(&eainfo->name + name_len +1 ); + ptr = eainfo->name + name_len +1 ; buf_free_len -= (offsetof(struct smb2_ea_info , name) + name_len +1 );/* bailout if xattr can't fit in buf_free_len */
fs/smb/server/smb2pdu.h +1 -1
@@ -410,7 +410,7 @@ struct smb2_ea_info {__u8 Flags;__u8 EaNameLength;__le16 EaValueLength; -char name[1 ]; +char name[];/* optionally followed by value */ } __packed;/* level 15 Query */
fs/smb/server/transport_rdma.c +18 -7
@@ -1366,24 +1366,35 @@ static int smb_direct_rdma_xmit(struct smb_direct_transport *t,LIST_HEAD (msg_list);char *desc_buf;int credits_needed; -unsigned int desc_buf_len; -size_t total_length =0 ; +unsigned int desc_buf_len, desc_num =0 ;if (t->status !=SMB_DIRECT_CS_CONNECTED )return -ENOTCONN ; +if (buf_len > t->max_rdma_rw_size) +return -EINVAL ; +/* calculate needed credits */ credits_needed =0 ; desc_buf = buf;for (i =0 ; i < desc_len /sizeof (*desc); i++) { +if (!buf_len) +break ; + desc_buf_len =le32_to_cpu (desc[i].length); +if (!desc_buf_len) +return -EINVAL ; + +if (desc_buf_len > buf_len) { + desc_buf_len = buf_len; + desc[i].length =cpu_to_le32 (desc_buf_len); + buf_len =0 ; + } credits_needed +=calc_rw_credits (t, desc_buf, desc_buf_len); desc_buf += desc_buf_len; - total_length += desc_buf_len; -if (desc_buf_len ==0 || total_length > buf_len || - total_length > t->max_rdma_rw_size) -return -EINVAL ; + buf_len -= desc_buf_len; + desc_num++; } ksmbd_debug(RDMA, "RDMA %s, len %#x, needed credits %#x\n",
@@ -1395,7 +1406,7 @@ static int smb_direct_rdma_xmit(struct smb_direct_transport *t,/* build rdma_rw_ctx for each descriptor */ desc_buf = buf; -for (i =0 ; i < desc_len /sizeof (*desc); i++) { +for (i =0 ; i < desc_num; i++) { msg =kzalloc (offsetof(struct smb_direct_rdma_rw_msg , sg_list) +sizeof (struct scatterlist ) *SG_CHUNK_SIZE ,GFP_KERNEL );if (!msg) {
include/linux/usb/tcpci.h +1 -0
@@ -103,6 +103,7 @@#define TCPC_POWER_STATUS_SINKING_VBUS BIT(0)#define TCPC_FAULT_STATUS 0x1f +#define TCPC_FAULT_STATUS_ALL_REG_RST_TO_DEFAULT BIT(7)#define TCPC_ALERT_EXTENDED 0x21
kernel/module/main.c +11 -3
@@ -1214,12 +1214,20 @@ void *__symbol_get(const char *symbol) };preempt_disable (); -if (!find_symbol (&fsa) ||strong_try_module_get (fsa.owner)) { -preempt_enable (); -return NULL ; +if (!find_symbol (&fsa)) + goto fail; +if (fsa.license !=GPL_ONLY ) { +pr_warn ("failing symbol_get of non-GPLONLY symbol %s.\n" , + symbol); + goto fail; } +if (strong_try_module_get (fsa.owner)) + goto fail;preempt_enable ();return (void *)kernel_symbol_value (fsa.sym); +fail: +preempt_enable (); +return NULL ; }EXPORT_SYMBOL_GPL (__symbol_get);
sound/usb/stream.c +10 -1
@@ -1093,6 +1093,7 @@ static int __snd_usb_parse_audio_interface(struct snd_usb_audio *chip,int i, altno, err, stream;struct audioformat *fp =NULL ;struct snd_usb_power_domain *pd =NULL ; +bool set_iface_first;int num, protocol; dev = chip->dev;
@@ -1223,11 +1224,19 @@ static int __snd_usb_parse_audio_interface(struct snd_usb_audio *chip,return err; } + set_iface_first = false; +if (protocol ==UAC_VERSION_1 || + (chip->quirk_flags &QUIRK_FLAG_SET_IFACE_FIRST )) + set_iface_first = true; +/* try to set the interface... */ usb_set_interface (chip->dev, iface_no,0 ); +if (set_iface_first) +usb_set_interface (chip->dev, iface_no, altno);snd_usb_init_pitch (chip, fp);snd_usb_init_sample_rate (chip, fp, fp->rate_max); -usb_set_interface (chip->dev, iface_no, altno); +if (!set_iface_first) +usb_set_interface (chip->dev, iface_no, altno); }return 0 ; }