5.4.86-rc1 review
Subsystems (10)
Greg Kroah-Hartman
maintainerPATCH 157/453 Input: omap4-keypad - fix runtime PM error handling
In reply to Greg Kroah-HartmanFrom: Zhang Qilong <[email protected]>
[ Upstream commit 59bbf83835f591b95c3bdd09d900f3584fa227af ]
In omap4_keypad_probe, the patch fix several bugs.
1) pm_runtime_get_sync will increment pm usage counter even it failed. Forgetting to pm_runtime_put_noidle will result in reference leak.
2) In err_unmap, forget to disable runtime of device, pm_runtime_enable will increase power disable depth. Thus a pairing decrement is needed on the error handling path to keep it balanced.
3) In err_pm_disable, it will call pm_runtime_put_sync twice not one time.
To fix this we factor out code reading revision and disabling touchpad, and drop PM reference once we are done talking to the device.
--- drivers/input/keyboard/omap4-keypad.c | 89 ++++++++++++++++----------- 1 file changed, 53 insertions(+), 36 deletions(-)
drivers/input/keyboard/omap4-keypad.c +53 -36
@@ -186,12 +186,8 @@ static int omap4_keypad_open(struct input_dev *input)return 0 ; } -static void omap4_keypad_close (struct input_dev *input) +static void omap4_keypad_stop (struct omap4_keypad *keypad_data) { -struct omap4_keypad *keypad_data =input_get_drvdata (input); - -disable_irq (keypad_data->irq); -/* Disable interrupts and wake-up events */ kbd_write_irqreg (keypad_data,OMAP4_KBD_IRQENABLE ,OMAP4_VAL_IRQDISABLE );
@@ -200,7 +196,15 @@ static void omap4_keypad_close(struct input_dev *input)/* clear pending interrupts */ kbd_write_irqreg (keypad_data,OMAP4_KBD_IRQSTATUS ,kbd_read_irqreg (keypad_data,OMAP4_KBD_IRQSTATUS )); +} + +static void omap4_keypad_close (struct input_dev *input) +{ +struct omap4_keypad *keypad_data; + keypad_data =input_get_drvdata (input); +disable_irq (keypad_data->irq); +omap4_keypad_stop (keypad_data);enable_irq (keypad_data->irq);pm_runtime_put_sync (input->dev.parent);
@@ -223,13 +227,37 @@ static int omap4_keypad_parse_dt(struct device *dev,return 0 ; } +static int omap4_keypad_check_revision (struct device *dev, +struct omap4_keypad *keypad_data) +{ +unsigned int rev; + + rev =__raw_readl (keypad_data->base +OMAP4_KBD_REVISION ); + rev &=0x03 <<30 ; + rev >>=30 ; +switch (rev) { +case KBD_REVISION_OMAP4 : + keypad_data->reg_offset =0x00 ; + keypad_data->irqreg_offset =0x00 ; +break ; +case KBD_REVISION_OMAP5 : + keypad_data->reg_offset =0x10 ; + keypad_data->irqreg_offset =0x0c ; +break ; +default : +dev_err (dev,"Keypad reports unsupported revision %d" , rev); +return -EINVAL ; + } + +return 0 ; +} +static int omap4_keypad_probe (struct platform_device *pdev) {struct omap4_keypad *keypad_data;struct input_dev *input_dev;struct resource *res;unsigned int max_keys; -int rev;int irq;int error;
@@ -269,41 +297,33 @@ static int omap4_keypad_probe(struct platform_device *pdev) goto err_release_mem; } +pm_runtime_enable (&pdev->dev);/* * Enable clocks for the keypad module so that we can read * revision register. */ -pm_runtime_enable (&pdev->dev); error =pm_runtime_get_sync (&pdev->dev);if (error) {dev_err (&pdev->dev,"pm_runtime_get_sync() failed\n" ); - goto err_unmap; - } - rev =__raw_readl (keypad_data->base +OMAP4_KBD_REVISION ); - rev &=0x03 <<30 ; - rev >>=30 ; -switch (rev) { -case KBD_REVISION_OMAP4 : - keypad_data->reg_offset =0x00 ; - keypad_data->irqreg_offset =0x00 ; -break ; -case KBD_REVISION_OMAP5 : - keypad_data->reg_offset =0x10 ; - keypad_data->irqreg_offset =0x0c ; -break ; -default : -dev_err (&pdev->dev, -"Keypad reports unsupported revision %d" , rev); - error = -EINVAL ; - goto err_pm_put_sync; +pm_runtime_put_noidle (&pdev->dev); + }else { + error =omap4_keypad_check_revision (&pdev->dev, + keypad_data); +if (!error) { +/* Ensure device does not raise interrupts */ +omap4_keypad_stop (keypad_data); + } +pm_runtime_put_sync (&pdev->dev); } +if (error) + goto err_pm_disable;/* input device allocation */ keypad_data->input = input_dev =input_allocate_device ();if (!input_dev) { error = -ENOMEM ; - goto err_pm_put_sync; + goto err_pm_disable; } input_dev->name = pdev->name;
@@ -349,28 +369,25 @@ static int omap4_keypad_probe(struct platform_device *pdev) goto err_free_keymap; } -device_init_wakeup (&pdev->dev, true); -pm_runtime_put_sync (&pdev->dev); - error =input_register_device (keypad_data->input);if (error <0 ) {dev_err (&pdev->dev,"failed to register input device\n" ); - goto err_pm_disable; + goto err_free_irq; } +device_init_wakeup (&pdev->dev, true);platform_set_drvdata (pdev, keypad_data); +return 0 ; -err_pm_disable: -pm_runtime_disable (&pdev->dev); +err_free_irq:free_irq (keypad_data->irq, keypad_data); err_free_keymap:kfree (keypad_data->keymap); err_free_input:input_free_device (input_dev); -err_pm_put_sync: -pm_runtime_put_sync (&pdev->dev); -err_unmap: +err_pm_disable: +pm_runtime_disable (&pdev->dev);iounmap (keypad_data->base); err_release_mem:release_mem_region (res->start,resource_size (res));
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 158/453 clk: meson: Kconfig: fix dependency for G12A
In reply to Greg Kroah-HartmanFrom: Kevin Hilman <[email protected]>
[ Upstream commit bae69bfa3a586493469078ec4ca35499b754ba5c ]
When building only G12A, ensure that VID_PLL_DIV clock driver is selected, otherwise results in this build error:
ERROR: modpost: "meson_vid_pll_div_ro_ops" [drivers/clk/meson/g12a.ko] undefined!
--- drivers/clk/meson/Kconfig | 1 + 1 file changed, 1 insertion(+)
drivers/clk/meson/Kconfig +1 -0
@@ -103,6 +103,7 @@ config COMMON_CLK_G12A select COMMON_CLK_MESON_AO_CLKC select COMMON_CLK_MESON_EE_CLKC select COMMON_CLK_MESON_CPU_DYNDIV + select COMMON_CLK_MESON_VID_PLL_DIV select MFD_SYSCON help Support for the clock controller on Amlogic S905D2, S905X2 and S905Y2
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 159/453 RDMA/cxgb4: Validate the number of CQEs
In reply to Greg Kroah-HartmanFrom: Kamal Heib <[email protected]>
[ Upstream commit 6d8285e604e0221b67bd5db736921b7ddce37d00 ]
Before create CQ, make sure that the requested number of CQEs is in the supported range.
--- drivers/infiniband/hw/cxgb4/cq.c | 3 +++ 1 file changed, 3 insertions(+)
drivers/infiniband/hw/cxgb4/cq.c +3 -0
@@ -1007,6 +1007,9 @@ int c4iw_create_cq(struct ib_cq *ibcq, const struct ib_cq_init_attr *attr,if (attr->flags)return -EINVAL ; +if (entries <1 || entries > ibdev->attrs.max_cqe) +return -EINVAL ; +if (vector >= rhp->rdev.lldi.nciq)return -EINVAL ;
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 160/453 memstick: fix a double-free bug in memstick_check
In reply to Greg Kroah-HartmanFrom: Qinglang Miao <[email protected]>
[ Upstream commit e3e9ced5c93803d5b2ea1942c4bf0192622531d6 ]
kfree(host->card) has been called in put_device so that another kfree would raise cause a double-free bug.
--- drivers/memstick/core/memstick.c | 1 - 1 file changed, 1 deletion(-)
drivers/memstick/core/memstick.c +0 -1
@@ -468,7 +468,6 @@ static void memstick_check(struct work_struct *work) host->card = card;if (device_register (&card->dev)) {put_device (&card->dev); -kfree (host->card); host->card =NULL ; } }else
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 161/453 ARM: dts: at91: sama5d4_xplained: add pincontrol for USB Host
In reply to Greg Kroah-HartmanFrom: Cristian Birsan <[email protected]>
[ Upstream commit be4dd2d448816a27c1446f8f37fce375daf64148 ]
The pincontrol node is needed for USB Host since Linux v5.7-rc1. Without it the driver probes but VBus is not powered because of wrong pincontrol configuration.
--- arch/arm/boot/dts/at91-sama5d4_xplained.dts | 7 +++++++ 1 file changed, 7 insertions(+)
arch/arm/boot/dts/at91-sama5d4_xplained.dts +7 -0
@@ -133,6 +133,11 @@ atmel,pins = <AT91_PIOE 31 AT91_PERIPH_GPIO AT91_PINCTRL_DEGLITCH>; }; + pinctrl_usb_default: usb_default { + atmel,pins = + <AT91_PIOE 11 AT91_PERIPH_GPIO AT91_PINCTRL_NONE + AT91_PIOE 14 AT91_PERIPH_GPIO AT91_PINCTRL_NONE>; + }; pinctrl_key_gpio: key_gpio_0 { atmel,pins = <AT91_PIOE 8 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_UP_DEGLITCH>;
@@ -158,6 +163,8 @@ &pioE 11 GPIO_ACTIVE_HIGH &pioE 14 GPIO_ACTIVE_HIGH >; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_usb_default>; status = "okay"; };
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 162/453 ARM: dts: at91: sama5d3_xplained: add pincontrol for USB Host
In reply to Greg Kroah-HartmanFrom: Cristian Birsan <[email protected]>
[ Upstream commit e1062fa7292f1e3744db0a487c4ac0109e09b03d ]
The pincontrol node is needed for USB Host since Linux v5.7-rc1. Without it the driver probes but VBus is not powered because of wrong pincontrol configuration.
--- arch/arm/boot/dts/at91-sama5d3_xplained.dts | 7 +++++++ 1 file changed, 7 insertions(+)
arch/arm/boot/dts/at91-sama5d3_xplained.dts +7 -0
@@ -242,6 +242,11 @@ atmel,pins = <AT91_PIOE 9 AT91_PERIPH_GPIO AT91_PINCTRL_DEGLITCH>; /* PE9, conflicts with A9 */ }; + pinctrl_usb_default: usb_default { + atmel,pins = + <AT91_PIOE 3 AT91_PERIPH_GPIO AT91_PINCTRL_NONE + AT91_PIOE 4 AT91_PERIPH_GPIO AT91_PINCTRL_NONE>; + }; }; }; };
@@ -259,6 +264,8 @@ &pioE 3 GPIO_ACTIVE_LOW &pioE 4 GPIO_ACTIVE_LOW >; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_usb_default>; status = "okay"; };
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 163/453 mmc: pxamci: Fix error return code in pxamci_probe
In reply to Greg Kroah-HartmanFrom: Zhihao Cheng <[email protected]>
[ Upstream commit d7b819b5d33869d41bdaa427aeb98ae24c57a38b ]
Fix to return the error code from devm_gpiod_get_optional() instaed of 0 in pxamci_probe().
--- drivers/mmc/host/pxamci.c | 1 + 1 file changed, 1 insertion(+)
drivers/mmc/host/pxamci.c +1 -0
@@ -729,6 +729,7 @@ static int pxamci_probe(struct platform_device *pdev) host->power =devm_gpiod_get_optional (dev,"power" ,GPIOD_OUT_LOW );if (IS_ERR (host->power)) { + ret =PTR_ERR (host->power);dev_err (dev,"Failed requesting gpio_power\n" ); goto out; }
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 164/453 orinoco: Move context allocation after processing the skb
In reply to Greg Kroah-HartmanFrom: Sebastian Andrzej Siewior <[email protected]>
[ Upstream commit a31eb615646a63370aa1da1053c45439c7653d83 ]
ezusb_xmit() allocates a context which is leaked if orinoco_process_xmit_skb() returns an error.
Move ezusb_alloc_ctx() after the invocation of orinoco_process_xmit_skb() because the context is not needed so early. ezusb_access_ltv() will cleanup the context in case of an error.
--- .../net/wireless/intersil/orinoco/orinoco_usb.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-)
drivers/net/wireless/intersil/orinoco/orinoco_usb.c +7 -7
@@ -1234,13 +1234,6 @@ static netdev_tx_t ezusb_xmit(struct sk_buff *skb, struct net_device *dev)if (skb->len <ETH_HLEN ) goto drop; - ctx =ezusb_alloc_ctx (upriv,EZUSB_RID_TX ,0 ); -if (!ctx) - goto busy; - -memset (ctx->buf,0 ,BULK_BUF_SIZE ); - buf = ctx->buf->data; - tx_control =0 ; err = orinoco_process_xmit_skb(skb, dev, priv, &tx_control,
@@ -1248,6 +1241,13 @@ static netdev_tx_t ezusb_xmit(struct sk_buff *skb, struct net_device *dev)if (err) goto drop; + ctx =ezusb_alloc_ctx (upriv,EZUSB_RID_TX ,0 ); +if (!ctx) + goto drop; + +memset (ctx->buf,0 ,BULK_BUF_SIZE ); + buf = ctx->buf->data; + {__le16 *tx_cntl = (__le16 *)buf; *tx_cntl =cpu_to_le16 (tx_control);
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 165/453 qtnfmac: fix error return code in qtnf_pcie_probe()
In reply to Greg Kroah-HartmanFrom: Wang Hai <[email protected]>
[ Upstream commit 31e07aa33fa7cdc93fa91c3f78f031e8d38862c2 ]
Fix to return a negative error code from the error handling case instead of 0, as done elsewhere in this function.
--- drivers/net/wireless/quantenna/qtnfmac/pcie/pcie.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
drivers/net/wireless/quantenna/qtnfmac/pcie/pcie.c +3 -3
@@ -299,19 +299,19 @@ static int qtnf_pcie_probe(struct pci_dev *pdev, const struct pci_device_id *id) sysctl_bar =qtnf_map_bar (pdev,QTN_SYSCTL_BAR );if (IS_ERR (sysctl_bar)) {pr_err ("failed to map BAR%u\n" ,QTN_SYSCTL_BAR ); -return ret; +return PTR_ERR (sysctl_bar); } dmareg_bar =qtnf_map_bar (pdev,QTN_DMA_BAR );if (IS_ERR (dmareg_bar)) {pr_err ("failed to map BAR%u\n" ,QTN_DMA_BAR ); -return ret; +return PTR_ERR (dmareg_bar); } epmem_bar =qtnf_map_bar (pdev,QTN_SHMEM_BAR );if (IS_ERR (epmem_bar)) {pr_err ("failed to map BAR%u\n" ,QTN_SHMEM_BAR ); -return ret; +return PTR_ERR (epmem_bar); } chipid =qtnf_chip_id_get (sysctl_bar);
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 166/453 rsi: fix error return code in rsi_reset_card()
In reply to Greg Kroah-HartmanFrom: Zhang Changzhong <[email protected]>
[ Upstream commit fb21d14694bd46a538258d86498736490b3ba855 ]
Fix to return a negative error code from the error handling case instead of 0, as done elsewhere in this function.
--- drivers/net/wireless/rsi/rsi_91x_usb.c | 30 +++++++++++++------------- 1 file changed, 15 insertions(+), 15 deletions(-)
drivers/net/wireless/rsi/rsi_91x_usb.c +15 -15
@@ -733,24 +733,24 @@ static int rsi_reset_card(struct rsi_hw *adapter)if (ret <0 ) goto fail; }else { -if ((rsi_usb_master_reg_write (adapter, -NWP_WWD_INTERRUPT_TIMER , -NWP_WWD_INT_TIMER_CLKS , -RSI_9116_REG_SIZE )) <0 ) { + ret =rsi_usb_master_reg_write (adapter, +NWP_WWD_INTERRUPT_TIMER , +NWP_WWD_INT_TIMER_CLKS , +RSI_9116_REG_SIZE ); +if (ret <0 ) goto fail; - } -if ((rsi_usb_master_reg_write (adapter, -NWP_WWD_SYSTEM_RESET_TIMER , -NWP_WWD_SYS_RESET_TIMER_CLKS , -RSI_9116_REG_SIZE )) <0 ) { + ret =rsi_usb_master_reg_write (adapter, +NWP_WWD_SYSTEM_RESET_TIMER , +NWP_WWD_SYS_RESET_TIMER_CLKS , +RSI_9116_REG_SIZE ); +if (ret <0 ) goto fail; - } -if ((rsi_usb_master_reg_write (adapter, -NWP_WWD_MODE_AND_RSTART , -NWP_WWD_TIMER_DISABLE , -RSI_9116_REG_SIZE )) <0 ) { + ret =rsi_usb_master_reg_write (adapter, +NWP_WWD_MODE_AND_RSTART , +NWP_WWD_TIMER_DISABLE , +RSI_9116_REG_SIZE ); +if (ret <0 ) goto fail; - } }rsi_dbg (INFO_ZONE ,"Reset card done\n" );
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 167/453 cw1200: fix missing destroy_workqueue() on error in cw1200_init_common
In reply to Greg Kroah-HartmanFrom: Qinglang Miao <[email protected]>
[ Upstream commit 7ec8a926188eb8e7a3cbaca43ec44f2d7146d71b ]
Add the missing destroy_workqueue() before return from cw1200_init_common in the error handling case.
--- drivers/net/wireless/st/cw1200/main.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/net/wireless/st/cw1200/main.c +2 -0
@@ -381,6 +381,7 @@ static struct ieee80211_hw *cw1200_init_common(const u8 *macaddr, CW1200_LINK_ID_MAX, cw1200_skb_dtor, priv)) { +destroy_workqueue (priv->workqueue);ieee80211_free_hw (hw);return NULL ; }
@@ -392,6 +393,7 @@ static struct ieee80211_hw *cw1200_init_common(const u8 *macaddr,for (; i >0 ; i--)cw1200_queue_deinit (&priv->tx_queue[i -1 ]);cw1200_queue_stats_deinit (&priv->tx_queue_stats); +destroy_workqueue (priv->workqueue);ieee80211_free_hw (hw);return NULL ; }
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 168/453 dmaengine: mv_xor_v2: Fix error return code in mv_xor_v2_probe()
In reply to Greg Kroah-HartmanFrom: Zhihao Cheng <[email protected]>
[ Upstream commit c95e6515a8c065862361f7e0e452978ade7f94ec ]
Return the corresponding error code when first_msi_entry() returns NULL in mv_xor_v2_probe().
--- drivers/dma/mv_xor_v2.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/dma/mv_xor_v2.c +3 -1
@@ -766,8 +766,10 @@ static int mv_xor_v2_probe(struct platform_device *pdev) goto disable_clk; msi_desc =first_msi_entry (&pdev->dev); -if (!msi_desc) +if (!msi_desc) { + ret = -ENODEV ; goto free_msi_irqs; + } xor_dev->msi_desc = msi_desc; ret = devm_request_irq(&pdev->dev, msi_desc->irq,
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 169/453 leds: netxbig: add missing put_device() call in netxbig_leds_get_of_pdata()
In reply to Greg Kroah-HartmanFrom: Yu Kuai <[email protected]>
[ Upstream commit 311066aa9ebcd6f1789c829da5039ca02f2dfe46 ]
if of_find_device_by_node() succeed, netxbig_leds_get_of_pdata() doesn't have a corresponding put_device(). Thus add jump target to fix the exception handling for this function implementation.
--- drivers/leds/leds-netxbig.c | 35 ++++++++++++++++++++++++----------- 1 file changed, 24 insertions(+), 11 deletions(-)
drivers/leds/leds-netxbig.c +24 -11
@@ -430,31 +430,39 @@ static int netxbig_leds_get_of_pdata(struct device *dev, gpio_ext =devm_kzalloc (dev,sizeof (*gpio_ext),GFP_KERNEL );if (!gpio_ext) {of_node_put (gpio_ext_np); -return -ENOMEM ; + ret = -ENOMEM ; + goto put_device; } ret =gpio_ext_get_of_pdata (dev, gpio_ext_np, gpio_ext);of_node_put (gpio_ext_np);if (ret) -return ret; + goto put_device; pdata->gpio_ext = gpio_ext;/* Timers (optional) */ ret =of_property_count_u32_elems (np,"timers" );if (ret >0 ) { -if (ret %3 ) -return -EINVAL ; +if (ret %3 ) { + ret = -EINVAL ; + goto put_device; + } + num_timers = ret /3 ; timers =devm_kcalloc (dev, num_timers,sizeof (*timers),GFP_KERNEL ); -if (!timers) -return -ENOMEM ; +if (!timers) { + ret = -ENOMEM ; + goto put_device; + }for (i =0 ; i < num_timers; i++) {u32 tmp;of_property_read_u32_index (np,"timers" ,3 * i, &timers[i].mode); -if (timers[i].mode >=NETXBIG_LED_MODE_NUM ) -return -EINVAL ; +if (timers[i].mode >=NETXBIG_LED_MODE_NUM ) { + ret = -EINVAL ; + goto put_device; + }of_property_read_u32_index (np,"timers" ,3 * i +1 , &tmp); timers[i].delay_on = tmp;
@@ -470,12 +478,15 @@ static int netxbig_leds_get_of_pdata(struct device *dev, num_leds =of_get_child_count (np);if (!num_leds) {dev_err (dev,"No LED subnodes found in DT\n" ); -return -ENODEV ; + ret = -ENODEV ; + goto put_device; } leds =devm_kcalloc (dev, num_leds,sizeof (*leds),GFP_KERNEL ); -if (!leds) -return -ENOMEM ; +if (!leds) { + ret = -ENOMEM ; + goto put_device; + } led = leds;for_each_child_of_node (np, child) {
@@ -556,6 +567,8 @@ static int netxbig_leds_get_of_pdata(struct device *dev, err_node_put:of_node_put (child); +put_device: +put_device (gpio_ext_dev);return ret; }
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 170/453 arm64: tegra: Fix DT binding for IO High Voltage entry
In reply to Greg Kroah-HartmanFrom: Vidya Sagar <[email protected]>
[ Upstream commit 6b26c1a034885923822f6c4d94f8644d32bc2481 ]
Fix the device-tree entry that represents I/O High Voltage property by replacing 'nvidia,io-high-voltage' with 'nvidia,io-hv' as the former entry is deprecated.
--- arch/arm64/boot/dts/nvidia/tegra194.dtsi | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
arch/arm64/boot/dts/nvidia/tegra194.dtsi +2 -2
@@ -144,7 +144,7 @@ nvidia,schmitt = <TEGRA_PIN_DISABLE>; nvidia,lpdr = <TEGRA_PIN_ENABLE>; nvidia,enable-input = <TEGRA_PIN_DISABLE>; - nvidia,io-high-voltage = <TEGRA_PIN_ENABLE>; + nvidia,io-hv = <TEGRA_PIN_ENABLE>; nvidia,tristate = <TEGRA_PIN_DISABLE>; nvidia,pull = <TEGRA_PIN_PULL_NONE>; };
@@ -156,7 +156,7 @@ nvidia,schmitt = <TEGRA_PIN_DISABLE>; nvidia,lpdr = <TEGRA_PIN_ENABLE>; nvidia,enable-input = <TEGRA_PIN_ENABLE>; - nvidia,io-high-voltage = <TEGRA_PIN_ENABLE>; + nvidia,io-hv = <TEGRA_PIN_ENABLE>; nvidia,tristate = <TEGRA_PIN_DISABLE>; nvidia,pull = <TEGRA_PIN_PULL_NONE>; };
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 171/453 media: siano: fix memory leak of debugfs members in smsdvb_hotplug
In reply to Greg Kroah-HartmanFrom: Keita Suzuki <[email protected]>
[ Upstream commit abf287eeff4c6da6aa804bbd429dfd9d0dfb6ea7 ]
When dvb_create_media_graph fails, the debugfs kept inside client should be released. However, the current implementation does not release them.
Fix this by adding a new goto label to call smsdvb_debugfs_release.
--- drivers/media/common/siano/smsdvb-main.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
drivers/media/common/siano/smsdvb-main.c +4 -1
@@ -1169,12 +1169,15 @@ static int smsdvb_hotplug(struct smscore_device_t *coredev, rc =dvb_create_media_graph (&client->adapter, true);if (rc <0 ) {pr_err ("dvb_create_media_graph failed %d\n" , rc); - goto client_error; + goto media_graph_error; }pr_info ("DVB interface registered.\n" );return 0 ; +media_graph_error: +smsdvb_debugfs_release (client); + client_error:dvb_unregister_frontend (&client->frontend);
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 172/453 platform/x86: mlx-platform: Remove PSU EEPROM from default platform configuration
In reply to Greg Kroah-HartmanFrom: Vadim Pasternak <[email protected]>
[ Upstream commit 2bf5046bdb649908df8bcc0a012c56eee931a9af ]
Remove PSU EEPROM configuration for systems class equipped with Mellanox chip Spectrum and Celeron CPU - system types MSN2700, MSN2100. Till now all the systems from this class used few types of power units, all equipped with EEPROM device with address space two bytes. Thus, all these devices have been handled by EEPROM driver "24c02".
There is a new requirement is to support power unit replacement by "off the shelf" device, matching electrical required parameters. Such device can be equipped with different EEPROM type, which could be one byte address space addressing or even could be not equipped with EEPROM. In such case "24c02" will not work.
--- drivers/platform/x86/mlx-platform.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-)
drivers/platform/x86/mlx-platform.c +2 -4
@@ -273,15 +273,13 @@ static struct mlxreg_core_data mlxplat_mlxcpld_default_psu_items_data[] = { .label = "psu1", .reg = MLXPLAT_CPLD_LPC_REG_PSU_OFFSET, .mask = BIT(0), - .hpdev.brdinfo = &mlxplat_mlxcpld_psu[0], - .hpdev.nr = MLXPLAT_CPLD_PSU_DEFAULT_NR, + .hpdev.nr = MLXPLAT_CPLD_NR_NONE, }, { .label = "psu2", .reg = MLXPLAT_CPLD_LPC_REG_PSU_OFFSET, .mask = BIT(1), - .hpdev.brdinfo = &mlxplat_mlxcpld_psu[1], - .hpdev.nr = MLXPLAT_CPLD_PSU_DEFAULT_NR, + .hpdev.nr = MLXPLAT_CPLD_NR_NONE, }, };
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 173/453 platform/x86: mlx-platform: Remove PSU EEPROM from MSN274x platform configuration
In reply to Greg Kroah-HartmanFrom: Vadim Pasternak <[email protected]>
[ Upstream commit 912b341585e302ee44fc5a2733f7bcf505e2c86f ]
Remove PSU EEPROM configuration for systems class equipped with Mellanox chip Spectrum and ATOM CPU - system types MSN274x. Till now all the systems from this class used few types of power units, all equipped with EEPROM device with address space two bytes. Thus, all these devices have been handled by EEPROM driver "24c02".
There is a new requirement is to support power unit replacement by "off the shelf" device, matching electrical required parameters. Such device can be equipped with different EEPROM type, which could be one byte address space addressing or even could be not equipped with EEPROM. In such case "24c02" will not work.
--- drivers/platform/x86/mlx-platform.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-)
drivers/platform/x86/mlx-platform.c +2 -4
@@ -442,15 +442,13 @@ static struct mlxreg_core_data mlxplat_mlxcpld_msn274x_psu_items_data[] = { .label = "psu1", .reg = MLXPLAT_CPLD_LPC_REG_PSU_OFFSET, .mask = BIT(0), - .hpdev.brdinfo = &mlxplat_mlxcpld_psu[0], - .hpdev.nr = MLXPLAT_CPLD_PSU_MSNXXXX_NR, + .hpdev.nr = MLXPLAT_CPLD_NR_NONE, }, { .label = "psu2", .reg = MLXPLAT_CPLD_LPC_REG_PSU_OFFSET, .mask = BIT(1), - .hpdev.brdinfo = &mlxplat_mlxcpld_psu[1], - .hpdev.nr = MLXPLAT_CPLD_PSU_MSNXXXX_NR, + .hpdev.nr = MLXPLAT_CPLD_NR_NONE, }, };
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 174/453 samples: bpf: Fix lwt_len_hist reusing previous BPF map
In reply to Greg Kroah-HartmanFrom: Daniel T. Lee <[email protected]>
[ Upstream commit 0afe0a998c40085a6342e1aeb4c510cccba46caf ]
Currently, lwt_len_hist's map lwt_len_hist_map is uses pinning, and the map isn't cleared on test end. This leds to reuse of that map for each test, which prevents the results of the test from being accurate.
This commit fixes the problem by removing of pinned map from bpffs. Also, this commit add the executable permission to shell script files.
--- samples/bpf/lwt_len_hist.sh | 2 ++ samples/bpf/test_lwt_bpf.sh | 0 2 files changed, 2 insertions(+) mode change 100644 => 100755 samples/bpf/lwt_len_hist.sh mode change 100644 => 100755 samples/bpf/test_lwt_bpf.sh
samples/bpf/lwt_len_hist.sh +2 -0
@@ -8,6 +8,8 @@ VETH1=tst_lwt1b TRACE_ROOT=/sys/kernel/debug/tracing function cleanup { + # To reset saved histogram, remove pinned map + rm /sys/fs/bpf/tc/globals/lwt_len_hist_map ip route del 192.168.253.2/32 dev $VETH0 2> /dev/null ip link del $VETH0 2> /dev/null ip link del $VETH1 2> /dev/null
samples/bpf/test_lwt_bpf.sh +0 -0
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 175/453 media: imx214: Fix stop streaming
In reply to Greg Kroah-HartmanFrom: Daniel Gomez <[email protected]>
[ Upstream commit eeb76afbe8d91e112396c6281cd020725160f006 ]
Stop video streaming when requested.
When s_stream is called to stop the video streaming, if/else condition calls start_streaming function instead of the one for stopping it.
--- drivers/media/i2c/imx214.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/media/i2c/imx214.c +1 -1
@@ -785,7 +785,7 @@ static int imx214_s_stream(struct v4l2_subdev *subdev, int enable)if (ret <0 ) goto err_rpm_put; }else { - ret =imx214_start_streaming (imx214); + ret =imx214_stop_streaming (imx214);if (ret <0 ) goto err_rpm_put;pm_runtime_put (imx214->dev);
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 176/453 mips: cdmm: fix use-after-free in mips_cdmm_bus_discover
In reply to Greg Kroah-HartmanFrom: Qinglang Miao <[email protected]>
[ Upstream commit f0e82242b16826077a2775eacfe201d803bb7a22 ]
kfree(dev) has been called inside put_device so anther kfree would cause a use-after-free bug/
--- drivers/bus/mips_cdmm.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-)
drivers/bus/mips_cdmm.c +1 -3
@@ -544,10 +544,8 @@ static void mips_cdmm_bus_discover(struct mips_cdmm_bus *bus)dev_set_name (&dev->dev,"cdmm%u-%u" , cpu, id); ++id; ret =device_register (&dev->dev); -if (ret) { +if (ret)put_device (&dev->dev); -kfree (dev); - } } }
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 177/453 media: max2175: fix max2175_set_csm_mode() error code
In reply to Greg Kroah-HartmanFrom: Dan Carpenter <[email protected]>
[ Upstream commit 9b1b0cb0636166187478ef68d5b95f5caea062ec ]
This is supposed to return negative error codes but the type is bool so it returns true instead.
--- drivers/media/i2c/max2175.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/media/i2c/max2175.c +1 -1
@@ -503,7 +503,7 @@ static void max2175_set_bbfilter(struct max2175 *ctx) } } -static bool max2175_set_csm_mode (struct max2175 *ctx, +static int max2175_set_csm_mode (struct max2175 *ctx,enum max2175_csm_mode new_mode) {int ret =max2175_poll_csm_ready (ctx);
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 178/453 slimbus: qcom-ngd-ctrl: Avoid sending power requests without QMI
In reply to Greg Kroah-HartmanFrom: Bjorn Andersson <[email protected]>
[ Upstream commit 39014ce6d6028614a46395923a2c92d058b6fa87 ]
Attempting to send a power request during PM operations, when the QMI handle isn't initialized results in a NULL pointer dereference. So check if the QMI handle has been initialized before attempting to post the power requests.
--- drivers/slimbus/qcom-ngd-ctrl.c | 6 ++++++ 1 file changed, 6 insertions(+)
drivers/slimbus/qcom-ngd-ctrl.c +6 -0
@@ -1201,6 +1201,9 @@ static int qcom_slim_ngd_runtime_resume(struct device *dev)struct qcom_slim_ngd_ctrl *ctrl =dev_get_drvdata (dev);int ret =0 ; +if (!ctrl->qmi.handle) +return 0 ; +if (ctrl->state >=QCOM_SLIM_NGD_CTRL_ASLEEP ) ret =qcom_slim_ngd_power_up (ctrl);if (ret) {
@@ -1497,6 +1500,9 @@ static int __maybe_unused qcom_slim_ngd_runtime_suspend(struct device *dev)struct qcom_slim_ngd_ctrl *ctrl =dev_get_drvdata (dev);int ret =0 ; +if (!ctrl->qmi.handle) +return 0 ; + ret =qcom_slim_qmi_power_request (ctrl, false);if (ret && ret != -EBUSY )dev_info (ctrl->dev,"slim resource not idle:%d\n" , ret);
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 179/453 HSI: omap_ssi: Dont jump to free ID in ssi_add_controller()
In reply to Greg Kroah-HartmanFrom: Jing Xiangfeng <[email protected]>
[ Upstream commit 41fff6e19bc8d6d8bca79ea388427c426e72e097 ]
In current code, it jumps to ida_simple_remove() when ida_simple_get() failes to allocate an ID. Just return to fix it.
--- drivers/hsi/controllers/omap_ssi_core.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/hsi/controllers/omap_ssi_core.c +1 -1
@@ -355,7 +355,7 @@ static int ssi_add_controller(struct hsi_controller *ssi, err =ida_simple_get (&platform_omap_ssi_ida,0 ,0 ,GFP_KERNEL );if (err <0 ) - goto out_err; +return err; ssi->id = err; ssi->owner =THIS_MODULE ;
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 180/453 ARM: dts: Remove non-existent i2c1 from 98dx3236
In reply to Greg Kroah-HartmanFrom: Chris Packham <[email protected]>
[ Upstream commit 7f24479ead579459106bb55c2320a000135731f9 ]
The switches with integrated CPUs have only got a single i2c controller. They incorrectly gained one when they were split from the Armada-XP.
--- arch/arm/boot/dts/armada-xp-98dx3236.dtsi | 5 ----- 1 file changed, 5 deletions(-)
arch/arm/boot/dts/armada-xp-98dx3236.dtsi +0 -5
@@ -266,11 +266,6 @@ reg = <0x11000 0x100>; }; -&i2c1 { - compatible = "marvell,mv78230-i2c", "marvell,mv64xxx-i2c"; - reg = <0x11100 0x100>; -}; - &mpic { reg = <0x20a00 0x2d0>, <0x21070 0x58>; };
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 181/453 arm64: dts: armada-3720-turris-mox: update ethernet-phy handle name
In reply to Greg Kroah-HartmanFrom: Marek Behún <[email protected]>
[ Upstream commit 3aa669a994c9110a2dc7e08a5c0958a9ea5eb17c ]
Use property name phy-handle instead of the deprecated phy to connect eth2 to the PHY.
--- arch/arm64/boot/dts/marvell/armada-3720-turris-mox.dts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/arm64/boot/dts/marvell/armada-3720-turris-mox.dts +1 -1
@@ -144,7 +144,7 @@ pinctrl-names = "default"; pinctrl-0 = <&rgmii_pins>; phy-mode = "rgmii-id"; - phy = <&phy1>; + phy-handle = <&phy1>; status = "okay"; };
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 182/453 arm64: dts: rockchip: Set dr_mode to "host" for OTG on rk3328-roc-cc
In reply to Greg Kroah-HartmanFrom: Chen-Yu Tsai <[email protected]>
[ Upstream commit 4076a007bd0f6171434bdb119a0b8797749b0502 ]
The board has a standard USB A female port connected to the USB OTG controller's data pins. Set dr_mode in the OTG controller node to indicate this usage, instead of having the implementation guess.
--- arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts | 1 + 1 file changed, 1 insertion(+)
arch/arm64/boot/dts/rockchip/rk3328-roc-cc.dts +1 -0
@@ -333,6 +333,7 @@ }; &usb20_otg { + dr_mode = "host"; status = "okay"; };
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 183/453 power: supply: axp288_charger: Fix HP Pavilion x2 10 DMI matching
In reply to Greg Kroah-HartmanFrom: Hans de Goede <[email protected]>
[ Upstream commit a0f1ccd96c7049377d892a4299b6d5e47ec9179d ]
Commit 9c80662a74cd ("power: supply: axp288_charger: Add special handling for HP Pavilion x2 10") added special handling for HP Pavilion x2 10 models which use the weird combination of a Type-C connector and the non Type-C aware AXP288 PMIC.
This special handling was activated by a DMI match a the product-name of "HP Pavilion x2 Detachable". Recently I've learned that there are also older "HP Pavilion x2 Detachable" models with an AXP288 PMIC + a micro-usb connector where we should not activate the special handling for the Type-C connectors.
Extend the matching to also match on the DMI board-name and match on the 2 boards (one Bay Trail based one Cherry Trail based) of which we are certain that they use the AXP288 + Type-C connector combination.
Note the DSDT code from these older (AXP288 + micro-USB) models contains some AML code (which never runs under Linux) which reads the micro-USB connector id-pin and if it is pulled to ground, which would normally mean the port is in host mode!, then it sets the input-current-limit to 3A, it seems HP is using the micro-USB port as a charging only connector and identifies their own 3A capable charger though this hack which is a major violation of the USB specs. Note HP also hardcodes a 2A limit when the id-pin is not pulled to ground, which is also in violation of the specs.
I've no intention to add support for HP's hack to support 3A charging on these older models. By making the DMI matches for the Type-C equipped models workaround more tighter, these older models will be treated just like any other AXP288 + micro-USB equipped device and the input-current limit will follow the BC 1.2 spec (using the defacto standard values there where the BC 1.2 spec defines a range).
--- drivers/power/supply/axp288_charger.c | 28 ++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-)
drivers/power/supply/axp288_charger.c +17 -11
@@ -548,14 +548,15 @@ out:/* * The HP Pavilion x2 10 series comes in a number of variants: -* Bay Trail SoC + AXP288 PMIC, DMI_BOARD_NAME: "815D" -* Cherry Trail SoC + AXP288 PMIC, DMI_BOARD_NAME: "813E" -* Cherry Trail SoC + TI PMIC, DMI_BOARD_NAME: "827C" or "82F4" +* Bay Trail SoC + AXP288 PMIC, Micro-USB, DMI_BOARD_NAME: "8021" +* Bay Trail SoC + AXP288 PMIC, Type-C, DMI_BOARD_NAME: "815D" +* Cherry Trail SoC + AXP288 PMIC, Type-C, DMI_BOARD_NAME: "813E" +* Cherry Trail SoC + TI PMIC, Type-C, DMI_BOARD_NAME: "827C" or "82F4" * -* The variants with the AXP288 PMIC are all kinds of special: +* The variants with the AXP288 + Type-C connector are all kinds of special: * -* 1. All variants use a Type-C connector which the AXP288 does not support, so -* when using a Type-C charger it is not recognized. Unlike most AXP288 devices, +* 1. They use a Type-C connector which the AXP288 does not support, so when +* using a Type-C charger it is not recognized. Unlike most AXP288 devices, * this model actually has mostly working ACPI AC / Battery code, the ACPI code * "solves" this by simply setting the input_current_limit to 3A. * There are still some issues with the ACPI code, so we use this native driver,
@@ -578,12 +579,17 @@ out:*/ static const struct dmi_system_id axp288_hp_x2_dmi_ids[] = { { -/* -* Bay Trail model has "Hewlett-Packard" as sys_vendor, Cherry -* Trail model has "HP", so we only match on product_name. -*/ .matches = { -DMI_MATCH (DMI_PRODUCT_NAME ,"HP Pavilion x2 Detachable" ), +DMI_EXACT_MATCH (DMI_SYS_VENDOR ,"Hewlett-Packard" ), +DMI_EXACT_MATCH (DMI_PRODUCT_NAME ,"HP Pavilion x2 Detachable" ), +DMI_EXACT_MATCH (DMI_BOARD_NAME ,"815D" ), + }, + }, + { + .matches = { +DMI_EXACT_MATCH (DMI_SYS_VENDOR ,"HP" ), +DMI_EXACT_MATCH (DMI_PRODUCT_NAME ,"HP Pavilion x2 Detachable" ), +DMI_EXACT_MATCH (DMI_BOARD_NAME ,"813E" ), }, }, {}/* Terminating entry */
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 184/453 power: supply: bq24190_charger: fix reference leak
In reply to Greg Kroah-HartmanFrom: Zhang Qilong <[email protected]>
[ Upstream commit b2f6cb78eaa1cad57dd3fe11d0458cd4fae9a584 ]
pm_runtime_get_sync will increment pm usage counter even it failed. Forgetting to call pm_runtime_put_noidle will result in reference leak in callers(bq24190_sysfs_show, bq24190_charger_get_property, bq24190_charger_set_property, bq24190_battery_get_property, bq24190_battery_set_property), so we should fix it.
--- drivers/power/supply/bq24190_charger.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-)
drivers/power/supply/bq24190_charger.c +15 -5
@@ -448,8 +448,10 @@ static ssize_t bq24190_sysfs_show(struct device *dev,return -EINVAL ; ret =pm_runtime_get_sync (bdi->dev); -if (ret <0 ) +if (ret <0 ) { +pm_runtime_put_noidle (bdi->dev);return ret; + } ret =bq24190_read_mask (bdi, info->reg, info->mask, info->shift, &v);if (ret)
@@ -1075,8 +1077,10 @@ static int bq24190_charger_get_property(struct power_supply *psy,dev_dbg (bdi->dev,"prop: %d\n" , psp); ret =pm_runtime_get_sync (bdi->dev); -if (ret <0 ) +if (ret <0 ) { +pm_runtime_put_noidle (bdi->dev);return ret; + }switch (psp) {case POWER_SUPPLY_PROP_CHARGE_TYPE :
@@ -1147,8 +1151,10 @@ static int bq24190_charger_set_property(struct power_supply *psy,dev_dbg (bdi->dev,"prop: %d\n" , psp); ret =pm_runtime_get_sync (bdi->dev); -if (ret <0 ) +if (ret <0 ) { +pm_runtime_put_noidle (bdi->dev);return ret; + }switch (psp) {case POWER_SUPPLY_PROP_ONLINE :
@@ -1408,8 +1414,10 @@ static int bq24190_battery_get_property(struct power_supply *psy,dev_dbg (bdi->dev,"prop: %d\n" , psp); ret =pm_runtime_get_sync (bdi->dev); -if (ret <0 ) +if (ret <0 ) { +pm_runtime_put_noidle (bdi->dev);return ret; + }switch (psp) {case POWER_SUPPLY_PROP_STATUS :
@@ -1454,8 +1462,10 @@ static int bq24190_battery_set_property(struct power_supply *psy,dev_dbg (bdi->dev,"prop: %d\n" , psp); ret =pm_runtime_get_sync (bdi->dev); -if (ret <0 ) +if (ret <0 ) { +pm_runtime_put_noidle (bdi->dev);return ret; + }switch (psp) {case POWER_SUPPLY_PROP_ONLINE :
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 185/453 genirq/irqdomain: Dont try to free an interrupt that has no mapping
In reply to Greg Kroah-HartmanFrom: Marc Zyngier <[email protected]>
[ Upstream commit 4615fbc3788ddc8e7c6d697714ad35a53729aa2c ]
When an interrupt allocation fails for N interrupts, it is pretty common for the error handling code to free the same number of interrupts, no matter how many interrupts have actually been allocated.
This may result in the domain freeing code to be unexpectedly called for interrupts that have no mapping in that domain. Things end pretty badly.
Instead, add some checks to irq_domain_free_irqs_hierarchy() to make sure that thiss does not follow the hierarchy if no mapping exists for a given interrupt.
--- kernel/irq/irqdomain.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-)
kernel/irq/irqdomain.c +9 -2
@@ -1288,8 +1288,15 @@ static void irq_domain_free_irqs_hierarchy(struct irq_domain *domain, unsigned int irq_base, unsigned int nr_irqs) { - if (domain->ops->free) - domain->ops->free(domain, irq_base, nr_irqs); +unsigned int i; + +if (!domain->ops->free) +return ; + +for (i =0 ; i < nr_irqs; i++) { +if (irq_domain_get_irq_data (domain, irq_base + i)) + domain->ops->free (domain, irq_base + i,1 ); + } } int irq_domain_alloc_irqs_hierarchy(struct irq_domain *domain,
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 186/453 arm64: dts: ls1028a: fix ENETC PTP clock input
In reply to Greg Kroah-HartmanFrom: Michael Walle <[email protected]>
[ Upstream commit d0570a575aa83116bd0f6a99c4de548af773d950 ]
On the LS1028A the ENETC reference clock is connected to 4th HWA output, see Figure 7 "Clock subsystem block diagram".
The PHC may run with a wrong frequency. ptp_qoriq_auto_config() will read the clock speed of the clock given in the device tree. It is likely that, on the reference board this wasn't noticed because both clocks have the same frequency. But this must not be always the case. Fix it.
--- arch/arm64/boot/dts/freescale/fsl-ls1028a.dtsi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/arm64/boot/dts/freescale/fsl-ls1028a.dtsi +1 -1
@@ -673,7 +673,7 @@ ethernet@0,4 { compatible = "fsl,enetc-ptp"; reg = <0x000400 0 0 0 0>; - clocks = <&clockgen 4 0>; + clocks = <&clockgen 2 3>; little-endian; }; };
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 187/453 arm64: dts: qcom: c630: Polish i2c-hid devices
In reply to Greg Kroah-HartmanFrom: Bjorn Andersson <[email protected]>
[ Upstream commit 11d0e4f281565ef757479764ce7fd8d35eeb01b0 ]
The numbering of the i2c busses differs from ACPI and a number of typos was made in the original patch. Further more the irq flags for the various resources was not correct and i2c3 only has one of the two client devices active in any one device.
Also label the various devices, for easier comparison with the ACPI tables.
--- .../boot/dts/qcom/sdm850-lenovo-yoga-c630.dts | 31 +++++++++++-------- 1 file changed, 18 insertions(+), 13 deletions(-)
arch/arm64/boot/dts/qcom/sdm850-lenovo-yoga-c630.dts +18 -13
@@ -244,23 +244,28 @@ status = "okay"; clock-frequency = <400000>; - hid@15 { + tsel: hid@15 { compatible = "hid-over-i2c"; reg = <0x15>; hid-descr-addr = <0x1>; - interrupts-extended = <&tlmm 37 IRQ_TYPE_EDGE_RISING>; + interrupts-extended = <&tlmm 37 IRQ_TYPE_LEVEL_HIGH>; + + pinctrl-names = "default"; + pinctrl-0 = <&i2c3_hid_active>; }; - hid@2c { + tsc2: hid@2c { compatible = "hid-over-i2c"; reg = <0x2c>; hid-descr-addr = <0x20>; - interrupts-extended = <&tlmm 37 IRQ_TYPE_EDGE_RISING>; + interrupts-extended = <&tlmm 37 IRQ_TYPE_LEVEL_HIGH>; pinctrl-names = "default"; - pinctrl-0 = <&i2c2_hid_active>; + pinctrl-0 = <&i2c3_hid_active>; + + status = "disabled"; }; };
@@ -268,15 +273,15 @@ status = "okay"; clock-frequency = <400000>; - hid@10 { + tsc1: hid@10 { compatible = "hid-over-i2c"; reg = <0x10>; hid-descr-addr = <0x1>; - interrupts-extended = <&tlmm 125 IRQ_TYPE_EDGE_FALLING>; + interrupts-extended = <&tlmm 125 IRQ_TYPE_LEVEL_LOW>; pinctrl-names = "default"; - pinctrl-0 = <&i2c6_hid_active>; + pinctrl-0 = <&i2c5_hid_active>; }; };
@@ -284,7 +289,7 @@ status = "okay"; clock-frequency = <400000>; - hid@5c { + ecsh: hid@5c { compatible = "hid-over-i2c"; reg = <0x5c>; hid-descr-addr = <0x1>;
@@ -292,7 +297,7 @@ interrupts-extended = <&tlmm 92 IRQ_TYPE_LEVEL_LOW>; pinctrl-names = "default"; - pinctrl-0 = <&i2c12_hid_active>; + pinctrl-0 = <&i2c11_hid_active>; }; };
@@ -335,7 +340,7 @@ &tlmm { gpio-reserved-ranges = <0 4>, <81 4>; - i2c2_hid_active: i2c2-hid-active { + i2c3_hid_active: i2c2-hid-active { pins = <37>; function = "gpio";
@@ -344,7 +349,7 @@ drive-strength = <2>; }; - i2c6_hid_active: i2c6-hid-active { + i2c5_hid_active: i2c5-hid-active { pins = <125>; function = "gpio";
@@ -353,7 +358,7 @@ drive-strength = <2>; }; - i2c12_hid_active: i2c12-hid-active { + i2c11_hid_active: i2c11-hid-active { pins = <92>; function = "gpio";
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 188/453 PCI: Bounds-check command-line resource alignment requests
In reply to Greg Kroah-HartmanFrom: Bjorn Helgaas <[email protected]>
[ Upstream commit 6534aac198b58309ff2337981d3f893e0be1d19d ]
32-bit BARs are limited to 2GB size (2^31). By extension, I assume 64-bit BARs are limited to 2^63 bytes. Limit the alignment requested by the "pci=resource_alignment=" command-line parameter to 2^63.
--- drivers/pci/pci.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-)
drivers/pci/pci.c +8 -6
@@ -6129,19 +6129,21 @@ static resource_size_t pci_specified_resource_alignment(struct pci_dev *dev,while (*p) { count =0 ;if (sscanf (p,"%d%n" , &align_order, &count) ==1 && - p[count] =='@' ) { + p[count] =='@' ) { p += count +1 ; +if (align_order >63 ) { +pr_err ("PCI: Invalid requested alignment (order %d)\n" , + align_order); + align_order =PAGE_SHIFT ; + } }else { - align_order =-1 ; + align_order =PAGE_SHIFT ; } ret =pci_dev_str_match (dev, p, &p);if (ret ==1 ) { *resize = true; -if (align_order ==-1 ) - align =PAGE_SIZE ; -else - align =1 << align_order; + align =1 << align_order;break ; }else if (ret <0 ) { pr_err("PCI: Can't parse resource_alignment parameter: %s\n",
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 189/453 PCI: Fix overflow in command-line resource alignment requests
In reply to Greg Kroah-HartmanFrom: Colin Ian King <[email protected]>
[ Upstream commit cc73eb321d246776e5a9f7723d15708809aa3699 ]
The shift of 1 by align_order is evaluated using 32 bit arithmetic and the result is assigned to a resource_size_t type variable that is a 64 bit unsigned integer on 64 bit platforms. Fix an overflow before widening issue by making the 1 a ULL.
Addresses-Coverity: ("Unintentional integer overflow")
--- drivers/pci/pci.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/pci/pci.c +1 -1
@@ -6143,7 +6143,7 @@ static resource_size_t pci_specified_resource_alignment(struct pci_dev *dev, ret =pci_dev_str_match (dev, p, &p);if (ret ==1 ) { *resize = true; - align =1 << align_order; + align =1ULL << align_order;break ; }else if (ret <0 ) { pr_err("PCI: Can't parse resource_alignment parameter: %s\n",
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 190/453 PCI: iproc: Fix out-of-bound array accesses
In reply to Greg Kroah-HartmanFrom: Bharat Gooty <[email protected]>
[ Upstream commit a3ff529f5d368a17ff35ada8009e101162ebeaf9 ]
Declare the full size array for all revisions of PAX register sets to avoid potentially out of bound access of the register array when they are being initialized in iproc_pcie_rev_init().
--- drivers/pci/controller/pcie-iproc.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)
drivers/pci/controller/pcie-iproc.c +5 -5
@@ -307,7 +307,7 @@ enum iproc_pcie_reg { };/* iProc PCIe PAXB BCMA registers */ -static const u16 iproc_pcie_reg_paxb_bcma[] = { +static const u16 iproc_pcie_reg_paxb_bcma[IPROC_PCIE_MAX_NUM_REG ] = { [IPROC_PCIE_CLK_CTRL ] =0x000 , [IPROC_PCIE_CFG_IND_ADDR ] =0x120 , [IPROC_PCIE_CFG_IND_DATA ] =0x124 ,
@@ -318,7 +318,7 @@ static const u16 iproc_pcie_reg_paxb_bcma[] = { };/* iProc PCIe PAXB registers */ -static const u16 iproc_pcie_reg_paxb[] = { +static const u16 iproc_pcie_reg_paxb[IPROC_PCIE_MAX_NUM_REG ] = { [IPROC_PCIE_CLK_CTRL ] =0x000 , [IPROC_PCIE_CFG_IND_ADDR ] =0x120 , [IPROC_PCIE_CFG_IND_DATA ] =0x124 ,
@@ -334,7 +334,7 @@ static const u16 iproc_pcie_reg_paxb[] = { };/* iProc PCIe PAXB v2 registers */ -static const u16 iproc_pcie_reg_paxb_v2[] = { +static const u16 iproc_pcie_reg_paxb_v2[IPROC_PCIE_MAX_NUM_REG ] = { [IPROC_PCIE_CLK_CTRL ] =0x000 , [IPROC_PCIE_CFG_IND_ADDR ] =0x120 , [IPROC_PCIE_CFG_IND_DATA ] =0x124 ,
@@ -363,7 +363,7 @@ static const u16 iproc_pcie_reg_paxb_v2[] = { };/* iProc PCIe PAXC v1 registers */ -static const u16 iproc_pcie_reg_paxc[] = { +static const u16 iproc_pcie_reg_paxc[IPROC_PCIE_MAX_NUM_REG ] = { [IPROC_PCIE_CLK_CTRL ] =0x000 , [IPROC_PCIE_CFG_IND_ADDR ] =0x1f0 , [IPROC_PCIE_CFG_IND_DATA ] =0x1f4 ,
@@ -372,7 +372,7 @@ static const u16 iproc_pcie_reg_paxc[] = { };/* iProc PCIe PAXC v2 registers */ -static const u16 iproc_pcie_reg_paxc_v2[] = { +static const u16 iproc_pcie_reg_paxc_v2[IPROC_PCIE_MAX_NUM_REG ] = { [IPROC_PCIE_MSI_GIC_MODE ] =0x050 , [IPROC_PCIE_MSI_BASE_ADDR ] =0x074 , [IPROC_PCIE_MSI_WINDOW_SIZE ] =0x078 ,
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 191/453 arm64: dts: meson: fix spi-max-frequency on Khadas VIM2
In reply to Greg Kroah-HartmanFrom: Artem Lapkin <[email protected]>
[ Upstream commit b6c605e00ce8910d7ec3d9a54725d78b14db49b9 ]
The max frequency for the w25q32 (VIM v1.2) and w25q128 (VIM v1.4) spifc chip should be 104Mhz not 30MHz.
--- arch/arm64/boot/dts/amlogic/meson-gxm-khadas-vim2.dts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/arm64/boot/dts/amlogic/meson-gxm-khadas-vim2.dts +1 -1
@@ -395,7 +395,7 @@ #size-cells = <1>; compatible = "winbond,w25q16", "jedec,spi-nor"; reg = <0>; - spi-max-frequency = <3000000>; + spi-max-frequency = <104000000>; }; };
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 192/453 arm64: dts: meson-sm1: fix typo in opp table
In reply to Greg Kroah-HartmanFrom: Dongjin Kim <[email protected]>
[ Upstream commit b6a1c8a1eaa73b1e2ae251399308e9445d74cef7 ]
The freqency 1512000000 should be 1500000000.
--- arch/arm64/boot/dts/amlogic/meson-sm1.dtsi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/arm64/boot/dts/amlogic/meson-sm1.dtsi +1 -1
@@ -90,7 +90,7 @@ opp-microvolt = <790000>; }; - opp-1512000000 { + opp-1500000000 { opp-hz = /bits/ 64 <1500000000>; opp-microvolt = <800000>; };
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 193/453 soc: amlogic: canvas: add missing put_device() call in meson_canvas_get()
In reply to Greg Kroah-HartmanFrom: Yu Kuai <[email protected]>
[ Upstream commit 28f851e6afa858f182802e23ac60c3ed7d1c04a1 ]
if of_find_device_by_node() succeed, meson_canvas_get() doesn't have a corresponding put_device(). Thus add put_device() to fix the exception handling for this function implementation.
--- drivers/soc/amlogic/meson-canvas.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/soc/amlogic/meson-canvas.c +3 -1
@@ -72,8 +72,10 @@ struct meson_canvas *meson_canvas_get(struct device *dev)* current state, this driver probe cannot return -EPROBE_DEFER */ canvas =dev_get_drvdata (&canvas_pdev->dev); -if (!canvas) +if (!canvas) { +put_device (&canvas_pdev->dev);return ERR_PTR (-EINVAL ); + }return canvas; }
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 194/453 ARM: dts: at91: at91sam9rl: fix ADC triggers
In reply to Greg Kroah-HartmanFrom: Alexandre Belloni <[email protected]>
[ Upstream commit 851a95da583c26e2ddeb7281e9b61f0d76ea5aba ]
The triggers for the ADC were taken from at91sam9260 dtsi but are not correct.
--- arch/arm/boot/dts/at91sam9rl.dtsi | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-)
arch/arm/boot/dts/at91sam9rl.dtsi +11 -8
@@ -278,23 +278,26 @@ atmel,adc-use-res = "highres"; trigger0 { - trigger-name = "timer-counter-0"; + trigger-name = "external-rising"; trigger-value = <0x1>; + trigger-external; }; + trigger1 { - trigger-name = "timer-counter-1"; - trigger-value = <0x3>; + trigger-name = "external-falling"; + trigger-value = <0x2>; + trigger-external; }; trigger2 { - trigger-name = "timer-counter-2"; - trigger-value = <0x5>; + trigger-name = "external-any"; + trigger-value = <0x3>; + trigger-external; }; trigger3 { - trigger-name = "external"; - trigger-value = <0x13>; - trigger-external; + trigger-name = "continuous"; + trigger-value = <0x6>; }; };
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 195/453 platform/x86: dell-smbios-base: Fix error return code in dell_smbios_init
In reply to Greg Kroah-HartmanFrom: Qinglang Miao <[email protected]>
[ Upstream commit 2425ccd30fd78ce35237350fe8baac31dc18bd45 ]
Fix to return the error code -ENODEV when fails to init wmi and smm.
--- drivers/platform/x86/dell-smbios-base.c | 1 + 1 file changed, 1 insertion(+)
drivers/platform/x86/dell-smbios-base.c +1 -0
@@ -594,6 +594,7 @@ static int __init dell_smbios_init(void)if (wmi && smm) {pr_err ("No SMBIOS backends available (wmi: %d, smm: %d)\n" , wmi, smm); + ret = -ENODEV ; goto fail_create_group; }
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 196/453 ath10k: Fix the parsing error in service available event
In reply to Greg Kroah-HartmanFrom: Rakesh Pillai <[email protected]>
[ Upstream commit c7cee9c0f499f27ec6de06bea664b61320534768 ]
The wmi service available event has been extended to contain extra 128 bit for new services to be indicated by firmware.
Currently the presence of any optional TLVs in
the wmi service available event leads to a parsing error with the below error message:ath10k_snoc 18800000.wifi: failed to parse svc_avail tlv: -71
The wmi service available event parsing should not return error for the newly added optional TLV. Fix this parsing for service available event message.
Tested-on: WCN3990 hw1.0 SNOC WLAN.HL.3.2.2-00720-QCAHLSWMTPL-1
--- drivers/net/wireless/ath/ath10k/wmi-tlv.c | 4 +++- drivers/net/wireless/ath/ath10k/wmi.c | 9 +++++++-- drivers/net/wireless/ath/ath10k/wmi.h | 1 + 3 files changed, 11 insertions(+), 3 deletions(-)
drivers/net/wireless/ath/ath10k/wmi-tlv.c +3 -1
@@ -1260,13 +1260,15 @@ static int ath10k_wmi_tlv_svc_avail_parse(struct ath10k *ar, u16 tag, u16 len,switch (tag) {case WMI_TLV_TAG_STRUCT_SERVICE_AVAILABLE_EVENT : + arg->service_map_ext_valid = true; arg->service_map_ext_len = *(__le32 *)ptr; arg->service_map_ext = ptr +sizeof (__le32);return 0 ;default :break ; } -return -EPROTO ; + +return 0 ; } static int ath10k_wmi_tlv_op_pull_svc_avail(struct ath10k *ar,
drivers/net/wireless/ath/ath10k/wmi.c +7 -2
@@ -5659,8 +5659,13 @@ void ath10k_wmi_event_service_available(struct ath10k *ar, struct sk_buff *skb) ret); } -ath10k_wmi_map_svc_ext (ar, arg.service_map_ext, ar->wmi.svc_map, -__le32_to_cpu (arg.service_map_ext_len)); +/* +* Initialization of "arg.service_map_ext_valid" to ZERO is necessary +* for the below logic to work. +*/ +if (arg.service_map_ext_valid) +ath10k_wmi_map_svc_ext (ar, arg.service_map_ext, ar->wmi.svc_map, +__le32_to_cpu (arg.service_map_ext_len)); }static int ath10k_wmi_event_temperature (struct ath10k *ar,struct sk_buff *skb)
drivers/net/wireless/ath/ath10k/wmi.h +1 -0
@@ -6857,6 +6857,7 @@ struct wmi_svc_rdy_ev_arg { };struct wmi_svc_avail_ev_arg { +bool service_map_ext_valid;__le32 service_map_ext_len;const __le32 *service_map_ext; };
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 197/453 ath10k: Fix an error handling path
In reply to Greg Kroah-HartmanFrom: Christophe JAILLET <[email protected]>
[ Upstream commit ed3573bc3943c27d2d8e405a242f87ed14572ca1 ]
If 'ath10k_usb_create()' fails, we should release some resources and report an error instead of silently continuing.
--- drivers/net/wireless/ath/ath10k/usb.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/net/wireless/ath/ath10k/usb.c +2 -0
@@ -1009,6 +1009,8 @@ static int ath10k_usb_probe(struct usb_interface *interface, ar_usb =ath10k_usb_priv (ar); ret =ath10k_usb_create (ar, interface); +if (ret) + goto err; ar_usb->ar = ar; ar->dev_id = product_id;
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 198/453 ath10k: Release some resources in an error handling path
In reply to Greg Kroah-HartmanFrom: Christophe JAILLET <[email protected]>
[ Upstream commit 6364e693f4a7a89a2fb3dd2cbd6cc06d5fd6e26d ]
Should an error occur after calling 'ath10k_usb_create()', it should be undone by a corresponding 'ath10k_usb_destroy()' call
--- drivers/net/wireless/ath/ath10k/usb.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
drivers/net/wireless/ath/ath10k/usb.c +4 -1
@@ -1023,7 +1023,7 @@ static int ath10k_usb_probe(struct usb_interface *interface, ret =ath10k_core_register (ar, &bus_params);if (ret) {ath10k_warn (ar,"failed to register driver core: %d\n" , ret); - goto err; + goto err_usb_destroy; }/* TODO: remove this once USB support is fully implemented */
@@ -1031,6 +1031,9 @@ static int ath10k_usb_probe(struct usb_interface *interface,return 0 ; +err_usb_destroy: +ath10k_usb_destroy (ar); + err:ath10k_core_destroy (ar);
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 199/453 SUNRPC: rpc_wake_up() should wake up tasks in the correct order
In reply to Greg Kroah-HartmanFrom: Trond Myklebust <[email protected]>
[ Upstream commit e4c72201b6ec3173dfe13fa2e2335a3ad78d4921 ]
Currently, we wake up the tasks by priority queue ordering, which means that we ignore the batching that is supposed to help with QoS issues.
--- net/sunrpc/sched.c | 65 +++++++++++++++++++++++++--------------------- 1 file changed, 35 insertions(+), 30 deletions(-)
net/sunrpc/sched.c +35 -30
@@ -699,6 +699,23 @@ struct rpc_task *rpc_wake_up_next(struct rpc_wait_queue *queue) }EXPORT_SYMBOL_GPL (rpc_wake_up_next); +/** +* rpc_wake_up_locked - wake up all rpc_tasks +* @queue: rpc_wait_queue on which the tasks are sleeping +* +*/ +static void rpc_wake_up_locked (struct rpc_wait_queue *queue) +{ +struct rpc_task *task; + +for (;;) { + task =__rpc_find_next_queued (queue); +if (task ==NULL ) +break ; +rpc_wake_up_task_queue_locked (queue, task); + } +} +/** * rpc_wake_up - wake up all rpc_tasks * @queue: rpc_wait_queue on which the tasks are sleeping
@@ -707,25 +724,28 @@ EXPORT_SYMBOL_GPL(rpc_wake_up_next);*/ void rpc_wake_up (struct rpc_wait_queue *queue) { -struct list_head *head; -spin_lock (&queue->lock); - head = &queue->tasks[queue->maxpriority]; +rpc_wake_up_locked (queue); +spin_unlock (&queue->lock); +} +EXPORT_SYMBOL_GPL (rpc_wake_up); + +/** +* rpc_wake_up_status_locked - wake up all rpc_tasks and set their status value. +* @queue: rpc_wait_queue on which the tasks are sleeping +* @status: status value to set +*/ +static void rpc_wake_up_status_locked (struct rpc_wait_queue *queue,int status) +{ +struct rpc_task *task; +for (;;) { -while (!list_empty (head)) { -struct rpc_task *task; - task =list_first_entry (head, - struct rpc_task, - u.tk_wait.list); -rpc_wake_up_task_queue_locked (queue, task); - } -if (head == &queue->tasks[0 ]) + task =__rpc_find_next_queued (queue); +if (task ==NULL )break ; - head--; +rpc_wake_up_task_queue_set_status_locked (queue, task, status); } -spin_unlock (&queue->lock); } -EXPORT_SYMBOL_GPL (rpc_wake_up);/** * rpc_wake_up_status - wake up all rpc_tasks and set their status value.
@@ -736,23 +756,8 @@ EXPORT_SYMBOL_GPL(rpc_wake_up);*/ void rpc_wake_up_status (struct rpc_wait_queue *queue,int status) { -struct list_head *head; -spin_lock (&queue->lock); - head = &queue->tasks[queue->maxpriority]; -for (;;) { -while (!list_empty (head)) { -struct rpc_task *task; - task =list_first_entry (head, - struct rpc_task, - u.tk_wait.list); - task->tk_status = status; -rpc_wake_up_task_queue_locked (queue, task); - } -if (head == &queue->tasks[0 ]) -break ; - head--; - } +rpc_wake_up_status_locked (queue, status);spin_unlock (&queue->lock); }EXPORT_SYMBOL_GPL (rpc_wake_up_status);
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 200/453 NFSv4.2: condition READDIRs mask for security label based on LSM state
In reply to Greg Kroah-HartmanFrom: Olga Kornievskaia <[email protected]>
[ Upstream commit 05ad917561fca39a03338cb21fe9622f998b0f9c ]
Currently, the client will always ask for security_labels if the server returns that it supports that feature regardless of any LSM modules (such as Selinux) enforcing security policy. This adds performance penalty to the READDIR operation.
Client adjusts superblock's support of the security_label based on the server's support but also current client's configuration of the LSM modules. Thus, prior to using the default bitmask in READDIR, this patch checks the server's capabilities and then instructs READDIR to remove FATTR4_WORD2_SECURITY_LABEL from the bitmask.
v5: fixing silly mistakes of the rushed v4
v4: simplifying logic
v3: changing label's initialization per Ondrej's comment
v2: dropping selinux hook and using the sb cap.
--- fs/nfs/nfs4proc.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-)
fs/nfs/nfs4proc.c +8 -2
@@ -4899,12 +4899,12 @@ static int _nfs4_proc_readdir(struct dentry *dentry, const struct cred *cred, u64 cookie, struct page **pages, unsigned int count, bool plus) { struct inode *dir = d_inode(dentry); +struct nfs_server *server =NFS_SERVER (dir);struct nfs4_readdir_arg args = { .fh =NFS_FH (dir), .pages = pages, .pgbase =0 , .count = count, - .bitmask =NFS_SERVER (d_inode (dentry))->attr_bitmask, .plus = plus, };struct nfs4_readdir_res res;
@@ -4919,9 +4919,15 @@ static int _nfs4_proc_readdir(struct dentry *dentry, const struct cred *cred,dprintk ("%s: dentry = %pd2, cookie = %Lu\n" , __func__, dentry, (unsigned long long )cookie); +if (!(server->caps &NFS_CAP_SECURITY_LABEL )) + args.bitmask = server->attr_bitmask_nl; +else + args.bitmask = server->attr_bitmask; +nfs4_setup_readdir (cookie,NFS_I (dir)->cookieverf, dentry, &args); res.pgbase = args.pgbase; - status =nfs4_call_sync (NFS_SERVER (dir)->client,NFS_SERVER (dir), &msg, &args.seq_args, &res.seq_res,0 ); + status =nfs4_call_sync (server->client, server, &msg, &args.seq_args, + &res.seq_res,0 );if (status >=0 ) {memcpy (NFS_I (dir)->cookieverf, res.verifier.data,NFS4_VERIFIER_SIZE ); status += args.pgbase;
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 201/453 SUNRPC: xprt_load_transport() needs to support the netid "rdma6"
In reply to Greg Kroah-HartmanFrom: Trond Myklebust <[email protected]>
[ Upstream commit d5aa6b22e2258f05317313ecc02efbb988ed6d38 ]
According to RFC5666, the correct netid for an IPv6 addressed RDMA transport is "rdma6", which we've supported as a mount option since Linux-4.7. The problem is when we try to load the module "xprtrdma6", that will fail, since there is no modulealias of that name.
--- include/linux/sunrpc/xprt.h | 1 + net/sunrpc/xprt.c | 65 +++++++++++++++++++++++++-------- net/sunrpc/xprtrdma/module.c | 1 + net/sunrpc/xprtrdma/transport.c | 1 + net/sunrpc/xprtsock.c | 4 ++ 5 files changed, 56 insertions(+), 16 deletions(-)
include/linux/sunrpc/xprt.h +1 -0
@@ -330,6 +330,7 @@ struct xprt_class {struct rpc_xprt * (*setup)(struct xprt_create *);struct module *owner;char name[32 ]; +const char * netid[]; };/*
net/sunrpc/xprt.c +49 -16
80 lines not on this page · raw message
net/sunrpc/xprtrdma/module.c +1 -0
@@ -24,6 +24,7 @@ MODULE_DESCRIPTION("RPC/RDMA Transport");MODULE_LICENSE ("Dual BSD/GPL" );MODULE_ALIAS ("svcrdma" );MODULE_ALIAS ("xprtrdma" ); +MODULE_ALIAS ("rpcrdma6" ); static void __exit rpc_rdma_cleanup(void) {
net/sunrpc/xprtrdma/transport.c +1 -0
@@ -827,6 +827,7 @@ static struct xprt_class xprt_rdma = { .owner = THIS_MODULE, .ident = XPRT_TRANSPORT_RDMA, .setup = xprt_setup_rdma, + .netid = { "rdma", "rdma6", "" }, }; void xprt_rdma_cleanup(void)
net/sunrpc/xprtsock.c +4 -0
@@ -3204,6 +3204,7 @@ static struct xprt_class xs_local_transport = { .owner = THIS_MODULE, .ident = XPRT_TRANSPORT_LOCAL, .setup = xs_setup_local, + .netid = { "" }, }; static struct xprt_class xs_udp_transport = {
@@ -3212,6 +3213,7 @@ static struct xprt_class xs_udp_transport = { .owner = THIS_MODULE, .ident = XPRT_TRANSPORT_UDP, .setup = xs_setup_udp, + .netid = { "udp", "udp6", "" }, }; static struct xprt_class xs_tcp_transport = {
@@ -3220,6 +3222,7 @@ static struct xprt_class xs_tcp_transport = { .owner = THIS_MODULE, .ident = XPRT_TRANSPORT_TCP, .setup = xs_setup_tcp, + .netid = { "tcp", "tcp6", "" }, }; static struct xprt_class xs_bc_tcp_transport = {
@@ -3228,6 +3231,7 @@ static struct xprt_class xs_bc_tcp_transport = { .owner = THIS_MODULE, .ident = XPRT_TRANSPORT_BC_TCP, .setup = xs_setup_bc_tcp, + .netid = { "" }, }; /**
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 202/453 NFSv4: Fix the alignment of page data in the getdeviceinfo reply
In reply to Greg Kroah-HartmanFrom: Trond Myklebust <[email protected]>
[ Upstream commit 046e5ccb4198b990190e11fb52fd9cfd264402eb ]
We can fit the device_addr4 opaque data padding in the pages.
--- fs/nfs/nfs4xdr.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-)
fs/nfs/nfs4xdr.c +7 -3
@@ -3012,15 +3012,19 @@ static void nfs4_xdr_enc_getdeviceinfo(struct rpc_rqst *req,struct compound_hdr hdr = { .minorversion =nfs4_xdr_minorversion (&args->seq_args), }; +uint32_t replen;encode_compound_hdr (xdr, req, &hdr);encode_sequence (xdr, &args->seq_args, &hdr); + + replen = hdr.replen + op_decode_hdr_maxsz; +encode_getdeviceinfo (xdr, args, &hdr); -/* set up reply kvec. Subtract notification bitmap max size (2) -* so that notification bitmap is put in xdr_buf tail */ +/* set up reply kvec. device_addr4 opaque data is read into the +* pages */ rpc_prepare_reply_pages (req, args->pdev->pages, args->pdev->pgbase, - args->pdev->pglen, hdr.replen -2 ); + args->pdev->pglen, replen +2 +1 );encode_nops (&hdr); }
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 203/453 net: sunrpc: Fix snprintf return value check in do_xprt_debugfs
In reply to Greg Kroah-HartmanFrom: Fedor Tokarev <[email protected]>
[ Upstream commit 35a6d396721e28ba161595b0fc9e8896c00399bb ]
'snprintf' returns the number of characters which would have been written if enough space had been available, excluding the terminating null byte. Thus, the return value of 'sizeof(buf)' means that the last character has been dropped.
--- net/sunrpc/debugfs.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
net/sunrpc/debugfs.c +2 -2
@@ -128,13 +128,13 @@ static int do_xprt_debugfs(struct rpc_clnt *clnt, struct rpc_xprt *xprt, void *nreturn 0 ; len =snprintf (name,sizeof (name),"../../rpc_xprt/%s" , xprt->debugfs->d_name.name); -if (len >sizeof (name)) +if (len >=sizeof (name))return -1 ;if (*nump ==0 )strcpy (link,"xprt" );else { len =snprintf (link,sizeof (link),"xprt%d" , *nump); -if (len >sizeof (link)) +if (len >=sizeof (link))return -1 ; }debugfs_create_symlink (link, clnt->cl_debugfs, name);
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 204/453 lockd: dont use interval-based rebinding over TCP
In reply to Greg Kroah-HartmanFrom: Calum Mackay <[email protected]>
[ Upstream commit 9b82d88d5976e5f2b8015d58913654856576ace5 ]
NLM uses an interval-based rebinding, i.e. it clears the transport's binding under certain conditions if more than 60 seconds have elapsed since the connection was last bound.
This rebinding is not necessary for an autobind RPC client over a connection-oriented protocol like TCP.
It can also cause problems: it is possible for nlm_bind_host() to clear XPRT_BOUND whilst a connection worker is in the middle of trying to reconnect, after it had already been checked in xprt_connect().
When the connection worker notices that XPRT_BOUND has been cleared under it, in xs_tcp_finish_connecting(), that results in:
xs_tcp_setup_socket: connect returned unhandled error -107
Worse, it's possible that the two can get into lockstep, resulting in the same behaviour repeated indefinitely, with the above error every 300 seconds, without ever recovering, and the connection never being established. This has been seen in practice, with a large number of NLM client tasks, following a server restart.
The existing callers of nlm_bind_host & nlm_rebind_host should not need to force the rebind, for TCP, so restrict the interval-based rebinding to UDP only.
For TCP, we will still rebind when needed, e.g. on timeout, and connection error (including closure), since connection-related errors on an existing connection, ECONNREFUSED when trying to connect, and rpc_check_timeout(), already unconditionally clear XPRT_BOUND.
To avoid having to add the fix, and explanation, to both nlm_bind_host() and nlm_rebind_host(), remove the duplicate code from the former, and have it call the latter.
Drop the dprintk, which adds no value over a trace.
--- fs/lockd/host.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-)
fs/lockd/host.c +11 -9
@@ -439,12 +439,7 @@ nlm_bind_host(struct nlm_host *host)* RPC rebind is required */ if ((clnt = host->h_rpcclnt) !=NULL ) { -if (time_after_eq (jiffies, host->h_nextrebind)) { -rpc_force_rebind (clnt); - host->h_nextrebind = jiffies +NLM_HOST_REBIND ; -dprintk ("lockd: next rebind in %lu jiffies\n" , - host->h_nextrebind - jiffies); - } +nlm_rebind_host (host); }else {unsigned long increment = nlmsvc_timeout;struct rpc_timeout timeparms = {
@@ -493,13 +488,20 @@ nlm_bind_host(struct nlm_host *host)return clnt; } -/* -* Force a portmap lookup of the remote lockd port +/** +* nlm_rebind_host - If needed, force a portmap lookup of the peer's lockd port +* @host: NLM host handle for peer +* +* This is not needed when using a connection-oriented protocol, such as TCP. +* The existing autobind mechanism is sufficient to force a rebind when +* required, e.g. on connection state transitions. */ void nlm_rebind_host (struct nlm_host *host) { -dprintk ("lockd: rebind host %s\n" , host->h_name); +if (host->h_proto !=IPPROTO_UDP ) +return ; +if (host->h_rpcclnt &&time_after_eq (jiffies, host->h_nextrebind)) {rpc_force_rebind (host->h_rpcclnt); host->h_nextrebind = jiffies +NLM_HOST_REBIND ;
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 205/453 NFS: switch nfsiod to be an UNBOUND workqueue.
In reply to Greg Kroah-HartmanFrom: NeilBrown <[email protected]>
[ Upstream commit bf701b765eaa82dd164d65edc5747ec7288bb5c3 ]
nfsiod is currently a concurrency-managed workqueue (CMWQ). This means that workitems scheduled to nfsiod on a given CPU are queued behind all other work items queued on any CMWQ on the same CPU. This can introduce unexpected latency.
Occaionally nfsiod can even cause excessive latency. If the work item to complete a CLOSE request calls the final iput() on an inode, the address_space of that inode will be dismantled. This takes time proportional to the number of in-memory pages, which on a large host working on large files (e.g.. 5TB), can be a large number of pages resulting in a noticable number of seconds.
We can avoid these latency problems by switching nfsiod to WQ_UNBOUND. This causes each concurrent work item to gets a dedicated thread which can be scheduled to an idle CPU.
There is precedent for this as several other filesystems use WQ_UNBOUND workqueue for handling various async events.
--- fs/nfs/inode.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
fs/nfs/inode.c +1 -1
@@ -2151,7 +2151,7 @@ static int nfsiod_start(void) {struct workqueue_struct *wq;dprintk ("RPC: creating workqueue nfsiod\n" ); - wq =alloc_workqueue ("nfsiod" ,WQ_MEM_RECLAIM ,0 ); + wq =alloc_workqueue ("nfsiod" ,WQ_MEM_RECLAIM |WQ_UNBOUND ,0 );if (wq ==NULL )return -ENOMEM ; nfsiod_workqueue = wq;
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 206/453 selftests/seccomp: Update kernel config
In reply to Greg Kroah-HartmanFrom: Mickaël Salaün <[email protected]>
[ Upstream commit 2c07343abd8932200a45ff7b10950e71081e9e77 ]
seccomp_bpf.c uses unshare(CLONE_NEWPID), which requires CONFIG_PID_NS to be set.
--- tools/testing/selftests/seccomp/config | 1 + 1 file changed, 1 insertion(+)
tools/testing/selftests/seccomp/config +1 -0
@@ -1,2 +1,3 @@ +CONFIG_PID_NS=y CONFIG_SECCOMP=y CONFIG_SECCOMP_FILTER=y
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 207/453 vfio-pci: Use io_remap_pfn_range() for PCI IO memory
In reply to Greg Kroah-HartmanFrom: Jason Gunthorpe <[email protected]>
[ Upstream commit 7b06a56d468b756ad6bb43ac21b11e474ebc54a0 ]
commit f8f6ae5d077a ("mm: always have io_remap_pfn_range() set pgprot_decrypted()") allows drivers using mmap to put PCI memory mapped BAR space into userspace to work correctly on AMD SME systems that default to all memory encrypted.
Since vfio_pci_mmap_fault() is working with PCI memory mapped BAR space it should be calling io_remap_pfn_range() otherwise it will not work on SME systems.
--- drivers/vfio/pci/vfio_pci.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/vfio/pci/vfio_pci.c +2 -2
@@ -1451,8 +1451,8 @@ static vm_fault_t vfio_pci_mmap_fault(struct vm_fault *vmf)mutex_unlock (&vdev->vma_lock); -if (remap_pfn_range (vma, vma->vm_start, vma->vm_pgoff, - vma->vm_end - vma->vm_start, vma->vm_page_prot)) +if (io_remap_pfn_range (vma, vma->vm_start, vma->vm_pgoff, + vma->vm_end - vma->vm_start, vma->vm_page_prot)) ret =VM_FAULT_SIGBUS ; up_out:
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 208/453 hwmon: (ina3221) Fix PM usage counter unbalance in ina3221_write_enable
In reply to Greg Kroah-HartmanFrom: Zhang Qilong <[email protected]>
[ Upstream commit bce776f10069c806290eaac712ba73432ae8ecd7 ]
pm_runtime_get_sync will increment pm usage counter even it failed. Forgetting to putting operation will result in reference leak here. We fix it by replacing it with pm_runtime_resume_and_get to keep usage counter balanced. It depends on the mainline commit[PM: runtime:
Add pm_runtime_resume_and_get to deal with usagecounter].
--- drivers/hwmon/ina3221.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/hwmon/ina3221.c +1 -1
@@ -403,7 +403,7 @@ static int ina3221_write_enable(struct device *dev, int channel, bool enable)/* For enabling routine, increase refcount and resume() at first */ if (enable) { - ret =pm_runtime_get_sync (ina->pm_dev); + ret =pm_runtime_resume_and_get (ina->pm_dev);if (ret <0 ) {dev_err (dev,"Failed to get PM runtime\n" );return ret;
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 209/453 media: saa7146: fix array overflow in vidioc_s_audio()
In reply to Greg Kroah-HartmanFrom: Dan Carpenter <[email protected]>
[ Upstream commit 8e4d86e241cf035d6d3467cd346e7ce490681937 ]
The "a->index" value comes from the user via the ioctl. The problem is that the shift can wrap resulting in setting "mxb->cur_audinput" to an invalid value, which later results in an array overflow.
--- drivers/media/pci/saa7146/mxb.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-)
drivers/media/pci/saa7146/mxb.c +10 -9
@@ -641,16 +641,17 @@ static int vidioc_s_audio(struct file *file, void *fh, const struct v4l2_audio *struct mxb *mxb = (struct mxb *)dev->ext_priv;DEB_D ("VIDIOC_S_AUDIO %d\n" , a->index); -if (mxb_inputs[mxb->cur_input].audioset & (1 << a->index)) { -if (mxb->cur_audinput != a->index) { - mxb->cur_audinput = a->index; -tea6420_route (mxb, a->index); -if (mxb->cur_audinput ==0 ) -mxb_update_audmode (mxb); - } -return 0 ; +if (a->index >=32 || + !(mxb_inputs[mxb->cur_input].audioset & (1 << a->index))) +return -EINVAL ; + +if (mxb->cur_audinput != a->index) { + mxb->cur_audinput = a->index; +tea6420_route (mxb, a->index); +if (mxb->cur_audinput ==0 ) +mxb_update_audmode (mxb); } -return -EINVAL ; +return 0 ; }#ifdef CONFIG_VIDEO_ADV_DEBUG
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 210/453 powerpc/perf: Fix crash with is_sier_available when pmu is not set
In reply to Greg Kroah-HartmanFrom: Athira Rajeev <[email protected]>
[ Upstream commit f75e7d73bdf73f07b0701a6d21c111ef5d9021dd ]
On systems without any specific PMU driver support registered, running 'perf record' with —intr-regs will crash ( perf record -I <workload> ).
The relevant portion from crash logs and Call Trace:
Unable to handle kernel paging request for data at address 0x00000068 Faulting instruction address: 0xc00000000013eb18 Oops: Kernel access of bad area, sig: 11 [#1] CPU: 2 PID: 13435 Comm: kill Kdump: loaded Not tainted 4.18.0-193.el8.ppc64le #1 NIP: c00000000013eb18 LR: c000000000139f2c CTR: c000000000393d80 REGS: c0000004a07ab4f0 TRAP: 0300 Not tainted (4.18.0-193.el8.ppc64le) NIP [c00000000013eb18] is_sier_available+0x18/0x30 LR [c000000000139f2c] perf_reg_value+0x6c/0xb0 Call Trace:
[c0000004a07ab770] [c0000004a07ab7c8] 0xc0000004a07ab7c8 (unreliable) [c0000004a07ab7a0] [c0000000003aa77c] perf_output_sample+0x60c/0xac0 [c0000004a07ab840] [c0000000003ab3f0] perf_event_output_forward+0x70/0xb0 [c0000004a07ab8c0] [c00000000039e208] __perf_event_overflow+0x88/0x1a0 [c0000004a07ab910] [c00000000039e42c] perf_swevent_hrtimer+0x10c/0x1d0 [c0000004a07abc50] [c000000000228b9c] __hrtimer_run_queues+0x17c/0x480 [c0000004a07abcf0] [c00000000022aaf4] hrtimer_interrupt+0x144/0x520 [c0000004a07abdd0] [c00000000002a864] timer_interrupt+0x104/0x2f0 [c0000004a07abe30] [c0000000000091c4] decrementer_common+0x114/0x120
When perf record session is started with "-I" option, capturing registers on each sample calls is_sier_available() to check for the
SIER (Sample Instruction Event Register) availability in the platform. This function in core-book3s accesses 'ppmu->flags'. If a platform specific PMU driver is not registered, ppmu is set to NULL and accessing its members results in a crash. Fix the crash by returning false in is_sier_available() if ppmu is not set.
--- arch/powerpc/perf/core-book3s.c | 3 +++ 1 file changed, 3 insertions(+)
arch/powerpc/perf/core-book3s.c +3 -0
@@ -133,6 +133,9 @@ static void pmao_restore_workaround(bool ebb) { }bool is_sier_available (void ) { +if (!ppmu) +return false; +if (ppmu->flags &PPMU_HAS_SIER )return true;
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 211/453 powerpc/64: Fix an EMIT_BUG_ENTRY in head_64.S
In reply to Greg Kroah-HartmanFrom: Jordan Niethe <[email protected]>
[ Upstream commit fe18a35e685c9bdabc8b11b3e19deb85a068b75d ]
Commit 63ce271b5e37 ("powerpc/prom: convert PROM_BUG() to standard trap") added an EMIT_BUG_ENTRY for the trap after the branch to start_kernel(). The EMIT_BUG_ENTRY was for the address "0b", however the trap was not labeled with "0". Hence the address used for bug is in relative_toc() where the previous "0" label is. Label the trap as "0" so the correct address is used.
--- arch/powerpc/kernel/head_64.S | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/powerpc/kernel/head_64.S +1 -1
@@ -992,7 +992,7 @@ start_here_common: bl start_kernel /* Not reached */ - trap +0: trap EMIT_BUG_ENTRY 0b, __FILE__, __LINE__, 0 /*
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 212/453 clocksource/drivers/orion: Add missing clk_disable_unprepare() on error path
In reply to Greg Kroah-HartmanFrom: Yang Yingliang <[email protected]>
[ Upstream commit c1e6cad00aa2f17845e7270e38ff3cc82c7b022a ]
After calling clk_prepare_enable(), clk_disable_unprepare() need be called on error path.
--- drivers/clocksource/timer-orion.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-)
drivers/clocksource/timer-orion.c +8 -3
@@ -149,7 +149,8 @@ static int __init orion_timer_init(struct device_node *np) irq =irq_of_parse_and_map (np,1 );if (irq <=0 ) {pr_err ("%pOFn: unable to parse timer1 irq\n" , np); -return -EINVAL ; + ret = -EINVAL ; + goto out_unprep_clk; } rate =clk_get_rate (clk);
@@ -166,7 +167,7 @@ static int __init orion_timer_init(struct device_node *np) clocksource_mmio_readl_down);if (ret) {pr_err ("Failed to initialize mmio timer\n" ); -return ret; + goto out_unprep_clk; }sched_clock_register (orion_read_sched_clock,32 , rate);
@@ -175,7 +176,7 @@ static int __init orion_timer_init(struct device_node *np) ret =setup_irq (irq, &orion_clkevt_irq);if (ret) {pr_err ("%pOFn: unable to setup irq\n" , np); -return ret; + goto out_unprep_clk; } ticks_per_jiffy = (clk_get_rate (clk) +HZ /2 ) /HZ ;
@@ -188,5 +189,9 @@ static int __init orion_timer_init(struct device_node *np)orion_delay_timer_init (rate);return 0 ; + +out_unprep_clk: +clk_disable_unprepare (clk); +return ret; }TIMER_OF_DECLARE (orion_timer,"marvell,orion-timer" , orion_timer_init);
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 213/453 clocksource/drivers/cadence_ttc: Fix memory leak in ttc_setup_clockevent()
In reply to Greg Kroah-HartmanFrom: Yu Kuai <[email protected]>
[ Upstream commit eee422c46e6840a81c9db18a497b74387a557b29 ]
If clk_notifier_register() failed, ttc_setup_clockevent() will return without freeing 'ttcce', which will leak memory.
--- drivers/clocksource/timer-cadence-ttc.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-)
drivers/clocksource/timer-cadence-ttc.c +9 -9
@@ -411,10 +411,8 @@ static int __init ttc_setup_clockevent(struct clk *clk, ttcce->ttc.clk = clk; err =clk_prepare_enable (ttcce->ttc.clk); -if (err) { -kfree (ttcce); -return err; - } +if (err) + goto out_kfree; ttcce->ttc.clk_rate_change_nb.notifier_call = ttc_rate_change_clockevent_cb;
@@ -424,7 +422,7 @@ static int __init ttc_setup_clockevent(struct clk *clk, &ttcce->ttc.clk_rate_change_nb);if (err) {pr_warn ("Unable to register clock notifier.\n" ); -return err; + goto out_kfree; } ttcce->ttc.freq =clk_get_rate (ttcce->ttc.clk);
@@ -453,15 +451,17 @@ static int __init ttc_setup_clockevent(struct clk *clk, err =request_irq (irq, ttc_clock_event_interrupt,IRQF_TIMER , ttcce->ce.name, ttcce); -if (err) { -kfree (ttcce); -return err; - } +if (err) + goto out_kfree;clockevents_config_and_register (&ttcce->ce, ttcce->ttc.freq /PRESCALE ,1 ,0xfffe );return 0 ; + +out_kfree: +kfree (ttcce); +return err; }/**
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 214/453 iio: hrtimer-trigger: Mark hrtimer to expire in hard interrupt context
In reply to Greg Kroah-HartmanFrom: Lars-Peter Clausen <[email protected]>
[ Upstream commit 0178297c1e6898e2197fe169ef3be723e019b971 ]
On PREEMPT_RT enabled kernels unmarked hrtimers are moved into soft interrupt expiry mode by default.
The IIO hrtimer-trigger needs to run in hard interrupt context since it will end up calling generic_handle_irq() which has the requirement to run in hard interrupt context.
Explicitly specify that the timer needs to run in hard interrupt context by using the HRTIMER_MODE_REL_HARD flag.
--- drivers/iio/trigger/iio-trig-hrtimer.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/iio/trigger/iio-trig-hrtimer.c +2 -2
@@ -102,7 +102,7 @@ static int iio_trig_hrtimer_set_state(struct iio_trigger *trig, bool state)if (state)hrtimer_start (&trig_info->timer, trig_info->period, -HRTIMER_MODE_REL ); +HRTIMER_MODE_REL_HARD );else hrtimer_cancel (&trig_info->timer);
@@ -132,7 +132,7 @@ static struct iio_sw_trigger *iio_trig_hrtimer_probe(const char *name) trig_info->swt.trigger->ops = &iio_hrtimer_trigger_ops; trig_info->swt.trigger->dev.groups = iio_hrtimer_attr_groups; -hrtimer_init (&trig_info->timer,CLOCK_MONOTONIC ,HRTIMER_MODE_REL ); +hrtimer_init (&trig_info->timer,CLOCK_MONOTONIC ,HRTIMER_MODE_REL_HARD ); trig_info->timer.function = iio_hrtimer_trig_handler; trig_info->sampling_frequency =HRTIMER_DEFAULT_SAMPLING_FREQUENCY ;
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 215/453 ARM: dts: at91: sama5d2: map securam as device
In reply to Greg Kroah-HartmanFrom: Claudiu Beznea <[email protected]>
[ Upstream commit 9b5dcc8d427e2bcb84c49eb03ffefe11e7537a55 ]
Due to strobe signal not being propagated from CPU to securam the securam needs to be mapped as device or strongly ordered memory to work properly. Otherwise, updating to one offset may affect the adjacent locations in securam.
--- arch/arm/boot/dts/sama5d2.dtsi | 1 + 1 file changed, 1 insertion(+)
arch/arm/boot/dts/sama5d2.dtsi +1 -0
@@ -648,6 +648,7 @@ clocks = <&pmc PMC_TYPE_PERIPHERAL 51>; #address-cells = <1>; #size-cells = <1>; + no-memory-wc; ranges = <0 0xf8044000 0x1420>; };
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 216/453 bpf: Fix bpf_put_raw_tracepoint()s use of __module_address()
In reply to Greg Kroah-HartmanFrom: Andrii Nakryiko <[email protected]>
[ Upstream commit 12cc126df82c96c89706aa207ad27c56f219047c ]
__module_address() needs to be called with preemption disabled or with module_mutex taken. preempt_disable() is enough for read-only uses, which is what this fix does. Also, module_put() does internal check for NULL, so drop it as well.
--- kernel/trace/bpf_trace.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-)
kernel/trace/bpf_trace.c +5 -3
@@ -1320,10 +1320,12 @@ struct bpf_raw_event_map *bpf_get_raw_tracepoint(const char *name)void bpf_put_raw_tracepoint (struct bpf_raw_event_map *btp) { -struct module *mod =__module_address ((unsigned long )btp); +struct module *mod; -if (mod) -module_put (mod); +preempt_disable (); + mod =__module_address ((unsigned long )btp); +module_put (mod); +preempt_enable (); } static __always_inline
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 217/453 pinctrl: falcon: add missing put_device() call in pinctrl_falcon_probe()
In reply to Greg Kroah-HartmanFrom: Yu Kuai <[email protected]>
[ Upstream commit 89cce2b3f247a434ee174ab6803698041df98014 ]
if of_find_device_by_node() succeed, pinctrl_falcon_probe() doesn't have a corresponding put_device(). Thus add put_device() to fix the exception handling for this function implementation.
--- drivers/pinctrl/pinctrl-falcon.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-)
drivers/pinctrl/pinctrl-falcon.c +9 -5
@@ -431,24 +431,28 @@ static int pinctrl_falcon_probe(struct platform_device *pdev)/* load and remap the pad resources of the different banks */ for_each_compatible_node (np,NULL ,"lantiq,pad-falcon" ) { -struct platform_device *ppdev =of_find_device_by_node (np);const __be32 *bank =of_get_property (np,"lantiq,bank" ,NULL );struct resource res; +struct platform_device *ppdev;u32 avail;int pins;if (!of_device_is_available (np))continue ; -if (!ppdev) { -dev_err (&pdev->dev,"failed to find pad pdev\n" ); -continue ; - }if (!bank || *bank >=PORTS )continue ;if (of_address_to_resource (np,0 , &res))continue ; + + ppdev =of_find_device_by_node (np); +if (!ppdev) { +dev_err (&pdev->dev,"failed to find pad pdev\n" ); +continue ; + } + falcon_info.clk[*bank] =clk_get (&ppdev->dev,NULL ); +put_device (&ppdev->dev);if (IS_ERR (falcon_info.clk[*bank])) {dev_err (&ppdev->dev,"failed to get clock\n" );of_node_put (np);
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 218/453 arm64: dts: rockchip: Fix UART pull-ups on rk3328
In reply to Greg Kroah-HartmanFrom: Chen-Yu Tsai <[email protected]>
[ Upstream commit 94dad6bed3c86c00050bf7c2b2ad6b630facae31 ]
For UARTs, the local pull-ups should be on the RX pin, not the TX pin. UARTs transmit active-low, so a disconnected RX pin should be pulled high instead of left floating to prevent noise being interpreted as transmissions.
This gets rid of bogus sysrq events when the UART console is not connected.
--- arch/arm64/boot/dts/rockchip/rk3328.dtsi | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-)
arch/arm64/boot/dts/rockchip/rk3328.dtsi +8 -8
@@ -1190,8 +1190,8 @@ uart0 { uart0_xfer: uart0-xfer { - rockchip,pins = <1 RK_PB1 1 &pcfg_pull_up>, - <1 RK_PB0 1 &pcfg_pull_none>; + rockchip,pins = <1 RK_PB1 1 &pcfg_pull_none>, + <1 RK_PB0 1 &pcfg_pull_up>; }; uart0_cts: uart0-cts {
@@ -1209,8 +1209,8 @@ uart1 { uart1_xfer: uart1-xfer { - rockchip,pins = <3 RK_PA4 4 &pcfg_pull_up>, - <3 RK_PA6 4 &pcfg_pull_none>; + rockchip,pins = <3 RK_PA4 4 &pcfg_pull_none>, + <3 RK_PA6 4 &pcfg_pull_up>; }; uart1_cts: uart1-cts {
@@ -1228,15 +1228,15 @@ uart2-0 { uart2m0_xfer: uart2m0-xfer { - rockchip,pins = <1 RK_PA0 2 &pcfg_pull_up>, - <1 RK_PA1 2 &pcfg_pull_none>; + rockchip,pins = <1 RK_PA0 2 &pcfg_pull_none>, + <1 RK_PA1 2 &pcfg_pull_up>; }; }; uart2-1 { uart2m1_xfer: uart2m1-xfer { - rockchip,pins = <2 RK_PA0 1 &pcfg_pull_up>, - <2 RK_PA1 1 &pcfg_pull_none>; + rockchip,pins = <2 RK_PA0 1 &pcfg_pull_none>, + <2 RK_PA1 1 &pcfg_pull_up>; }; };
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 219/453 memstick: r592: Fix error return in r592_probe()
In reply to Greg Kroah-HartmanFrom: Jing Xiangfeng <[email protected]>
[ Upstream commit db29d3d1c2451e673e29c7257471e3ce9d50383a ]
Fix to return a error code from the error handling case instead of 0.
--- drivers/memstick/host/r592.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-)
drivers/memstick/host/r592.c +8 -4
@@ -759,8 +759,10 @@ static int r592_probe(struct pci_dev *pdev, const struct pci_device_id *id) goto error3; dev->mmio =pci_ioremap_bar (pdev,0 ); -if (!dev->mmio) +if (!dev->mmio) { + error = -ENOMEM ; goto error4; + } dev->irq = pdev->irq;spin_lock_init (&dev->irq_lock);
@@ -786,12 +788,14 @@ static int r592_probe(struct pci_dev *pdev, const struct pci_device_id *id) &dev->dummy_dma_page_physical_address, GFP_KERNEL);r592_stop_dma (dev ,0 ); -if (request_irq (dev->irq, &r592_irq,IRQF_SHARED , -DRV_NAME , dev)) + error =request_irq (dev->irq, &r592_irq,IRQF_SHARED , +DRV_NAME , dev); +if (error) goto error6;r592_update_card_detect (dev); -if (memstick_add_host (host)) + error =memstick_add_host (host); +if (error) goto error7;message ("driver successfully loaded" );
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 220/453 MIPS: Dont round up kernel sections size for memblock_add()
In reply to Greg Kroah-HartmanFrom: Alexander Sverdlin <[email protected]>
[ Upstream commit d121f125af22a16f0f679293756d28a9691fa46d ]
Linux doesn't own the memory immediately after the kernel image. On Octeon bootloader places a shared structure right close after the kernel _end, refer to "struct cvmx_bootinfo *octeon_bootinfo" in cavium-octeon/setup.c.
If check_kernel_sections_mem() rounds the PFNs up, first memblock_alloc() inside early_init_dt_alloc_memory_arch() <= device_tree_init() returns memory block overlapping with the above octeon_bootinfo structure, which is being overwritten afterwards.
--- arch/mips/kernel/setup.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
arch/mips/kernel/setup.c +2 -2
@@ -529,8 +529,8 @@ static void __init request_crashkernel(struct resource *res)static void __init check_kernel_sections_mem (void ) { -phys_addr_t start =PFN_PHYS (PFN_DOWN (__pa_symbol (&_text))); -phys_addr_t size =PFN_PHYS (PFN_UP (__pa_symbol (&_end))) - start; +phys_addr_t start =__pa_symbol (&_text); +phys_addr_t size =__pa_symbol (&_end) - start;if (!memblock_is_region_memory (start, size)) {pr_info ("Kernel sections are not in the memory maps\n" );
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 221/453 net/mlx5: Properly convey driver version to firmware
In reply to Greg Kroah-HartmanFrom: Leon Romanovsky <[email protected]>
[ Upstream commit 907af0f0cab4ee5d5604f182ecec2c5b5119d294 ]
mlx5 firmware expects driver version in specific format X.X.X, so make it always correct and based on real kernel version aligned with the driver.
--- drivers/net/ethernet/mellanox/mlx5/core/main.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
drivers/net/ethernet/mellanox/mlx5/core/main.c +5 -1
@@ -50,6 +50,7 @@#ifdef CONFIG_RFS_ACCEL #include <linux/cpu_rmap.h> #endif +#include <linux/version.h> #include <net/devlink.h> #include "mlx5_core.h" #include "lib/eq.h"
@@ -227,7 +228,10 @@ static void mlx5_set_driver_version(struct mlx5_core_dev *dev)strncat (string,"," , remaining_size); remaining_size =max_t (int,0 , driver_ver_sz -strlen (string)); -strncat (string,DRIVER_VERSION , remaining_size); + +snprintf (string +strlen (string), remaining_size,"%u.%u.%u" , + (u8)((LINUX_VERSION_CODE >>16 ) &0xff ), (u8)((LINUX_VERSION_CODE >>8 ) &0xff ), + (u16)(LINUX_VERSION_CODE &0xffff ));/*Send the command*/ MLX5_SET(set_driver_version_in, in, opcode,
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 222/453 ASoC: jz4740-i2s: add missed checks for clk_get()
In reply to Greg Kroah-HartmanFrom: Chuhong Yuan <[email protected]>
[ Upstream commit 1c1fb2653a0c2e3f310c07eacd8fc3a10e08c97a ]
jz4740_i2s_set_sysclk() does not check the return values of clk_get(), while the file dereferences the pointers in clk_put().
Add the missed checks to fix it.
--- sound/soc/jz4740/jz4740-i2s.c | 4 ++++ 1 file changed, 4 insertions(+)
sound/soc/jz4740/jz4740-i2s.c +4 -0
@@ -309,10 +309,14 @@ static int jz4740_i2s_set_sysclk(struct snd_soc_dai *dai, int clk_id,switch (clk_id) {case JZ4740_I2S_CLKSRC_EXT : parent =clk_get (NULL ,"ext" ); +if (IS_ERR (parent)) +return PTR_ERR (parent);clk_set_parent (i2s->clk_i2s, parent);break ;case JZ4740_I2S_CLKSRC_PLL : parent =clk_get (NULL ,"pll half" ); +if (IS_ERR (parent)) +return PTR_ERR (parent);clk_set_parent (i2s->clk_i2s, parent); ret =clk_set_rate (i2s->clk_i2s, freq);break ;
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 223/453 dm ioctl: fix error return code in target_message
In reply to Greg Kroah-HartmanFrom: Qinglang Miao <[email protected]>
[ Upstream commit 4d7659bfbe277a43399a4a2d90fca141e70f29e1 ]
Fix to return a negative error code from the error handling case instead of 0, as done elsewhere in this function.
--- drivers/md/dm-ioctl.c | 1 + 1 file changed, 1 insertion(+)
drivers/md/dm-ioctl.c +1 -0
@@ -1600,6 +1600,7 @@ static int target_message(struct file *filp, struct dm_ioctl *param, size_t paraif (!argc) {DMWARN ("Empty message received." ); + r = -EINVAL ; goto out_argv; }
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 224/453 phy: renesas: rcar-gen3-usb2: disable runtime pm in case of failure
In reply to Greg Kroah-HartmanFrom: Wang Li <[email protected]>
[ Upstream commit 51e339deab1e51443f6ac3b1bd5cd6cc8e8fe1d9 ]
pm_runtime_enable() will decrease power disable depth. Thus a pairing increment is needed on the error handling path to keep it balanced.
--- drivers/phy/renesas/phy-rcar-gen3-usb2.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
drivers/phy/renesas/phy-rcar-gen3-usb2.c +4 -2
@@ -654,8 +654,10 @@ static int rcar_gen3_phy_usb2_probe(struct platform_device *pdev)*/ pm_runtime_enable (dev); phy_usb2_ops =of_device_get_match_data (dev); -if (!phy_usb2_ops) -return -EINVAL ; +if (!phy_usb2_ops) { + ret = -EINVAL ; + goto error; + }mutex_init (&channel->lock);for (i =0 ; i <NUM_OF_PHYS ; i++) {
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 225/453 clocksource/drivers/arm_arch_timer: Use stable count reader in erratum sne
In reply to Greg Kroah-HartmanFrom: Keqian Zhu <[email protected]>
[ Upstream commit d8cc3905b8073c7cfbff94af889fa8dc71f21dd5 ]
In commit 0ea415390cd3 ("clocksource/arm_arch_timer: Use arch_timer_read_counter to access stable counters"), we separate stable and normal count reader to omit unnecessary overhead on systems that have no timer erratum.
However, in erratum_set_next_event_tval_generic(), count reader becomes normal reader. This converts it to stable reader.
--- drivers/clocksource/arm_arch_timer.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/clocksource/arm_arch_timer.c +2 -2
@@ -392,10 +392,10 @@ static void erratum_set_next_event_tval_generic(const int access, unsigned long ctrl &= ~ARCH_TIMER_CTRL_IT_MASK ;if (access ==ARCH_TIMER_PHYS_ACCESS ) { - cval = evt +arch_counter_get_cntpct (); + cval = evt +arch_counter_get_cntpct_stable ();write_sysreg (cval, cntp_cval_el0); }else { - cval = evt +arch_counter_get_cntvct (); + cval = evt +arch_counter_get_cntvct_stable ();write_sysreg (cval, cntv_cval_el0); }
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 226/453 clocksource/drivers/arm_arch_timer: Correct fault programming of CNTKCTL_EL1.EVNTI
In reply to Greg Kroah-HartmanFrom: Keqian Zhu <[email protected]>
[ Upstream commit 8b7770b877d187bfdae1eaf587bd2b792479a31c ]
ARM virtual counter supports event stream, it can only trigger an event when the trigger bit (the value of CNTKCTL_EL1.EVNTI) of CNTVCT_EL0 changes, so the actual period of event stream is 2^(cntkctl_evnti + 1). For example, when the trigger bit is 0, then virtual counter trigger an event for every two cycles.
While we're at it, rework the way we compute the trigger bit position by making it more obvious that when bits [n:n-1] are both set (with n being the most significant bit), we pick bit (n + 1).
--- drivers/clocksource/arm_arch_timer.c | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-)
drivers/clocksource/arm_arch_timer.c +16 -7
@@ -818,15 +818,24 @@ static void arch_timer_evtstrm_enable(int divider)static void arch_timer_configure_evtstream (void ) { -int evt_stream_div, pos; +int evt_stream_div, lsb; + +/* +* As the event stream can at most be generated at half the frequency +* of the counter, use half the frequency when computing the divider. +*/ + evt_stream_div = arch_timer_rate /ARCH_TIMER_EVT_STREAM_FREQ /2 ; + +/* +* Find the closest power of two to the divisor. If the adjacent bit +* of lsb (last set bit, starts from 0) is set, then we use (lsb + 1). +*/ + lsb =fls (evt_stream_div) -1 ; +if (lsb >0 && (evt_stream_div &BIT (lsb -1 ))) + lsb++; -/* Find the closest power of two to the divisor */ - evt_stream_div = arch_timer_rate /ARCH_TIMER_EVT_STREAM_FREQ ; - pos =fls (evt_stream_div); -if (pos >1 && !(evt_stream_div & (1 << (pos -2 )))) - pos--;/* enable event stream */ -arch_timer_evtstrm_enable (min (pos,15 )); +arch_timer_evtstrm_enable (max (0 ,min (lsb,15 ))); }static void arch_counter_set_user_access (void )
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 227/453 cpufreq: ap806: Add missing MODULE_DEVICE_TABLE
In reply to Greg Kroah-HartmanFrom: Pali Rohár <[email protected]>
[ Upstream commit 925a5bcefe105f2790ecbdc252eb2315573f309d ]
This patch adds missing MODULE_DEVICE_TABLE definition which generates correct modalias for automatic loading of this cpufreq driver when it is compiled as an external module.
--- drivers/cpufreq/armada-8k-cpufreq.c | 6 ++++++ 1 file changed, 6 insertions(+)
drivers/cpufreq/armada-8k-cpufreq.c +6 -0
@@ -204,6 +204,12 @@ static void __exit armada_8k_cpufreq_exit(void) }module_exit (armada_8k_cpufreq_exit); +static const struct of_device_id __maybe_unused armada_8k_cpufreq_of_match[] = { + { .compatible ="marvell,ap806-cpu-clock" }, + { }, +}; +MODULE_DEVICE_TABLE (of, armada_8k_cpufreq_of_match); +MODULE_AUTHOR ("Gregory Clement <[email protected]>" );MODULE_DESCRIPTION ("Armada 8K cpufreq driver" );MODULE_LICENSE ("GPL" );
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 228/453 cpufreq: highbank: Add missing MODULE_DEVICE_TABLE
In reply to Greg Kroah-HartmanFrom: Pali Rohár <[email protected]>
[ Upstream commit 9433777a6e0aae27468d3434b75cd51bb88ff711 ]
This patch adds missing MODULE_DEVICE_TABLE definition which generates correct modalias for automatic loading of this cpufreq driver when it is compiled as an external module.
--- drivers/cpufreq/highbank-cpufreq.c | 7 +++++++ 1 file changed, 7 insertions(+)
drivers/cpufreq/highbank-cpufreq.c +7 -0
@@ -101,6 +101,13 @@ out_put_node: }module_init (hb_cpufreq_driver_init); +static const struct of_device_id __maybe_unused hb_cpufreq_of_match[] = { + { .compatible ="calxeda,highbank" }, + { .compatible ="calxeda,ecx-2000" }, + { }, +}; +MODULE_DEVICE_TABLE (of, hb_cpufreq_of_match); +MODULE_AUTHOR ("Mark Langsdorf <[email protected]>" );MODULE_DESCRIPTION ("Calxeda Highbank cpufreq driver" );MODULE_LICENSE ("GPL" );
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 229/453 cpufreq: mediatek: Add missing MODULE_DEVICE_TABLE
In reply to Greg Kroah-HartmanFrom: Pali Rohár <[email protected]>
[ Upstream commit af6eca06501118af3e2ad46eee8edab20624b74e ]
This patch adds missing MODULE_DEVICE_TABLE definition which generates correct modalias for automatic loading of this cpufreq driver when it is compiled as an external module.
--- drivers/cpufreq/mediatek-cpufreq.c | 1 + 1 file changed, 1 insertion(+)
drivers/cpufreq/mediatek-cpufreq.c +1 -0
@@ -540,6 +540,7 @@ static const struct of_device_id mtk_cpufreq_machines[] __initconst = { { } }; +MODULE_DEVICE_TABLE (of, mtk_cpufreq_machines);static int __init mtk_cpufreq_driver_init (void ) {
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 230/453 cpufreq: qcom: Add missing MODULE_DEVICE_TABLE
In reply to Greg Kroah-HartmanFrom: Pali Rohár <[email protected]>
[ Upstream commit a5a6031663bc1dd0a10babd49d1bcb3153a8327f ]
This patch adds missing MODULE_DEVICE_TABLE definition which generates correct modalias for automatic loading of this cpufreq driver when it is compiled as an external module.
--- drivers/cpufreq/qcom-cpufreq-nvmem.c | 1 + 1 file changed, 1 insertion(+)
drivers/cpufreq/qcom-cpufreq-nvmem.c +1 -0
@@ -305,6 +305,7 @@ static const struct of_device_id qcom_cpufreq_match_list[] __initconst = { { .compatible = "qcom,qcs404", .data = &match_data_qcs404 }, {}, }; +MODULE_DEVICE_TABLE (of, qcom_cpufreq_match_list);/* * Since the driver depends on smem and nvmem drivers, which may
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 231/453 cpufreq: st: Add missing MODULE_DEVICE_TABLE
In reply to Greg Kroah-HartmanFrom: Pali Rohár <[email protected]>
[ Upstream commit 183747ab52654eb406fc6b5bfb40806b75d31811 ]
This patch adds missing MODULE_DEVICE_TABLE definition which generates correct modalias for automatic loading of this cpufreq driver when it is compiled as an external module.
--- drivers/cpufreq/sti-cpufreq.c | 7 +++++++ 1 file changed, 7 insertions(+)
drivers/cpufreq/sti-cpufreq.c +7 -0
@@ -292,6 +292,13 @@ register_cpufreq_dt: }module_init (sti_cpufreq_init); +static const struct of_device_id __maybe_unused sti_cpufreq_of_match[] = { + { .compatible ="st,stih407" }, + { .compatible ="st,stih410" }, + { }, +}; +MODULE_DEVICE_TABLE (of, sti_cpufreq_of_match); +MODULE_DESCRIPTION ("STMicroelectronics CPUFreq/OPP driver" );MODULE_AUTHOR ("Ajitpal Singh <[email protected]>" );MODULE_AUTHOR ("Lee Jones <[email protected]>" );
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 232/453 cpufreq: sun50i: Add missing MODULE_DEVICE_TABLE
In reply to Greg Kroah-HartmanFrom: Pali Rohár <[email protected]>
[ Upstream commit af2096f285077e3339eb835ad06c50bdd59f01b5 ]
This patch adds missing MODULE_DEVICE_TABLE definition which generates correct modalias for automatic loading of this cpufreq driver when it is compiled as an external module.
--- drivers/cpufreq/sun50i-cpufreq-nvmem.c | 1 + 1 file changed, 1 insertion(+)
drivers/cpufreq/sun50i-cpufreq-nvmem.c +1 -0
@@ -167,6 +167,7 @@ static const struct of_device_id sun50i_cpufreq_match_list[] = { { .compatible = "allwinner,sun50i-h6" }, {} }; +MODULE_DEVICE_TABLE (of, sun50i_cpufreq_match_list);static const struct of_device_id *sun50i_cpufreq_match_node (void ) {
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 233/453 cpufreq: loongson1: Add missing MODULE_ALIAS
In reply to Greg Kroah-HartmanFrom: Pali Rohár <[email protected]>
[ Upstream commit b9acab091842ca8b288882798bb809f7abf5408a ]
This patch adds missing MODULE_ALIAS for automatic loading of this cpufreq driver when it is compiled as an external module.
--- drivers/cpufreq/loongson1-cpufreq.c | 1 + 1 file changed, 1 insertion(+)
drivers/cpufreq/loongson1-cpufreq.c +1 -0
@@ -216,6 +216,7 @@ static struct platform_driver ls1x_cpufreq_platdrv = {module_platform_driver (ls1x_cpufreq_platdrv); +MODULE_ALIAS ("platform:ls1x-cpufreq" );MODULE_AUTHOR ("Kelvin Cheung <[email protected]>" );MODULE_DESCRIPTION ("Loongson1 CPUFreq driver" );MODULE_LICENSE ("GPL" );
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 234/453 cpufreq: scpi: Add missing MODULE_ALIAS
In reply to Greg Kroah-HartmanFrom: Pali Rohár <[email protected]>
[ Upstream commit c0382d049d2def37b81e907a8b22661a4a4a6eb5 ]
This patch adds missing MODULE_ALIAS for automatic loading of this cpufreq driver when it is compiled as an external module.
--- drivers/cpufreq/scpi-cpufreq.c | 1 + 1 file changed, 1 insertion(+)
drivers/cpufreq/scpi-cpufreq.c +1 -0
@@ -239,6 +239,7 @@ static struct platform_driver scpi_cpufreq_platdrv = { };module_platform_driver (scpi_cpufreq_platdrv); +MODULE_ALIAS ("platform:scpi-cpufreq" );MODULE_AUTHOR ("Sudeep Holla <[email protected]>" );MODULE_DESCRIPTION ("ARM SCPI CPUFreq interface driver" );MODULE_LICENSE ("GPL v2" );
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 235/453 Bluetooth: btusb: Add the missed release_firmware() in btusb_mtk_setup_firmware()
In reply to Greg Kroah-HartmanFrom: Jing Xiangfeng <[email protected]>
[ Upstream commit d1e9d232e1e60fa63df1b836ec3ecba5abd3fa9d ]
btusb_mtk_setup_firmware() misses to call release_firmware() in an error path. Jump to err_release_fw to fix it.
--- drivers/bluetooth/btusb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/bluetooth/btusb.c +1 -1
@@ -2812,7 +2812,7 @@ static int btusb_mtk_setup_firmware(struct hci_dev *hdev, const char *fwname) err =btusb_mtk_hci_wmt_sync (hdev, &wmt_params);if (err <0 ) {bt_dev_err (hdev,"Failed to power on data RAM (%d)" , err); -return err; + goto err_release_fw; } fw_ptr = fw->data;
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 236/453 Bluetooth: btmtksdio: Add the missed release_firmware() in mtk_setup_firmware()
In reply to Greg Kroah-HartmanFrom: Jing Xiangfeng <[email protected]>
[ Upstream commit b73b5781a85c03113476f62346c390f0277baa4b ]
mtk_setup_firmware() misses to call release_firmware() in an error path. Jump to free_fw to fix it.
--- drivers/bluetooth/btmtksdio.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/bluetooth/btmtksdio.c +1 -1
@@ -703,7 +703,7 @@ static int mtk_setup_firmware(struct hci_dev *hdev, const char *fwname) err =mtk_hci_wmt_sync (hdev, &wmt_params);if (err <0 ) {bt_dev_err (hdev,"Failed to power on data RAM (%d)" , err); -return err; + goto free_fw; } fw_ptr = fw->data;
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 237/453 arm64: dts: meson: fix PHY deassert timing requirements
In reply to Greg Kroah-HartmanFrom: Stefan Agner <[email protected]>
[ Upstream commit c183c406c4321002fe85b345b51bc1a3a04b6d33 ]
According to the datasheet (Rev. 1.9) the RTL8211F requires at least 72ms "for internal circuits settling time" before accessing the PHY registers. This fixes an issue seen on ODROID-C2 where the Ethernet link doesn't come up when using ip link set down/up:
[ 6630.714855] meson8b-dwmac c9410000.ethernet eth0: Link is Down [ 6630.785775] meson8b-dwmac c9410000.ethernet eth0: PHY [stmmac-0:00] driver [RTL8211F Gigabit Ethernet] (irq=36) [ 6630.893071] meson8b-dwmac c9410000.ethernet: Failed to reset the dma [ 6630.893800] meson8b-dwmac c9410000.ethernet eth0: stmmac_hw_setup: DMA engine initialization failed [ 6630.902835] meson8b-dwmac c9410000.ethernet eth0: stmmac_open: Hw setup failed
--- arch/arm64/boot/dts/amlogic/meson-gxbb-nanopi-k2.dts | 2 +- arch/arm64/boot/dts/amlogic/meson-gxbb-odroidc2.dts | 2 +- arch/arm64/boot/dts/amlogic/meson-gxbb-vega-s95.dtsi | 2 +- arch/arm64/boot/dts/amlogic/meson-gxbb-wetek.dtsi | 2 +- arch/arm64/boot/dts/amlogic/meson-gxl-s905d-p230.dts | 2 +- arch/arm64/boot/dts/amlogic/meson-gxm-khadas-vim2.dts | 2 +- arch/arm64/boot/dts/amlogic/meson-gxm-nexbox-a1.dts | 2 +- arch/arm64/boot/dts/amlogic/meson-gxm-q200.dts | 2 +- arch/arm64/boot/dts/amlogic/meson-gxm-rbox-pro.dts | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-)
arch/arm64/boot/dts/amlogic/meson-gxbb-nanopi-k2.dts +1 -1
@@ -165,7 +165,7 @@ reg = <0>; reset-assert-us = <10000>; - reset-deassert-us = <30000>; + reset-deassert-us = <80000>; reset-gpios = <&gpio GPIOZ_14 GPIO_ACTIVE_LOW>; interrupt-parent = <&gpio_intc>;
arch/arm64/boot/dts/amlogic/meson-gxbb-odroidc2.dts +1 -1
@@ -138,7 +138,7 @@ reg = <0>; reset-assert-us = <10000>; - reset-deassert-us = <30000>; + reset-deassert-us = <80000>; reset-gpios = <&gpio GPIOZ_14 GPIO_ACTIVE_LOW>; interrupt-parent = <&gpio_intc>;
arch/arm64/boot/dts/amlogic/meson-gxbb-vega-s95.dtsi +1 -1
@@ -126,7 +126,7 @@ reg = <0>; reset-assert-us = <10000>; - reset-deassert-us = <30000>; + reset-deassert-us = <80000>; reset-gpios = <&gpio GPIOZ_14 GPIO_ACTIVE_LOW>; interrupt-parent = <&gpio_intc>;
arch/arm64/boot/dts/amlogic/meson-gxbb-wetek.dtsi +1 -1
@@ -147,7 +147,7 @@ reg = <0>; reset-assert-us = <10000>; - reset-deassert-us = <30000>; + reset-deassert-us = <80000>; reset-gpios = <&gpio GPIOZ_14 GPIO_ACTIVE_LOW>; }; };
arch/arm64/boot/dts/amlogic/meson-gxl-s905d-p230.dts +1 -1
@@ -82,7 +82,7 @@ /* External PHY reset is shared with internal PHY Led signal */ reset-assert-us = <10000>; - reset-deassert-us = <30000>; + reset-deassert-us = <80000>; reset-gpios = <&gpio GPIOZ_14 GPIO_ACTIVE_LOW>; interrupt-parent = <&gpio_intc>;
arch/arm64/boot/dts/amlogic/meson-gxm-khadas-vim2.dts +1 -1
@@ -251,7 +251,7 @@ reg = <0>; reset-assert-us = <10000>; - reset-deassert-us = <30000>; + reset-deassert-us = <80000>; reset-gpios = <&gpio GPIOZ_14 GPIO_ACTIVE_LOW>; interrupt-parent = <&gpio_intc>;
arch/arm64/boot/dts/amlogic/meson-gxm-nexbox-a1.dts +1 -1
@@ -112,7 +112,7 @@ max-speed = <1000>; reset-assert-us = <10000>; - reset-deassert-us = <30000>; + reset-deassert-us = <80000>; reset-gpios = <&gpio GPIOZ_14 GPIO_ACTIVE_LOW>; }; };
arch/arm64/boot/dts/amlogic/meson-gxm-q200.dts +1 -1
@@ -64,7 +64,7 @@ /* External PHY reset is shared with internal PHY Led signal */ reset-assert-us = <10000>; - reset-deassert-us = <30000>; + reset-deassert-us = <80000>; reset-gpios = <&gpio GPIOZ_14 GPIO_ACTIVE_LOW>; interrupt-parent = <&gpio_intc>;
arch/arm64/boot/dts/amlogic/meson-gxm-rbox-pro.dts +1 -1
@@ -114,7 +114,7 @@ max-speed = <1000>; reset-assert-us = <10000>; - reset-deassert-us = <30000>; + reset-deassert-us = <80000>; reset-gpios = <&gpio GPIOZ_14 GPIO_ACTIVE_LOW>; }; };
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 238/453 ARM: dts: meson: fix PHY deassert timing requirements
In reply to Greg Kroah-HartmanFrom: Stefan Agner <[email protected]>
[ Upstream commit 656ab1bdcd2b755dc161a9774201100d5bf74b8d ]
According to the datasheet (Rev. 1.9) the RTL8211F requires at least 72ms "for internal circuits settling time" before accessing the PHY registers. On similar boards with the same PHY this fixes an issue where Ethernet link would not come up when using ip link set down/up.
--- arch/arm/boot/dts/meson8b-odroidc1.dts | 2 +- arch/arm/boot/dts/meson8m2-mxiii-plus.dts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-)
arch/arm/boot/dts/meson8b-odroidc1.dts +1 -1
@@ -219,7 +219,7 @@ reg = <0>; reset-assert-us = <10000>; - reset-deassert-us = <30000>; + reset-deassert-us = <80000>; reset-gpios = <&gpio GPIOH_4 GPIO_ACTIVE_LOW>; interrupt-parent = <&gpio_intc>;
arch/arm/boot/dts/meson8m2-mxiii-plus.dts +1 -1
@@ -83,7 +83,7 @@ reg = <0>; reset-assert-us = <10000>; - reset-deassert-us = <30000>; + reset-deassert-us = <80000>; reset-gpios = <&gpio GPIOH_4 GPIO_ACTIVE_LOW>; }; };
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 239/453 arm64: dts: meson: g12a: x96-max: fix PHY deassert timing requirements
In reply to Greg Kroah-HartmanFrom: Stefan Agner <[email protected]>
[ Upstream commit 3d07c3b3a886fefd583c1b485b5e4e3c4e2da493 ]
According to the datasheet (Rev. 1.9) the RTL8211F requires at least 72ms "for internal circuits settling time" before accessing the PHY registers. On similar boards with the same PHY this fixes an issue where Ethernet link would not come up when using ip link set down/up.
--- arch/arm64/boot/dts/amlogic/meson-g12a-x96-max.dts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/arm64/boot/dts/amlogic/meson-g12a-x96-max.dts +1 -1
@@ -340,7 +340,7 @@ eee-broken-1000t; reset-assert-us = <10000>; - reset-deassert-us = <30000>; + reset-deassert-us = <80000>; reset-gpios = <&gpio GPIOZ_15 (GPIO_ACTIVE_LOW | GPIO_OPEN_DRAIN)>; interrupt-parent = <&gpio_intc>;
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 240/453 scsi: qedi: Fix missing destroy_workqueue() on error in __qedi_probe
In reply to Greg Kroah-HartmanFrom: Qinglang Miao <[email protected]>
[ Upstream commit 62eebd5247c4e4ce08826ad5995cf4dd7ce919dd ]
Add the missing destroy_workqueue() before return from __qedi_probe in the error handling case when fails to create workqueue qedi->offload_thread.
--- drivers/scsi/qedi/qedi_main.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/scsi/qedi/qedi_main.c +3 -1
@@ -2630,7 +2630,7 @@ static int __qedi_probe(struct pci_dev *pdev, int mode)QEDI_ERR (&qedi->dbg_ctx,"Unable to start offload thread!\n" ); rc = -ENODEV ; - goto free_cid_que; + goto free_tmf_thread; }/* F/w needs 1st task context memory entry for performance */
@@ -2650,6 +2650,8 @@ static int __qedi_probe(struct pci_dev *pdev, int mode)return 0 ; +free_tmf_thread: +destroy_workqueue (qedi->tmf_thread); free_cid_que:qedi_release_cid_que (qedi); free_uio:
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 241/453 scsi: pm80xx: Fix error return in pm8001_pci_probe()
In reply to Greg Kroah-HartmanFrom: Zhang Qilong <[email protected]>
[ Upstream commit 97031ccffa4f62728602bfea8439dd045cd3aeb2 ]
The driver did not return an error in the case where pm8001_configure_phy_settings() failed.
Use rc to store the return value of pm8001_configure_phy_settings().
--- drivers/scsi/pm8001/pm8001_init.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/scsi/pm8001/pm8001_init.c +2 -1
@@ -1040,7 +1040,8 @@ static int pm8001_pci_probe(struct pci_dev *pdev,pm8001_init_sas_add (pm8001_ha);/* phy setting support for motherboard controller */ -if (pm8001_configure_phy_settings (pm8001_ha)) + rc =pm8001_configure_phy_settings (pm8001_ha); +if (rc) goto err_out_shost;pm8001_post_sas_ha_init (shost, chip);
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 242/453 seq_buf: Avoid type mismatch for seq_buf_init
In reply to Greg Kroah-HartmanFrom: Arnd Bergmann <[email protected]>
[ Upstream commit d9a9280a0d0ae51dc1d4142138b99242b7ec8ac6 ]
Building with W=2 prints a number of warnings for one function that has a pointer type mismatch:
linux/seq_buf.h: In function 'seq_buf_init':linux/seq_buf.h:35:12: warning: pointer targets in assignment from 'unsigned char *' to 'char *' differ in signedness [-Wpointer-sign]
Change the type in the function prototype according to the type in the structure.
--- include/linux/seq_buf.h | 2 +- include/linux/trace_seq.h | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-)
include/linux/seq_buf.h +1 -1
@@ -30,7 +30,7 @@ static inline void seq_buf_clear(struct seq_buf *s) }static inline void -seq_buf_init (struct seq_buf *s,unsigned char *buf,unsigned int size) +seq_buf_init (struct seq_buf *s,char *buf,unsigned int size) { s->buffer = buf; s->size = size;
include/linux/trace_seq.h +2 -2
@@ -12,7 +12,7 @@*/ struct trace_seq { -unsigned char buffer[PAGE_SIZE ]; +char buffer[PAGE_SIZE ];struct seq_buf seq;int full; };
@@ -51,7 +51,7 @@ static inline int trace_seq_used(struct trace_seq *s)* that is about to be written to and then return the result * of that write. */ -static inline unsigned char * +static inline char *trace_seq_buffer_ptr (struct trace_seq *s) {return s->buffer +seq_buf_used (&s->seq);
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 243/453 scsi: fnic: Fix error return code in fnic_probe()
In reply to Greg Kroah-HartmanFrom: Zhang Changzhong <[email protected]>
[ Upstream commit d4fc94fe65578738ded138e9fce043db6bfc3241 ]
Return a negative error code from the error handling case instead of 0 as done elsewhere in this function.
--- drivers/scsi/fnic/fnic_main.c | 1 + 1 file changed, 1 insertion(+)
drivers/scsi/fnic/fnic_main.c +1 -0
@@ -741,6 +741,7 @@ static int fnic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)for (i =0 ; i <FNIC_IO_LOCKS ; i++)spin_lock_init (&fnic->io_req_lock[i]); + err = -ENOMEM ; fnic->io_req_pool =mempool_create_slab_pool (2 , fnic_io_req_cache);if (!fnic->io_req_pool) goto err_out_free_resources;
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 244/453 platform/x86: mlx-platform: Fix item counter assignment for MSN2700, MSN24xx systems
In reply to Greg Kroah-HartmanFrom: Vadim Pasternak <[email protected]>
[ Upstream commit ba4939f1dd46dde08c2f9b9d7ac86ed3ea7ead86 ]
Fix array names to match assignments for data items and data items counter in 'mlxplat_mlxcpld_default_items' structure for:
.data = mlxplat_mlxcpld_default_pwr_items_data, .count = ARRAY_SIZE(mlxplat_mlxcpld_pwr),
and
.data = mlxplat_mlxcpld_default_fan_items_data, .count = ARRAY_SIZE(mlxplat_mlxcpld_fan),
Replace:
- 'mlxplat_mlxcpld_pwr' by 'mlxplat_mlxcpld_default_pwr_items_data' for ARRAY_SIZE() calculation.
- 'mlxplat_mlxcpld_fan' by 'mlxplat_mlxcpld_default_fan_items_data' for ARRAY_SIZE() calculation.
--- drivers/platform/x86/mlx-platform.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/platform/x86/mlx-platform.c +2 -2
@@ -355,7 +355,7 @@ static struct mlxreg_core_item mlxplat_mlxcpld_default_items[] = { .aggr_mask = MLXPLAT_CPLD_AGGR_PWR_MASK_DEF, .reg = MLXPLAT_CPLD_LPC_REG_PWR_OFFSET, .mask = MLXPLAT_CPLD_PWR_MASK, - .count = ARRAY_SIZE(mlxplat_mlxcpld_pwr), + .count = ARRAY_SIZE(mlxplat_mlxcpld_default_pwr_items_data), .inversed = 0, .health = false, },
@@ -364,7 +364,7 @@ static struct mlxreg_core_item mlxplat_mlxcpld_default_items[] = { .aggr_mask = MLXPLAT_CPLD_AGGR_FAN_MASK_DEF, .reg = MLXPLAT_CPLD_LPC_REG_FAN_OFFSET, .mask = MLXPLAT_CPLD_FAN_MASK, - .count = ARRAY_SIZE(mlxplat_mlxcpld_fan), + .count = ARRAY_SIZE(mlxplat_mlxcpld_default_fan_items_data), .inversed = 1, .health = false, },
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 245/453 powerpc/pseries/hibernation: drop pseries_suspend_begin() from suspend ops
In reply to Greg Kroah-HartmanFrom: Nathan Lynch <[email protected]>
[ Upstream commit 52719fce3f4c7a8ac9eaa191e8d75a697f9fbcbc ]
There are three ways pseries_suspend_begin() can be reached:
1. When "mem" is written to /sys/power/state:
kobj_attr_store()
-> state_store()
-> pm_suspend()
-> suspend_devices_and_enter()
-> pseries_suspend_begin()This never works because there is no way to supply a valid stream id using this interface, and H_VASI_STATE is called with a stream id of zero. So this call path is useless at best.
2. When a stream id is written to /sys/devices/system/power/hibernate. pseries_suspend_begin() is polled directly from store_hibernate() until the stream is in the "Suspending" state (i.e. the platform is ready for the OS to suspend execution):
dev_attr_store()
-> store_hibernate()
-> pseries_suspend_begin()
3. When a stream id is written to /sys/devices/system/power/hibernate (continued). After #2, pseries_suspend_begin() is called once again from the pm core:
dev_attr_store()
-> store_hibernate()
-> pm_suspend()
-> suspend_devices_and_enter()
-> pseries_suspend_begin()This is redundant because the VASI suspend state is already known to be Suspending.
The begin() callback of platform_suspend_ops is optional, so we can simply remove that assignment with no loss of function.
--- arch/powerpc/platforms/pseries/suspend.c | 1 - 1 file changed, 1 deletion(-)
arch/powerpc/platforms/pseries/suspend.c +0 -1
@@ -190,7 +190,6 @@ static struct bus_type suspend_subsys = {static const struct platform_suspend_ops pseries_suspend_ops = { .valid = suspend_valid_only_mem, - .begin = pseries_suspend_begin, .prepare_late = pseries_prepare_late, .enter = pseries_suspend_enter, };
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 246/453 powerpc/pseries/hibernation: remove redundant cacheinfo update
In reply to Greg Kroah-HartmanFrom: Nathan Lynch <[email protected]>
[ Upstream commit b866459489fe8ef0e92cde3cbd6bbb1af6c4e99b ]
Partitions with cache nodes in the device tree can encounter the following warning on resume:
CPU 0 already accounted in PowerPC,POWER9@0(Data)
WARNING: CPU: 0 PID: 3177 at arch/powerpc/kernel/cacheinfo.c:197 cacheinfo_cpu_online+0x640/0x820
These calls to cacheinfo_cpu_offline/online have been redundant since commit e610a466d16a ("powerpc/pseries/mobility: rebuild cacheinfo hierarchy post-migration").
--- arch/powerpc/platforms/pseries/suspend.c | 3 --- 1 file changed, 3 deletions(-)
arch/powerpc/platforms/pseries/suspend.c +0 -3
@@ -13,7 +13,6 @@#include <asm/mmu.h> #include <asm/rtas.h> #include <asm/topology.h> -#include "../../kernel/cacheinfo.h" static u64 stream_id;static struct device suspend_dev;
@@ -78,9 +77,7 @@ static void pseries_suspend_enable_irqs(void)* Update configuration which can be modified based on device tree * changes during resume. */ -cacheinfo_cpu_offline (smp_processor_id ());post_mobility_fixup (); -cacheinfo_cpu_online (smp_processor_id ()); }/**
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 247/453 drm/mediatek: avoid dereferencing a null hdmi_phy on an error message
In reply to Greg Kroah-HartmanFrom: Colin Ian King <[email protected]>
[ Upstream commit b097efba9580d1f7cbc80cda84e768983e3de541 ]
Currently there is a null pointer check for hdmi_phy that implies it may be null, however a dev_err messages dereferences this potential null pointer. Avoid a null pointer dereference by only emitting the dev_err message if hdmi_phy is non-null. It is a moot point if the error message needs to be printed at all, but since this is a relatively new piece of code it may be useful to keep the message in for the moment in case there are unforseen errors that need to be reported.
Addresses-Coverity: ("Dereference after null check")
--- drivers/gpu/drm/mediatek/mtk_hdmi_phy.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
drivers/gpu/drm/mediatek/mtk_hdmi_phy.c +3 -2
@@ -84,8 +84,9 @@ mtk_hdmi_phy_dev_get_ops(const struct mtk_hdmi_phy *hdmi_phy) hdmi_phy->conf->hdmi_phy_disable_tmds)return &mtk_hdmi_phy_dev_ops; -dev_err (hdmi_phy->dev,"Failed to get dev ops of phy\n" ); -return NULL ; +if (hdmi_phy) +dev_err (hdmi_phy->dev,"Failed to get dev ops of phy\n" ); +return NULL ; } static void mtk_hdmi_phy_clk_get_data(struct mtk_hdmi_phy *hdmi_phy,
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 248/453 ASoC: amd: change clk_get() to devm_clk_get() and add missed checks
In reply to Greg Kroah-HartmanFrom: Chuhong Yuan <[email protected]>
[ Upstream commit 95d3befbc5e1ee39fc8a78713924cf7ed2b3cabe ]
cz_da7219_init() does not check the return values of clk_get(), while da7219_clk_enable() calls clk_set_rate() to dereference the pointers.
Add checks to fix the problems.
Also, change clk_get() to devm_clk_get() to avoid data leak after failures.
--- sound/soc/amd/acp-da7219-max98357a.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-)
sound/soc/amd/acp-da7219-max98357a.c +7 -2
@@ -73,8 +73,13 @@ static int cz_da7219_init(struct snd_soc_pcm_runtime *rtd)return ret; } - da7219_dai_wclk =clk_get (component->dev,"da7219-dai-wclk" ); - da7219_dai_bclk =clk_get (component->dev,"da7219-dai-bclk" ); + da7219_dai_wclk =devm_clk_get (component->dev,"da7219-dai-wclk" ); +if (IS_ERR (da7219_dai_wclk)) +return PTR_ERR (da7219_dai_wclk); + + da7219_dai_bclk =devm_clk_get (component->dev,"da7219-dai-bclk" ); +if (IS_ERR (da7219_dai_bclk)) +return PTR_ERR (da7219_dai_bclk); ret = snd_soc_card_jack_new(card, "Headset Jack", SND_JACK_HEADSET | SND_JACK_LINEOUT |
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 249/453 powerpc/mm: sanity_check_fault() should work for all, not only BOOK3S
In reply to Greg Kroah-HartmanFrom: Christophe Leroy <[email protected]>
[ Upstream commit 7ceb40027e19567a0a066e3b380cc034cdd9a124 ]
The verification and message introduced by commit 374f3f5979f9 ("powerpc/mm/hash: Handle user access of kernel address gracefully") applies to all platforms, it should not be limited to BOOK3S.
Make the BOOK3S version of sanity_check_fault() the one for all, and bail out earlier if not BOOK3S.
--- arch/powerpc/mm/fault.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-)
arch/powerpc/mm/fault.c +3 -5
@@ -349,7 +349,6 @@ static inline void cmo_account_page_fault(void)static inline void cmo_account_page_fault (void ) { }#endif /* CONFIG_PPC_SMLPAR */ -#ifdef CONFIG_PPC_BOOK3S static void sanity_check_fault (bool is_write,bool is_user,unsigned long error_code,unsigned long address) {
@@ -366,6 +365,9 @@ static void sanity_check_fault(bool is_write, bool is_user,return ; } +if (!IS_ENABLED (CONFIG_PPC_BOOK3S )) +return ; +/* * For hash translation mode, we should never get a * PROTFAULT. Any update to pte to reduce access will result in us
@@ -400,10 +402,6 @@ static void sanity_check_fault(bool is_write, bool is_user,WARN_ON_ONCE (error_code &DSISR_PROTFAULT ); } -#else -static void sanity_check_fault (bool is_write,bool is_user, -unsigned long error_code,unsigned long address) { } -#endif /* CONFIG_PPC_BOOK3S */ /* * Define the correct "is_write" bit in error_code based
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 250/453 usb: ehci-omap: Fix PM disable depth umbalance in ehci_hcd_omap_probe
In reply to Greg Kroah-HartmanFrom: Zhang Qilong <[email protected]>
[ Upstream commit d6ff32478d7e95d6ca199b5c852710d6964d5811 ]
The pm_runtime_enable will decrement the power disable depth. Imbalance depth will resulted in enabling runtime PM of device fails later. Thus a pairing decrement must be needed on the error handling path to keep it balanced.
--- drivers/usb/host/ehci-omap.c | 1 + 1 file changed, 1 insertion(+)
drivers/usb/host/ehci-omap.c +1 -0
@@ -220,6 +220,7 @@ static int ehci_hcd_omap_probe(struct platform_device *pdev) err_pm_runtime:pm_runtime_put_sync (dev); +pm_runtime_disable (dev); err_phy:for (i =0 ; i < omap->nports; i++) {
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 251/453 usb: oxu210hp-hcd: Fix memory leak in oxu_create
In reply to Greg Kroah-HartmanFrom: Zhang Qilong <[email protected]>
[ Upstream commit e5548b05631ec3e6bfdaef1cad28c799545b791b ]
usb_create_hcd will alloc memory for hcd, and we should call usb_put_hcd to free it when adding fails to prevent memory leak.
--- drivers/usb/host/oxu210hp-hcd.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/usb/host/oxu210hp-hcd.c +3 -1
@@ -4149,8 +4149,10 @@ static struct usb_hcd *oxu_create(struct platform_device *pdev, oxu->is_otg = otg; ret =usb_add_hcd (hcd, irq,IRQF_SHARED ); -if (ret <0 ) +if (ret <0 ) { +usb_put_hcd (hcd);return ERR_PTR (ret); + }device_wakeup_enable (hcd->self.controller);return hcd;
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 252/453 speakup: fix uninitialized flush_lock
In reply to Greg Kroah-HartmanFrom: Yang Yingliang <[email protected]>
[ Upstream commit d1b928ee1cfa965a3327bbaa59bfa005d97fa0fe ]
The flush_lock is uninitialized, use DEFINE_SPINLOCK to define and initialize flush_lock.
--- drivers/staging/speakup/speakup_dectlk.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/staging/speakup/speakup_dectlk.c +1 -1
@@ -37,7 +37,7 @@ static unsigned char get_index(struct spk_synth *synth);static int in_escape;static int is_flushing; -static spinlock_t flush_lock; +static DEFINE_SPINLOCK (flush_lock);static DECLARE_WAIT_QUEUE_HEAD (flush);static struct var_t vars[] = {
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 253/453 nfsd: Fix message level for normal termination
In reply to Greg Kroah-HartmanFrom: kazuo ito <[email protected]>
[ Upstream commit 4420440c57892779f265108f46f83832a88ca795 ]
The warning message from nfsd terminating normally can confuse system adminstrators or monitoring software.
Though it's not exactly fair to pin-point a commit where it originated, the current form in the current place started to appear in:
--- fs/nfsd/nfssvc.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
fs/nfsd/nfssvc.c +1 -2
@@ -516,8 +516,7 @@ static void nfsd_last_thread(struct svc_serv *serv, struct net *net)return ;nfsd_shutdown_net (net); -printk (KERN_WARNING "nfsd: last server has exited, flushing export " -"cache\n" ); +pr_info ("nfsd: last server has exited, flushing export cache\n" );nfsd_export_flush (net); }
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 254/453 nfs_common: need lock during iterate through the list
In reply to Greg Kroah-HartmanFrom: Cheng Lin <[email protected]>
[ Upstream commit 4a9d81caf841cd2c0ae36abec9c2963bf21d0284 ]
If the elem is deleted during be iterated on it, the iteration process will fall into an endless loop.
kernel: NMI watchdog: BUG: soft lockup - CPU#4 stuck for 22s! [nfsd:17137]
PID: 17137 TASK: ffff8818d93c0000 CPU: 4 COMMAND: "nfsd" [exception RIP: __state_in_grace+76]
RIP: ffffffffc00e817c RSP: ffff8818d3aefc98 RFLAGS: 00000246 RAX: ffff881dc0c38298 RBX: ffffffff81b03580 RCX: ffff881dc02c9f50 RDX: ffff881e3fce8500 RSI: 0000000000000001 RDI: ffffffff81b03580 RBP: ffff8818d3aefca0 R8: 0000000000000020 R9: ffff8818d3aefd40 R10: ffff88017fc03800 R11: ffff8818e83933c0 R12: ffff8818d3aefd40 R13: 0000000000000000 R14: ffff8818e8391068 R15: ffff8818fa6e4000 CS: 0010 SS: 0018
#0 [ffff8818d3aefc98] opens_in_grace at ffffffffc00e81e3 [grace] #1 [ffff8818d3aefca8] nfs4_preprocess_stateid_op at ffffffffc02a3e6c [nfsd] #2 [ffff8818d3aefd18] nfsd4_write at ffffffffc028ed5b [nfsd]
#3 [ffff8818d3aefd80] nfsd4_proc_compound at ffffffffc0290a0d [nfsd] #4 [ffff8818d3aefdd0] nfsd_dispatch at ffffffffc027b800 [nfsd] #5 [ffff8818d3aefe08] svc_process_common at ffffffffc02017f3 [sunrpc] #6 [ffff8818d3aefe70] svc_process at ffffffffc0201ce3 [sunrpc] #7 [ffff8818d3aefe98] nfsd at ffffffffc027b117 [nfsd]
#8 [ffff8818d3aefec8] kthread at ffffffff810b88c1
#9 [ffff8818d3aeff50] ret_from_fork at ffffffff816d1607
The troublemake elem:
crash> lock_manager ffff881dc0c38298
struct lock_manager {
list = {
next = 0xffff881dc0c38298,
prev = 0xffff881dc0c38298
},
block_opens = false
}
--- fs/nfs_common/grace.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
fs/nfs_common/grace.c +5 -1
@@ -69,10 +69,14 @@ __state_in_grace(struct net *net, bool open)if (!open)return !list_empty (grace_list); +spin_lock (&grace_lock);list_for_each_entry (lm, grace_list, list) { -if (lm->block_opens) +if (lm->block_opens) { +spin_unlock (&grace_lock);return true; + } } +spin_unlock (&grace_lock);return false; }
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 255/453 x86/kprobes: Restore BTF if the single-stepping is cancelled
In reply to Greg Kroah-HartmanFrom: Masami Hiramatsu <[email protected]>
[ Upstream commit 78ff2733ff352175eb7f4418a34654346e1b6cd2 ]
Fix to restore BTF if single-stepping causes a page fault and it is cancelled.
Usually the BTF flag was restored when the single stepping is done (in resume_execution()). However, if a page fault happens on the single stepping instruction, the fault handler is invoked and the single stepping is cancelled. Thus, the BTF flag is not restored.
--- arch/x86/kernel/kprobes/core.c | 5 +++++ 1 file changed, 5 insertions(+)
arch/x86/kernel/kprobes/core.c +5 -0
@@ -1019,6 +1019,11 @@ int kprobe_fault_handler(struct pt_regs *regs, int trapnr)* So clear it by resetting the current kprobe: */ regs->flags &= ~X86_EFLAGS_TF ; +/* +* Since the single step (trap) has been cancelled, +* we need to restore BTF here. +*/ +restore_btf ();/* * If the TF flag was set before the kprobe hit,
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 256/453 platform/chrome: cros_ec_spi: Dont overwrite spi::mode
In reply to Greg Kroah-HartmanFrom: Stephen Boyd <[email protected]>
[ Upstream commit 74639cbf51d7c0304342544a83dfda354a6bd208 ]
There isn't any need to overwrite the mode here in the driver with what has been detected by the firmware, such as DT or ACPI. In fact, if we use the SPI CS gpio descriptor feature we will overwrite the mode with SPI_MODE_0 where it already contains SPI_MODE_0 and more importantly SPI_CS_HIGH. Clearing the SPI_CS_HIGH bit causes the CS line to toggle when the device is probed when it shouldn't change, confusing the driver and making it fail to probe. Drop the assignment and let the spi core take care of it.
--- drivers/platform/chrome/cros_ec_spi.c | 1 - 1 file changed, 1 deletion(-)
drivers/platform/chrome/cros_ec_spi.c +0 -1
@@ -739,7 +739,6 @@ static int cros_ec_spi_probe(struct spi_device *spi)int err; spi->bits_per_word =8 ; - spi->mode =SPI_MODE_0 ; spi->rt = true; err =spi_setup (spi);if (err <0 )
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 257/453 bus: fsl-mc: fix error return code in fsl_mc_object_allocate()
In reply to Greg Kroah-HartmanFrom: Zhang Changzhong <[email protected]>
[ Upstream commit 3d70fb03711c37bc64e8e9aea5830f498835f6bf ]
Fix to return a negative error code from the error handling case instead of 0, as done elsewhere in this function.
--- drivers/bus/fsl-mc/fsl-mc-allocator.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/bus/fsl-mc/fsl-mc-allocator.c +3 -1
@@ -292,8 +292,10 @@ int __must_check fsl_mc_object_allocate(struct fsl_mc_device *mc_dev, goto error; mc_adev = resource->data; -if (!mc_adev) +if (!mc_adev) { + error = -EINVAL ; goto error; + } mc_adev->consumer_link = device_link_add(&mc_dev->dev, &mc_adev->dev,
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 258/453 s390/cio: fix use-after-free in ccw_device_destroy_console
In reply to Greg Kroah-HartmanFrom: Qinglang Miao <[email protected]>
[ Upstream commit 14d4c4fa46eeaa3922e8e1c4aa727eb0a1412804 ]
Use of sch->dev reference after the put_device() call could trigger the use-after-free bugs.
Fix this by simply adjusting the position of put_device.
--- drivers/s390/cio/device.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/s390/cio/device.c +2 -2
@@ -1664,10 +1664,10 @@ void __init ccw_device_destroy_console(struct ccw_device *cdev)struct io_subchannel_private *io_priv =to_io_private (sch);set_io_private (sch,NULL ); -put_device (&sch->dev); -put_device (&cdev->dev);dma_free_coherent (&sch->dev,sizeof (*io_priv->dma_area), io_priv->dma_area, io_priv->dma_area_dma); +put_device (&sch->dev); +put_device (&cdev->dev);kfree (io_priv); }
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 259/453 iwlwifi: mvm: hook up missing RX handlers
In reply to Greg Kroah-HartmanFrom: Johannes Berg <[email protected]>
[ Upstream commit 8a59d39033c35bb484f6bd91891db86ebe07fdc2 ]
The RX handlers for probe response data and channel switch weren't hooked up properly, fix that.
--- drivers/net/wireless/intel/iwlwifi/mvm/ops.c | 6 ++++++ 1 file changed, 6 insertions(+)
drivers/net/wireless/intel/iwlwifi/mvm/ops.c +6 -0
@@ -316,6 +316,12 @@ static const struct iwl_rx_handlers iwl_mvm_rx_handlers[] = { iwl_mvm_mu_mimo_grp_notif, RX_HANDLER_SYNC),RX_HANDLER_GRP (DATA_PATH_GROUP ,STA_PM_NOTIF , iwl_mvm_sta_pm_notif,RX_HANDLER_SYNC ), +RX_HANDLER_GRP (MAC_CONF_GROUP ,PROBE_RESPONSE_DATA_NOTIF , + iwl_mvm_probe_resp_data_notif, +RX_HANDLER_ASYNC_LOCKED ), +RX_HANDLER_GRP (MAC_CONF_GROUP ,CHANNEL_SWITCH_NOA_NOTIF , + iwl_mvm_channel_switch_noa_notif, + RX_HANDLER_SYNC), };#undef RX_HANDLER#undef RX_HANDLER_GRP
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 260/453 erofs: avoid using generic_block_bmap
In reply to Greg Kroah-HartmanFrom: Huang Jianan <[email protected]>
[ Upstream commit d8b3df8b1048405e73558b88cba2adf29490d468 ]
Surprisingly, `block' in sector_t indicates the number of i_blkbits-sized blocks rather than sectors for bmap.
In addition, considering buffer_head limits mapped size to 32-bits, should avoid using generic_block_bmap.
--- fs/erofs/data.c | 26 +++++++------------------- 1 file changed, 7 insertions(+), 19 deletions(-)
fs/erofs/data.c +7 -19
@@ -323,27 +323,12 @@ static int erofs_raw_access_readpages(struct file *filp,return 0 ; } -static int erofs_get_block (struct inode *inode,sector_t iblock, -struct buffer_head *bh,int create) -{ -struct erofs_map_blocks map = { - .m_la = iblock <<9 , - }; -int err; - - err =erofs_map_blocks (inode, &map,EROFS_GET_BLOCKS_RAW ); -if (err) -return err; - -if (map.m_flags &EROFS_MAP_MAPPED ) - bh->b_blocknr =erofs_blknr (map.m_pa); - -return err; -} -static sector_t erofs_bmap (struct address_space *mapping,sector_t block) {struct inode *inode = mapping->host; +struct erofs_map_blocks map = { + .m_la =blknr_to_addr (block), + };if (EROFS_I (inode)->datalayout ==EROFS_INODE_FLAT_INLINE ) {erofs_blk_t blks =i_size_read (inode) >>LOG_BLOCK_SIZE ;
@@ -352,7 +337,10 @@ static sector_t erofs_bmap(struct address_space *mapping, sector_t block)return 0 ; } -return generic_block_bmap (mapping, block, erofs_get_block); +if (!erofs_map_blocks (inode, &map,EROFS_GET_BLOCKS_RAW )) +return erofs_blknr (map.m_pa); + +return 0 ; }/* for uncompressed (aligned) files and raw access for other files */
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 261/453 can: m_can: m_can_config_endisable(): remove double clearing of clock stop request bit
In reply to Greg Kroah-HartmanFrom: Sean Nyekjaer <[email protected]>
[ Upstream commit c9f4cad6cdfe350ce2637e57f7f2aa7ff326bcc6 ]
The CSR bit is already cleared when arriving here so remove this section of duplicate code.
The registers set in m_can_config_endisable() is set to same exact values as before this patch.
--- drivers/net/can/m_can/m_can.c | 4 ---- 1 file changed, 4 deletions(-)
drivers/net/can/m_can/m_can.c +0 -4
@@ -379,10 +379,6 @@ void m_can_config_endisable(struct m_can_classdev *cdev, bool enable) cccr &= ~CCCR_CSR ;if (enable) { -/* Clear the Clock stop request if it was set */ -if (cccr &CCCR_CSR ) - cccr &= ~CCCR_CSR ; -/* enable m_can configuration */ m_can_write (cdev,M_CAN_CCCR , cccr |CCCR_INIT );udelay (5 );
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 262/453 RDMA/core: Do not indicate device ready when device enablement fails
In reply to Greg Kroah-HartmanFrom: Jack Morgenstein <[email protected]>
[ Upstream commit 779e0bf47632c609c59f527f9711ecd3214dccb0 ]
In procedure ib_register_device, procedure kobject_uevent is called (advertising that the device is ready for userspace usage) even when device_enable_and_get() returned an error.
As a result, various RDMA modules attempted to register for the device even while the device driver was preparing to unregister the device.
Fix this by advertising the device availability only after enabling the device succeeds.
--- drivers/infiniband/core/device.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)
drivers/infiniband/core/device.c +4 -3
@@ -1387,9 +1387,6 @@ int ib_register_device(struct ib_device *device, const char *name) } ret =enable_device_and_get (device); -dev_set_uevent_suppress (&device->dev, false); -/* Mark for userspace that device is ready */ -kobject_uevent (&device->dev.kobj,KOBJ_ADD );if (ret) {void (*dealloc_fn)(struct ib_device *);
@@ -1409,8 +1406,12 @@ int ib_register_device(struct ib_device *device, const char *name)ib_device_put (device);__ib_unregister_device (device); device->ops.dealloc_driver = dealloc_fn; +dev_set_uevent_suppress (&device->dev, false);return ret; } +dev_set_uevent_suppress (&device->dev, false); +/* Mark for userspace that device is ready */ +kobject_uevent (&device->dev.kobj,KOBJ_ADD );ib_device_put (device);return 0 ;
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 263/453 remoteproc: q6v5-mss: fix error handling in q6v5_pds_enable
In reply to Greg Kroah-HartmanFrom: Zhang Qilong <[email protected]>
[ Upstream commit a24723050037303e4008b37f1f8dcc99c58901aa ]
If the pm_runtime_get_sync failed in q6v5_pds_enable when loop (i), The unroll_pd_votes will start from (i - 1), and it will resulted in following problems:
1) pm_runtime_get_sync will increment pm usage counter even it failed. Forgetting to pm_runtime_put_noidle will result in reference leak.
2) Have not reset pds[i] performance state.
Then we fix it.
--- drivers/remoteproc/qcom_q6v5_mss.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
drivers/remoteproc/qcom_q6v5_mss.c +4 -1
@@ -331,8 +331,11 @@ static int q6v5_pds_enable(struct q6v5 *qproc, struct device **pds,for (i =0 ; i < pd_count; i++) {dev_pm_genpd_set_performance_state (pds[i],INT_MAX ); ret =pm_runtime_get_sync (pds[i]); -if (ret <0 ) +if (ret <0 ) { +pm_runtime_put_noidle (pds[i]); +dev_pm_genpd_set_performance_state (pds[i],0 ); goto unroll_pd_votes; + } }return 0 ;
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 264/453 remoteproc: qcom: fix reference leak in adsp_start
In reply to Greg Kroah-HartmanFrom: Zhang Qilong <[email protected]>
[ Upstream commit aa37448f597c09844942da87d042fc6793f989c2 ]
pm_runtime_get_sync will increment pm usage counter even it failed. Forgetting to pm_runtime_put_noidle will result in reference leak in adsp_start, so we should fix it.
--- drivers/remoteproc/qcom_q6v5_adsp.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/remoteproc/qcom_q6v5_adsp.c +3 -1
@@ -184,8 +184,10 @@ static int adsp_start(struct rproc *rproc)dev_pm_genpd_set_performance_state (adsp->dev,INT_MAX ); ret =pm_runtime_get_sync (adsp->dev); -if (ret) +if (ret) { +pm_runtime_put_noidle (adsp->dev); goto disable_xo_clk; + } ret =clk_bulk_prepare_enable (adsp->num_clks, adsp->clks);if (ret) {
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 265/453 remoteproc: qcom: Fix potential NULL dereference in adsp_init_mmio()
In reply to Greg Kroah-HartmanFrom: Zhang Changzhong <[email protected]>
[ Upstream commit c3d4e5b12672bbdf63f4cc933e3169bc6bbec8da ]
platform_get_resource() may fail and in this case a NULL dereference will occur.
Fix it to use devm_platform_ioremap_resource() instead of calling platform_get_resource() and devm_ioremap().
This is detected by Coccinelle semantic patch.
@@
expression pdev, res, n, t, e, e1, e2;
@@
res = \(platform_get_resource\|platform_get_resource_byname\)(pdev, t, n);
+ if (!res)
+ return -EINVAL;
... when != res == NULL
e = devm_ioremap(e1, res->start, e2);
--- drivers/remoteproc/qcom_q6v5_adsp.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-)
drivers/remoteproc/qcom_q6v5_adsp.c +3 -6
@@ -347,15 +347,12 @@ static int adsp_init_mmio(struct qcom_adsp *adsp, struct platform_device *pdev) {struct device_node *syscon; -struct resource *res;int ret; - res =platform_get_resource (pdev,IORESOURCE_MEM ,0 ); - adsp->qdsp6ss_base =devm_ioremap (&pdev->dev, res->start, -resource_size (res)); -if (!adsp->qdsp6ss_base) { + adsp->qdsp6ss_base =devm_platform_ioremap_resource (pdev,0 ); +if (IS_ERR (adsp->qdsp6ss_base)) {dev_err (adsp->dev,"failed to map QDSP6SS registers\n" ); -return -ENOMEM ; +return PTR_ERR (adsp->qdsp6ss_base); } syscon =of_parse_phandle (pdev->dev.of_node,"qcom,halt-regs" ,0 );
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 266/453 clk: tegra: Fix duplicated SE clock entry
In reply to Greg Kroah-HartmanFrom: Dmitry Osipenko <[email protected]>
[ Upstream commit 5bf5861d6ea6c3f4b38fc8fda2062b2dc44ac63d ]
The periph_clks[] array contains duplicated entry for Security Engine clock which was meant to be defined for T210, but it wasn't added properly. This patch corrects the T210 SE entry and fixes the following error message on T114/T124: "Tegra clk 127: register failed with -17".
Tested-by Nicolas Chauvet <[email protected]>
Reported-by Nicolas Chauvet <[email protected]>
--- drivers/clk/tegra/clk-id.h | 1 + drivers/clk/tegra/clk-tegra-periph.c | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-)
drivers/clk/tegra/clk-id.h +1 -0
@@ -233,6 +233,7 @@ enum clk_id { tegra_clk_sdmmc4, tegra_clk_sdmmc4_8, tegra_clk_se, + tegra_clk_se_10, tegra_clk_soc_therm, tegra_clk_soc_therm_8, tegra_clk_sor0,
drivers/clk/tegra/clk-tegra-periph.c +1 -1
@@ -636,7 +636,7 @@ static struct tegra_periph_init_data periph_clks[] = {INT8 ("host1x" , mux_pllm_pllc2_c_c3_pllp_plla,CLK_SOURCE_HOST1X ,28 ,0 , tegra_clk_host1x_8),INT8 ("host1x" , mux_pllc4_out1_pllc_pllc4_out2_pllp_clkm_plla_pllc4_out0,CLK_SOURCE_HOST1X ,28 ,0 , tegra_clk_host1x_9),INT8 ("se" , mux_pllp_pllc2_c_c3_pllm_clkm,CLK_SOURCE_SE ,127 ,TEGRA_PERIPH_ON_APB , tegra_clk_se), -INT8 ("se" , mux_pllp_pllc2_c_c3_clkm,CLK_SOURCE_SE ,127 ,TEGRA_PERIPH_ON_APB , tegra_clk_se), +INT8 ("se" , mux_pllp_pllc2_c_c3_clkm,CLK_SOURCE_SE ,127 ,TEGRA_PERIPH_ON_APB , tegra_clk_se_10),INT8 ("2d" , mux_pllm_pllc2_c_c3_pllp_plla,CLK_SOURCE_2D ,21 ,0 , tegra_clk_gr2d_8),INT8 ("3d" , mux_pllm_pllc2_c_c3_pllp_plla,CLK_SOURCE_3D ,24 ,0 , tegra_clk_gr3d_8), INT8("vic03", mux_pllm_pllc_pllp_plla_pllc2_c3_clkm, CLK_SOURCE_VIC03, 178, 0, tegra_clk_vic03),
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 267/453 mtd: rawnand: gpmi: fix reference count leak in gpmi ops
In reply to Greg Kroah-HartmanFrom: Zhang Qilong <[email protected]>
[ Upstream commit 1b391c7f2e863985668d705f525af3ceb55bc800 ]
pm_runtime_get_sync() will increment pm usage at first and it will resume the device later. If runtime of the device has error or device is in inaccessible state(or other error state), resume operation will fail. If we do not call put operation to decrease the reference, it will result in reference leak in the two functions(gpmi_init and gpmi_nfc_exec_op). Moreover, this device cannot enter the idle state and always stay busy or other non-idle state later. So we fixed it through adding pm_runtime_put_noidle.
--- drivers/mtd/nand/raw/gpmi-nand/gpmi-nand.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-)
drivers/mtd/nand/raw/gpmi-nand/gpmi-nand.c +6 -2
@@ -149,8 +149,10 @@ static int gpmi_init(struct gpmi_nand_data *this)int ret; ret =pm_runtime_get_sync (this->dev); -if (ret <0 ) +if (ret <0 ) { +pm_runtime_put_noidle (this->dev);return ret; + } ret =gpmi_reset_block (r->gpmi_regs, false);if (ret)
@@ -2414,8 +2416,10 @@ static int gpmi_nfc_exec_op(struct nand_chip *chip, this->transfers[i].direction =DMA_NONE ; ret =pm_runtime_get_sync (this->dev); -if (ret <0 ) +if (ret <0 ) { +pm_runtime_put_noidle (this->dev);return ret; + }/* * This driver currently supports only one NAND chip. Plus, dies share
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 268/453 mtd: rawnand: meson: Fix a resource leak in init
In reply to Greg Kroah-HartmanFrom: Dan Carpenter <[email protected]>
[ Upstream commit ad8566d3555c4731e6b48823b92d3929b0394c14 ]
Call clk_disable_unprepare(nfc->phase_rx) if the clk_set_rate() function fails to avoid a resource leak.
--- drivers/mtd/nand/raw/meson_nand.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
drivers/mtd/nand/raw/meson_nand.c +4 -1
@@ -1041,9 +1041,12 @@ static int meson_nfc_clk_init(struct meson_nfc *nfc) ret =clk_set_rate (nfc->device_clk,24000000 );if (ret) - goto err_phase_rx; + goto err_disable_rx;return 0 ; + +err_disable_rx: +clk_disable_unprepare (nfc->phase_rx); err_phase_rx:clk_disable_unprepare (nfc->phase_tx); err_phase_tx:
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 269/453 mtd: rawnand: gpmi: Fix the random DMA timeout issue
In reply to Greg Kroah-HartmanFrom: Han Xu <[email protected]>
[ Upstream commit 7671edeb193910482a9b0c22cd32176e7de7b2ed ]
To get better performance, current gpmi driver collected and chained all small DMA transfers in gpmi_nfc_exec_op, the whole chain triggered and wait for complete at the end.
But some random DMA timeout found in this new driver, with the help of ftrace, we found the root cause is as follows:
Take gpmi_ecc_read_page() as an example, gpmi_nfc_exec_op collected 6 DMA transfers and the DMA chain triggered at the end. It waits for bch completion and check jiffies if it's timeout. The typical function graph shown below,
63.216351 | 1) | gpmi_ecc_read_page() {
63.216352 | 1) 0.750 us | gpmi_bch_layout_std();
63.216354 | 1) | gpmi_nfc_exec_op() {
63.216355 | 1) | gpmi_chain_command() {
63.216356 | 1) | mxs_dma_prep_slave_sg() {
63.216357 | 1) | /* mxs chan ccw idx: 0 */
63.216358 | 1) 1.750 us | }
63.216359 | 1) | mxs_dma_prep_slave_sg() {
63.216360 | 1) | /* mxs chan ccw idx: 1 */
63.216361 | 1) 2.000 us | }
63.216361 | 1) 6.500 us | }
63.216362 | 1) | gpmi_chain_command() {
63.216363 | 1) | mxs_dma_prep_slave_sg() {
63.216364 | 1) | /* mxs chan ccw idx: 2 */
63.216365 | 1) 1.750 us | }
63.216366 | 1) | mxs_dma_prep_slave_sg() {
63.216367 | 1) | /* mxs chan ccw idx: 3 */
63.216367 | 1) 1.750 us | }
63.216368 | 1) 5.875 us | }
63.216369 | 1) | /* gpmi_chain_wait_ready */
63.216370 | 1) | mxs_dma_prep_slave_sg() {
63.216372 | 1) | /* mxs chan ccw idx: 4 */
63.216373 | 1) 3.000 us | }
63.216374 | 1) | /* gpmi_chain_data_read */
63.216376 | 1) | mxs_dma_prep_slave_sg() {
63.216377 | 1) | /* mxs chan ccw idx: 5 */
63.216378 | 1) 2.000 us | }
63.216379 | 1) 1.125 us | mxs_dma_tx_submit();
63.216381 | 1) 1.000 us | mxs_dma_enable_chan();
63.216712 | 0) 2.625 us | mxs_dma_int_handler();
63.216717 | 0) 4.250 us | bch_irq();
63.216723 | 0) 1.250 us | mxs_dma_tasklet();
63.216723 | 1) | /* jiffies left 250 */
63.216725 | 1) ! 372.000 us | }
63.216726 | 1) 2.625 us | gpmi_count_bitflips();
63.216730 | 1) ! 379.125 us | }but it's not gurantee that bch irq handled always after dma irq handled, sometimes bch_irq comes first and gpmi_nfc_exec_op won't wait anymore, another gpmi_nfc_exec_op may get invoked before last DMA chain IRQ handled, this messed up the next DMA chain and causes DMA timeout. Check the trace log when issue happened.
63.218923 | 1) | gpmi_ecc_read_page() {
63.218924 | 1) 0.625 us | gpmi_bch_layout_std();
63.218926 | 1) | gpmi_nfc_exec_op() {
63.218927 | 1) | gpmi_chain_command() {
63.218928 | 1) | mxs_dma_prep_slave_sg() {
63.218929 | 1) | /* mxs chan ccw idx: 0 */
63.218929 | 1) 1.625 us | }
63.218931 | 1) | mxs_dma_prep_slave_sg() {
63.218931 | 1) | /* mxs chan ccw idx: 1 */
63.218932 | 1) 1.750 us | }
63.218933 | 1) 5.875 us | }
63.218934 | 1) | gpmi_chain_command() {
63.218934 | 1) | mxs_dma_prep_slave_sg() {
63.218935 | 1) | /* mxs chan ccw idx: 2 */
63.218936 | 1) 1.875 us | }
63.218937 | 1) | mxs_dma_prep_slave_sg() {
63.218938 | 1) | /* mxs chan ccw idx: 3 */
63.218939 | 1) 1.625 us | }
63.218939 | 1) 5.875 us | }
63.218940 | 1) | /* gpmi_chain_wait_ready */
63.218941 | 1) | mxs_dma_prep_slave_sg() {
63.218942 | 1) | /* mxs chan ccw idx: 4 */
63.218942 | 1) 1.625 us | }
63.218943 | 1) | /* gpmi_chain_data_read */
63.218944 | 1) | mxs_dma_prep_slave_sg() {
63.218945 | 1) | /* mxs chan ccw idx: 5 */
63.218947 | 1) 2.375 us | }
63.218948 | 1) 0.625 us | mxs_dma_tx_submit();
63.218949 | 1) 1.000 us | mxs_dma_enable_chan();
63.219276 | 0) 5.125 us | bch_irq(); <----
63.219283 | 1) | /* jiffies left 250 */
63.219285 | 1) ! 358.625 us | }
63.219286 | 1) 2.750 us | gpmi_count_bitflips();
63.219289 | 1) ! 366.000 us | }
63.219290 | 1) | gpmi_ecc_read_page() {
63.219291 | 1) 0.750 us | gpmi_bch_layout_std();
63.219293 | 1) | gpmi_nfc_exec_op() {
63.219294 | 1) | gpmi_chain_command() {
63.219295 | 1) | mxs_dma_prep_slave_sg() {
63.219295 | 0) 1.875 us | mxs_dma_int_handler(); <----
63.219296 | 1) | /* mxs chan ccw idx: 6 */
63.219297 | 1) 2.250 us | }
63.219298 | 1) | mxs_dma_prep_slave_sg() {
63.219298 | 0) 1.000 us | mxs_dma_tasklet();
63.219299 | 1) | /* mxs chan ccw idx: 0 */
63.219300 | 1) 1.625 us | }
63.219300 | 1) 6.375 us | }
63.219301 | 1) | gpmi_chain_command() {
63.219302 | 1) | mxs_dma_prep_slave_sg() {
63.219303 | 1) | /* mxs chan ccw idx: 1 */
63.219304 | 1) 1.625 us | }
63.219305 | 1) | mxs_dma_prep_slave_sg() {
63.219306 | 1) | /* mxs chan ccw idx: 2 */
63.219306 | 1) 1.875 us | }
63.219307 | 1) 6.000 us | }
63.219308 | 1) | /* gpmi_chain_wait_ready */
63.219308 | 1) | mxs_dma_prep_slave_sg() {
63.219309 | 1) | /* mxs chan ccw idx: 3 */
63.219310 | 1) 2.000 us | }
63.219311 | 1) | /* gpmi_chain_data_read */
63.219312 | 1) | mxs_dma_prep_slave_sg() {
63.219313 | 1) | /* mxs chan ccw idx: 4 */
63.219314 | 1) 1.750 us | }
63.219315 | 1) 0.625 us | mxs_dma_tx_submit();
63.219316 | 1) 0.875 us | mxs_dma_enable_chan();
64.224227 | 1) | /* jiffies left 0 */In the first gpmi_nfc_exec_op, bch_irq comes first and gpmi_nfc_exec_op exits, but DMA IRQ still not happened yet until the middle of following gpmi_nfc_exec_op, the first DMA transfer index get messed and DMA get timeout.
To fix the issue, when there is bch ops in DMA chain, the gpmi_nfc_exec_op should wait for both completions rather than bch completion only.
--- drivers/mtd/nand/raw/gpmi-nand/gpmi-nand.c | 30 +++++++++++++++------- 1 file changed, 21 insertions(+), 9 deletions(-)
drivers/mtd/nand/raw/gpmi-nand/gpmi-nand.c +21 -9
@@ -2408,7 +2408,7 @@ static int gpmi_nfc_exec_op(struct nand_chip *chip,void *buf_read =NULL ;const void *buf_write =NULL ;bool direct = false; -struct completion *completion; +struct completion *dma_completion, *bch_completion;unsigned long to; this->ntransfers =0 ;
@@ -2502,22 +2502,24 @@ static int gpmi_nfc_exec_op(struct nand_chip *chip, this->resources.bch_regs + HW_BCH_FLASH0LAYOUT1); } + desc->callback = dma_irq_callback; + desc->callback_param = this; + dma_completion = &this->dma_done; + bch_completion =NULL ; + +init_completion (dma_completion); +if (this->bch && buf_read) {writel (BM_BCH_CTRL_COMPLETE_IRQ_EN , this->resources.bch_regs +HW_BCH_CTRL_SET ); - completion = &this->bch_done; - }else { - desc->callback = dma_irq_callback; - desc->callback_param = this; - completion = &this->dma_done; + bch_completion = &this->bch_done; +init_completion (bch_completion); } -init_completion (completion); -dmaengine_submit (desc);dma_async_issue_pending (get_dma_chan (this)); - to =wait_for_completion_timeout (completion,msecs_to_jiffies (1000 )); + to =wait_for_completion_timeout (dma_completion,msecs_to_jiffies (1000 ));if (!to) {dev_err (this->dev,"DMA timeout, last DMA\n" );gpmi_dump_info (this);
@@ -2525,6 +2527,16 @@ static int gpmi_nfc_exec_op(struct nand_chip *chip, goto unmap; } +if (this->bch && buf_read) { + to =wait_for_completion_timeout (bch_completion,msecs_to_jiffies (1000 )); +if (!to) { +dev_err (this->dev,"BCH timeout, last DMA\n" ); +gpmi_dump_info (this); + ret = -ETIMEDOUT ; + goto unmap; + } + } +writel (BM_BCH_CTRL_COMPLETE_IRQ_EN , this->resources.bch_regs +HW_BCH_CTRL_CLR );gpmi_clear_bch (this);
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 270/453 extcon: max77693: Fix modalias string
In reply to Greg Kroah-HartmanFrom: Marek Szyprowski <[email protected]>
[ Upstream commit e1efdb604f5c9903a5d92ef42244009d3c04880f ]
The platform device driver name is "max77693-muic", so advertise it properly in the modalias string. This fixes automated module loading when this driver is compiled as a module.
--- drivers/extcon/extcon-max77693.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/extcon/extcon-max77693.c +1 -1
@@ -1277,4 +1277,4 @@ module_platform_driver(max77693_muic_driver);MODULE_DESCRIPTION ("Maxim MAX77693 Extcon driver" );MODULE_AUTHOR ("Chanwoo Choi <[email protected]>" );MODULE_LICENSE ("GPL" ); -MODULE_ALIAS ("platform:extcon-max77693" ); +MODULE_ALIAS ("platform:max77693-muic" );
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 271/453 crypto: atmel-i2c - select CONFIG_BITREVERSE
In reply to Greg Kroah-HartmanFrom: Arnd Bergmann <[email protected]>
[ Upstream commit d33a23b0532d5d1b5b700e8641661261e7dbef61 ]
The bitreverse helper is almost always built into the kernel, but in a rare randconfig build it is possible to hit a case in which it is a loadable module while the atmel-i2c driver is built-in:
arm-linux-gnueabi-ld: drivers/crypto/atmel-i2c.o: in function `atmel_i2c_checksum':
atmel-i2c.c:(.text+0xa0): undefined reference to `byte_rev_table'
Add one more 'select' statement to prevent this.
--- drivers/crypto/Kconfig | 1 + 1 file changed, 1 insertion(+)
drivers/crypto/Kconfig +1 -0
@@ -544,6 +544,7 @@ config CRYPTO_DEV_ATMEL_SHA config CRYPTO_DEV_ATMEL_I2C tristate + select BITREVERSE config CRYPTO_DEV_ATMEL_ECC tristate "Support for Microchip / Atmel ECC hw accelerator"
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 272/453 mac80211: dont set set TDLS STA bandwidth wider than possible
In reply to Greg Kroah-HartmanFrom: Johannes Berg <[email protected]>
[ Upstream commit f65607cdbc6b0da356ef5a22552ddd9313cf87a0 ]
When we set up a TDLS station, we set sta->sta.bandwidth solely based on the capabilities, because the "what's the current bandwidth" check is bypassed and only applied for other types of stations.
This leads to the unfortunate scenario that the sta->sta.bandwidth is 160 MHz if both stations support it, but we never actually configure this bandwidth unless the AP is already using 160 MHz; even for wider bandwidth support we only go up to 80 MHz (at least right now.)
For iwlwifi, this can also lead to firmware asserts, telling us that we've configured the TX rates for a higher bandwidth than is actually available due to the PHY configuration.
For non-TDLS, we check against the interface's requested bandwidth, but we explicitly skip this check for TDLS to cope with the wider BW case. Change this to
(a) still limit to the TDLS peer's own chandef, which gets factored into the overall PHY configuration we request from the driver, and
(b) limit it to when the TDLS peer is authorized, because it's only factored into the channel context in this case.
--- net/mac80211/vht.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-)
net/mac80211/vht.c +10 -4
@@ -446,12 +446,18 @@ enum ieee80211_sta_rx_bandwidth ieee80211_sta_cur_vht_bw(struct sta_info *sta)* IEEE80211-2016 specification makes higher bandwidth operation * possible on the TDLS link if the peers have wider bandwidth * capability. +* +* However, in this case, and only if the TDLS peer is authorized, +* limit to the tdls_chandef so that the configuration here isn't +* wider than what's actually requested on the channel context. */ if (test_sta_flag (sta,WLAN_STA_TDLS_PEER ) && -test_sta_flag (sta,WLAN_STA_TDLS_WIDER_BW )) -return bw; - - bw =min (bw,ieee80211_chan_width_to_rx_bw (bss_width)); +test_sta_flag (sta,WLAN_STA_TDLS_WIDER_BW ) && +test_sta_flag (sta,WLAN_STA_AUTHORIZED ) && + sta->tdls_chandef.chan) + bw =min (bw,ieee80211_chan_width_to_rx_bw (sta->tdls_chandef.width)); +else + bw =min (bw,ieee80211_chan_width_to_rx_bw (bss_width));return bw; }
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 273/453 ASoC: wm_adsp: remove "ctl" from list on error in wm_adsp_create_control()
In reply to Greg Kroah-HartmanFrom: Dan Carpenter <[email protected]>
[ Upstream commit 85a7555575a0e48f9b73db310d0d762a08a46d63 ]
The error handling frees "ctl" but it's still on the "dsp->ctl_list" list so that could result in a use after free. Remove it from the list before returning.
--- sound/soc/codecs/wm_adsp.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
sound/soc/codecs/wm_adsp.c +3 -2
@@ -1496,7 +1496,7 @@ static int wm_adsp_create_control(struct wm_adsp *dsp, ctl_work =kzalloc (sizeof (*ctl_work),GFP_KERNEL );if (!ctl_work) { ret = -ENOMEM ; - goto err_ctl_cache; + goto err_list_del; } ctl_work->dsp = dsp;
@@ -1506,7 +1506,8 @@ static int wm_adsp_create_control(struct wm_adsp *dsp,return 0 ; -err_ctl_cache: +err_list_del: +list_del (&ctl->list);kfree (ctl->cache); err_ctl_name:kfree (ctl->name);
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 274/453 irqchip/alpine-msi: Fix freeing of interrupts on allocation error path
In reply to Greg Kroah-HartmanFrom: Marc Zyngier <[email protected]>
[ Upstream commit 3841245e8498a789c65dedd7ffa8fb2fee2c0684 ]
The alpine-msi driver has an interesting allocation error handling, where it frees the same interrupts repeatedly. Hilarity follows.
This code is probably never executed, but let's fix it nonetheless.
--- drivers/irqchip/irq-alpine-msi.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
drivers/irqchip/irq-alpine-msi.c +1 -2
@@ -165,8 +165,7 @@ static int alpine_msix_middle_domain_alloc(struct irq_domain *domain,return 0 ; err_sgi: -while (--i >=0 ) -irq_domain_free_irqs_parent (domain, virq, i); +irq_domain_free_irqs_parent (domain, virq, i -1 );alpine_msix_free_sgi (priv, sgi, nr_irqs);return err; }
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 275/453 watchdog: armada_37xx: Add missing dependency on HAS_IOMEM
In reply to Greg Kroah-HartmanFrom: Guenter Roeck <[email protected]>
[ Upstream commit 7f6f1dfb2dcbe5d2bfa213f2df5d74c147cd5954 ]
The following kbuild warning is seen on a system without HAS_IOMEM.
WARNING: unmet direct dependencies detected for MFD_SYSCON
Depends on [n]: HAS_IOMEM [=n]
Selected by [y]:
- ARMADA_37XX_WATCHDOG [=y] && WATCHDOG [=y] && (ARCH_MVEBU || COMPILE_TEST
This results in a subsequent compile error.
drivers/watchdog/armada_37xx_wdt.o: in function `armada_37xx_wdt_probe':
armada_37xx_wdt.c:(.text+0xdc): undefined reference to `devm_ioremap'
Add the missing dependency.
--- drivers/watchdog/Kconfig | 1 + 1 file changed, 1 insertion(+)
drivers/watchdog/Kconfig +1 -0
@@ -374,6 +374,7 @@ config ARM_SBSA_WATCHDOG config ARMADA_37XX_WATCHDOG tristate "Armada 37xx watchdog" depends on ARCH_MVEBU || COMPILE_TEST + depends on HAS_IOMEM select MFD_SYSCON select WATCHDOG_CORE help
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 276/453 watchdog: sirfsoc: Add missing dependency on HAS_IOMEM
In reply to Greg Kroah-HartmanFrom: Guenter Roeck <[email protected]>
[ Upstream commit 8ae2511112d2e18bc7d324b77f965d34083a25a2 ]
If HAS_IOMEM is not defined and SIRFSOC_WATCHDOG is enabled, the build fails with the following error.
drivers/watchdog/sirfsoc_wdt.o: in function `sirfsoc_wdt_probe':
sirfsoc_wdt.c:(.text+0x112):
undefined reference to `devm_platform_ioremap_resource'
--- drivers/watchdog/Kconfig | 1 + 1 file changed, 1 insertion(+)
drivers/watchdog/Kconfig +1 -0
@@ -775,6 +775,7 @@ config MOXART_WDT config SIRFSOC_WATCHDOG tristate "SiRFSOC watchdog" + depends on HAS_IOMEM depends on ARCH_SIRF || COMPILE_TEST select WATCHDOG_CORE default y
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 277/453 watchdog: sprd: remove watchdog disable from resume fail path
In reply to Greg Kroah-HartmanFrom: Lingling Xu <[email protected]>
[ Upstream commit f61a59acb462840bebcc192f754fe71b6a16ff99 ]
sprd_wdt_start() would return fail if the loading operation is not completed in a certain time, disabling watchdog for that case would probably cause the kernel crash when kick watchdog later, that's too bad, so remove the watchdog disable operation for the fail case to make sure other parts in the kernel can run normally.
[ chunyan: Massaged changelog ]
--- drivers/watchdog/sprd_wdt.c | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-)
drivers/watchdog/sprd_wdt.c +2 -7
@@ -345,15 +345,10 @@ static int __maybe_unused sprd_wdt_pm_resume(struct device *dev)if (ret)return ret; -if (watchdog_active (&wdt->wdd)) { +if (watchdog_active (&wdt->wdd)) ret =sprd_wdt_start (&wdt->wdd); -if (ret) { -sprd_wdt_disable (wdt); -return ret; - } - } -return 0 ; +return ret; }static const struct dev_pm_ops sprd_wdt_pm_ops = {
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 278/453 watchdog: sprd: check busy bit before new loading rather than after that
In reply to Greg Kroah-HartmanFrom: Lingling Xu <[email protected]>
[ Upstream commit 3e07d240939803bed9feb2a353d94686a411a7ca ]
As the specification described, users must check busy bit before start a new loading operation to make sure that the previous loading is done and the device is ready to accept a new one.
[ chunyan: Massaged changelog ]
--- drivers/watchdog/sprd_wdt.c | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-)
drivers/watchdog/sprd_wdt.c +13 -12
@@ -108,18 +108,6 @@ static int sprd_wdt_load_value(struct sprd_wdt *wdt, u32 timeout,u32 tmr_step = timeout *SPRD_WDT_CNT_STEP ;u32 prtmr_step = pretimeout *SPRD_WDT_CNT_STEP ; -sprd_wdt_unlock (wdt->base); -writel_relaxed ((tmr_step >>SPRD_WDT_CNT_HIGH_SHIFT ) & -SPRD_WDT_LOW_VALUE_MASK , wdt->base +SPRD_WDT_LOAD_HIGH ); -writel_relaxed ((tmr_step &SPRD_WDT_LOW_VALUE_MASK ), - wdt->base +SPRD_WDT_LOAD_LOW ); -writel_relaxed ((prtmr_step >>SPRD_WDT_CNT_HIGH_SHIFT ) & -SPRD_WDT_LOW_VALUE_MASK , - wdt->base +SPRD_WDT_IRQ_LOAD_HIGH ); -writel_relaxed (prtmr_step &SPRD_WDT_LOW_VALUE_MASK , - wdt->base +SPRD_WDT_IRQ_LOAD_LOW ); -sprd_wdt_lock (wdt->base); -/* * Waiting the load value operation done, * it needs two or three RTC clock cycles.
@@ -134,6 +122,19 @@ static int sprd_wdt_load_value(struct sprd_wdt *wdt, u32 timeout,if (delay_cnt >=SPRD_WDT_LOAD_TIMEOUT )return -EBUSY ; + +sprd_wdt_unlock (wdt->base); +writel_relaxed ((tmr_step >>SPRD_WDT_CNT_HIGH_SHIFT ) & +SPRD_WDT_LOW_VALUE_MASK , wdt->base +SPRD_WDT_LOAD_HIGH ); +writel_relaxed ((tmr_step &SPRD_WDT_LOW_VALUE_MASK ), + wdt->base +SPRD_WDT_LOAD_LOW ); +writel_relaxed ((prtmr_step >>SPRD_WDT_CNT_HIGH_SHIFT ) & +SPRD_WDT_LOW_VALUE_MASK , + wdt->base +SPRD_WDT_IRQ_LOAD_HIGH ); +writel_relaxed (prtmr_step &SPRD_WDT_LOW_VALUE_MASK , + wdt->base +SPRD_WDT_IRQ_LOAD_LOW ); +sprd_wdt_lock (wdt->base); +return 0 ; }
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 279/453 watchdog: Fix potential dereferencing of null pointer
In reply to Greg Kroah-HartmanFrom: Wang Wensheng <[email protected]>
[ Upstream commit 6f733cb2e7db38f8141b14740bcde577844a03b7 ]
A reboot notifier, which stops the WDT by calling the stop hook without any check, would be registered when we set WDOG_STOP_ON_REBOOT flag.
Howerer we allow the WDT driver to omit the stop hook since commit "d0684c8a93549" ("watchdog: Make stop function optional") and provide a module parameter for user that controls the WDOG_STOP_ON_REBOOT flag in commit 9232c80659e94 ("watchdog: Add stop_on_reboot parameter to control reboot policy"). Together that commits make user potential to insert a watchdog driver that don't provide a stop hook but with the stop_on_reboot parameter set, then dereferencing of null pointer occurs on system reboot.
Check the stop hook before registering the reboot notifier to fix the issue.
--- drivers/watchdog/watchdog_core.c | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-)
drivers/watchdog/watchdog_core.c +13 -9
@@ -255,15 +255,19 @@ static int __watchdog_register_device(struct watchdog_device *wdd) }if (test_bit (WDOG_STOP_ON_REBOOT , &wdd->status)) { - wdd->reboot_nb.notifier_call = watchdog_reboot_notifier; - - ret =register_reboot_notifier (&wdd->reboot_nb); -if (ret) { -pr_err ("watchdog%d: Cannot register reboot notifier (%d)\n" , - wdd->id, ret); -watchdog_dev_unregister (wdd); -ida_simple_remove (&watchdog_ida, id); -return ret; +if (!wdd->ops->stop) +pr_warn ("watchdog%d: stop_on_reboot not supported\n" , wdd->id); +else { + wdd->reboot_nb.notifier_call = watchdog_reboot_notifier; + + ret =register_reboot_notifier (&wdd->reboot_nb); +if (ret) { +pr_err ("watchdog%d: Cannot register reboot notifier (%d)\n" , + wdd->id, ret); +watchdog_dev_unregister (wdd); +ida_simple_remove (&watchdog_ida, id); +return ret; + } } }
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 280/453 ubifs: Fix error return code in ubifs_init_authentication()
In reply to Greg Kroah-HartmanFrom: Wang ShaoBo <[email protected]>
[ Upstream commit 3cded66330591cfd2554a3fd5edca8859ea365a2 ]
Fix to return PTR_ERR() error code from the error handling case where ubifs_hash_get_desc() failed instead of 0 in ubifs_init_authentication(), as done elsewhere in this function.
--- fs/ubifs/auth.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
fs/ubifs/auth.c +3 -1
@@ -352,8 +352,10 @@ int ubifs_init_authentication(struct ubifs_info *c) c->authenticated = true; c->log_hash =ubifs_hash_get_desc (c); -if (IS_ERR (c->log_hash)) +if (IS_ERR (c->log_hash)) { + err =PTR_ERR (c->log_hash); goto out_free_hmac; + } err =0 ;
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 281/453 um: Monitor error events in IRQ controller
In reply to Greg Kroah-HartmanFrom: Anton Ivanov <[email protected]>
[ Upstream commit e3a01cbee9c5f2c6fc813dd6af007716e60257e7 ]
Ensure that file closes, connection closes, etc are propagated as interrupts in the interrupt controller.
--- arch/um/os-Linux/irq.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/um/os-Linux/irq.c +1 -1
@@ -48,7 +48,7 @@ int os_epoll_triggered(int index, int events)int os_event_mask (int irq_type) {if (irq_type ==IRQ_READ ) -return EPOLLIN |EPOLLPRI ; +return EPOLLIN |EPOLLPRI |EPOLLERR |EPOLLHUP |EPOLLRDHUP ;if (irq_type ==IRQ_WRITE )return EPOLLOUT ;return 0 ;
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 282/453 um: tty: Fix handling of close in tty lines
In reply to Greg Kroah-HartmanFrom: Anton Ivanov <[email protected]>
[ Upstream commit 9b1c0c0e25dcccafd30e7d4c150c249cc65550eb ]
Fix a logical error in tty reading. We get 0 and errno == EAGAIN on the first attempt to read from a closed file descriptor.
Compared to that a true EAGAIN is EAGAIN and -1.
If we check errno for EAGAIN first, before checking the return value we miss the fact that the descriptor is closed.
This bug is as old as the driver. It was not showing up with the original POLL based IRQ controller, because it was producing multiple events. Switching to EPOLL unmasked it.
--- arch/um/drivers/chan_user.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
arch/um/drivers/chan_user.c +2 -2
@@ -26,10 +26,10 @@ int generic_read(int fd, char *c_out, void *unused) n =read (fd, c_out,sizeof (*c_out));if (n >0 )return n; -else if (errno ==EAGAIN ) -return 0 ;else if (n ==0 )return -EIO ; +else if (errno ==EAGAIN ) +return 0 ;return -errno; }
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 283/453 um: chan_xterm: Fix fd leak
In reply to Greg Kroah-HartmanFrom: Anton Ivanov <[email protected]>
[ Upstream commit 9431f7c199ab0d02da1482d62255e0b4621cb1b5 ]
xterm serial channel was leaking a fd used in setting up the port helper
This bug is prehistoric - it predates switching to git. The "fixes" header here is really just to mark all the versions we would like this to apply to which is "Anything from the Cretaceous period onwards".
No dinosaurs were harmed in fixing this bug.
--- arch/um/drivers/xterm.c | 5 +++++ 1 file changed, 5 insertions(+)
arch/um/drivers/xterm.c +5 -0
@@ -18,6 +18,7 @@struct xterm_chan {int pid;int helper_pid; +int chan_fd;char *title;int device;int raw;
@@ -33,6 +34,7 @@ static void *xterm_init(char *str, int device, const struct chan_opts *opts)return NULL ; *data = ((struct xterm_chan ) { .pid =-1 , .helper_pid =-1 , + .chan_fd =-1 , .device = device, .title = opts->xterm_title, .raw = opts->raw } );
@@ -149,6 +151,7 @@ static int xterm_open(int input, int output, int primary, void *d, goto out_kill; } + data->chan_fd = fd; new =xterm_fd (fd, &data->helper_pid);if (new <0 ) { err = new;
@@ -206,6 +209,8 @@ static void xterm_close(int fd, void *d)os_kill_process (data->helper_pid,0 ); data->helper_pid =-1 ; +if (data->chan_fd !=-1 ) +os_close_file (data->chan_fd);os_close_file (fd); }
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 284/453 sunrpc: fix xs_read_xdr_buf for partial pages receive
In reply to Greg Kroah-HartmanFrom: Dan Aloni <[email protected]>
[ Upstream commit ac9645c87380e39a8fa87a1b51721efcdea89dbf ]
When receiving pages data, return value 'ret' when positive includes buf->page_base, so we should subtract that before it is used for changing offset and comparing against want.
This was discovered on the very rare cases where the server returned a chunk of bytes that when added to the already received amount of bytes for the pages happened to match the current recv.len, for example on this case:
buf->page_base : 258356
actually received from socket: 1740
ret : 260096
want : 260096In this case neither of the two 'if ... goto out' trigger, and we continue to tail parsing.
Worth to mention that the ensuing EMSGSIZE from the continued execution of xs_read_xdr_buf may be observed by an application due to 4 superfluous bytes being added to the pages data.
--- net/sunrpc/xprtsock.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
net/sunrpc/xprtsock.c +2 -1
@@ -432,7 +432,8 @@ xs_read_xdr_buf(struct socket *sock, struct msghdr *msg, int flags,if (ret <=0 ) goto sock_err;xs_flush_bvec (buf->bvec, ret, seek + buf->page_base); - offset += ret - buf->page_base; + ret -= buf->page_base; + offset += ret;if (offset == count || msg->msg_flags & (MSG_EOR |MSG_TRUNC )) goto out;if (ret != want)
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 285/453 RDMA/cma: Dont overwrite sgid_attr after device is released
In reply to Greg Kroah-HartmanFrom: Leon Romanovsky <[email protected]>
[ Upstream commit e246b7c035d74abfb3507fa10082d0c42cc016c3 ]
As part of the cma_dev release, that pointer will be set to NULL. In case it happens in rdma_bind_addr() (part of an error flow), the next call to addr_handler() will have a call to cma_acquire_dev_by_src_ip() which will overwrite sgid_attr without releasing it.
WARNING: CPU: 2 PID: 108 at drivers/infiniband/core/cma.c:606 cma_bind_sgid_attr drivers/infiniband/core/cma.c:606 [inline] WARNING: CPU: 2 PID: 108 at drivers/infiniband/core/cma.c:606 cma_acquire_dev_by_src_ip+0x470/0x4b0 drivers/infiniband/core/cma.c:649 CPU: 2 PID: 108 Comm: kworker/u8:1 Not tainted 5.10.0-rc6+ #257 Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.13.0-0-gf21b5a4aeb02-prebuilt.qemu.org 04/01/2014 Workqueue: ib_addr process_one_req RIP: 0010:cma_bind_sgid_attr drivers/infiniband/core/cma.c:606 [inline] RIP: 0010:cma_acquire_dev_by_src_ip+0x470/0x4b0 drivers/infiniband/core/cma.c:649 Code: 66 d9 4a ff 4d 8b 6e 10 49 8d bd 1c 08 00 00 e8 b6 d6 4a ff 45 0f b6 bd 1c 08 00 00 41 83 e7 01 e9 49 fd ff ff e8 90 c5 29 ff <0f> 0b e9 80 fe ff ff e8 84 c5 29 ff 4c 89 f7 e8 2c d9 4a ff 4d 8b RSP: 0018:ffff8881047c7b40 EFLAGS: 00010293 RAX: ffff888104789c80 RBX: 0000000000000001 RCX: ffffffff820b8ef8 RDX: 0000000000000000 RSI: ffffffff820b9080 RDI: ffff88810cd4c998 RBP: ffff8881047c7c08 R08: ffff888104789c80 R09: ffffed10209f4036 R10: ffff888104fa01ab R11: ffffed10209f4035 R12: ffff88810cd4c800 R13: ffff888105750e28 R14: ffff888108f0a100 R15: ffff88810cd4c998 FS: 0000000000000000(0000) GS:ffff888119c00000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 0000000000000000 CR3: 0000000104e60005 CR4: 0000000000370ea0 DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 Call Trace: addr_handler+0x266/0x350 drivers/infiniband/core/cma.c:3190 process_one_req+0xa3/0x300 drivers/infiniband/core/addr.c:645 process_one_work+0x54c/0x930 kernel/workqueue.c:2272 worker_thread+0x82/0x830 kernel/workqueue.c:2418 kthread+0x1ca/0x220 kernel/kthread.c:292 ret_from_fork+0x1f/0x30 arch/x86/entry/entry_64.S:296
--- drivers/infiniband/core/cma.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)
drivers/infiniband/core/cma.c +4 -3
@@ -530,6 +530,10 @@ static void cma_release_dev(struct rdma_id_private *id_priv)list_del (&id_priv->list);cma_deref_dev (id_priv->cma_dev); id_priv->cma_dev =NULL ; +if (id_priv->id.route.addr.dev_addr.sgid_attr) { +rdma_put_gid_attr (id_priv->id.route.addr.dev_addr.sgid_attr); + id_priv->id.route.addr.dev_addr.sgid_attr =NULL ; + }mutex_unlock (&lock); }
@@ -1879,9 +1883,6 @@ void rdma_destroy_id(struct rdma_cm_id *id)kfree (id_priv->id.route.path_rec); -if (id_priv->id.route.addr.dev_addr.sgid_attr) -rdma_put_gid_attr (id_priv->id.route.addr.dev_addr.sgid_attr); -put_net (id_priv->id.route.addr.dev_addr.net);kfree (id_priv); }
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 286/453 nfc: s3fwrn5: Release the nfc firmware
In reply to Greg Kroah-HartmanFrom: Bongsu Jeon <[email protected]>
[ Upstream commit a4485baefa1efa596702ebffd5a9c760d42b14b5 ]
add the code to release the nfc firmware when the firmware image size is wrong.
--- drivers/nfc/s3fwrn5/firmware.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/nfc/s3fwrn5/firmware.c +3 -1
@@ -293,8 +293,10 @@ static int s3fwrn5_fw_request_firmware(struct s3fwrn5_fw_info *fw_info)if (ret <0 )return ret; -if (fw->fw->size <S3FWRN5_FW_IMAGE_HEADER_SIZE ) +if (fw->fw->size <S3FWRN5_FW_IMAGE_HEADER_SIZE ) { +release_firmware (fw->fw);return -EINVAL ; + }memcpy (fw->date, fw->fw->data +0x00 ,12 ); fw->date[12 ] ='\0' ;
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 287/453 powerpc/ps3: use dma_mapping_error()
In reply to Greg Kroah-HartmanFrom: Vincent Stehlé <[email protected]>
[ Upstream commit d0edaa28a1f7830997131cbce87b6c52472825d1 ]
The DMA address returned by dma_map_single() should be checked with dma_mapping_error(). Fix the ps3stor_setup() function accordingly.
--- drivers/ps3/ps3stor_lib.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/ps3/ps3stor_lib.c +1 -1
@@ -189,7 +189,7 @@ int ps3stor_setup(struct ps3_storage_device *dev, irq_handler_t handler) dev->bounce_lpar =ps3_mm_phys_to_lpar (__pa (dev->bounce_buf)); dev->bounce_dma =dma_map_single (&dev->sbd.core, dev->bounce_buf, dev->bounce_size,DMA_BIDIRECTIONAL ); -if (!dev->bounce_dma) { +if (dma_mapping_error (&dev->sbd.core, dev->bounce_dma)) {dev_err (&dev->sbd.core,"%s:%u: map DMA region failed\n" , __func__, __LINE__); error = -ENODEV ;
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 288/453 sparc: fix handling of page table constructor failure
In reply to Greg Kroah-HartmanFrom: Matthew Wilcox (Oracle) <[email protected]>
[ Upstream commit 06517c9a336f4c20f2064611bf4b1e7881a95fe1 ]
The page has just been allocated, so its refcount is 1. free_unref_page() is for use on pages which have a zero refcount. Use __free_page() like the other implementations of pte_alloc_one().
--- arch/sparc/mm/init_64.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/sparc/mm/init_64.c +1 -1
@@ -2904,7 +2904,7 @@ pgtable_t pte_alloc_one(struct mm_struct *mm)if (!page)return NULL ;if (!pgtable_pte_page_ctor (page)) { -free_unref_page (page); +__free_page (page);return NULL ; }return (pte_t *)page_address (page);
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 289/453 mm: dont wake kswapd prematurely when watermark boosting is disabled
In reply to Greg Kroah-HartmanFrom: Johannes Weiner <[email protected]>
[ Upstream commit 597c892038e08098b17ccfe65afd9677e6979800 ]
On 2-node NUMA hosts we see bursts of kswapd reclaim and subsequent pressure spikes and stalls from cache refaults while there is plenty of free memory in the system.
Usually, kswapd is woken up when all eligible nodes in an allocation are full. But the code related to watermark boosting can wake kswapd on one full node while the other one is mostly empty. This may be justified to fight fragmentation, but is currently unconditionally done whether watermark boosting is occurring or not.
In our case, many of our workloads' throughput scales with available memory, and pure utilization is a more tangible concern than trends around longer-term fragmentation. As a result we generally disable watermark boosting.
Wake kswapd only woken when watermark boosting is requested.
--- mm/page_alloc.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-)
mm/page_alloc.c +7 -6
@@ -2346,12 +2346,12 @@ static bool can_steal_fallback(unsigned int order, int start_mt)return false; } -static inline void boost_watermark (struct zone *zone) +static inline bool boost_watermark (struct zone *zone) {unsigned long max_boost;if (!watermark_boost_factor) -return ; +return false;/* * Don't bother in zones that are unlikely to produce results. * On small machines, including kdump capture kernels running
@@ -2359,7 +2359,7 @@ static inline void boost_watermark(struct zone *zone)* memory situation immediately. */ if ((pageblock_nr_pages *4 ) >zone_managed_pages (zone)) -return ; +return false; max_boost =mult_frac (zone->_watermark[WMARK_HIGH ], watermark_boost_factor,10000 );
@@ -2373,12 +2373,14 @@ static inline void boost_watermark(struct zone *zone)* boosted watermark resulting in a hang. */ if (!max_boost) -return ; +return false; max_boost =max (pageblock_nr_pages, max_boost); zone->watermark_boost =min (zone->watermark_boost + pageblock_nr_pages, max_boost); + +return true; }/*
@@ -2417,8 +2419,7 @@ static void steal_suitable_fallback(struct zone *zone, struct page *page,* likelihood of future fallbacks. Wake kswapd now as the node * may be balanced overall and kswapd will not wake naturally. */ -boost_watermark (zone); -if (alloc_flags &ALLOC_KSWAPD ) +if (boost_watermark (zone) && (alloc_flags &ALLOC_KSWAPD ))set_bit (ZONE_BOOSTED_WATERMARK , &zone->flags);/* We are not allowed to try stealing from the whole block */
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 290/453 checkpatch: fix unescaped left brace
In reply to Greg Kroah-HartmanFrom: Dwaipayan Ray <[email protected]>
[ Upstream commit 03f4935135b9efeb780b970ba023c201f81cf4e6 ]
There is an unescaped left brace in a regex in OPEN_BRACE check. This throws a runtime error when checkpatch is run with --fix flag and the OPEN_BRACE check is executed.
Fix it by escaping the left brace.
--- scripts/checkpatch.pl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
scripts/checkpatch.pl +1 -1
@@ -4150,7 +4150,7 @@ sub process { $fix) { fix_delete_line($fixlinenr, $rawline); my $fixed_line = $rawline; - $fixed_line =~ /(^..*$Type\s*$Ident\(.*\)\s*){(.*)$/; + $fixed_line =~ /(^..*$Type\s*$Ident\(.*\)\s*)\{(.*)$/; my $line1 = $1; my $line2 = $2; fix_insert_line($fixlinenr, ltrim($line1));
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 291/453 lan743x: fix rx_napi_poll/interrupt ping-pong
In reply to Greg Kroah-HartmanFrom: Sven Van Asbroeck <[email protected]>
[ Upstream commit 57030a0b620f735bf557696e5ceb9f32c2b3bb8f ]
Even if there is more rx data waiting on the chip, the rx napi poll fn will never run more than once - it will always read a few buffers, then bail out and re-arm interrupts. Which results in ping-pong between napi and interrupt.
This defeats the purpose of napi, and is bad for performance.
Fix by making the rx napi poll behave identically to other ethernet drivers:
1. initialize rx napi polling with an arbitrary budget (64).
2. in the polling fn, return full weight if rx queue is not depleted, this tells the napi core to "keep polling".
3. update the rx tail ("ring the doorbell") once for every 8 processed rx ring buffers.
Thanks to Jakub Kicinski, Eric Dumazet and Andrew Lunn for their expert opinions and suggestions.
Tested with 20 seconds of full bandwidth receive (iperf3):
rx irqs softirqs(NET_RX)
-----------------------------
before 23827 33620 after 129 4081
--- drivers/net/ethernet/microchip/lan743x_main.c | 43 ++++++++++--------- 1 file changed, 23 insertions(+), 20 deletions(-)
drivers/net/ethernet/microchip/lan743x_main.c +23 -20
@@ -1899,6 +1899,14 @@ static struct sk_buff *lan743x_rx_allocate_skb(struct lan743x_rx *rx) length, GFP_ATOMIC | GFP_DMA); } +static void lan743x_rx_update_tail (struct lan743x_rx *rx,int index) +{ +/* update the tail once per 8 descriptors */ +if ((index &7 ) ==7 ) +lan743x_csr_write (rx->adapter,RX_TAIL (rx->channel_number), + index); +} +static int lan743x_rx_init_ring_element (struct lan743x_rx *rx,int index,struct sk_buff *skb) {
@@ -1929,6 +1937,7 @@ static int lan743x_rx_init_ring_element(struct lan743x_rx *rx, int index, descriptor->data0 = (RX_DESC_DATA0_OWN_ | (length &RX_DESC_DATA0_BUF_LENGTH_MASK_ ));skb_reserve (buffer_info->skb,RX_HEAD_PADDING ); +lan743x_rx_update_tail (rx, index);return 0 ; }
@@ -1947,6 +1956,7 @@ static void lan743x_rx_reuse_ring_element(struct lan743x_rx *rx, int index) descriptor->data0 = (RX_DESC_DATA0_OWN_ | ((buffer_info->buffer_length) &RX_DESC_DATA0_BUF_LENGTH_MASK_ )); +lan743x_rx_update_tail (rx, index); }static void lan743x_rx_release_ring_element (struct lan743x_rx *rx,int index)
@@ -2158,6 +2168,7 @@ static int lan743x_rx_napi_poll(struct napi_struct *napi, int weight) { struct lan743x_rx *rx = container_of(napi, struct lan743x_rx, napi);struct lan743x_adapter *adapter = rx->adapter; +int result =RX_PROCESS_RESULT_NOTHING_TO_DO ;u32 rx_tail_flags =0 ;int count;
@@ -2166,27 +2177,19 @@ static int lan743x_rx_napi_poll(struct napi_struct *napi, int weight)lan743x_csr_write (adapter,DMAC_INT_STS ,DMAC_INT_BIT_RXFRM_ (rx->channel_number)); } - count =0 ; -while (count < weight) { -int rx_process_result =lan743x_rx_process_packet (rx); - -if (rx_process_result ==RX_PROCESS_RESULT_PACKET_RECEIVED ) { - count++; - }else if (rx_process_result == -RX_PROCESS_RESULT_NOTHING_TO_DO ) { +for (count =0 ; count < weight; count++) { + result =lan743x_rx_process_packet (rx); +if (result ==RX_PROCESS_RESULT_NOTHING_TO_DO )break ; - }else if (rx_process_result == -RX_PROCESS_RESULT_PACKET_DROPPED ) { -continue ; - } } rx->frame_count += count; -if (count == weight) - goto done; +if (count == weight || result ==RX_PROCESS_RESULT_PACKET_RECEIVED ) +return weight;if (!napi_complete_done (napi, count)) - goto done; +return count; +/* re-arm interrupts, must write to rx tail on some chip variants */ if (rx->vector_flags &LAN743X_VECTOR_FLAG_VECTOR_ENABLE_AUTO_SET ) rx_tail_flags |=RX_TAIL_SET_TOP_INT_VEC_EN_ ;if (rx->vector_flags &LAN743X_VECTOR_FLAG_SOURCE_ENABLE_AUTO_SET ) {
@@ -2196,10 +2199,10 @@ static int lan743x_rx_napi_poll(struct napi_struct *napi, int weight) INT_BIT_DMA_RX_(rx->channel_number)); } -/* update RX_TAIL */ -lan743x_csr_write (adapter,RX_TAIL (rx->channel_number), - rx_tail_flags | rx->last_tail); -done: +if (rx_tail_flags) +lan743x_csr_write (adapter,RX_TAIL (rx->channel_number), + rx_tail_flags | rx->last_tail); +return count; }
@@ -2344,7 +2347,7 @@ static int lan743x_rx_open(struct lan743x_rx *rx)netif_napi_add (adapter->netdev, &rx->napi, lan743x_rx_napi_poll, - rx->ring_size -1 ); +NAPI_POLL_WEIGHT );lan743x_csr_write (adapter,DMAC_CMD ,DMAC_CMD_RX_SWR_ (rx->channel_number));
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 292/453 net: bcmgenet: Fix a resource leak in an error handling path in the probe functin
In reply to Greg Kroah-HartmanFrom: Christophe JAILLET <[email protected]>
[ Upstream commit 4375ada01963d1ebf733d60d1bb6e5db401e1ac6 ]
If the 'register_netdev()' call fails, we must undo a previous 'bcmgenet_mii_init()' call.
--- drivers/net/ethernet/broadcom/genet/bcmgenet.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/net/ethernet/broadcom/genet/bcmgenet.c +3 -1
@@ -3584,8 +3584,10 @@ static int bcmgenet_probe(struct platform_device *pdev)clk_disable_unprepare (priv->clk); err =register_netdev (dev); -if (err) +if (err) { +bcmgenet_mii_exit (dev); goto err; + }return err;
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 293/453 net: allwinner: Fix some resources leak in the error handling path of the probe and in the remove function
In reply to Greg Kroah-HartmanFrom: Christophe JAILLET <[email protected]>
[ Upstream commit 322e53d1e2529ae9d501f5e0f20604a79b873aef ]
'irq_of_parse_and_map()' should be balanced by a corresponding 'irq_dispose_mapping()' call. Otherwise, there is some resources leaks.
Add such a call in the error handling path of the probe function and in the remove function.
--- drivers/net/ethernet/allwinner/sun4i-emac.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)
drivers/net/ethernet/allwinner/sun4i-emac.c +5 -2
@@ -845,13 +845,13 @@ static int emac_probe(struct platform_device *pdev) db->clk =devm_clk_get (&pdev->dev,NULL );if (IS_ERR (db->clk)) { ret =PTR_ERR (db->clk); - goto out_iounmap; + goto out_dispose_mapping; } ret =clk_prepare_enable (db->clk);if (ret) {dev_err (&pdev->dev,"Error couldn't enable clock (%d)\n" , ret); - goto out_iounmap; + goto out_dispose_mapping; } ret =sunxi_sram_claim (&pdev->dev);
@@ -910,6 +910,8 @@ out_release_sram:sunxi_sram_release (&pdev->dev); out_clk_disable_unprepare:clk_disable_unprepare (db->clk); +out_dispose_mapping: +irq_dispose_mapping (ndev->irq); out_iounmap:iounmap (db->membase); out:
@@ -928,6 +930,7 @@ static int emac_remove(struct platform_device *pdev)unregister_netdev (ndev);sunxi_sram_release (&pdev->dev);clk_disable_unprepare (db->clk); +irq_dispose_mapping (ndev->irq);iounmap (db->membase);free_netdev (ndev);
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 294/453 net: korina: fix return value
In reply to Greg Kroah-HartmanFrom: Vincent Stehlé <[email protected]>
[ Upstream commit 7eb000bdbe7c7da811ef51942b356f6e819b13ba ]
The ndo_start_xmit() method must not attempt to free the skb to transmit when returning NETDEV_TX_BUSY. Therefore, make sure the korina_send_packet() function returns NETDEV_TX_OK when it frees a packet.
--- drivers/net/ethernet/korina.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/net/ethernet/korina.c +1 -1
@@ -219,7 +219,7 @@ static int korina_send_packet(struct sk_buff *skb, struct net_device *dev)dev_kfree_skb_any (skb);spin_unlock_irqrestore (&lp->lock, flags); -return NETDEV_TX_BUSY ; +return NETDEV_TX_OK ; } }
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 295/453 libnvdimm/label: Return -ENXIO for no slot in __blk_label_update
In reply to Greg Kroah-HartmanFrom: Zhang Qilong <[email protected]>
[ Upstream commit 4c46764733c85b82c07e9559b39da4d00a7dd659 ]
Forget to set error code when nd_label_alloc_slot failed, and we add it to avoid overwritten error code.
--- drivers/nvdimm/label.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/nvdimm/label.c +3 -1
@@ -999,8 +999,10 @@ static int __blk_label_update(struct nd_region *nd_region,if (is_old_resource (res, old_res_list, old_num_resources))continue ;/* carry-over */ slot =nd_label_alloc_slot (ndd); -if (slot ==UINT_MAX ) +if (slot ==UINT_MAX ) { + rc = -ENXIO ; goto abort; + }dev_dbg (ndd->dev,"allocated: %d\n" , slot); nd_label =to_label (ndd, slot);
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 296/453 watchdog: qcom: Avoid context switch in restart handler
In reply to Greg Kroah-HartmanFrom: Manivannan Sadhasivam <[email protected]>
[ Upstream commit 7948fab26bcc468aa2a76462f441291b5fb0d5c7 ]
The use of msleep() in the restart handler will cause scheduler to induce a context switch which is not desirable. This generates below warning on SDX55 when WDT is the only available restart source:
[ 39.800188] reboot: Restarting system [ 39.804115] ------------[ cut here ]------------ [ 39.807855] WARNING: CPU: 0 PID: 678 at kernel/rcu/tree_plugin.h:297 rcu_note_context_switch+0x190/0x764 [ 39.812538] Modules linked in: [ 39.821954] CPU: 0 PID: 678 Comm: reboot Not tainted 5.10.0-rc1-00063-g33a9990d1d66-dirty #47 [ 39.824854] Hardware name: Generic DT based system [ 39.833470] [<c0310fbc>] (unwind_backtrace) from [<c030c544>] (show_stack+0x10/0x14) [ 39.838154] [<c030c544>] (show_stack) from [<c0c218f0>] (dump_stack+0x8c/0xa0) [ 39.846049] [<c0c218f0>] (dump_stack) from [<c0322f80>] (__warn+0xd8/0xf0) [ 39.853058] [<c0322f80>] (__warn) from [<c0c1dc08>] (warn_slowpath_fmt+0x64/0xc8) [ 39.859925] [<c0c1dc08>] (warn_slowpath_fmt) from [<c038b6f4>] (rcu_note_context_switch+0x190/0x764) [ 39.867503] [<c038b6f4>] (rcu_note_context_switch) from [<c0c2aa3c>] (__schedule+0x84/0x640) [ 39.876685] [<c0c2aa3c>] (__schedule) from [<c0c2b050>] (schedule+0x58/0x10c) [ 39.885095] [<c0c2b050>] (schedule) from [<c0c2eed0>] (schedule_timeout+0x1e8/0x3d4) [ 39.892135] [<c0c2eed0>] (schedule_timeout) from [<c039ad40>] (msleep+0x2c/0x38) [ 39.899947] [<c039ad40>] (msleep) from [<c0a59d0c>] (qcom_wdt_restart+0xc4/0xcc) [ 39.907319] [<c0a59d0c>] (qcom_wdt_restart) from [<c0a58290>] (watchdog_restart_notifier+0x18/0x28) [ 39.914715] [<c0a58290>] (watchdog_restart_notifier) from [<c03468e0>] (atomic_notifier_call_chain+0x60/0x84) [ 39.923487] [<c03468e0>] (atomic_notifier_call_chain) from [<c030ae64>] (machine_restart+0x78/0x7c) [ 39.933551] [<c030ae64>] (machine_restart) from [<c0348048>] (__do_sys_reboot+0xdc/0x1e0) [ 39.942397] [<c0348048>] (__do_sys_reboot) from [<c0300060>] (ret_fast_syscall+0x0/0x54) [ 39.950721] Exception stack(0xc3e0bfa8 to 0xc3e0bff0) [ 39.958855] bfa0: 0001221c bed2fe24 fee1dead 28121969 01234567 00000000 [ 39.963832] bfc0: 0001221c bed2fe24 00000003 00000058 000225e0 00000000 00000000 00000000 [ 39.971985] bfe0: b6e62560 bed2fc84 00010fd8 b6e62580 [ 39.980124] ---[ end trace 3f578288bad866e4 ]---
Hence, replace msleep() with mdelay() to fix this issue.
--- drivers/watchdog/qcom-wdt.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/watchdog/qcom-wdt.c +1 -1
@@ -143,7 +143,7 @@ static int qcom_wdt_restart(struct watchdog_device *wdd, unsigned long action,*/ wmb (); -msleep (150 ); +mdelay (150 );return 0 ; }
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 297/453 watchdog: coh901327: add COMMON_CLK dependency
In reply to Greg Kroah-HartmanFrom: Arnd Bergmann <[email protected]>
[ Upstream commit 36c47df85ee8e1f8a35366ac11324f8875de00eb ]
clang produces a build failure in configurations without COMMON_CLK when a timeout calculation goes wrong:
arm-linux-gnueabi-ld: drivers/watchdog/coh901327_wdt.o: in function `coh901327_enable':
coh901327_wdt.c:(.text+0x50): undefined reference to `__bad_udelay'
Add a Kconfig dependency to only do build testing when COMMON_CLK is enabled.
--- drivers/watchdog/Kconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/watchdog/Kconfig +1 -1
@@ -618,7 +618,7 @@ config SUNXI_WATCHDOG config COH901327_WATCHDOG bool "ST-Ericsson COH 901 327 watchdog" - depends on ARCH_U300 || (ARM && COMPILE_TEST) + depends on ARCH_U300 || (ARM && COMMON_CLK && COMPILE_TEST) default y if MACH_U300 select WATCHDOG_CORE help
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 298/453 clk: ti: Fix memleak in ti_fapll_synth_setup
In reply to Greg Kroah-HartmanFrom: Zhang Qilong <[email protected]>
[ Upstream commit 8c6239f6e95f583bb763d0228e02d4dd0fb3d492 ]
If clk_register fails, we should goto free branch
before function returns to prevent memleak.
--- drivers/clk/ti/fapll.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-)
drivers/clk/ti/fapll.c +9 -2
@@ -498,6 +498,7 @@ static struct clk * __init ti_fapll_synth_setup(struct fapll_data *fd, {struct clk_init_data *init;struct fapll_synth *synth; +struct clk *clk =ERR_PTR (-ENOMEM ); init =kzalloc (sizeof (*init),GFP_KERNEL );if (!init)
@@ -520,13 +521,19 @@ static struct clk * __init ti_fapll_synth_setup(struct fapll_data *fd, synth->hw.init = init; synth->clk_pll = pll_clk; -return clk_register (NULL , &synth->hw); + clk =clk_register (NULL , &synth->hw); +if (IS_ERR (clk)) { +pr_err ("failed to register clock\n" ); + goto free; + } + +return clk; free:kfree (synth);kfree (init); -return ERR_PTR (-ENOMEM ); +return clk; }static void __init ti_fapll_setup (struct device_node *node)
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 299/453 pwm: zx: Add missing cleanup in error path
In reply to Greg Kroah-HartmanFrom: Uwe Kleine-König <[email protected]>
[ Upstream commit 269effd03f6142df4c74814cfdd5f0b041b30bf9 ]
zx_pwm_probe() called clk_prepare_enable() before; this must be undone in the error path.
--- drivers/pwm/pwm-zx.c | 1 + 1 file changed, 1 insertion(+)
drivers/pwm/pwm-zx.c +1 -0
@@ -238,6 +238,7 @@ static int zx_pwm_probe(struct platform_device *pdev) ret =pwmchip_add (&zpc->chip);if (ret <0 ) {dev_err (&pdev->dev,"failed to add PWM chip: %d\n" , ret); +clk_disable_unprepare (zpc->pclk);return ret; }
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 301/453 perf record: Fix memory leak when using --user-regs=? to list registers
In reply to Greg Kroah-HartmanFrom: Zheng Zengkai <[email protected]>
[ Upstream commit 2eb5dd418034ecea2f7031e3d33f2991a878b148 ]
When using 'perf record's option '-I' or '--user-regs=' along with argument '?' to list available register names, memory of variable 'os' allocated by strdup() needs to be released before __parse_regs() returns, otherwise memory leak will occur.
--- tools/perf/util/parse-regs-options.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
tools/perf/util/parse-regs-options.c +1 -1
@@ -52,7 +52,7 @@ __parse_regs(const struct option *opt, const char *str, int unset, bool intr) }fputc ('\n' , stderr);/* just printing available regs */ -return -1 ; + goto error; }for (r = sample_reg_masks; r->name; r++) {if ((r->mask & mask) && !strcasecmp (s, r->name))
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 302/453 qlcnic: Fix error code in probe
In reply to Greg Kroah-HartmanFrom: Dan Carpenter <[email protected]>
[ Upstream commit 0d52848632a357948028eab67ff9b7cc0c12a0fb ]
Return -EINVAL if we can't find the correct device. Currently it returns success.
--- drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c | 1 + 1 file changed, 1 insertion(+)
drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c +1 -0
@@ -2509,6 +2509,7 @@ qlcnic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)qlcnic_sriov_vf_register_map (ahw);break ;default : + err = -EINVAL ; goto err_out_free_hw_res; }
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 303/453 virtio_ring: Cut and paste bugs in vring_create_virtqueue_packed()
In reply to Greg Kroah-HartmanFrom: Dan Carpenter <[email protected]>
[ Upstream commit ae93d8ea0fa701e84ab9df0db9fb60ec6c80d7b8 ]
There is a copy and paste bug in the error handling of this code and it uses "ring_dma_addr" three times instead of "device_event_dma_addr" and "driver_event_dma_addr".
--- drivers/virtio/virtio_ring.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/virtio/virtio_ring.c +2 -2
@@ -1676,9 +1676,9 @@ err_desc_extra: err_desc_state:kfree (vq); err_vq: -vring_free_queue (vdev, event_size_in_bytes, device, ring_dma_addr); +vring_free_queue (vdev, event_size_in_bytes, device, device_event_dma_addr); err_device: -vring_free_queue (vdev, event_size_in_bytes, driver, ring_dma_addr); +vring_free_queue (vdev, event_size_in_bytes, driver, driver_event_dma_addr); err_driver:vring_free_queue (vdev, ring_size_in_bytes, ring, ring_dma_addr); err_ring:
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 304/453 virtio_net: Fix error code in probe()
In reply to Greg Kroah-HartmanFrom: Dan Carpenter <[email protected]>
[ Upstream commit 411ea23a76526e6efed0b601abb603d3c981b333 ]
Set a negative error code intead of returning success if the MTU has been changed to something invalid.
--- drivers/net/virtio_net.c | 1 + 1 file changed, 1 insertion(+)
drivers/net/virtio_net.c +1 -0
@@ -3114,6 +3114,7 @@ static int virtnet_probe(struct virtio_device *vdev)dev_err (&vdev->dev,"device MTU appears to have changed it is now %d < %d" , mtu, dev->min_mtu); + err = -EINVAL ; goto free; }
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 305/453 virtio_ring: Fix two use after free bugs
In reply to Greg Kroah-HartmanFrom: Dan Carpenter <[email protected]>
[ Upstream commit e152d8af4220a05c9797591609151d404866beaa ]
The "vq" struct is added to the "vdev->vqs" list prematurely. If we encounter an error later in the function then the "vq" is freed, but since it is still on the list that could lead to a use after free bug.
--- drivers/virtio/virtio_ring.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/virtio/virtio_ring.c +2 -2
@@ -1608,7 +1608,6 @@ static struct virtqueue *vring_create_virtqueue_packed( vq->num_added =0 ; vq->packed_ring = true; vq->use_dma_api =vring_use_dma_api (vdev); -list_add_tail (&vq->vq.list, &vdev->vqs);#ifdef DEBUG vq->in_use = false; vq->last_add_time_valid = false;
@@ -1669,6 +1668,7 @@ static struct virtqueue *vring_create_virtqueue_packed(cpu_to_le16 (vq->packed.event_flags_shadow); } +list_add_tail (&vq->vq.list, &vdev->vqs);return &vq->vq; err_desc_extra:
@@ -2085,7 +2085,6 @@ struct virtqueue *__vring_new_virtqueue(unsigned int index, vq->last_used_idx =0 ; vq->num_added =0 ; vq->use_dma_api =vring_use_dma_api (vdev); -list_add_tail (&vq->vq.list, &vdev->vqs);#ifdef DEBUG vq->in_use = false; vq->last_add_time_valid = false;
@@ -2127,6 +2126,7 @@ struct virtqueue *__vring_new_virtqueue(unsigned int index,memset (vq->split.desc_state,0 , vring.num *sizeof (struct vring_desc_state_split )); +list_add_tail (&vq->vq.list, &vdev->vqs);return &vq->vq; }EXPORT_SYMBOL_GPL (__vring_new_virtqueue);
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 306/453 clk: at91: sam9x60: remove atmel,osc-bypass support
In reply to Greg Kroah-HartmanFrom: Alexandre Belloni <[email protected]>
[ Upstream commit 01324f9e88b5cfc1f4c26eef66bdcb52596c9af8 ]
The sam9x60 doesn't have the MOSCXTBY bit to enable the crystal oscillator bypass.
--- drivers/clk/at91/sam9x60.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-)
drivers/clk/at91/sam9x60.c +1 -5
@@ -162,7 +162,6 @@ static void __init sam9x60_pmc_setup(struct device_node *np)struct regmap *regmap;struct clk_hw *hw;int i; -bool bypass; i =of_property_match_string (np,"clock-names" ,"td_slck" );if (i <0 )
@@ -197,10 +196,7 @@ static void __init sam9x60_pmc_setup(struct device_node *np)if (IS_ERR (hw)) goto err_free; - bypass =of_property_read_bool (np,"atmel,osc-bypass" ); - - hw =at91_clk_register_main_osc (regmap,"main_osc" , mainxtal_name, - bypass); + hw =at91_clk_register_main_osc (regmap,"main_osc" , mainxtal_name,0 );if (IS_ERR (hw)) goto err_free;
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 307/453 clk: s2mps11: Fix a resource leak in error handling paths in the probe function
In reply to Greg Kroah-HartmanFrom: Christophe JAILLET <[email protected]>
[ Upstream commit d2d94fc567624f96187e8b52083795620f93e69f ]
Some resource should be released in the error handling path of the probe function, as already done in the remove function.
The remove function was fixed in commit bf416bd45738 ("clk: s2mps11: Add missing of_node_put and of_clk_del_provider")
--- drivers/clk/clk-s2mps11.c | 1 + 1 file changed, 1 insertion(+)
drivers/clk/clk-s2mps11.c +1 -0
@@ -195,6 +195,7 @@ static int s2mps11_clk_probe(struct platform_device *pdev)return ret; err_reg: +of_node_put (s2mps11_clks[0 ].clk_np);while (--i >=0 )clkdev_drop (s2mps11_clks[i].lookup);
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 308/453 clk: sunxi-ng: Make sure divider tables have sentinel
In reply to Greg Kroah-HartmanFrom: Jernej Skrabec <[email protected]>
[ Upstream commit 48f68de00c1405351fa0e7bc44bca067c49cd0a3 ]
Two clock divider tables are missing sentinel at the end. Effect of that is that clock framework reads past the last entry. Fix that with adding sentinel at the end.
Issue was discovered with KASan.
--- drivers/clk/sunxi-ng/ccu-sun50i-a64.c | 1 + drivers/clk/sunxi-ng/ccu-sun8i-h3.c | 1 + 2 files changed, 2 insertions(+)
drivers/clk/sunxi-ng/ccu-sun50i-a64.c +1 -0
@@ -389,6 +389,7 @@ static struct clk_div_table ths_div_table[] = { { .val = 1, .div = 2 }, { .val = 2, .div = 4 }, { .val = 3, .div = 6 }, + { /* Sentinel */ }, };static const char *const ths_parents[] = {"osc24M" };static struct ccu_div ths_clk = {
drivers/clk/sunxi-ng/ccu-sun8i-h3.c +1 -0
@@ -322,6 +322,7 @@ static struct clk_div_table ths_div_table[] = { { .val = 1, .div = 2 }, { .val = 2, .div = 4 }, { .val = 3, .div = 6 }, + { /* Sentinel */ }, }; static SUNXI_CCU_DIV_TABLE_WITH_GATE(ths_clk, "ths", "osc24M", 0x074, 0, 2, ths_div_table, BIT(31), 0);
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 309/453 kconfig: fix return value of do_error_if()
In reply to Greg Kroah-HartmanFrom: Masahiro Yamada <[email protected]>
[ Upstream commit 135b4957eac43af2aedf8e2a277b9540f33c2558 ]
$(error-if,...) is expanded to an empty string. Currently, it relies on eval_clause() returning xstrdup("") when all attempts for expansion fail, but the correct implementation is to make do_error_if() return xstrdup("").
--- scripts/kconfig/preprocess.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
scripts/kconfig/preprocess.c +1 -1
@@ -114,7 +114,7 @@ static char *do_error_if(int argc, char *argv[])if (!strcmp (argv[0 ],"y" ))pperror ("%s" , argv[1 ]); -return NULL ; +return xstrdup ("" ); }static char *do_filename (int argc,char *argv[])
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 310/453 perf probe: Fix memory leak when synthesizing SDT probes
In reply to Greg Kroah-HartmanFrom: Arnaldo Carvalho de Melo <[email protected]>
[ Upstream commit 5149303fdfe5c67ddb51c911e23262f781cd75eb ]
The argv_split() function must be paired with argv_free(), else we must keep a reference to the argv array received or do the freeing ourselves, in synthesize_sdt_probe_command() we were simply leaking that argv[] array.
--- tools/perf/util/probe-file.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-)
tools/perf/util/probe-file.c +10 -3
@@ -777,7 +777,7 @@ static char *synthesize_sdt_probe_command(struct sdt_note *note, const char *sdtgrp) {struct strbuf buf; -char *ret =NULL , **args; +char *ret =NULL ;int i, args_count, err;unsigned long long ref_ctr_offset;
@@ -799,12 +799,19 @@ static char *synthesize_sdt_probe_command(struct sdt_note *note, goto out;if (note->args) { - args =argv_split (note->args, &args_count); +char **args =argv_split (note->args, &args_count); + +if (args ==NULL ) + goto error;for (i =0 ; i < args_count; ++i) { -if (synthesize_sdt_probe_arg (&buf, i, args[i]) <0 ) +if (synthesize_sdt_probe_arg (&buf, i, args[i]) <0 ) { +argv_free (args); goto error; + } } + +argv_free (args); } out:
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 311/453 ARM: sunxi: Add machine match for the Allwinner V3 SoC
In reply to Greg Kroah-HartmanFrom: Paul Kocialkowski <[email protected]>
[ Upstream commit ad2091f893bd5dfe2824f0d6819600d120698e9f ]
The Allwinner V3 SoC shares the same base as the V3s but comes with extra pins and features available. As a result, it has its dedicated compatible string (already used in device trees), which is added here.
--- arch/arm/mach-sunxi/sunxi.c | 1 + 1 file changed, 1 insertion(+)
arch/arm/mach-sunxi/sunxi.c +1 -0
@@ -66,6 +66,7 @@ static const char * const sun8i_board_dt_compat[] = {"allwinner,sun8i-h2-plus" ,"allwinner,sun8i-h3" ,"allwinner,sun8i-r40" , +"allwinner,sun8i-v3" ,"allwinner,sun8i-v3s" , NULL, };
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 312/453 cfg80211: initialize rekey_data
In reply to Greg Kroah-HartmanFrom: Sara Sharon <[email protected]>
[ Upstream commit f495acd8851d7b345e5f0e521b2645b1e1f928a0 ]
In case we have old supplicant, the akm field is uninitialized.
--- net/wireless/nl80211.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
net/wireless/nl80211.c +1 -1
@@ -12033,7 +12033,7 @@ static int nl80211_set_rekey_data(struct sk_buff *skb, struct genl_info *info)struct net_device *dev = info->user_ptr[1 ];struct wireless_dev *wdev = dev->ieee80211_ptr;struct nlattr *tb[NUM_NL80211_REKEY_DATA ]; -struct cfg80211_gtk_rekey_data rekey_data; +struct cfg80211_gtk_rekey_data rekey_data = {};int err;if (!info->attrs[NL80211_ATTR_REKEY_DATA ])
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 313/453 fix namespaced fscaps when !CONFIG_SECURITY
In reply to Greg Kroah-HartmanFrom: Serge Hallyn <[email protected]>
[ Upstream commit ed9b25d1970a4787ac6a39c2091e63b127ecbfc1 ]
Namespaced file capabilities were introduced in 8db6c34f1dbc . When userspace reads an xattr for a namespaced capability, a virtualized representation of it is returned if the caller is in a user namespace owned by the capability's owning rootid. The function which performs this virtualization was not hooked up if CONFIG_SECURITY=n. Therefore in that case the original xattr was shown instead of the virtualized one.
To test this using libcap-bin (*1),
$ v=$(mktemp) $ unshare -Ur setcap cap_sys_admin-eip $v $ unshare -Ur setcap -v cap_sys_admin-eip $v /tmp/tmp.lSiIFRvt8Y: OK
"setcap -v" verifies the values instead of setting them, and will check whether the rootid value is set. Therefore, with this bug un-fixed, and with CONFIG_SECURITY=n, setcap -v will fail:
$ v=$(mktemp) $ unshare -Ur setcap cap_sys_admin=eip $v $ unshare -Ur setcap -v cap_sys_admin=eip $v nsowner[got=1000, want=0],/tmp/tmp.HHDiOOl9fY differs in []
Fix this bug by calling cap_inode_getsecurity() in security_inode_getsecurity() instead of returning -EOPNOTSUPP, when CONFIG_SECURITY=n.
*1 - note, if libcap is too old for getcap to have the '-n' option, then use verify-caps instead.
Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=209689
--- include/linux/security.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
include/linux/security.h +1 -1
@@ -852,7 +852,7 @@ static inline int security_inode_killpriv(struct dentry *dentry)static inline int security_inode_getsecurity (struct inode *inode,const char *name,void **buffer,bool alloc) { -return -EOPNOTSUPP ; +return cap_inode_getsecurity (inode, name, buffer, alloc); }static inline int security_inode_setsecurity (struct inode *inode,const char *name,const void *value,size_t size,int flags)
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 314/453 lwt: Disable BH too in run_lwt_bpf()
In reply to Greg Kroah-HartmanFrom: Dongdong Wang <[email protected]>
[ Upstream commit d9054a1ff585ba01029584ab730efc794603d68f ]
The per-cpu bpf_redirect_info is shared among all skb_do_redirect() and BPF redirect helpers. Callers on RX path are all in BH context, disabling preemption is not sufficient to prevent BH interruption.
In production, we observed strange packet drops because of the race condition between LWT xmit and TC ingress, and we verified this issue is fixed after we disable BH.
Although this bug was technically introduced from the beginning, that is commit 3a0af8fd61f9 ("bpf: BPF for lightweight tunnel infrastructure"), at that time call_rcu() had to be call_rcu_bh() to match the RCU context. So this patch may not work well before RCU flavor consolidation has been completed around v5.0.
Update the comments above the code too, as call_rcu() is now BH friendly.
--- net/core/lwt_bpf.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
net/core/lwt_bpf.c +4 -4
@@ -39,12 +39,11 @@ static int run_lwt_bpf(struct sk_buff *skb, struct bpf_lwt_prog *lwt, {int ret; -/* Preempt disable is needed to protect per-cpu redirect_info between -* BPF prog and skb_do_redirect(). The call_rcu in bpf_prog_put() and -* access to maps strictly require a rcu_read_lock() for protection, -* mixing with BH RCU lock doesn't work. +/* Preempt disable and BH disable are needed to protect per-cpu +* redirect_info between BPF prog and skb_do_redirect(). */ preempt_disable (); +local_bh_disable ();bpf_compute_data_pointers (skb); ret =bpf_prog_run_save_cb (lwt->prog, skb);
@@ -78,6 +77,7 @@ static int run_lwt_bpf(struct sk_buff *skb, struct bpf_lwt_prog *lwt,break ; } +local_bh_enable ();preempt_enable ();return ret;
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 315/453 drm/amd/display: Prevent bandwidth overflow
In reply to Greg Kroah-HartmanFrom: Chris Park <[email protected]>
[ Upstream commit 80089dd8410f356d5104496d5ab71a66a4f4646b ]
[Why]
At very high pixel clock, bandwidth calculation exceeds 32 bit size and overflow value. This causes the resulting selection of link rate to be inaccurate.
[How]
Change order of operation and use fixed point to deal with integer accuracy. Also address bug found when forcing link rate.
--- drivers/gpu/drm/amd/display/dc/core/dc_link.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)
drivers/gpu/drm/amd/display/dc/core/dc_link.c +5 -2
@@ -2906,11 +2906,14 @@ uint32_t dc_bandwidth_in_kbps_from_timing( {uint32_t bits_per_channel =0 ;uint32_t kbps; +struct fixed31_32 link_bw_kbps;#ifdef CONFIG_DRM_AMD_DC_DSC_SUPPORT if (timing->flags.DSC) { - kbps = (timing->pix_clk_100hz * timing->dsc_cfg.bits_per_pixel); - kbps = kbps /160 + ((kbps %160 ) ?1 :0 ); + link_bw_kbps =dc_fixpt_from_int (timing->pix_clk_100hz); + link_bw_kbps =dc_fixpt_div_int (link_bw_kbps,160 ); + link_bw_kbps =dc_fixpt_mul_int (link_bw_kbps, timing->dsc_cfg.bits_per_pixel); + kbps =dc_fixpt_ceil (link_bw_kbps);return kbps; }#endif
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 316/453 drm/amdkfd: Fix leak in dmabuf import
In reply to Greg Kroah-HartmanFrom: Felix Kuehling <[email protected]>
[ Upstream commit c897934da15f182ce99536007f8ef61c4748c07e ]
Release dmabuf reference before returning from kfd_ioctl_import_dmabuf. amdgpu_amdkfd_gpuvm_import_dmabuf takes a reference to the underlying GEM BO and doesn't keep the reference to the dmabuf wrapper.
--- drivers/gpu/drm/amd/amdkfd/kfd_chardev.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/gpu/drm/amd/amdkfd/kfd_chardev.c +2 -0
@@ -1664,6 +1664,7 @@ static int kfd_ioctl_import_dmabuf(struct file *filep, }mutex_unlock (&p->mutex); +dma_buf_put (dmabuf); args->handle =MAKE_HANDLE (args->gpu_id, idr_handle);
@@ -1673,6 +1674,7 @@ err_free:amdgpu_amdkfd_gpuvm_free_memory_of_gpu (dev->kgd, (struct kgd_mem *)mem); err_unlock:mutex_unlock (&p->mutex); +dma_buf_put (dmabuf);return r; }
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 317/453 Input: cros_ec_keyb - send scancodes in addition to key events
In reply to Greg Kroah-HartmanFrom: Dmitry Torokhov <[email protected]>
[ Upstream commit 80db2a087f425b63f0163bc95217abd01c637cb5 ]
To let userspace know what 'scancodes' should be used in EVIOCGKEYCODE and EVIOCSKEYCODE ioctls, we should send EV_MSC/MSC_SCAN events in addition to EV_KEY/KEY_* events. The driver already declared MSC_SCAN capability, so it is only matter of actually sending the events.
--- drivers/input/keyboard/cros_ec_keyb.c | 1 + 1 file changed, 1 insertion(+)
drivers/input/keyboard/cros_ec_keyb.c +1 -0
@@ -183,6 +183,7 @@ static void cros_ec_keyb_process(struct cros_ec_keyb *ckdev,"changed: [r%d c%d]: byte %02x\n" , row, col, new_state); +input_event (idev,EV_MSC ,MSC_SCAN , pos);input_report_key (idev, keycodes[pos], new_state); }
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 318/453 initramfs: fix clang build failure
In reply to Greg Kroah-HartmanFrom: Arnd Bergmann <[email protected]>
[ Upstream commit 55d5b7dd6451b58489ce384282ca5a4a289eb8d5 ]
There is only one function in init/initramfs.c that is in the .text section, and it is marked __weak. When building with clang-12 and the integrated assembler, this leads to a bug with recordmcount:
./scripts/recordmcount "init/initramfs.o"
Cannot find symbol for section 2: .text.
init/initramfs.o: failed
I'm not quite sure what exactly goes wrong, but I notice that this function is only ever called from an __init function, and normally inlined. Marking it __init as well is clearly correct and it leads to recordmcount no longer complaining.
--- init/initramfs.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
init/initramfs.c +1 -1
@@ -527,7 +527,7 @@ extern unsigned long __initramfs_size;#include <linux/initrd.h> #include <linux/kexec.h> -void __weak free_initrd_mem (unsigned long start,unsigned long end) +void __weak __init free_initrd_mem (unsigned long start,unsigned long end) {free_reserved_area ((void *)start, (void *)end,POISON_FREE_INITMEM ,"initrd" );
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 319/453 Input: goodix - add upside-down quirk for Teclast X98 Pro tablet
In reply to Greg Kroah-HartmanFrom: Simon Beginn <[email protected]>
[ Upstream commit cffdd6d90482316e18d686060a4397902ea04bd2 ]
The touchscreen on the Teclast x98 Pro is also mounted upside-down in relation to the display orientation.
--- drivers/input/touchscreen/goodix.c | 12 ++++++++++++ 1 file changed, 12 insertions(+)
drivers/input/touchscreen/goodix.c +12 -0
@@ -137,6 +137,18 @@ static const struct dmi_system_id rotated_screen[] = { DMI_MATCH(DMI_BIOS_DATE, "12/19/2014"), }, }, + { + .ident = "Teclast X98 Pro", + .matches = { +/* +* Only match BIOS date, because the manufacturers +* BIOS does not report the board name at all +* (sometimes)... +*/ +DMI_MATCH (DMI_BOARD_VENDOR ,"TECLAST" ), + DMI_MATCH(DMI_BIOS_DATE, "10/28/2015"), + }, + }, { .ident ="WinBook TW100" , .matches = {
Signature · 1 line
2.27.0
Greg Kroah-Hartman
maintainerPATCH 320/453 vfio/pci/nvlink2: Do not attempt NPU2 setup on POWER8NVL NPU
In reply to Greg Kroah-HartmanFrom: Alexey Kardashevskiy <[email protected]>
commit d22f9a6c92de96304c81792942ae7c306f08ac77 upstream.
We execute certain NPU2 setup code (such as mapping an LPID to a device in NPU2) unconditionally if an Nvlink bridge is detected. However this cannot succeed on POWER8NVL machines as the init helpers return an error other than ENODEV which means the device is there is and setup failed so vfio_pci_enable() fails and pass through is not possible.
This changes the two NPU2 related init helpers to return -ENODEV if there is no "memory-region" device tree property as this is the distinction between NPU and NPU2.
Tested on
- POWER9 pvr=004e1201, Ubuntu 19.04 host, Ubuntu 18.04 vm, NVIDIA GV100 10de:1db1 driver 418.39
- POWER8 pvr=004c0100, RHEL 7.6 host, Ubuntu 16.10 vm, NVIDIA P100 10de:15f9 driver 396.47
--- drivers/vfio/pci/vfio_pci_nvlink2.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)
drivers/vfio/pci/vfio_pci_nvlink2.c +5 -2
@@ -231,7 +231,7 @@ int vfio_pci_nvdia_v100_nvlink2_init(strreturn -EINVAL ;if (of_property_read_u32 (npu_node,"memory-region" , &mem_phandle)) -return -EINVAL ; +return -ENODEV ; mem_node =of_find_node_by_phandle (mem_phandle);if (!mem_node)
@@ -393,7 +393,7 @@ int vfio_pci_ibm_npu2_init(struct vfio_pint ret;struct vfio_pci_npu2_data *data;struct device_node *nvlink_dn; -u32 nvlink_index =0 ; +u32 nvlink_index =0 , mem_phandle =0 ;struct pci_dev *npdev = vdev->pdev;struct device_node *npu_node =pci_device_to_OF_node (npdev);struct pci_controller *hose =pci_bus_to_host (npdev->bus);
@@ -408,6 +408,9 @@ int vfio_pci_ibm_npu2_init(struct vfio_pif (!pnv_pci_get_gpu_dev (vdev->pdev))return -ENODEV ; +if (of_property_read_u32 (npu_node,"memory-region" , &mem_phandle)) +return -ENODEV ; +/* * NPU2 normally has 8 ATSD registers (for concurrency) and 6 links * so we can allocate one register per link, using nvlink index as
Greg Kroah-Hartman
maintainerPATCH 321/453 media: gspca: Fix memory leak in probe
In reply to Greg Kroah-HartmanFrom: Alan Stern <[email protected]>
commit e469d0b09a19496e1972a20974bbf55b728151eb upstream.
The gspca driver leaks memory when a probe fails. gspca_dev_probe2() calls v4l2_device_register(), which takes a reference to the underlying device node (in this case, a USB interface). But the failure pathway neglects to call v4l2_device_unregister(), the routine responsible for dropping this reference. Consequently the memory for the USB interface and its device never gets released.
This patch adds the missing function call.
--- drivers/media/usb/gspca/gspca.c | 1 + 1 file changed, 1 insertion(+)
drivers/media/usb/gspca/gspca.c +1 -0
@@ -1575,6 +1575,7 @@ out:input_unregister_device (gspca_dev->input_dev);#endif v4l2_ctrl_handler_free (gspca_dev->vdev.ctrl_handler); +v4l2_device_unregister (&gspca_dev->v4l2_dev);kfree (gspca_dev->usb_buf);kfree (gspca_dev);return ret;
Greg Kroah-Hartman
maintainerPATCH 322/453 media: sunxi-cir: ensure IR is handled when it is continuous
In reply to Greg Kroah-HartmanFrom: Sean Young <[email protected]>
commit 3f56df4c8ffeb120ed41906d3aae71799b7e726a upstream.
If a user holds a button down on a remote, then no ir idle interrupt will be generated until the user releases the button, depending on how quickly the remote repeats. No IR is processed until that point, which means that holding down a button may not do anything.
This also resolves an issue on a Cubieboard 1 where the IR receiver is picking up ambient infrared as IR and spews out endless
"rc rc0: IR event FIFO is full!" messages unless you choose to live in the dark.
--- drivers/media/rc/sunxi-cir.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/media/rc/sunxi-cir.c +2 -0
@@ -137,6 +137,8 @@ static irqreturn_t sunxi_ir_irq(int irqn }else if (status ®_RXSTA_RPE ) {ir_raw_event_set_idle (ir->rc, true);ir_raw_event_handle (ir->rc); + }else { +ir_raw_event_handle (ir->rc); }spin_unlock (&ir->ir_lock);
Greg Kroah-Hartman
maintainerPATCH 323/453 media: netup_unidvb: Dont leak SPI master in probe error path
In reply to Greg Kroah-HartmanFrom: Lukas Wunner <[email protected]>
commit e297ddf296de35037fa97f4302782def196d350a upstream.
If the call to spi_register_master() fails on probe of the NetUP Universal DVB driver, the spi_master struct is erroneously not freed.
Likewise, if spi_new_device() fails, the spi_controller struct is not unregistered. Plug the leaks.
While at it, fix an ordering issue in netup_spi_release() wherein spi_unregister_master() is called after fiddling with the IRQ control register. The correct order is to call spi_unregister_master() *before* this teardown step because bus accesses may still be ongoing until that function returns.
--- drivers/media/pci/netup_unidvb/netup_unidvb_spi.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
drivers/media/pci/netup_unidvb/netup_unidvb_spi.c +3 -2
@@ -175,7 +175,7 @@ int netup_spi_init(struct netup_unidvb_dstruct spi_master *master;struct netup_spi *nspi; - master =spi_alloc_master (&ndev->pci_dev->dev, + master =devm_spi_alloc_master (&ndev->pci_dev->dev,sizeof (struct netup_spi ));if (!master) { dev_err(&ndev->pci_dev->dev,
@@ -208,6 +208,7 @@ int netup_spi_init(struct netup_unidvb_d ndev->pci_slot, ndev->pci_func);if (!spi_new_device (master, &netup_spi_board)) { +spi_unregister_master (master); ndev->spi =NULL ;dev_err (&ndev->pci_dev->dev,"%s(): unable to create SPI device\n" , __func__);
@@ -226,13 +227,13 @@ void netup_spi_release(struct netup_unidif (!spi)return ; +spi_unregister_master (spi->master);spin_lock_irqsave (&spi->lock, flags); reg =readw (&spi->regs->control_stat);writew (reg |NETUP_SPI_CTRL_IRQ , &spi->regs->control_stat); reg =readw (&spi->regs->control_stat);writew (reg & ~NETUP_SPI_CTRL_IMASK , &spi->regs->control_stat);spin_unlock_irqrestore (&spi->lock, flags); -spi_unregister_master (spi->master); ndev->spi =NULL ; }
Greg Kroah-Hartman
maintainerPATCH 324/453 media: ipu3-cio2: Remove traces of returned buffers
In reply to Greg Kroah-HartmanFrom: Sakari Ailus <[email protected]>
commit 61e7f892b5ee1dd10ea8bff805f3c3fe6e535959 upstream.
If starting a video buffer queue fails, the buffers are returned to videobuf2. Remove the reference to the buffer from the driver's queue as well.
--- drivers/media/pci/intel/ipu3/ipu3-cio2.c | 1 + 1 file changed, 1 insertion(+)
drivers/media/pci/intel/ipu3/ipu3-cio2.c +1 -0
@@ -799,6 +799,7 @@ static void cio2_vb2_return_all_buffers(atomic_dec (&q->bufs_queued);vb2_buffer_done (&q->bufs[i]->vbb.vb2_buf, state); + q->bufs[i] =NULL ; } } }
Greg Kroah-Hartman
maintainerPATCH 325/453 media: ipu3-cio2: Return actual subdev format
In reply to Greg Kroah-HartmanFrom: Sakari Ailus <[email protected]>
commit 8160e86702e0807bd36d40f82648f9f9820b9d5a upstream.
Return actual subdev format on ipu3-cio2 subdev pads. The earlier implementation was based on an infinite recursion that exhausted the stack.
--- drivers/media/pci/intel/ipu3/ipu3-cio2.c | 24 +++--------------------- 1 file changed, 3 insertions(+), 21 deletions(-)
drivers/media/pci/intel/ipu3/ipu3-cio2.c +3 -21
@@ -1244,29 +1244,11 @@ static int cio2_subdev_get_fmt(struct v4 struct v4l2_subdev_format *fmt) { struct cio2_queue *q = container_of(sd, struct cio2_queue, subdev); -struct v4l2_subdev_format format; -int ret; -if (fmt->which ==V4L2_SUBDEV_FORMAT_TRY ) { +if (fmt->which ==V4L2_SUBDEV_FORMAT_TRY ) fmt->format = *v4l2_subdev_get_try_format (sd, cfg, fmt->pad); -return 0 ; - } - -if (fmt->pad ==CIO2_PAD_SINK ) { - format.which =V4L2_SUBDEV_FORMAT_ACTIVE ; - ret =v4l2_subdev_call (sd, pad, get_fmt,NULL , - &format); - -if (ret) -return ret; -/* update colorspace etc */ - q->subdev_fmt.colorspace = format.format.colorspace; - q->subdev_fmt.ycbcr_enc = format.format.ycbcr_enc; - q->subdev_fmt.quantization = format.format.quantization; - q->subdev_fmt.xfer_func = format.format.xfer_func; - } - - fmt->format = q->subdev_fmt; +else + fmt->format = q->subdev_fmt;return 0 ; }
Greg Kroah-Hartman
maintainerPATCH 326/453 media: ipu3-cio2: Serialise access to pad format
In reply to Greg Kroah-HartmanFrom: Sakari Ailus <[email protected]>
commit 55a6c6b2be3d6670bf5772364d8208bd8dc17da4 upstream.
Pad format can be accessed from user space. Serialise access to it.
--- drivers/media/pci/intel/ipu3/ipu3-cio2.c | 11 +++++++++++ drivers/media/pci/intel/ipu3/ipu3-cio2.h | 1 + 2 files changed, 12 insertions(+)
drivers/media/pci/intel/ipu3/ipu3-cio2.c +11 -0
@@ -1245,11 +1245,15 @@ static int cio2_subdev_get_fmt(struct v4 { struct cio2_queue *q = container_of(sd, struct cio2_queue, subdev); +mutex_lock (&q->subdev_lock); +if (fmt->which ==V4L2_SUBDEV_FORMAT_TRY ) fmt->format = *v4l2_subdev_get_try_format (sd, cfg, fmt->pad);else fmt->format = q->subdev_fmt; +mutex_unlock (&q->subdev_lock); +return 0 ; }
@@ -1273,6 +1277,8 @@ static int cio2_subdev_set_fmt(struct v4if (fmt->pad ==CIO2_PAD_SOURCE )return cio2_subdev_get_fmt (sd, cfg, fmt); +mutex_lock (&q->subdev_lock); +if (fmt->which ==V4L2_SUBDEV_FORMAT_TRY ) { *v4l2_subdev_get_try_format (sd, cfg, fmt->pad) = fmt->format; }else {
@@ -1283,6 +1289,8 @@ static int cio2_subdev_set_fmt(struct v4 fmt->format = q->subdev_fmt; } +mutex_unlock (&q->subdev_lock); +return 0 ; }
@@ -1541,6 +1549,7 @@ static int cio2_queue_init(struct cio2_d/* Initialize miscellaneous variables */ mutex_init (&q->lock); +mutex_init (&q->subdev_lock);/* Initialize formats to default values */ fmt = &q->subdev_fmt;
@@ -1659,6 +1668,7 @@ fail_vdev_media_entity: fail_subdev_media_entity:cio2_fbpt_exit (q, &cio2->pci_dev->dev); fail_fbpt: +mutex_destroy (&q->subdev_lock);mutex_destroy (&q->lock);return r;
@@ -1672,6 +1682,7 @@ static void cio2_queue_exit(struct cio2_v4l2_device_unregister_subdev (&q->subdev);media_entity_cleanup (&q->subdev.entity);cio2_fbpt_exit (q, &cio2->pci_dev->dev); +mutex_destroy (&q->subdev_lock);mutex_destroy (&q->lock); }
drivers/media/pci/intel/ipu3/ipu3-cio2.h +1 -0
@@ -332,6 +332,7 @@ struct cio2_queue {/* Subdev, /dev/v4l-subdevX */ struct v4l2_subdev subdev; +struct mutex subdev_lock;/* Serialise acces to subdev_fmt field */ struct media_pad subdev_pads[CIO2_PADS ];struct v4l2_mbus_framefmt subdev_fmt;atomic_t frame_sequence;
Greg Kroah-Hartman
maintainerPATCH 327/453 media: ipu3-cio2: Validate mbus format in setting subdev format
In reply to Greg Kroah-HartmanFrom: Sakari Ailus <[email protected]>
commit a86cf9b29e8b12811cf53c4970eefe0c1d290476 upstream.
Validate media bus code, width and height when setting the subdev format.
This effectively reworks how setting subdev format is implemented in the driver.
--- drivers/media/pci/intel/ipu3/ipu3-cio2.c | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-)
drivers/media/pci/intel/ipu3/ipu3-cio2.c +20 -9
@@ -1269,6 +1269,9 @@ static int cio2_subdev_set_fmt(struct v4 struct v4l2_subdev_format *fmt) { struct cio2_queue *q = container_of(sd, struct cio2_queue, subdev); +struct v4l2_mbus_framefmt *mbus; +u32 mbus_code = fmt->format.code; +unsigned int i;/* * Only allow setting sink pad format;
@@ -1277,18 +1280,26 @@ static int cio2_subdev_set_fmt(struct v4if (fmt->pad ==CIO2_PAD_SOURCE )return cio2_subdev_get_fmt (sd, cfg, fmt); -mutex_lock (&q->subdev_lock); +if (fmt->which ==V4L2_SUBDEV_FORMAT_TRY ) + mbus =v4l2_subdev_get_try_format (sd, cfg, fmt->pad); +else + mbus = &q->subdev_fmt; + + fmt->format.code = formats[0 ].mbus_code; -if (fmt->which ==V4L2_SUBDEV_FORMAT_TRY ) { - *v4l2_subdev_get_try_format (sd, cfg, fmt->pad) = fmt->format; - }else { -/* It's the sink, allow changing frame size */ - q->subdev_fmt.width = fmt->format.width; - q->subdev_fmt.height = fmt->format.height; - q->subdev_fmt.code = fmt->format.code; - fmt->format = q->subdev_fmt; +for (i =0 ; i <ARRAY_SIZE (formats); i++) { +if (formats[i].mbus_code == fmt->format.code) { + fmt->format.code = mbus_code; +break ; + } } + fmt->format.width =min_t (u32, fmt->format.width,CIO2_IMAGE_MAX_WIDTH ); + fmt->format.height =min_t (u32, fmt->format.height, +CIO2_IMAGE_MAX_LENGTH ); + +mutex_lock (&q->subdev_lock); + *mbus = fmt->format;mutex_unlock (&q->subdev_lock);return 0 ;
Greg Kroah-Hartman
maintainerPATCH 328/453 media: ipu3-cio2: Make the field on subdev format V4L2_FIELD_NONE
In reply to Greg Kroah-HartmanFrom: Sakari Ailus <[email protected]>
commit 219a8b9c04e54872f9a4d566633fb42f08bcbe2a upstream.
The ipu3-cio2 doesn't make use of the field and this is reflected in V4L2 buffers as well as the try format. Do this in active format, too.
--- drivers/media/pci/intel/ipu3/ipu3-cio2.c | 1 + 1 file changed, 1 insertion(+)
drivers/media/pci/intel/ipu3/ipu3-cio2.c +1 -0
@@ -1297,6 +1297,7 @@ static int cio2_subdev_set_fmt(struct v4 fmt->format.width =min_t (u32, fmt->format.width,CIO2_IMAGE_MAX_WIDTH ); fmt->format.height =min_t (u32, fmt->format.height,CIO2_IMAGE_MAX_LENGTH ); + fmt->format.field =V4L2_FIELD_NONE ;mutex_lock (&q->subdev_lock); *mbus = fmt->format;
Greg Kroah-Hartman
maintainerPATCH 329/453 Input: cyapa_gen6 - fix out-of-bounds stack access
In reply to Greg Kroah-HartmanFrom: Arnd Bergmann <[email protected]>
commit f051ae4f6c732c231046945b36234e977f8467c6 upstream.
gcc -Warray-bounds warns about a serious bug incyapa_pip_retrieve_data_structure:
drivers/input/mouse/cyapa_gen6.c: In function 'cyapa_pip_retrieve_data_structure.constprop':include/linux/unaligned/access_ok.h:40:17: warning: array subscript -1 is outside array bounds of 'struct retrieve_data_struct_cmd[1]' [-Warray-bounds]
40 | *((__le16 *)p) = cpu_to_le16(val);drivers/input/mouse/cyapa_gen6.c:569:13: note: while referencing 'cmd'
569 | } __packed cmd;
| ^~~
Apparently the '-2' was added to the pointer instead of the value, writing garbage into the stack next to this variable.
--- drivers/input/mouse/cyapa_gen6.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/input/mouse/cyapa_gen6.c +1 -1
@@ -573,7 +573,7 @@ static int cyapa_pip_retrieve_data_strucmemset (&cmd,0 ,sizeof (cmd));put_unaligned_le16 (PIP_OUTPUT_REPORT_ADDR , &cmd.head.addr); -put_unaligned_le16 (sizeof (cmd), &cmd.head.length -2 ); +put_unaligned_le16 (sizeof (cmd) -2 , &cmd.head.length); cmd.head.report_id =PIP_APP_CMD_REPORT_ID ; cmd.head.cmd_code =PIP_RETRIEVE_DATA_STRUCTURE ;put_unaligned_le16 (read_offset, &cmd.read_offset);
Greg Kroah-Hartman
maintainerPATCH 330/453 ALSA: hda/ca0132 - Change Input Source enum strings.
In reply to Greg Kroah-HartmanFrom: Connor McAdams <[email protected]>
commit 7079f785b50055a32b72eddcb7d9ba5688db24d0 upstream.
Change the Input Source enumerated control's strings to make it play nice with pulseaudio.
--- sound/pci/hda/patch_ca0132.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
sound/pci/hda/patch_ca0132.c +1 -1
@@ -93,7 +93,7 @@ enum { };/* Strings for Input Source Enum Control */ -static const char *const in_src_str[3 ] = {"Rear Mic" ,"Line" ,"Front Mic" }; +static const char *const in_src_str[3 ] = {"Microphone" ,"Line In" ,"Front Microphone" };#define IN_SRC_NUM_OF_INPUTS 3enum {REAR_MIC ,
Greg Kroah-Hartman
maintainerPATCH 331/453 PM: ACPI: PCI: Drop acpi_pm_set_bridge_wakeup()
In reply to Greg Kroah-HartmanFrom: Rafael J. Wysocki <[email protected]>
commit 7482c5cb90e5a7f9e9e12dd154d405e0219656e3 upstream.
The idea behind acpi_pm_set_bridge_wakeup() was to allow bridges to be reference counted for wakeup enabling, because they may be enabled to signal wakeup on behalf of their subordinate devices and that may happen for multiple times in a row, whereas for the other devices it only makes sense to enable wakeup signaling once.
However, this becomes problematic if the bridge itself is suspended, because it is treated as a "regular" device in that case and the reference counting doesn't work.
For instance, suppose that there are two devices below a bridge and they both can signal wakeup. Every time one of them is suspended, wakeup signaling is enabled for the bridge, so when they both have been suspended, the bridge's wakeup reference counter value is 2.
Say that the bridge is suspended subsequently and acpi_pci_wakeup() is called for it. Because the bridge can signal wakeup, that function will invoke acpi_pm_set_device_wakeup() to configure it and __acpi_pm_set_device_wakeup() will be called with the last argument equal to 1. This causes __acpi_device_wakeup_enable() invoked by it to omit the reference counting, because the reference counter of the target device (the bridge) is 2 at that time.
Now say that the bridge resumes and one of the device below it resumes too, so the bridge's reference counter becomes 0 and wakeup signaling is disabled for it, but there is still the other suspended device which may need the bridge to signal wakeup on its behalf and that is not going to work.
To address this scenario, use wakeup enable reference counting for all devices, not just for bridges, so drop the last argument from __acpi_device_wakeup_enable() and __acpi_pm_set_device_wakeup(), which causes acpi_pm_set_device_wakeup() and acpi_pm_set_bridge_wakeup() to become identical, so drop the latter and use the former instead of it everywhere.
--- drivers/acpi/device_pm.c | 41 ++++++++++++----------------------------- drivers/pci/pci-acpi.c | 4 ++-- include/acpi/acpi_bus.h | 5 ----- 3 files changed, 14 insertions(+), 36 deletions(-)
drivers/acpi/device_pm.c +12 -29
@@ -749,7 +749,7 @@ static void acpi_pm_notify_work_func(strstatic DEFINE_MUTEX (acpi_wakeup_lock);static int __acpi_device_wakeup_enable (struct acpi_device *adev, -u32 target_state,int max_count) +u32 target_state) {struct acpi_device_wakeup *wakeup = &adev->wakeup;acpi_status status;
@@ -757,9 +757,10 @@ static int __acpi_device_wakeup_enable(smutex_lock (&acpi_wakeup_lock); -if (wakeup->enable_count >= max_count) +if (wakeup->enable_count >=INT_MAX ) { +acpi_handle_info (adev->handle,"Wakeup enable count out of bounds!\n" ); goto out; - + }if (wakeup->enable_count >0 ) goto inc;
@@ -799,7 +800,7 @@ out:*/ static int acpi_device_wakeup_enable (struct acpi_device *adev,u32 target_state) { -return __acpi_device_wakeup_enable (adev, target_state,1 ); +return __acpi_device_wakeup_enable (adev, target_state); }/**
@@ -829,8 +830,12 @@ out:mutex_unlock (&acpi_wakeup_lock); } -static int __acpi_pm_set_device_wakeup (struct device *dev,bool enable, -int max_count) +/** +* acpi_pm_set_device_wakeup - Enable/disable remote wakeup for given device. +* @dev: Device to enable/disable to generate wakeup events. +* @enable: Whether to enable or disable the wakeup functionality. +*/ +int acpi_pm_set_device_wakeup (struct device *dev,bool enable) {struct acpi_device *adev;int error;
@@ -850,37 +855,15 @@ static int __acpi_pm_set_device_wakeup(sreturn 0 ; } - error =__acpi_device_wakeup_enable (adev,acpi_target_system_state (), - max_count); + error =__acpi_device_wakeup_enable (adev,acpi_target_system_state ());if (!error)dev_dbg (dev,"Wakeup enabled by ACPI\n" );return error; } - -/** -* acpi_pm_set_device_wakeup - Enable/disable remote wakeup for given device. -* @dev: Device to enable/disable to generate wakeup events. -* @enable: Whether to enable or disable the wakeup functionality. -*/ -int acpi_pm_set_device_wakeup (struct device *dev,bool enable) -{ -return __acpi_pm_set_device_wakeup (dev, enable,1 ); -}EXPORT_SYMBOL_GPL (acpi_pm_set_device_wakeup);/** -* acpi_pm_set_bridge_wakeup - Enable/disable remote wakeup for given bridge. -* @dev: Bridge device to enable/disable to generate wakeup events. -* @enable: Whether to enable or disable the wakeup functionality. -*/ -int acpi_pm_set_bridge_wakeup (struct device *dev,bool enable) -{ -return __acpi_pm_set_device_wakeup (dev, enable,INT_MAX ); -} -EXPORT_SYMBOL_GPL (acpi_pm_set_bridge_wakeup); - -/** * acpi_dev_pm_low_power - Put ACPI device into a low-power state. * @dev: Device to put into a low-power state. * @adev: ACPI device node corresponding to @dev.
drivers/pci/pci-acpi.c +2 -2
@@ -1060,7 +1060,7 @@ static int acpi_pci_propagate_wakeup(str {while (bus->parent) {if (acpi_pm_device_can_wakeup (&bus->self->dev)) -return acpi_pm_set_bridge_wakeup (&bus->self->dev, enable); +return acpi_pm_set_device_wakeup (&bus->self->dev, enable); bus = bus->parent; }
@@ -1068,7 +1068,7 @@ static int acpi_pci_propagate_wakeup(str/* We have reached the root bus. */ if (bus->bridge) {if (acpi_pm_device_can_wakeup (bus->bridge)) -return acpi_pm_set_bridge_wakeup (bus->bridge, enable); +return acpi_pm_set_device_wakeup (bus->bridge, enable); }return 0 ; }
include/acpi/acpi_bus.h +0 -5
@@ -614,7 +614,6 @@ acpi_status acpi_remove_pm_notifier(strubool acpi_pm_device_can_wakeup (struct device *dev);int acpi_pm_device_sleep_state (struct device *,int *,int );int acpi_pm_set_device_wakeup (struct device *dev,bool enable); -int acpi_pm_set_bridge_wakeup (struct device *dev,bool enable);#else static inline void acpi_pm_wakeup_event (struct device *dev) {
@@ -645,10 +644,6 @@ static inline int acpi_pm_set_device_wak {return -ENODEV ; } -static inline int acpi_pm_set_bridge_wakeup (struct device *dev,bool enable) -{ -return -ENODEV ; -}#endif #ifdef CONFIG_ACPI_SYSTEM_POWER_STATES_SUPPORT
Greg Kroah-Hartman
maintainerPATCH 332/453 Revert "ACPI / resources: Use AE_CTRL_TERMINATE to terminate resources walks"
In reply to Greg Kroah-HartmanFrom: Daniel Scally <[email protected]>
commit 12fc4dad94dfac25599f31257aac181c691ca96f upstream.
This reverts commit 8a66790b7850a6669129af078768a1d42076a0ef.
Switching this function to AE_CTRL_TERMINATE broke the documented behaviour of acpi_dev_get_resources() - AE_CTRL_TERMINATE does not, in fact, terminate the resource walk because acpi_walk_resource_buffer() ignores it (specifically converting it to AE_OK), referring to that value as "an OK termination by the user function". This means that acpi_dev_get_resources() does not abort processing when the preproc function returns a negative value.
--- drivers/acpi/resource.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/acpi/resource.c +1 -1
@@ -541,7 +541,7 @@ static acpi_status acpi_dev_process_reso ret = c->preproc (ares, c->preproc_data);if (ret <0 ) { c->error = ret; -return AE_CTRL_TERMINATE ; +return AE_ABORT_METHOD ; }else if (ret >0 ) {return AE_OK ; }
Greg Kroah-Hartman
maintainerPATCH 333/453 ACPI: PNP: compare the string length in the matching_id()
In reply to Greg Kroah-HartmanFrom: Hui Wang <[email protected]>
commit b08221c40febcbda9309dd70c61cf1b0ebb0e351 upstream.
Recently we met a touchscreen problem on some Thinkpad machines, the touchscreen driver (i2c-hid) is not loaded and the touchscreen can't work.
An i2c ACPI device with the name WACF2200 is defined in the BIOS, with the current rule in matching_id(), this device will be regarded as a PNP device since there is WACFXXX in the acpi_pnp_device_ids[] and this PNP device is attached to the acpi device as the 1st physical_node, this will make the i2c bus match fail when i2c bus calls acpi_companion_match() to match the acpi_id_table in the i2c-hid driver.
WACF2200 is an i2c device instead of a PNP device, after adding the string length comparing, the matching_id() will return false when matching WACF2200 and WACFXXX, and it is reasonable to compare the string length when matching two IDs.
--- drivers/acpi/acpi_pnp.c | 3 +++ 1 file changed, 3 insertions(+)
drivers/acpi/acpi_pnp.c +3 -0
@@ -317,6 +317,9 @@ static bool matching_id(const char *idst {int i; +if (strlen (idstr) !=strlen (list_id)) +return false; +if (memcmp (idstr, list_id,3 ))return false;
Greg Kroah-Hartman
maintainerPATCH 334/453 ALSA: hda: Fix regressions on clear and reconfig sysfs
In reply to Greg Kroah-HartmanFrom: Takashi Iwai <[email protected]>
commit 2506318e382c4c7daa77bdc48f80a0ee82804588 upstream.
It seems that the HD-audio clear and reconfig sysfs don't work any longer after the recent driver core change. There are multiple issues around that: the linked list corruption and the dead device handling. The former issue is fixed by another patch for the driver core itself, while the latter patch needs to be addressed in HD-audio side.
This patch corresponds to the latter, it recovers those broken functions by replacing the device detach and attach actions with the standard core API functions, which are almost equivalent with unbind and bind actions.
--- sound/pci/hda/hda_codec.c | 2 +- sound/pci/hda/hda_sysfs.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-)
sound/pci/hda/hda_codec.c +1 -1
@@ -1798,7 +1798,7 @@ int snd_hda_codec_reset(struct hda_codecreturn -EBUSY ;/* OK, let it free */ -snd_hdac_device_unregister (&codec->core); +device_release_driver (hda_codec_dev (codec));/* allow device access again */ snd_hda_unlock_devices (bus);
sound/pci/hda/hda_sysfs.c +1 -1
@@ -139,7 +139,7 @@ static int reconfig_codec(struct hda_cod "The codec is being used, can't reconfigure.\n"); goto error; } - err =snd_hda_codec_configure (codec); + err =device_reprobe (hda_codec_dev (codec));if (err <0 ) goto error; err =snd_card_register (codec->card);
Greg Kroah-Hartman
maintainerPATCH 335/453 ALSA: hda/ca0132 - Fix AE-5 rear headphone pincfg.
In reply to Greg Kroah-HartmanFrom: Connor McAdams <[email protected]>
commit c697ba85a94b8f65bf90dec5ef9af5c39c3e73b2 upstream.
The Windows driver sets the pincfg for the AE-5's rear-headphone to report as a microphone. This causes issues with Pulseaudio mistakenly believing there is no headphone plugged in. In Linux, we should instead set it to be a headphone.
--- sound/pci/hda/patch_ca0132.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
sound/pci/hda/patch_ca0132.c +1 -1
@@ -1147,7 +1147,7 @@ static const struct hda_pintbl ae5_pincf { 0x0e, 0x01c510f0 }, /* SPDIF In */ { 0x0f, 0x01017114 }, /* Port A -- Rear L/R. */ { 0x10, 0x01017012 }, /* Port D -- Center/LFE or FP Hp */ - { 0x11, 0x01a170ff }, /* Port B -- LineMicIn2 / Rear Headphone */ + { 0x11, 0x012170ff }, /* Port B -- LineMicIn2 / Rear Headphone */ { 0x12, 0x01a170f0 }, /* Port C -- LineIn1 */ { 0x13, 0x908700f0 }, /* What U Hear In*/ { 0x18, 0x50d000f0 }, /* N/A */
Greg Kroah-Hartman
maintainerPATCH 336/453 ALSA: hda/realtek: make bass spk volume adjustable on a yoga laptop
In reply to Greg Kroah-HartmanFrom: Hui Wang <[email protected]>
commit c72b9bfe0f914639cc475585f45722a3eb57a56d upstream.
This change could fix 2 issues on this machine:
- the bass speaker's output volume can't be adjusted, that is because the bass speaker is routed to the DAC (Nid 0x6) which has no volume control.
- after plugging a headset with vol+, vol- and pause buttons on it, press those buttons, nothing happens, this means those buttons don't work at all. This machine has alc287 codec, need to add the codec id to the disable/enable_headset_jack_key(), then the headset button could work.
The quirk of ALC285_FIXUP_THINKPAD_HEADSET_JACK could fix both of these 2 issues.
--- sound/pci/hda/patch_realtek.c | 7 +++++++ 1 file changed, 7 insertions(+)
sound/pci/hda/patch_realtek.c +7 -0
@@ -3094,6 +3094,7 @@ static void alc_disable_headset_jack_keycase 0x10ec0215 :case 0x10ec0225 :case 0x10ec0285 : +case 0x10ec0287 :case 0x10ec0295 :case 0x10ec0289 :case 0x10ec0299 :
@@ -3120,6 +3121,7 @@ static void alc_enable_headset_jack_key(case 0x10ec0215 :case 0x10ec0225 :case 0x10ec0285 : +case 0x10ec0287 :case 0x10ec0295 :case 0x10ec0289 :case 0x10ec0299 :
@@ -8526,6 +8528,11 @@ static const struct snd_hda_pin_quirk al {0x14, 0x90170110}, {0x19, 0x04a11040}, {0x21, 0x04211020}), + SND_HDA_PIN_QUIRK(0x10ec0287, 0x17aa, "Lenovo", ALC285_FIXUP_THINKPAD_HEADSET_JACK, + {0x14, 0x90170110}, + {0x17, 0x90170111}, + {0x19, 0x03a11030}, + {0x21, 0x03211020}), SND_HDA_PIN_QUIRK(0x10ec0286, 0x1025, "Acer", ALC286_FIXUP_ACER_AIO_MIC_NO_PRESENCE, {0x12, 0x90a60130}, {0x17, 0x90170110},
Greg Kroah-Hartman
maintainerPATCH 337/453 ALSA: hda/realtek - Enable headset mic of ASUS X430UN with ALC256
In reply to Greg Kroah-HartmanFrom: Chris Chiu <[email protected]>
commit 5cfca59604e423f720297e30a9dc493eea623493 upstream.
The ASUS laptop X430UN with ALC256 can't detect the headset microphone until ALC256_FIXUP_ASUS_MIC_NO_PRESENCE quirk applied.
--- sound/pci/hda/patch_realtek.c | 1 + 1 file changed, 1 insertion(+)
sound/pci/hda/patch_realtek.c +1 -0
@@ -7884,6 +7884,7 @@ static const struct snd_pci_quirk alc269SND_PCI_QUIRK (0x1043 ,0x10d0 ,"ASUS X540LA/X540LJ" ,ALC255_FIXUP_ASUS_MIC_NO_PRESENCE ),SND_PCI_QUIRK (0x1043 ,0x115d ,"Asus 1015E" ,ALC269_FIXUP_LIMIT_INT_MIC_BOOST ),SND_PCI_QUIRK (0x1043 ,0x11c0 ,"ASUS X556UR" ,ALC255_FIXUP_ASUS_MIC_NO_PRESENCE ), +SND_PCI_QUIRK (0x1043 ,0x1271 ,"ASUS X430UN" ,ALC256_FIXUP_ASUS_MIC_NO_PRESENCE ),SND_PCI_QUIRK (0x1043 ,0x1290 ,"ASUS X441SA" ,ALC233_FIXUP_EAPD_COEF_AND_MIC_NO_PRESENCE ),SND_PCI_QUIRK (0x1043 ,0x12a0 ,"ASUS X441UV" ,ALC233_FIXUP_EAPD_COEF_AND_MIC_NO_PRESENCE ), SND_PCI_QUIRK(0x1043, 0x12f0, "ASUS X541UV", ALC256_FIXUP_ASUS_MIC),
Greg Kroah-Hartman
maintainerPATCH 338/453 ALSA: hda/realtek - Enable headset mic of ASUS Q524UQK with ALC255
In reply to Greg Kroah-HartmanFrom: Chris Chiu <[email protected]>
commit 7e413528474d5895e3e315c019fb0c43522eb6d9 upstream.
The ASUS laptop Q524UQK with ALC255 codec can't detect the headset microphone until ALC255_FIXUP_ASUS_MIC_NO_PRESENCE quirk applied.
--- sound/pci/hda/patch_realtek.c | 1 + 1 file changed, 1 insertion(+)
sound/pci/hda/patch_realtek.c +1 -0
@@ -7905,6 +7905,7 @@ static const struct snd_pci_quirk alc269SND_PCI_QUIRK (0x1043 ,0x1b13 ,"Asus U41SV" ,ALC269_FIXUP_INV_DMIC ),SND_PCI_QUIRK (0x1043 ,0x1bbd ,"ASUS Z550MA" ,ALC255_FIXUP_ASUS_MIC_NO_PRESENCE ),SND_PCI_QUIRK (0x1043 ,0x1c23 ,"Asus X55U" ,ALC269_FIXUP_LIMIT_INT_MIC_BOOST ), +SND_PCI_QUIRK (0x1043 ,0x125e ,"ASUS Q524UQK" ,ALC255_FIXUP_ASUS_MIC_NO_PRESENCE ),SND_PCI_QUIRK (0x1043 ,0x1ccd ,"ASUS X555UB" ,ALC256_FIXUP_ASUS_MIC ),SND_PCI_QUIRK (0x1043 ,0x1d4e ,"ASUS TM420" ,ALC256_FIXUP_ASUS_HPE ), SND_PCI_QUIRK(0x1043, 0x1e11, "ASUS Zephyrus G15", ALC289_FIXUP_ASUS_GA502),
Greg Kroah-Hartman
maintainerPATCH 339/453 ALSA: hda/realtek - Add supported for more Lenovo ALC285 Headset Button
In reply to Greg Kroah-HartmanFrom: Kailang Yang <[email protected]>
commit 607184cb1635eaee239fe3fb9648a8b82a5232d7 upstream.
Add supported for more Lenovo ALC285 Headset Button.
--- sound/pci/hda/patch_realtek.c | 4 ++++ 1 file changed, 4 insertions(+)
sound/pci/hda/patch_realtek.c +4 -0
@@ -8525,6 +8525,10 @@ static const struct snd_hda_pin_quirk al {0x12, 0x90a60130}, {0x19, 0x03a11020}, {0x21, 0x0321101f}), + SND_HDA_PIN_QUIRK(0x10ec0285, 0x17aa, "Lenovo", ALC285_FIXUP_THINKPAD_NO_BASS_SPK_HEADSET_JACK, + {0x14, 0x90170110}, + {0x19, 0x04a11040}, + {0x21, 0x04211020}), SND_HDA_PIN_QUIRK(0x10ec0285, 0x17aa, "Lenovo", ALC285_FIXUP_LENOVO_PC_BEEP_IN_NOISE, {0x12, 0x90a60130}, {0x14, 0x90170110},
Greg Kroah-Hartman
maintainerPATCH 340/453 ALSA: pcm: oss: Fix a few more UBSAN fixes
In reply to Greg Kroah-HartmanFrom: Takashi Iwai <[email protected]>
commit 11cb881bf075cea41092a20236ba708b18e1dbb2 upstream.
There are a few places that call round{up|down}_pow_of_two() with the value zero, and this causes undefined behavior warnings. Avoid calling those macros if such a nonsense value is passed; it's a minor optimization as well, as we handle it as either an error or a value to be skipped, instead.
--- sound/core/oss/pcm_oss.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-)
sound/core/oss/pcm_oss.c +14 -8
@@ -693,6 +693,8 @@ static int snd_pcm_oss_period_size(struc oss_buffer_size =snd_pcm_plug_client_size (substream,snd_pcm_hw_param_value_max (slave_params,SNDRV_PCM_HW_PARAM_BUFFER_SIZE ,NULL )) * oss_frame_size; +if (!oss_buffer_size) +return -EINVAL ; oss_buffer_size =rounddown_pow_of_two (oss_buffer_size);if (atomic_read (&substream->mmap_count)) {if (oss_buffer_size > runtime->oss.mmap_bytes)
@@ -728,17 +730,21 @@ static int snd_pcm_oss_period_size(struc min_period_size =snd_pcm_plug_client_size (substream,snd_pcm_hw_param_value_min (slave_params,SNDRV_PCM_HW_PARAM_PERIOD_SIZE ,NULL )); - min_period_size *= oss_frame_size; - min_period_size =roundup_pow_of_two (min_period_size); -if (oss_period_size < min_period_size) - oss_period_size = min_period_size; +if (min_period_size) { + min_period_size *= oss_frame_size; + min_period_size =roundup_pow_of_two (min_period_size); +if (oss_period_size < min_period_size) + oss_period_size = min_period_size; + } max_period_size =snd_pcm_plug_client_size (substream,snd_pcm_hw_param_value_max (slave_params,SNDRV_PCM_HW_PARAM_PERIOD_SIZE ,NULL )); - max_period_size *= oss_frame_size; - max_period_size =rounddown_pow_of_two (max_period_size); -if (oss_period_size > max_period_size) - oss_period_size = max_period_size; +if (max_period_size) { + max_period_size *= oss_frame_size; + max_period_size =rounddown_pow_of_two (max_period_size); +if (oss_period_size > max_period_size) + oss_period_size = max_period_size; + } oss_periods = oss_buffer_size / oss_period_size;
Greg Kroah-Hartman
maintainerPATCH 341/453 ALSA/hda: apply jack fixup for the Acer Veriton N4640G/N6640G/N2510G
In reply to Greg Kroah-HartmanFrom: Chris Chiu <[email protected]>
commit 13be30f156fda725b168ac89fc91f78651575307 upstream.
This Acer Veriton N4640G/N6640G/N2510G desktops have 2 headphone jacks(front and rear), and a separate Mic In jack.
The rear headphone jack is actually a line out jack but always silent while playing audio. The front 'Mic In' also fails the jack sensing. Apply the ALC269_FIXUP_LIFEBOOK to have all audio jacks to work as expected.
--- sound/pci/hda/patch_realtek.c | 3 +++ 1 file changed, 3 insertions(+)
sound/pci/hda/patch_realtek.c +3 -0
@@ -7735,11 +7735,14 @@ static const struct snd_pci_quirk alc269SND_PCI_QUIRK (0x1025 ,0x0762 ,"Acer Aspire E1-472" ,ALC271_FIXUP_HP_GATE_MIC_JACK_E1_572 ),SND_PCI_QUIRK (0x1025 ,0x0775 ,"Acer Aspire E1-572" ,ALC271_FIXUP_HP_GATE_MIC_JACK_E1_572 ),SND_PCI_QUIRK (0x1025 ,0x079b ,"Acer Aspire V5-573G" ,ALC282_FIXUP_ASPIRE_V5_PINS ), +SND_PCI_QUIRK (0x1025 ,0x101c ,"Acer Veriton N2510G" ,ALC269_FIXUP_LIFEBOOK ),SND_PCI_QUIRK (0x1025 ,0x102b ,"Acer Aspire C24-860" ,ALC286_FIXUP_ACER_AIO_MIC_NO_PRESENCE ),SND_PCI_QUIRK (0x1025 ,0x1065 ,"Acer Aspire C20-820" ,ALC269VC_FIXUP_ACER_HEADSET_MIC ),SND_PCI_QUIRK (0x1025 ,0x106d ,"Acer Cloudbook 14" ,ALC283_FIXUP_CHROME_BOOK ),SND_PCI_QUIRK (0x1025 ,0x1099 ,"Acer Aspire E5-523G" ,ALC255_FIXUP_ACER_MIC_NO_PRESENCE ),SND_PCI_QUIRK (0x1025 ,0x110e ,"Acer Aspire ES1-432" ,ALC255_FIXUP_ACER_MIC_NO_PRESENCE ), +SND_PCI_QUIRK (0x1025 ,0x1166 ,"Acer Veriton N4640G" ,ALC269_FIXUP_LIFEBOOK ), +SND_PCI_QUIRK (0x1025 ,0x1167 ,"Acer Veriton N6640G" ,ALC269_FIXUP_LIFEBOOK ),SND_PCI_QUIRK (0x1025 ,0x1246 ,"Acer Predator Helios 500" ,ALC299_FIXUP_PREDATOR_SPK ),SND_PCI_QUIRK (0x1025 ,0x1247 ,"Acer vCopperbox" ,ALC269VC_FIXUP_ACER_VCOPPERBOX_PINS ), SND_PCI_QUIRK(0x1025, 0x1248, "Acer Veriton N4660G", ALC269VC_FIXUP_ACER_MIC_NO_PRESENCE),
Greg Kroah-Hartman
maintainerPATCH 342/453 ALSA: hda/realtek: Add quirk for MSI-GP73
In reply to Greg Kroah-HartmanFrom: Takashi Iwai <[email protected]>
commit 09926202e939fd699650ac0fc0baa5757e069390 upstream.
MSI-GP73 (with SSID 1462:1229) requires yet again ALC1220_FIXUP_CLEVO_P950 quirk like other MSI models.
--- sound/pci/hda/patch_realtek.c | 1 + 1 file changed, 1 insertion(+)
sound/pci/hda/patch_realtek.c +1 -0
@@ -2506,6 +2506,7 @@ static const struct snd_pci_quirk alc882SND_PCI_QUIRK (0x1458 ,0xa0ce ,"Gigabyte X570 Aorus Xtreme" ,ALC1220_FIXUP_CLEVO_P950 ),SND_PCI_QUIRK (0x1462 ,0x11f7 ,"MSI-GE63" ,ALC1220_FIXUP_CLEVO_P950 ),SND_PCI_QUIRK (0x1462 ,0x1228 ,"MSI-GP63" ,ALC1220_FIXUP_CLEVO_P950 ), +SND_PCI_QUIRK (0x1462 ,0x1229 ,"MSI-GP73" ,ALC1220_FIXUP_CLEVO_P950 ),SND_PCI_QUIRK (0x1462 ,0x1275 ,"MSI-GL63" ,ALC1220_FIXUP_CLEVO_P950 ),SND_PCI_QUIRK (0x1462 ,0x1276 ,"MSI-GL73" ,ALC1220_FIXUP_CLEVO_P950 ), SND_PCI_QUIRK(0x1462, 0x1293, "MSI-GP65", ALC1220_FIXUP_CLEVO_P950),
Greg Kroah-Hartman
maintainerPATCH 343/453 ALSA: hda/realtek: Apply jack fixup for Quanta NL3
In reply to Greg Kroah-HartmanFrom: Chris Chiu <[email protected]>
commit 6ca653e3f73a1af0f30dbf9c2c79d2897074989f upstream.
The Quanta NL3 laptop has both a headphone output jack and a headset jack, on the right edge of the chassis.
The pin information suggests that both of these are at the Front. The PulseAudio is confused to differentiate them so one of the jack can neither get the jack sense working nor the audio output.
The ALC269_FIXUP_LIFEBOOK chained with ALC269_FIXUP_QUANTA_MUTE can help to differentiate 2 jacks and get the 'Auto-Mute Mode' working correctly.
--- sound/pci/hda/patch_realtek.c | 1 + 1 file changed, 1 insertion(+)
sound/pci/hda/patch_realtek.c +1 -0
@@ -7947,6 +7947,7 @@ static const struct snd_pci_quirk alc269SND_PCI_QUIRK (0x1458 ,0xfa53 ,"Gigabyte BXBT-2807" ,ALC283_FIXUP_HEADSET_MIC ),SND_PCI_QUIRK (0x1462 ,0xb120 ,"MSI Cubi MS-B120" ,ALC283_FIXUP_HEADSET_MIC ),SND_PCI_QUIRK (0x1462 ,0xb171 ,"Cubi N 8GL (MS-B171)" ,ALC283_FIXUP_HEADSET_MIC ), +SND_PCI_QUIRK (0x152d ,0x1082 ,"Quanta NL3" ,ALC269_FIXUP_LIFEBOOK ),SND_PCI_QUIRK (0x1558 ,0x1323 ,"Clevo N130ZU" ,ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE ),SND_PCI_QUIRK (0x1558 ,0x1325 ,"System76 Darter Pro (darp5)" ,ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE ), SND_PCI_QUIRK(0x1558, 0x1401, "Clevo L140[CZ]U", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
Greg Kroah-Hartman
maintainerPATCH 344/453 ALSA: usb-audio: Add VID to support native DSD reproduction on FiiO devices
In reply to Greg Kroah-HartmanFrom: Amadej Kastelic <[email protected]>
commit 725124d10d00b2f56bb5bd08b431cc74ab3b3ace upstream.
Add VID to support native DSD reproduction on FiiO devices.
--- sound/usb/quirks.c | 1 + 1 file changed, 1 insertion(+)
sound/usb/quirks.c +1 -0
@@ -1731,6 +1731,7 @@ u64 snd_usb_interface_dsd_format_quirks(case 0x25ce :/* Mytek devices */ case 0x278b :/* Rotel? */ case 0x292b :/* Gustard/Ess based devices */ +case 0x2972 :/* FiiO devices */ case 0x2ab6 :/* T+A devices */ case 0x3353 :/* Khadas devices */ case 0x3842 :/* EVGA */
Greg Kroah-Hartman
maintainerPATCH 345/453 ALSA: usb-audio: Disable sample read check if firmware doesnt give back
In reply to Greg Kroah-HartmanFrom: Takashi Iwai <[email protected]>
commit 9df28edce7c6ab38050235f6f8b43dd7ccd01b6d upstream.
Some buggy firmware don't give the current sample rate but leaves zero. Handle this case more gracefully without warning but just skip the current rate verification from the next time.
--- sound/usb/clock.c | 6 ++++++ 1 file changed, 6 insertions(+)
sound/usb/clock.c +6 -0
@@ -531,6 +531,12 @@ static int set_sample_rate_v1(struct snd } crate = data[0 ] | (data[1 ] <<8 ) | (data[2 ] <<16 ); +if (!crate) { +dev_info (&dev->dev,"failed to read current rate; disabling the check\n" ); + chip->sample_rate_read_error =3 ;/* three strikes, see above */ +return 0 ; + } +if (crate != rate) {dev_warn (&dev->dev,"current rate %d is different from the runtime rate %d\n" , crate, rate);// runtime->rate = crate;
Greg Kroah-Hartman
maintainerPATCH 346/453 ALSA: core: memalloc: add page alignment for iram
In reply to Greg Kroah-HartmanFrom: Robin Gong <[email protected]>
commit 74c64efa1557fef731b59eb813f115436d18078e upstream.
Since mmap for userspace is based on page alignment, add page alignment for iram alloc from pool, otherwise, some good data located in the same page of dmab->area maybe touched wrongly by userspace like pulseaudio.
--- sound/core/memalloc.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
sound/core/memalloc.c +2 -1
@@ -76,7 +76,8 @@ static void snd_malloc_dev_iram(struct s/* Assign the pool into private_data field */ dmab->private_data = pool; - dmab->area =gen_pool_dma_alloc (pool, size, &dmab->addr); + dmab->area =gen_pool_dma_alloc_align (pool, size, &dmab->addr, +PAGE_SIZE ); }/**
Greg Kroah-Hartman
maintainerPATCH 347/453 s390/smp: perform initial CPU reset also for SMT siblings
In reply to Greg Kroah-HartmanFrom: Sven Schnelle <[email protected]>
commit b5e438ebd7e808d1d2435159ac4742e01a94b8da upstream.
Not resetting the SMT siblings might leave them in unpredictable state. One of the observed problems was that the CPU timer wasn't reset and therefore large system time values where accounted during CPU bringup.
--- arch/s390/kernel/smp.c | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-)
arch/s390/kernel/smp.c +3 -15
@@ -885,24 +885,12 @@ static void __no_sanitize_address smp_st/* Upping and downing of CPUs */ int __cpu_up (unsigned int cpu,struct task_struct *tidle) { -struct pcpu *pcpu; -int base, i, rc; +struct pcpu *pcpu = pcpu_devices + cpu; +int rc; - pcpu = pcpu_devices + cpu;if (pcpu->state !=CPU_STATE_CONFIGURED )return -EIO ; - base =smp_get_base_cpu (cpu); -for (i =0 ; i <= smp_cpu_mtid; i++) { -if (base + i < nr_cpu_ids) -if (cpu_online (base + i)) -break ; - } -/* -* If this is the first CPU of the core to get online -* do an initial CPU reset. -*/ -if (i > smp_cpu_mtid && -pcpu_sigp_retry (pcpu_devices + base,SIGP_INITIAL_CPU_RESET ,0 ) != +if (pcpu_sigp_retry (pcpu,SIGP_INITIAL_CPU_RESET ,0 ) !=SIGP_CC_ORDER_CODE_ACCEPTED )return -EIO ;
Greg Kroah-Hartman
maintainerPATCH 348/453 s390/kexec_file: fix diag308 subcode when loading crash kernel
In reply to Greg Kroah-HartmanFrom: Philipp Rudo <[email protected]>
commit 613775d62ec60202f98d2c5f520e6e9ba6dd4ac4 upstream.
diag308 subcode 0 performes a clear reset which inlcudes the reset of all registers in the system. While this is the preferred behavior when loading a normal kernel via kexec it prevents the crash kernel to store the register values in the dump. To prevent this use subcode 1 when loading a crash kernel instead.
--- arch/s390/purgatory/head.S | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-)
arch/s390/purgatory/head.S +5 -4
@@ -62,14 +62,15 @@ jh 10b .endm -.macro START_NEXT_KERNEL base +.macro START_NEXT_KERNEL base subcode lg %r4,kernel_entry-\base(%r13) lg %r5,load_psw_mask-\base(%r13) ogr %r4,%r5 stg %r4,0(%r0) xgr %r0,%r0 - diag %r0,%r0,0x308 + lghi %r1,\subcode + diag %r0,%r1,0x308 .endm .text
@@ -123,7 +124,7 @@ ENTRY(purgatory_start) je .start_crash_kernel /* start normal kernel */ - START_NEXT_KERNEL .base_crash + START_NEXT_KERNEL .base_crash 0 .return_old_kernel: lmg %r6,%r15,gprregs-.base_crash(%r13)
@@ -227,7 +228,7 @@ ENTRY(purgatory_start) MEMCPY %r9,%r10,%r11 /* start crash kernel */ - START_NEXT_KERNEL .base_dst + START_NEXT_KERNEL .base_dst 1 load_psw_mask: