6.9.8-rc1 review
Subsystems (12)
Greg Kroah-Hartman
maintainerPATCH 144/222 usb: gadget: printer: SS+ support
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Oliver Neukum <[email protected]>
commit fd80731e5e9d1402cb2f85022a6abf9b1982ec5f upstream.
We need to treat super speed plus as super speed, not the default, which is full speed.
--- drivers/usb/gadget/function/f_printer.c | 1 + 1 file changed, 1 insertion(+)
drivers/usb/gadget/function/f_printer.c +1 -0
@@ -213,6 +213,7 @@ static inline struct usb_endpoint_descri struct usb_endpoint_descriptor *ss) {switch (gadget->speed) { +case USB_SPEED_SUPER_PLUS :case USB_SPEED_SUPER :return ss;case USB_SPEED_HIGH :
Greg Kroah-Hartman
maintainerPATCH 145/222 usb: gadget: printer: fix races against disable
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Oliver Neukum <[email protected]>
commit e587a7633dfee8987a999cf253f7c52a8e09276c upstream.
printer_read() and printer_write() guard against the race against disable() by checking the dev->interface flag, which in turn is guarded by a spinlock.
These functions, however, drop the lock on multiple occasions. This means that the test has to be redone after reacquiring the lock and before doing IO.
Add the tests.
This also addresses CVE-2024-25741
--- drivers/usb/gadget/function/f_printer.c | 39 +++++++++++++++++++++++--------- 1 file changed, 29 insertions(+), 10 deletions(-)
drivers/usb/gadget/function/f_printer.c +29 -10
@@ -450,11 +450,8 @@ printer_read(struct file *fd, char __usemutex_lock (&dev->lock_printer_io);spin_lock_irqsave (&dev->lock, flags); -if (dev->interface <0 ) { -spin_unlock_irqrestore (&dev->lock, flags); -mutex_unlock (&dev->lock_printer_io); -return -ENODEV ; - } +if (dev->interface <0 ) + goto out_disabled;/* We will use this flag later to check if a printer reset happened * after we turn interrupts back on.
@@ -462,6 +459,9 @@ printer_read(struct file *fd, char __use dev->reset_printer =0 ;setup_rx_reqs (dev); +/* this dropped the lock - need to retest */ +if (dev->interface <0 ) + goto out_disabled; bytes_copied =0 ; current_rx_req = dev->current_rx_req;
@@ -495,6 +495,8 @@ printer_read(struct file *fd, char __usewait_event_interruptible (dev->rx_wait, (likely (!list_empty (&dev->rx_buffers))));spin_lock_irqsave (&dev->lock, flags); +if (dev->interface <0 ) + goto out_disabled; }/* We have data to return then copy it to the caller's buffer.*/
@@ -538,6 +540,9 @@ printer_read(struct file *fd, char __usereturn -EAGAIN ; } +if (dev->interface <0 ) + goto out_disabled; +/* If we not returning all the data left in this RX request * buffer then adjust the amount of data left in the buffer. * Othewise if we are done with this RX request buffer then
@@ -567,6 +572,11 @@ printer_read(struct file *fd, char __usereturn bytes_copied; else return -EAGAIN; + +out_disabled: +spin_unlock_irqrestore (&dev->lock, flags); +mutex_unlock (&dev->lock_printer_io); +return -ENODEV ; } static ssize_t
@@ -587,11 +597,8 @@ printer_write(struct file *fd, const chamutex_lock (&dev->lock_printer_io);spin_lock_irqsave (&dev->lock, flags); -if (dev->interface <0 ) { -spin_unlock_irqrestore (&dev->lock, flags); -mutex_unlock (&dev->lock_printer_io); -return -ENODEV ; - } +if (dev->interface <0 ) + goto out_disabled;/* Check if a printer reset happens while we have interrupts on */ dev->reset_printer =0 ;
@@ -614,6 +621,8 @@ printer_write(struct file *fd, const chawait_event_interruptible (dev->tx_wait, (likely (!list_empty (&dev->tx_reqs))));spin_lock_irqsave (&dev->lock, flags); +if (dev->interface <0 ) + goto out_disabled; }while (likely (!list_empty (&dev->tx_reqs)) && len) {
@@ -663,6 +672,9 @@ printer_write(struct file *fd, const chareturn -EAGAIN ; } +if (dev->interface <0 ) + goto out_disabled; +list_add (&req->list, &dev->tx_reqs_active);/* here, we unlock, and only unlock, to avoid deadlock. */
@@ -675,6 +687,8 @@ printer_write(struct file *fd, const chamutex_unlock (&dev->lock_printer_io);return -EAGAIN ; } +if (dev->interface <0 ) + goto out_disabled; }spin_unlock_irqrestore (&dev->lock, flags);
@@ -686,6 +700,11 @@ printer_write(struct file *fd, const chareturn bytes_copied; else return -EAGAIN; + +out_disabled: +spin_unlock_irqrestore (&dev->lock, flags); +mutex_unlock (&dev->lock_printer_io); +return -ENODEV ; } static int
Greg Kroah-Hartman
maintainerPATCH 146/222 usb: musb: da8xx: fix a resource leak in probe()
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dan Carpenter <[email protected]>
commit de644a4a86be04ed8a43ef8267d0f7d021941c5e upstream.
Call usb_phy_generic_unregister() if of_platform_populate() fails.
--- drivers/usb/musb/da8xx.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-)
drivers/usb/musb/da8xx.c +6 -2
@@ -556,7 +556,7 @@ static int da8xx_probe(struct platform_d ret =of_platform_populate (pdev->dev.of_node,NULL , da8xx_auxdata_lookup, &pdev->dev);if (ret) -return ret; + goto err_unregister_phy; pinfo = da8xx_dev_info; pinfo.parent = &pdev->dev;
@@ -571,9 +571,13 @@ static int da8xx_probe(struct platform_d ret =PTR_ERR_OR_ZERO (glue->musb);if (ret) {dev_err (&pdev->dev,"failed to register musb device: %d\n" , ret); -usb_phy_generic_unregister (glue->usb_phy); + goto err_unregister_phy; } +return 0 ; + +err_unregister_phy: +usb_phy_generic_unregister (glue->usb_phy);return ret; }
Greg Kroah-Hartman
maintainerPATCH 147/222 usb: atm: cxacru: fix endpoint checking in cxacru_bind()
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Nikita Zhandarovich <[email protected]>
commit 2eabb655a968b862bc0c31629a09f0fbf3c80d51 upstream.
Syzbot is still reporting quite an old issue [1] that occurs due to incomplete checking of present usb endpoints. As such, wrong endpoints types may be used at urb sumbitting stage which in turn triggers a warning in usb_submit_urb().
Fix the issue by verifying that required endpoint types are present for both in and out endpoints, taking into account cmd endpoint type.
Unfortunately, this patch has not been tested on real hardware.
[1] Syzbot report:
usb 1-1: BOGUS urb xfer, pipe 1 != type 3
WARNING: CPU: 0 PID: 8667 at drivers/usb/core/urb.c:502 usb_submit_urb+0xed2/0x18a0 drivers/usb/core/urb.c:502 Modules linked in: CPU: 0 PID: 8667 Comm: kworker/0:4 Not tainted 5.14.0-rc4-syzkaller #0 Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011 Workqueue: usb_hub_wq hub_event RIP: 0010:usb_submit_urb+0xed2/0x18a0 drivers/usb/core/urb.c:502 ... Call Trace: cxacru_cm+0x3c0/0x8e0 drivers/usb/atm/cxacru.c:649 cxacru_card_status+0x22/0xd0 drivers/usb/atm/cxacru.c:760 cxacru_bind+0x7ac/0x11a0 drivers/usb/atm/cxacru.c:1209 usbatm_usb_probe+0x321/0x1ae0 drivers/usb/atm/usbatm.c:1055 cxacru_usb_probe+0xdf/0x1e0 drivers/usb/atm/cxacru.c:1363 usb_probe_interface+0x315/0x7f0 drivers/usb/core/driver.c:396 call_driver_probe drivers/base/dd.c:517 [inline] really_probe+0x23c/0xcd0 drivers/base/dd.c:595 __driver_probe_device+0x338/0x4d0 drivers/base/dd.c:747 driver_probe_device+0x4c/0x1a0 drivers/base/dd.c:777 __device_attach_driver+0x20b/0x2f0 drivers/base/dd.c:894 bus_for_each_drv+0x15f/0x1e0 drivers/base/bus.c:427 __device_attach+0x228/0x4a0 drivers/base/dd.c:965 bus_probe_device+0x1e4/0x290 drivers/base/bus.c:487 device_add+0xc2f/0x2180 drivers/base/core.c:3354 usb_set_configuration+0x113a/0x1910 drivers/usb/core/message.c:2170 usb_generic_driver_probe+0xba/0x100 drivers/usb/core/generic.c:238 usb_probe_device+0xd9/0x2c0 drivers/usb/core/driver.c:293
--- drivers/usb/atm/cxacru.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+)
drivers/usb/atm/cxacru.c +14 -0
@@ -1131,6 +1131,7 @@ static int cxacru_bind(struct usbatm_datstruct cxacru_data *instance;struct usb_device *usb_dev =interface_to_usbdev (intf);struct usb_host_endpoint *cmd_ep = usb_dev->ep_in[CXACRU_EP_CMD ]; +struct usb_endpoint_descriptor *in, *out;int ret;/* instance init */
@@ -1176,6 +1177,19 @@ static int cxacru_bind(struct usbatm_dat ret = -ENODEV ; goto fail; } + +if (usb_endpoint_xfer_int (&cmd_ep->desc)) + ret =usb_find_common_endpoints (intf->cur_altsetting, +NULL ,NULL , &in, &out); +else + ret =usb_find_common_endpoints (intf->cur_altsetting, + &in, &out,NULL ,NULL ); + +if (ret) { +usb_err (usbatm_instance,"cxacru_bind: interface has incorrect endpoints\n" ); + ret = -ENODEV ; + goto fail; + }if ((cmd_ep->desc.bmAttributes &USB_ENDPOINT_XFERTYPE_MASK ) ==USB_ENDPOINT_XFER_INT ) {
Greg Kroah-Hartman
maintainerPATCH 148/222 usb: dwc3: core: remove lock of otg mode during gadget suspend/resume to avoid deadlock
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Meng Li <[email protected]>
commit 7838de15bb700c2898a7d741db9b1f3cbc86c136 upstream.
When config CONFIG_USB_DWC3_DUAL_ROLE is selected, and trigger system to enter suspend status with below command:
echo mem > /sys/power/state
There will be a deadlock issue occurring. Detailed invoking path as below:dwc3_suspend_common()
spin_lock_irqsave(&dwc->lock, flags); <-- 1st
dwc3_gadget_suspend(dwc);
dwc3_gadget_soft_disconnect(dwc);
spin_lock_irqsave(&dwc->lock, flags); <-- 2ndThis issue is exposed by commit c7ebd8149ee5 ("usb: dwc3: gadget: Fix NULL pointer dereference in dwc3_gadget_suspend") that removes the code of checking whether dwc->gadget_driver is NULL or not. It causes the following code is executed and deadlock occurs when trying to get the spinlock. In fact, the root cause is the commit 5265397f9442("usb: dwc3:
Remove DWC3 locking during gadget suspend/resume") that forgot to remove the lock of otg mode. So, remove the redundant lock of otg mode during gadget suspend/resume.
--- drivers/usb/dwc3/core.c | 6 ------ 1 file changed, 6 deletions(-)
drivers/usb/dwc3/core.c +0 -6
@@ -2084,7 +2084,6 @@ assert_reset:static int dwc3_suspend_common (struct dwc3 *dwc,pm_message_t msg) { -unsigned long flags;u32 reg;switch (dwc->current_dr_role) {
@@ -2122,9 +2121,7 @@ static int dwc3_suspend_common(struct dwbreak ;if (dwc->current_otg_role ==DWC3_OTG_ROLE_DEVICE ) { -spin_lock_irqsave (&dwc->lock, flags);dwc3_gadget_suspend (dwc); -spin_unlock_irqrestore (&dwc->lock, flags);synchronize_irq (dwc->irq_gadget); }
@@ -2141,7 +2138,6 @@ static int dwc3_suspend_common(struct dwstatic int dwc3_resume_common (struct dwc3 *dwc,pm_message_t msg) { -unsigned long flags;int ret;u32 reg;
@@ -2190,9 +2186,7 @@ static int dwc3_resume_common(struct dwcif (dwc->current_otg_role ==DWC3_OTG_ROLE_HOST ) {dwc3_otg_host_init (dwc); }else if (dwc->current_otg_role ==DWC3_OTG_ROLE_DEVICE ) { -spin_lock_irqsave (&dwc->lock, flags);dwc3_gadget_resume (dwc); -spin_unlock_irqrestore (&dwc->lock, flags); }break ;
Greg Kroah-Hartman
maintainerPATCH 149/222 usb: gadget: aspeed_udc: fix device address configuration
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jeremy Kerr <[email protected]>
commit dba7567c2fbbf10a4de2471cdb0e16e5572dc007 upstream.
In the aspeed UDC setup, we configure the UDC hardware with the assigned USB device address.
However, we have an off-by-one in the bitmask, so we're only setting the lower 6 bits of the address (USB addresses being 7 bits, and the hardware bitmask being bits 0:6).
This means that device enumeration fails if the assigned address is greater than 64:
[ 344.607255] usb 1-1: new high-speed USB device number 63 using ehci-platform [ 344.808459] usb 1-1: New USB device found, idVendor=cc00, idProduct=cc00, bcdDevice= 6.10 [ 344.817684] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [ 344.825671] usb 1-1: Product: Test device [ 344.831075] usb 1-1: Manufacturer: Test vendor [ 344.836335] usb 1-1: SerialNumber: 00 [ 349.917181] usb 1-1: USB disconnect, device number 63 [ 352.036775] usb 1-1: new high-speed USB device number 64 using ehci-platform [ 352.249432] usb 1-1: device descriptor read/all, error -71 [ 352.696740] usb 1-1: new high-speed USB device number 65 using ehci-platform [ 352.909431] usb 1-1: device descriptor read/all, error -71
Use the correct mask of 0x7f (rather than 0x3f), and generate this through the GENMASK macro, so we have numbers that correspond exactly to the hardware register definition.
--- drivers/usb/gadget/udc/aspeed_udc.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/usb/gadget/udc/aspeed_udc.c +2 -2
@@ -66,8 +66,8 @@#define USB_UPSTREAM_EN BIT(0)/* Main config reg */ -#define UDC_CFG_SET_ADDR (x) ((x) & 0x3f) -#define UDC_CFG_ADDR_MASK (0x3f) +#define UDC_CFG_SET_ADDR (x) ((x) & UDC_CFG_ADDR_MASK) +#define UDC_CFG_ADDR_MASK GENMASK(6, 0)/* Interrupt ctrl & status reg */ #define UDC_IRQ_EP_POOL_NAK BIT(17)
Greg Kroah-Hartman
maintainerPATCH 150/222 usb: typec: ucsi: glink: fix child node release in probe function
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Javier Carrasco <[email protected]>
commit c68942624e254a4e8a65afcd3c17ed95acda5489 upstream.
The device_for_each_child_node() macro requires explicit calls to fwnode_handle_put() in all early exits of the loop if the child node is not required outside. Otherwise, the child node's refcount is not decremented and the resource is not released.
The current implementation of pmic_glink_ucsi_probe() makes use of the device_for_each_child_node(), but does not release the child node on early returns. Add the missing calls to fwnode_handle_put().
--- drivers/usb/typec/ucsi/ucsi_glink.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
drivers/usb/typec/ucsi/ucsi_glink.c +4 -1
@@ -365,6 +365,7 @@ static int pmic_glink_ucsi_probe(struct ret =fwnode_property_read_u32 (fwnode,"reg" , &port);if (ret <0 ) {dev_err (dev,"missing reg property of %pOFn\n" , fwnode); +fwnode_handle_put (fwnode);return ret; }
@@ -379,9 +380,11 @@ static int pmic_glink_ucsi_probe(structif (!desc)continue ; -if (IS_ERR (desc)) +if (IS_ERR (desc)) { +fwnode_handle_put (fwnode);return dev_err_probe (dev,PTR_ERR (desc),"unable to acquire orientation gpio\n" ); + } ucsi->port_orientation[port] = desc; ucsi->port_switch[port] =fwnode_typec_switch_get (fwnode);
Greg Kroah-Hartman
maintainerPATCH 151/222 Revert "usb: gadget: u_ether: Re-attach netif device to mirror detachment"
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ferry Toth <[email protected]>
commit 24bf27b92b1c6a322faa88977de2207aa8c26509 upstream.
This reverts commit 76c945730cdffb572c7767073cc6515fd3f646b4.
Prerequisite revert for the reverting of the original commit f49449fbc21e.
--- drivers/usb/gadget/function/u_ether.c | 2 -- 1 file changed, 2 deletions(-)
drivers/usb/gadget/function/u_ether.c +0 -2
@@ -1163,8 +1163,6 @@ struct net_device *gether_connect(structif (netif_running (dev->net))eth_start (dev,GFP_ATOMIC ); -netif_device_attach (dev->net); -/* on error, disable any endpoints */ }else { (void )usb_ep_disable (link->out_ep);
Greg Kroah-Hartman
maintainerPATCH 152/222 Revert "usb: gadget: u_ether: Replace netif_stop_queue with netif_device_detach"
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ferry Toth <[email protected]>
commit c50814a288dcee687285abc0cf935e9fe8928e59 upstream.
This reverts commit f49449fbc21e7e9550a5203902d69c8ae7dfd918.
This commit breaks u_ether on some setups (at least Merrifield). The fix "usb: gadget: u_ether: Re-attach netif device to mirror detachment" party restores u-ether. However the netif usb: remains up even usb is switched from device to host mode. This creates problems for user space as the interface remains in the routing table while not realy present and network managers (connman) not detecting a network change.
Various attempts to find the root cause were unsuccesful up to now. Therefore revert until a solution is found.
--- drivers/usb/gadget/function/u_ether.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/usb/gadget/function/u_ether.c +1 -1
@@ -1200,7 +1200,7 @@ void gether_disconnect(struct gether *liDBG (dev,"%s\n" , __func__); -netif_device_detach (dev->net); +netif_stop_queue (dev->net);netif_carrier_off (dev->net);/* disable endpoints, forcing (synchronous) completion
Greg Kroah-Hartman
maintainerPATCH 153/222 usb: ucsi: stm32: fix command completion handling
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Fabrice Gasnier <[email protected]>
commit 8e1ec117efdfd4b2f59f57bd0ad16b4edf5b963f upstream.
Sometimes errors are seen, when doing DR swap, like:
[ 24.672481] ucsi-stm32g0-i2c 0-0035: UCSI_GET_PDOS failed (-5) [ 24.720188] ucsi-stm32g0-i2c 0-0035: ucsi_handle_connector_change: GET_CONNECTOR_STATUS failed (-5)
There may be some race, which lead to read CCI, before the command complete flag is set, hence returning -EIO. Similar fix has been done also in ucsi_acpi [1].
In case of a spurious or otherwise delayed notification it is possible that CCI still reports the previous completion. The UCSI spec is aware of this and provides two completion bits in CCI, one for normal commands and one for acks. As acks and commands alternate the notification handler can determine if the completion bit is from the current command.
To fix this add the ACK_PENDING bit for ucsi_stm32g0 and only complete commands if the completion bit matches.
[1] https://lore.kernel.org/lkml/[email protected]/
--- drivers/usb/typec/ucsi/ucsi_stm32g0.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-)
drivers/usb/typec/ucsi/ucsi_stm32g0.c +15 -4
@@ -64,6 +64,7 @@ struct ucsi_stm32g0 {struct completion complete;struct device *dev;unsigned long flags; +#define ACK_PENDING 2const char *fw_name;struct ucsi *ucsi;bool suspended;
@@ -395,9 +396,13 @@ static int ucsi_stm32g0_sync_write(struc size_t len) {struct ucsi_stm32g0 *g0 =ucsi_get_drvdata (ucsi); +bool ack =UCSI_COMMAND (*(u64 *)val) ==UCSI_ACK_CC_CI ;int ret; -set_bit (COMMAND_PENDING , &g0->flags); +if (ack) +set_bit (ACK_PENDING , &g0->flags); +else +set_bit (COMMAND_PENDING , &g0->flags); ret =ucsi_stm32g0_async_write (ucsi, offset, val, len);if (ret)
@@ -405,9 +410,14 @@ static int ucsi_stm32g0_sync_write(strucif (!wait_for_completion_timeout (&g0->complete,msecs_to_jiffies (5000 ))) ret = -ETIMEDOUT ; +else +return 0 ; out_clear_bit: -clear_bit (COMMAND_PENDING , &g0->flags); +if (ack) +clear_bit (ACK_PENDING , &g0->flags); +else +clear_bit (COMMAND_PENDING , &g0->flags);return ret; }
@@ -428,8 +438,9 @@ static irqreturn_t ucsi_stm32g0_irq_handif (UCSI_CCI_CONNECTOR (cci))ucsi_connector_change (g0->ucsi,UCSI_CCI_CONNECTOR (cci)); -if (test_bit (COMMAND_PENDING , &g0->flags) && - cci & (UCSI_CCI_ACK_COMPLETE |UCSI_CCI_COMMAND_COMPLETE )) +if (cci &UCSI_CCI_ACK_COMPLETE &&test_and_clear_bit (ACK_PENDING , &g0->flags)) +complete (&g0->complete); +if (cci &UCSI_CCI_COMMAND_COMPLETE &&test_and_clear_bit (COMMAND_PENDING , &g0->flags))complete (&g0->complete);return IRQ_HANDLED ;
Greg Kroah-Hartman
maintainerPATCH 154/222 usb: dwc3: core: Workaround for CSR read timeout
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jos Wang <[email protected]>
commit fc1d1a712b517bbcb383b1f1f7ef478e7d0579f2 upstream.
This is a workaround for STAR 4846132, which only affects DWC_usb31 version2.00a operating in host mode.
There is a problem in DWC_usb31 version 2.00a operating in host mode that would cause a CSR read timeout When CSR read coincides with RAM Clock Gating Entry. By disable Clock Gating, sacrificing power consumption for normal operation.
--- drivers/usb/dwc3/core.c | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-)
drivers/usb/dwc3/core.c +19 -1
@@ -879,12 +879,16 @@ static bool dwc3_core_is_valid(struct dwstatic void dwc3_core_setup_global_control (struct dwc3 *dwc) { +unsigned int power_opt; +unsigned int hw_mode;u32 reg; reg =dwc3_readl (dwc->regs,DWC3_GCTL ); reg &= ~DWC3_GCTL_SCALEDOWN_MASK ; + hw_mode =DWC3_GHWPARAMS0_MODE (dwc->hwparams.hwparams0); + power_opt =DWC3_GHWPARAMS1_EN_PWROPT (dwc->hwparams.hwparams1); -switch (DWC3_GHWPARAMS1_EN_PWROPT (dwc->hwparams.hwparams1)) { +switch (power_opt) {case DWC3_GHWPARAMS1_EN_PWROPT_CLK :/** * WORKAROUND: DWC3 revisions between 2.10a and 2.50a have an
@@ -917,6 +921,20 @@ static void dwc3_core_setup_global_contrbreak ; } +/* +* This is a workaround for STAR#4846132, which only affects +* DWC_usb31 version2.00a operating in host mode. +* +* There is a problem in DWC_usb31 version 2.00a operating +* in host mode that would cause a CSR read timeout When CSR +* read coincides with RAM Clock Gating Entry. By disable +* Clock Gating, sacrificing power consumption for normal +* operation. +*/ +if (power_opt !=DWC3_GHWPARAMS1_EN_PWROPT_NO && + hw_mode != DWC3_GHWPARAMS0_MODE_GADGET && DWC3_VER_IS(DWC31, 200A)) + reg |=DWC3_GCTL_DSBLCLKGTNG ; +/* check if current dwc3 is on simulation board */ if (dwc->hwparams.hwparams6 &DWC3_GHWPARAMS6_EN_FPGA ) {dev_info (dwc->dev,"Running with FPGA optimizations\n" );
Greg Kroah-Hartman
maintainerPATCH 155/222 Revert "serial: core: only stop transmit when HW fifo is empty"
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Doug Brown <[email protected]>
commit c5603e2a621dac10c5e21cc430848ebcfa6c7e01 upstream.
This reverts commit 7bfb915a597a301abb892f620fe5c283a9fdbd77.
This commit broke pxa and omap-serial, because it inhibited them from calling stop_tx() if their TX FIFOs weren't completely empty. This resulted in these two drivers hanging during transmits because the TX interrupt would stay enabled, and a new TX interrupt would never fire.
--- include/linux/serial_core.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
include/linux/serial_core.h +1 -2
@@ -789,8 +789,7 @@ enum UART_TX_FLAGS {if (pending <WAKEUP_CHARS ) { \uart_write_wakeup (__port); \ \ -if (!((flags) &UART_TX_NOSTOP ) && pending ==0 && \ - __port->ops->tx_empty (__port)) \ +if (!((flags) &UART_TX_NOSTOP ) && pending ==0 ) \ __port->ops->stop_tx (__port); \ } \ \
Greg Kroah-Hartman
maintainerPATCH 156/222 tty: serial: 8250: Fix port count mismatch with the device
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Crescent Hsieh <[email protected]>
commit 0ac18dac43103ab1df6d26ec9a781c0126f83ced upstream.
Normally, the number of ports is indicated by the third digit of the device ID on Moxa PCI serial boards. For example, 0x1121 indicates a device with 2 ports.
However, CP116E_A_A and CP116E_A_B are exceptions; they have 8 ports, but the third digit of the device ID is 6.
This patch introduces a function to retrieve the number of ports on Moxa PCI serial boards, addressing the issue described above.
--- drivers/tty/serial/8250/8250_pci.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-)
drivers/tty/serial/8250/8250_pci.c +12 -1
@@ -1985,6 +1985,17 @@ enum { MOXA_SUPP_RS485 = BIT(2), }; +static unsigned short moxa_get_nports (unsigned short device) +{ +switch (device) { +case PCI_DEVICE_ID_MOXA_CP116E_A_A : +case PCI_DEVICE_ID_MOXA_CP116E_A_B : +return 8 ; + } + +return FIELD_GET (0x00F0 , device); +} +static bool pci_moxa_is_mini_pcie (unsigned short device) { if (device == PCI_DEVICE_ID_MOXA_CP102N ||
@@ -2038,7 +2049,7 @@ static int pci_moxa_init(struct pci_dev {unsigned short device = dev->device;resource_size_t iobar_addr =pci_resource_start (dev,2 ); -unsigned int num_ports = (device &0x00F0 ) >>4 , i; +unsigned int i, num_ports =moxa_get_nports (device);u8 val, init_mode =MOXA_RS232 ;if (!(pci_moxa_supported_rs (dev) &MOXA_SUPP_RS232 )) {
Greg Kroah-Hartman
maintainerPATCH 157/222 serial: 8250_omap: Implementation of Errata i2310
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Udit Kumar <[email protected]>
commit 9d141c1e615795eeb93cd35501ad144ee997a826 upstream.
As per Errata i2310[0], Erroneous timeout can be triggered, if this Erroneous interrupt is not cleared then it may leads to storm of interrupts, therefore apply Errata i2310 solution.
[0] https://www.ti.com/lit/pdf/sprz536 page 23
--- drivers/tty/serial/8250/8250_omap.c | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-)
drivers/tty/serial/8250/8250_omap.c +20 -5
@@ -116,6 +116,10 @@/* RX FIFO occupancy indicator */ #define UART_OMAP_RX_LVL 0x19 +/* Timeout low and High */ +#define UART_OMAP_TO_L 0x26 +#define UART_OMAP_TO_H 0x27 +/* * Copy of the genpd flags for the console. * Only used if console suspend is disabled
@@ -664,13 +668,24 @@ static irqreturn_t omap8250_irq(int irq,/* * On K3 SoCs, it is observed that RX TIMEOUT is signalled after -* FIFO has been drained, in which case a dummy read of RX FIFO -* is required to clear RX TIMEOUT condition. +* FIFO has been drained or erroneously. +* So apply solution of Errata i2310 as mentioned in +* https://www.ti.com/lit/pdf/sprz536 */ if (priv->habit &UART_RX_TIMEOUT_QUIRK && - (iir &UART_IIR_RX_TIMEOUT ) ==UART_IIR_RX_TIMEOUT && -serial_port_in (port,UART_OMAP_RX_LVL ) ==0 ) { -serial_port_in (port,UART_RX ); + (iir &UART_IIR_RX_TIMEOUT ) ==UART_IIR_RX_TIMEOUT ) { +unsigned char efr2, timeout_h, timeout_l; + + efr2 =serial_in (up,UART_OMAP_EFR2 ); + timeout_h =serial_in (up,UART_OMAP_TO_H ); + timeout_l =serial_in (up,UART_OMAP_TO_L ); +serial_out (up,UART_OMAP_TO_H ,0xFF ); +serial_out (up,UART_OMAP_TO_L ,0xFF ); +serial_out (up,UART_OMAP_EFR2 ,UART_OMAP_EFR2_TIMEOUT_BEHAVE ); +serial_in (up,UART_IIR ); +serial_out (up,UART_OMAP_EFR2 , efr2); +serial_out (up,UART_OMAP_TO_H , timeout_h); +serial_out (up,UART_OMAP_TO_L , timeout_l); }/* Stop processing interrupts on input overrun */
Greg Kroah-Hartman
maintainerPATCH 158/222 serial: imx: set receiver level before starting uart
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Stefan Eichenberger <[email protected]>
commit a81dbd0463eca317eee44985a66aa6cc2ce5c101 upstream.
Set the receiver level to something > 0 before calling imx_uart_start_rx in rs485_config. This is necessary to avoid an interrupt storm that might prevent the system from booting. This was seen on an i.MX7 device when the rs485-rts-active-low property was active in the device tree.
--- drivers/tty/serial/imx.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/tty/serial/imx.c +3 -1
@@ -1960,8 +1960,10 @@ static int imx_uart_rs485_config(struct/* Make sure Rx is enabled in case Tx is active with Rx disabled */ if (!(rs485conf->flags &SER_RS485_ENABLED ) || - rs485conf->flags &SER_RS485_RX_DURING_TX ) + rs485conf->flags &SER_RS485_RX_DURING_TX ) { +imx_uart_setup_ufcr (sport,TXTL_DEFAULT ,RXTL_DEFAULT );imx_uart_start_rx (port); + }return 0 ; }
Greg Kroah-Hartman
maintainerPATCH 159/222 serial: core: introduce uart_port_tx_limited_flags()
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jonas Gorski <[email protected]>
commit 9bb43b9e8d9a288a214e9b17acc9e46fda3977cf upstream.
Analogue to uart_port_tx_flags() introduced in commit 3ee07964d407 ("serial: core: introduce uart_port_tx_flags()"), add a _flags variant for uart_port_tx_limited().
--- include/linux/serial_core.h | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+)
include/linux/serial_core.h +18 -0
@@ -829,6 +829,24 @@ enum UART_TX_FLAGS { })/** +* uart_port_tx_limited_flags -- transmit helper for uart_port with count limiting with flags +* @port: uart port +* @ch: variable to store a character to be written to the HW +* @flags: %UART_TX_NOSTOP or similar +* @count: a limit of characters to send +* @tx_ready: can HW accept more data function +* @put_char: function to write a character +* @tx_done: function to call after the loop is done +* +* See uart_port_tx_limited() for more details. +*/ +#define uart_port_tx_limited_flags (port, ch, flags, count, tx_ready, put_char, tx_done) ({ \ + unsigned int __count = (count); \ + __uart_port_tx(port, ch, flags, tx_ready, put_char, tx_done, __count, \ + __count--); \ +}) + +/** * uart_port_tx -- transmit helper for uart_port * @port: uart port * @ch: variable to store a character to be written to the HW
Greg Kroah-Hartman
maintainerPATCH 160/222 serial: bcm63xx-uart: fix tx after conversion to uart_port_tx_limited()
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jonas Gorski <[email protected]>
commit ea55c65dedf40e9c1911dc1e63e26bc9a59692b9 upstream.
When bcm63xx-uart was converted to uart_port_tx_limited(), it implicitly added a call to stop_tx(). This causes garbage to be put out on the serial console. To fix this, pass UART_TX_NOSTOP in flags, and manually call stop_tx() ourselves analogue to how a similar issue was fixed in commit 7be50f2e8f20 ("serial: mxs-auart: fix tx").
--- drivers/tty/serial/bcm63xx_uart.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)
drivers/tty/serial/bcm63xx_uart.c +5 -2
@@ -308,8 +308,8 @@ static void bcm_uart_do_tx(struct uart_p val =bcm_uart_readl (port,UART_MCTL_REG ); val = (val &UART_MCTL_TXFIFOFILL_MASK ) >>UART_MCTL_TXFIFOFILL_SHIFT ; - - pending =uart_port_tx_limited (port, ch, port->fifosize - val, + pending =uart_port_tx_limited_flags (port, ch,UART_TX_NOSTOP , + port->fifosize - val, true,bcm_uart_writel (port, ch,UART_FIFO_REG ), ({}));
@@ -320,6 +320,9 @@ static void bcm_uart_do_tx(struct uart_p val =bcm_uart_readl (port,UART_IR_REG ); val &= ~UART_TX_INT_MASK ;bcm_uart_writel (port, val,UART_IR_REG ); + +if (uart_tx_stopped (port)) +bcm_uart_stop_tx (port); }/*
Greg Kroah-Hartman
maintainerPATCH 161/222 ALSA: hda/realtek: fix mute/micmute LEDs dont work for EliteBook 645/665 G11.
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dirk Su <[email protected]>
commit 3cd59d8ef8df7d7a079f54d56502dae8f716b39b upstream.
HP EliteBook 645/665 G11 needs ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF quirk to make mic-mute/audio-mute working.
--- sound/pci/hda/patch_realtek.c | 3 +++ 1 file changed, 3 insertions(+)
sound/pci/hda/patch_realtek.c +3 -0
@@ -10187,6 +10187,9 @@ static const struct snd_pci_quirk alc269SND_PCI_QUIRK (0x103c ,0x8c7c ,"HP ProBook 445 G11" ,ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF ),SND_PCI_QUIRK (0x103c ,0x8c7d ,"HP ProBook 465 G11" ,ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF ),SND_PCI_QUIRK (0x103c ,0x8c7e ,"HP ProBook 465 G11" ,ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF ), +SND_PCI_QUIRK (0x103c ,0x8c7f ,"HP EliteBook 645 G11" ,ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF ), +SND_PCI_QUIRK (0x103c ,0x8c80 ,"HP EliteBook 645 G11" ,ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF ), +SND_PCI_QUIRK (0x103c ,0x8c81 ,"HP EliteBook 665 G11" ,ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF ),SND_PCI_QUIRK (0x103c ,0x8c89 ,"HP ProBook 460 G11" ,ALC236_FIXUP_HP_GPIO_LED ),SND_PCI_QUIRK (0x103c ,0x8c8a ,"HP EliteBook 630" ,ALC236_FIXUP_HP_GPIO_LED ), SND_PCI_QUIRK(0x103c, 0x8c8c, "HP EliteBook 660", ALC236_FIXUP_HP_GPIO_LED),
Greg Kroah-Hartman
maintainerPATCH 162/222 tty: mxser: Remove __counted_by from mxser_board.ports[]
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Nathan Chancellor <[email protected]>
commit 1c07c9be87dd3dd0634033bf08728b32465f08fb upstream.
Work for __counted_by on generic pointers in structures (not just flexible array members) has started landing in Clang 19 (current tip of tree). During the development of this feature, a restriction was added to __counted_by to prevent the flexible array member's element type from including a flexible array member itself such as:
struct foo {
int count;
char buf[];
};
struct bar {
int count;
struct foo data[] __counted_by(count);
};because the size of data cannot be calculated with the standard array size formula:
sizeof(struct foo) * count
This restriction was downgraded to a warning but due to CONFIG_WERROR, it can still break the build. The application of __counted_by on the ports member of 'struct mxser_board' triggers this restriction, resulting in:
drivers/tty/mxser.c:291:2: error: 'counted_by' should not be applied to an array with element of unknown size because 'struct mxser_port' is a struct type with a flexible array member. This will be an error in a future compiler version [-Werror,-Wbounds-safety-counted-by-elt-type-unknown-size]
291 | struct mxser_port ports[] __counted_by(nports);
| ^~~~~~~~~~~~~~~~~~~~~~~~~1 error generated.
Remove this use of __counted_by to fix the warning/error. However, rather than remove it altogether, leave it commented, as it may be possible to support this in future compiler releases.
--- drivers/tty/mxser.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/tty/mxser.c +1 -1
@@ -288,7 +288,7 @@ struct mxser_board {enum mxser_must_hwid must_hwid;speed_t max_baud; - struct mxser_port ports[] __counted_by(nports); +struct mxser_port ports[]/* __counted_by(nports) */ ; }; static DECLARE_BITMAP(mxser_boards, MXSER_BOARDS);
Greg Kroah-Hartman
maintainerPATCH 163/222 tty: mcf: MCF54418 has 10 UARTS
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jean-Michel Hautbois <[email protected]>
commit 7c92a8bd53f24d50c8cf4aba53bb75505b382fed upstream.
Most of the colfires have up to 5 UARTs but MCF54418 has up-to 10 ! Change the maximum value authorized.
--- drivers/tty/serial/mcf.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/tty/serial/mcf.c +1 -1
@@ -462,7 +462,7 @@ static const struct uart_ops mcf_uart_op .verify_port = mcf_verify_port, }; -static struct mcf_uart mcf_ports[4 ]; +static struct mcf_uart mcf_ports[10 ];#define MCF_MAXPORTS ARRAY_SIZE(mcf_ports)
Greg Kroah-Hartman
maintainerPATCH 164/222 net: can: j1939: Initialize unused data in j1939_send_one()
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Shigeru Yoshida <[email protected]>
commit b7cdf1dd5d2a2d8200efd98d1893684db48fe134 upstream.
syzbot reported kernel-infoleak in raw_recvmsg() [1]. j1939_send_one() creates full frame including unused data, but it doesn't initialize it. This causes the kernel-infoleak issue. Fix this by initializing unused data.
[1]
BUG: KMSAN: kernel-infoleak in instrument_copy_to_user include/linux/instrumented.h:114 [inline] BUG: KMSAN: kernel-infoleak in copy_to_user_iter lib/iov_iter.c:24 [inline] BUG: KMSAN: kernel-infoleak in iterate_ubuf include/linux/iov_iter.h:29 [inline] BUG: KMSAN: kernel-infoleak in iterate_and_advance2 include/linux/iov_iter.h:245 [inline] BUG: KMSAN: kernel-infoleak in iterate_and_advance include/linux/iov_iter.h:271 [inline] BUG: KMSAN: kernel-infoleak in _copy_to_iter+0x366/0x2520 lib/iov_iter.c:185 instrument_copy_to_user include/linux/instrumented.h:114 [inline] copy_to_user_iter lib/iov_iter.c:24 [inline] iterate_ubuf include/linux/iov_iter.h:29 [inline] iterate_and_advance2 include/linux/iov_iter.h:245 [inline] iterate_and_advance include/linux/iov_iter.h:271 [inline] _copy_to_iter+0x366/0x2520 lib/iov_iter.c:185 copy_to_iter include/linux/uio.h:196 [inline] memcpy_to_msg include/linux/skbuff.h:4113 [inline] raw_recvmsg+0x2b8/0x9e0 net/can/raw.c:1008 sock_recvmsg_nosec net/socket.c:1046 [inline] sock_recvmsg+0x2c4/0x340 net/socket.c:1068 ____sys_recvmsg+0x18a/0x620 net/socket.c:2803 ___sys_recvmsg+0x223/0x840 net/socket.c:2845 do_recvmmsg+0x4fc/0xfd0 net/socket.c:2939 __sys_recvmmsg net/socket.c:3018 [inline] __do_sys_recvmmsg net/socket.c:3041 [inline] __se_sys_recvmmsg net/socket.c:3034 [inline] __x64_sys_recvmmsg+0x397/0x490 net/socket.c:3034 x64_sys_call+0xf6c/0x3b50 arch/x86/include/generated/asm/syscalls_64.h:300 do_syscall_x64 arch/x86/entry/common.c:52 [inline] do_syscall_64+0xcf/0x1e0 arch/x86/entry/common.c:83 entry_SYSCALL_64_after_hwframe+0x77/0x7f
Uninit was created at:
slab_post_alloc_hook mm/slub.c:3804 [inline] slab_alloc_node mm/slub.c:3845 [inline] kmem_cache_alloc_node+0x613/0xc50 mm/slub.c:3888 kmalloc_reserve+0x13d/0x4a0 net/core/skbuff.c:577 __alloc_skb+0x35b/0x7a0 net/core/skbuff.c:668 alloc_skb include/linux/skbuff.h:1313 [inline] alloc_skb_with_frags+0xc8/0xbf0 net/core/skbuff.c:6504 sock_alloc_send_pskb+0xa81/0xbf0 net/core/sock.c:2795 sock_alloc_send_skb include/net/sock.h:1842 [inline] j1939_sk_alloc_skb net/can/j1939/socket.c:878 [inline] j1939_sk_send_loop net/can/j1939/socket.c:1142 [inline] j1939_sk_sendmsg+0xc0a/0x2730 net/can/j1939/socket.c:1277 sock_sendmsg_nosec net/socket.c:730 [inline] __sock_sendmsg+0x30f/0x380 net/socket.c:745 ____sys_sendmsg+0x877/0xb60 net/socket.c:2584 ___sys_sendmsg+0x28d/0x3c0 net/socket.c:2638 __sys_sendmsg net/socket.c:2667 [inline] __do_sys_sendmsg net/socket.c:2676 [inline] __se_sys_sendmsg net/socket.c:2674 [inline] __x64_sys_sendmsg+0x307/0x4a0 net/socket.c:2674 x64_sys_call+0xc4b/0x3b50 arch/x86/include/generated/asm/syscalls_64.h:47 do_syscall_x64 arch/x86/entry/common.c:52 [inline] do_syscall_64+0xcf/0x1e0 arch/x86/entry/common.c:83 entry_SYSCALL_64_after_hwframe+0x77/0x7f
Bytes 12-15 of 16 are uninitialized
Memory access of size 16 starts at ffff888120969690 Data copied to user address 00000000200017c0
CPU: 1 PID: 5050 Comm: syz-executor198 Not tainted 6.9.0-rc5-syzkaller-00031-g71b1543c83d6 #0 Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 03/27/2024
--- net/can/j1939/main.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-)
net/can/j1939/main.c +1 -5
@@ -30,10 +30,6 @@ MODULE_ALIAS("can-proto-" __stringify(CA/* CAN_HDR: #bytes before can_frame data part */ #define J1939_CAN_HDR (offsetof(struct can_frame, data)) -/* CAN_FTR: #bytes beyond data part */ -#define J1939_CAN_FTR (sizeof(struct can_frame) - J1939_CAN_HDR - \ - sizeof(((struct can_frame *)0)->data)) -/* lowest layer */ static void j1939_can_recv (struct sk_buff *iskb,void *data) {
@@ -342,7 +338,7 @@ int j1939_send_one(struct j1939_priv *prmemset (cf,0 ,J1939_CAN_HDR );/* make it a full can frame again */ -skb_put (skb,J1939_CAN_FTR + (8 - dlc)); +skb_put_zero (skb,8 - dlc); canid =CAN_EFF_FLAG | (skcb->priority << 26) |
Greg Kroah-Hartman
maintainerPATCH 165/222 net: can: j1939: recover socket queue on CAN bus error during BAM transmission
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Oleksij Rempel <[email protected]>
commit 9ad1da14ab3bf23087ae45fe399d84a109ddb81a upstream.
Addresses an issue where a CAN bus error during a BAM transmission could stall the socket queue, preventing further transmissions even after the bus error is resolved. The fix activates the next queued session after the error recovery, allowing communication to continue.
--- net/can/j1939/transport.c | 2 ++ 1 file changed, 2 insertions(+)
net/can/j1939/transport.c +2 -0
@@ -1681,6 +1681,8 @@ static int j1939_xtp_rx_rts_session_actij1939_session_timers_cancel (session);j1939_session_cancel (session,J1939_XTP_ABORT_BUSY ); +if (session->transmission) +j1939_session_deactivate_activate_next (session);return -EBUSY ; }
Greg Kroah-Hartman
maintainerPATCH 166/222 net: can: j1939: enhanced error handling for tightly received RTS messages in xtp_rx_rts_session_new
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Oleksij Rempel <[email protected]>
commit d3e2904f71ea0fe7eaff1d68a2b0363c888ea0fb upstream.
This patch enhances error handling in scenarios with RTS (Request to Send) messages arriving closely. It replaces the less informative WARN_ON_ONCE backtraces with a new error handling method. This provides clearer error messages and allows for the early termination of problematic sessions. Previously, sessions were only released at the end of j1939_xtp_rx_rts().
Potentially this could be reproduced with something like:
testj1939 -r vcan0:0x80 &
while true; do
# send first RTS cansend vcan0 18EC8090#1014000303002301; # send second RTS cansend vcan0 18EC8090#1014000303002301; # send abort cansend vcan0 18EC8090#ff00000000002301; done
--- net/can/j1939/transport.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-)
net/can/j1939/transport.c +17 -2
@@ -1593,8 +1593,8 @@ j1939_session *j1939_xtp_rx_rts_session_struct j1939_sk_buff_cb skcb = *j1939_skb_to_cb (skb);struct j1939_session *session;const u8 *dat; +int len, ret;pgn_t pgn; -int len;netdev_dbg (priv->ndev,"%s\n" , __func__);
@@ -1653,7 +1653,22 @@ j1939_session *j1939_xtp_rx_rts_session_ session->tskey = priv->rx_tskey++;j1939_sk_errqueue (session,J1939_ERRQUEUE_RX_RTS ); -WARN_ON_ONCE (j1939_session_activate (session)); + ret =j1939_session_activate (session); +if (ret) { +/* Entering this scope indicates an issue with the J1939 bus. +* Possible scenarios include: +* - A time lapse occurred, and a new session was initiated +* due to another packet being sent correctly. This could +* have been caused by too long interrupt, debugger, or being +* out-scheduled by another task. +* - The bus is receiving numerous erroneous packets, either +* from a malfunctioning device or during a test scenario. +*/ +netdev_alert (priv->ndev,"%s: 0x%p: concurrent session with same addr (%02x %02x) is already active.\n" , + __func__, session, skcb.addr.sa, skcb.addr.da); +j1939_session_put (session); +return NULL ; + }return session; }
Greg Kroah-Hartman
maintainerPATCH 167/222 PCI/MSI: Fix UAF in msi_capability_init
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Mostafa Saleh <[email protected]>
commit 9eee5330656bf92f51cb1f09b2dc9f8cf975b3d1 upstream.
KFENCE reports the following UAF:
BUG: KFENCE: use-after-free read in __pci_enable_msi_range+0x2c0/0x488
Use-after-free read at 0x0000000024629571 (in kfence-#12):
__pci_enable_msi_range+0x2c0/0x488 pci_alloc_irq_vectors_affinity+0xec/0x14c pci_alloc_irq_vectors+0x18/0x28
kfence-#12: 0x0000000008614900-0x00000000e06c228d, size=104, cache=kmalloc-128
allocated by task 81 on cpu 7 at 10.808142s:
__kmem_cache_alloc_node+0x1f0/0x2bc kmalloc_trace+0x44/0x138 msi_alloc_desc+0x3c/0x9c msi_domain_insert_msi_desc+0x30/0x78 msi_setup_msi_desc+0x13c/0x184 __pci_enable_msi_range+0x258/0x488 pci_alloc_irq_vectors_affinity+0xec/0x14c pci_alloc_irq_vectors+0x18/0x28
freed by task 81 on cpu 7 at 10.811436s:
msi_domain_free_descs+0xd4/0x10c msi_domain_free_locked.part.0+0xc0/0x1d8 msi_domain_alloc_irqs_all_locked+0xb4/0xbc pci_msi_setup_msi_irqs+0x30/0x4c __pci_enable_msi_range+0x2a8/0x488 pci_alloc_irq_vectors_affinity+0xec/0x14c pci_alloc_irq_vectors+0x18/0x28
Descriptor allocation done in:__pci_enable_msi_range
msi_capability_init
msi_setup_msi_desc
msi_insert_msi_desc
msi_domain_insert_msi_desc
msi_alloc_desc
...Freed in case of failure in __msi_domain_alloc_locked() __pci_enable_msi_range
msi_capability_init
pci_msi_setup_msi_irqs
msi_domain_alloc_irqs_all_locked
msi_domain_alloc_locked
__msi_domain_alloc_locked => fails msi_domain_free_locked
...
That failure propagates back to pci_msi_setup_msi_irqs() in msi_capability_init() which accesses the descriptor for unmasking in the error exit path.
Cure it by copying the descriptor and using the copy for the error exit path unmask operation.
[ tglx: Massaged change log ]
--- drivers/pci/msi/msi.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-)
drivers/pci/msi/msi.c +8 -2
@@ -349,7 +349,7 @@ static int msi_capability_init(struct pc struct irq_affinity *affd) {struct irq_affinity_desc *masks =NULL ; -struct msi_desc *entry; +struct msi_desc *entry, desc;int ret;/* Reject multi-MSI early on irq domain enabled architectures */
@@ -374,6 +374,12 @@ static int msi_capability_init(struct pc/* All MSIs are unmasked by default; mask them all */ entry =msi_first_desc (&dev->dev,MSI_DESC_ALL );pci_msi_mask (entry,msi_multi_mask (entry)); +/* +* Copy the MSI descriptor for the error path because +* pci_msi_setup_msi_irqs() will free it for the hierarchical +* interrupt domain case. +*/ +memcpy (&desc, entry,sizeof (desc));/* Configure MSI capability structure */ ret =pci_msi_setup_msi_irqs (dev, nvec,PCI_CAP_ID_MSI );
@@ -393,7 +399,7 @@ static int msi_capability_init(struct pc goto unlock; err: -pci_msi_unmask (entry,msi_multi_mask (entry)); +pci_msi_unmask (&desc,msi_multi_mask (&desc));pci_free_msi_irqs (dev); fail: dev->msi_enabled =0 ;
Greg Kroah-Hartman
maintainerPATCH 168/222 nvmet-fc: Remove __counted_by from nvmet_fc_tgt_queue.fod[]
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Nathan Chancellor <[email protected]>
commit 440e2051c577896275c0e0513ec26964e04c7810 upstream.
Work for __counted_by on generic pointers in structures (not just flexible array members) has started landing in Clang 19 (current tip of tree). During the development of this feature, a restriction was added to __counted_by to prevent the flexible array member's element type from including a flexible array member itself such as:
struct foo {
int count;
char buf[];
};
struct bar {
int count;
struct foo data[] __counted_by(count);
};because the size of data cannot be calculated with the standard array size formula:
sizeof(struct foo) * count
This restriction was downgraded to a warning but due to CONFIG_WERROR, it can still break the build. The application of __counted_by on the fod member of 'struct nvmet_fc_tgt_queue' triggers this restriction, resulting in:
drivers/nvme/target/fc.c:151:2: error: 'counted_by' should not be applied to an array with element of unknown size because 'struct nvmet_fc_fcp_iod' is a struct type with a flexible array member. This will be an error in a future compiler version [-Werror,-Wbounds-safety-counted-by-elt-type-unknown-size]
151 | struct nvmet_fc_fcp_iod fod[] __counted_by(sqsize);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~1 error generated.
Remove this use of __counted_by to fix the warning/error. However, rather than remove it altogether, leave it commented, as it may be possible to support this in future compiler releases.
--- drivers/nvme/target/fc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/nvme/target/fc.c +1 -1
@@ -148,7 +148,7 @@ struct nvmet_fc_tgt_queue {struct workqueue_struct *work_q;struct kref ref;/* array of fcp_iods */ - struct nvmet_fc_fcp_iod fod[] __counted_by(sqsize); +struct nvmet_fc_fcp_iod fod[]/* __counted_by(sqsize) */ ; }__aligned(sizeof(unsigned long long)) ;struct nvmet_fc_hostport {
Greg Kroah-Hartman
maintainerPATCH 169/222 cpufreq: intel_pstate: Use HWP to initialize ITMT if CPPC is missing
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Rafael J. Wysocki <[email protected]>
commit a1ff59784b277795a613beaa5d3dd9c5595c69a7 upstream.
It is reported that single-thread performance on some hybrid systems dropped significantly after commit 7feec7430edd ("ACPI: CPPC: Only probe for _CPC if CPPC v2 is acked") which prevented _CPC from being used if the support for it had not been confirmed by the platform firmware.
The problem is that if the platform firmware does not confirm CPPC v2 support, cppc_get_perf_caps() returns an error which prevents the intel_pstate driver from enabling ITMT. Consequently, the scheduler does not get any hints on CPU performance differences, so in a hybrid system some tasks may run on CPUs with lower capacity even though they should be running on high-capacity CPUs.
To address this, modify intel_pstate to use the information from MSR_HWP_CAPABILITIES to enable ITMT if CPPC is not available (which is done already if the highest performance number coming from CPPC is not realistic).
--- drivers/cpufreq/intel_pstate.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-)
drivers/cpufreq/intel_pstate.c +6 -7
@@ -357,15 +357,14 @@ static void intel_pstate_set_itmt_prio(iint ret; ret =cppc_get_perf_caps (cpu, &cppc_perf); -if (ret) -return ; -/* -* On some systems with overclocking enabled, CPPC.highest_perf is hardcoded to 0xff. -* In this case we can't use CPPC.highest_perf to enable ITMT. -* In this case we can look at MSR_HWP_CAPABILITIES bits [8:0] to decide. +* If CPPC is not available, fall back to MSR_HWP_CAPABILITIES bits [8:0]. +* +* Also, on some systems with overclocking enabled, CPPC.highest_perf is +* hardcoded to 0xff, so CPPC.highest_perf cannot be used to enable ITMT. +* Fall back to MSR_HWP_CAPABILITIES then too. */ -if (cppc_perf.highest_perf ==CPPC_MAX_PERF ) +if (ret || cppc_perf.highest_perf ==CPPC_MAX_PERF ) cppc_perf.highest_perf =HWP_HIGHEST_PERF (READ_ONCE (all_cpu_data[cpu]->hwp_cap_cached));/*
Greg Kroah-Hartman
maintainerPATCH 170/222 irqchip/loongson-eiointc: Use early_cpu_to_node() instead of cpu_to_node()
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Huacai Chen <[email protected]>
commit 2d64eaeeeda5659d52da1af79d237269ba3c2d2c upstream.
Multi-bridge machines required that all eiointc controllers in the system are initialized, otherwise the system does not boot.
The initialization happens on the boot CPU during early boot and relies on cpu_to_node() for identifying the individual nodes.
That works when the number of possible CPUs is large enough, but with a command line limit, e.g. "nr_cpus=$N" for kdump, but fails when the CPUs of the secondary nodes are not covered.
During early ACPI enumeration all CPU to node mappings are recorded up to CONFIG_NR_CPUS. These are accessible via early_cpu_to_node() even in the case that "nr_cpus=N" truncates the number of possible CPUs and only provides the possible CPUs via cpu_to_node() translation.
Change the node lookup in the driver to use early_cpu_to_node() so that even with a limitation on the number of possible CPUs all eointc instances are initialized.
This can't obviously cure the case where CONFIG_NR_CPUS is too small.
[ tglx: Massaged changelog ]
--- drivers/irqchip/irq-loongson-eiointc.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
drivers/irqchip/irq-loongson-eiointc.c +3 -2
@@ -15,6 +15,7 @@#include <linux/irqchip/chained_irq.h> #include <linux/kernel.h> #include <linux/syscore_ops.h> +#include <asm/numa.h> #define EIOINTC_REG_NODEMAP 0x14a0#define EIOINTC_REG_IPMAP 0x14c0
@@ -339,7 +340,7 @@ static int __init pch_msi_parse_madt(uniint node;if (cpu_has_flatmode) - node =cpu_to_node (eiointc_priv[nr_pics -1 ]->node *CORES_PER_EIO_NODE ); + node =early_cpu_to_node (eiointc_priv[nr_pics -1 ]->node *CORES_PER_EIO_NODE );else node = eiointc_priv[nr_pics -1 ]->node;
@@ -431,7 +432,7 @@ int __init eiointc_acpi_init(struct irq_ goto out_free_handle;if (cpu_has_flatmode) - node =cpu_to_node (acpi_eiointc->node *CORES_PER_EIO_NODE ); + node =early_cpu_to_node (acpi_eiointc->node *CORES_PER_EIO_NODE );else node = acpi_eiointc->node;acpi_set_vec_parent (node, priv->eiointc_domain, pch_group);
Greg Kroah-Hartman
maintainerPATCH 171/222 cpu: Fix broken cmdline "nosmp" and "maxcpus=0"
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Huacai Chen <[email protected]>
commit 6ef8eb5125722c241fd60d7b0c872d5c2e5dd4ca upstream.
After the rework of "Parallel CPU bringup", the cmdline "nosmp" and "maxcpus=0" parameters are not working anymore. These parameters set setup_max_cpus to zero and that's handed to bringup_nonboot_cpus().
The code there does a decrement before checking for zero, which brings it into the negative space and brings up all CPUs.
Add a zero check at the beginning of the function to prevent this.
[ tglx: Massaged change log ]
--- kernel/cpu.c | 3 +++ 1 file changed, 3 insertions(+)
kernel/cpu.c +3 -0
@@ -1859,6 +1859,9 @@ static inline bool cpuhp_bringup_cpus_pavoid __init bringup_nonboot_cpus (unsigned int max_cpus) { +if (!max_cpus) +return ; +/* Try parallel bringup optimization if enabled */ if (cpuhp_bringup_cpus_parallel (max_cpus))return ;
Greg Kroah-Hartman
maintainerPATCH 172/222 cpu/hotplug: Fix dynstate assignment in __cpuhp_setup_state_cpuslocked()
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Yuntao Wang <[email protected]>
commit 932d8476399f622aa0767a4a0a9e78e5341dc0e1 upstream.
Commit 4205e4786d0b ("cpu/hotplug: Provide dynamic range for prepare stage") added a dynamic range for the prepare states, but did not handle the assignment of the dynstate variable in __cpuhp_setup_state_cpuslocked().
This causes the corresponding startup callback not to be invoked when calling __cpuhp_setup_state_cpuslocked() with the CPUHP_BP_PREPARE_DYN parameter, even though it should be.
Currently, the users of __cpuhp_setup_state_cpuslocked(), for one reason or another, have not triggered this bug.
--- kernel/cpu.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
kernel/cpu.c +4 -4
@@ -2449,7 +2449,7 @@ EXPORT_SYMBOL_GPL(__cpuhp_state_add_inst* The caller needs to hold cpus read locked while calling this function. * Return: * On success: -* Positive state number if @state is CPUHP_AP_ONLINE_DYN; +* Positive state number if @state is CPUHP_AP_ONLINE_DYN or CPUHP_BP_PREPARE_DYN; * 0 for all other states * On failure: proper (negative) error code */
@@ -2472,7 +2472,7 @@ int __cpuhp_setup_state_cpuslocked(enum ret =cpuhp_store_callbacks (state, name, startup, teardown, multi_instance); - dynstate = state ==CPUHP_AP_ONLINE_DYN ; + dynstate = state ==CPUHP_AP_ONLINE_DYN || state ==CPUHP_BP_PREPARE_DYN ;if (ret >0 && dynstate) { state = ret; ret =0 ;
@@ -2503,8 +2503,8 @@ int __cpuhp_setup_state_cpuslocked(enum out:mutex_unlock (&cpuhp_state_mutex);/* -* If the requested state is CPUHP_AP_ONLINE_DYN, return the -* dynamically allocated state in case of success. +* If the requested state is CPUHP_AP_ONLINE_DYN or CPUHP_BP_PREPARE_DYN, +* return the dynamically allocated state in case of success. */ if (!ret && dynstate)return state;
Greg Kroah-Hartman
maintainerPATCH 173/222 irqchip/loongson-liointc: Set different ISRs for different cores
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Huacai Chen <[email protected]>
commit a9c3ee5d0fdb069b54902300df6ac822027f3b0a upstream.
The liointc hardware provides separate Interrupt Status Registers (ISR) for each core. The current code uses always the ISR of core #0, which works during boot because by default all interrupts are routed to core #0.
When the interrupt routing changes in the firmware configuration then this causes interrupts to be lost because they are not configured in the corresponding core.
Use the core index to access the correct ISR instead of a hardcoded 0.
[ tglx: Massaged changelog ]
--- drivers/irqchip/irq-loongson-liointc.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/irqchip/irq-loongson-liointc.c +2 -2
@@ -28,7 +28,7 @@#define LIOINTC_INTC_CHIP_START 0x20 -#define LIOINTC_REG_INTC_STATUS (LIOINTC_INTC_CHIP_START + 0x20) +#define LIOINTC_REG_INTC_STATUS (core) (LIOINTC_INTC_CHIP_START + 0x20 + (core) * 8)#define LIOINTC_REG_INTC_EN_STATUS (LIOINTC_INTC_CHIP_START + 0x04)#define LIOINTC_REG_INTC_ENABLE (LIOINTC_INTC_CHIP_START + 0x08)#define LIOINTC_REG_INTC_DISABLE (LIOINTC_INTC_CHIP_START + 0x0c)
@@ -217,7 +217,7 @@ static int liointc_init(phys_addr_t addr goto out_free_priv;for (i =0 ; i <LIOINTC_NUM_CORES ; i++) - priv->core_isr[i] = base +LIOINTC_REG_INTC_STATUS ; + priv->core_isr[i] = base +LIOINTC_REG_INTC_STATUS (i);for (i =0 ; i <LIOINTC_NUM_PARENT ; i++) priv->handler[i].parent_int_map = parent_int_map[i];
Greg Kroah-Hartman
maintainerPATCH 174/222 kbuild: Install dtb files as 0644 in Makefile.dtbinst
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dragan Simic <[email protected]>
commit 9cc5f3bf63aa98bd7cc7ce8a8599077fde13283e upstream.
The compiled dtb files aren't executable, so install them with 0644 as their permission mode, instead of defaulting to 0755 for the permission mode and installing them with the executable bits set.
Some Linux distributions, including Debian, [1][2][3] already include fixes in their kernel package build recipes to change the dtb file permissions to 0644 in their kernel packages. These changes, when additionally propagated into the long-term kernel versions, will allow such distributions to remove their downstream fixes.
[1] https://salsa.debian.org/kernel-team/linux/-/merge_requests/642
[2] https://salsa.debian.org/kernel-team/linux/-/merge_requests/749
[3] https://salsa.debian.org/kernel-team/linux/-/blob/debian/6.8.12-1/debian/rules.real#L193
--- scripts/Makefile.dtbinst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
scripts/Makefile.dtbinst +1 -1
@@ -17,7 +17,7 @@ include $(srctree)/scripts/Kbuild.includ dst := $(INSTALL_DTBS_PATH) quiet_cmd_dtb_install = INSTALL $@ - cmd_dtb_install = install -D $< $@ + cmd_dtb_install = install -D -m 0644 $< $@ $(dst)/%: $(obj)/% $(call cmd,dtb_install)
Greg Kroah-Hartman
maintainerPATCH 175/222 sh: rework sync_file_range ABI
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Arnd Bergmann <[email protected]>
commit 30766f1105d6d2459c3b9fe34a3e52b637a72950 upstream.
The unusual function calling conventions on SuperH ended up causing sync_file_range to have the wrong argument order, with the 'flags' argument getting sorted before 'nbytes' by the compiler.
In userspace, I found that musl, glibc, uclibc and strace all expect the normal calling conventions with 'nbytes' last, so changing the kernel to match them should make all of those work.
In order to be able to also fix libc implementations to work with existing kernels, they need to be able to tell which ABI is used. An easy way to do this is to add yet another system call using the sync_file_range2 ABI that works the same on all architectures.
Old user binaries can now work on new kernels, and new binaries can try the new sync_file_range2() to work with new kernels or fall back to the old sync_file_range() version if that doesn't exist.
--- arch/sh/kernel/sys_sh32.c | 11 +++++++++++ arch/sh/kernel/syscalls/syscall.tbl | 3 ++- 2 files changed, 13 insertions(+), 1 deletion(-)
arch/sh/kernel/sys_sh32.c +11 -0
@@ -59,3 +59,14 @@ asmlinkage int sys_fadvise64_64_wrapper( (u64)len0 << 32 | len1, advice);#endif } + +/* +* swap the arguments the way that libc wants them instead of +* moving flags ahead of the 64-bit nbytes argument +*/ +SYSCALL_DEFINE6 (sh_sync_file_range6, int, fd,SC_ARG64 (offset), + SC_ARG64(nbytes), unsigned int, flags) +{ +return ksys_sync_file_range (fd,SC_VAL64 (loff_t, offset), +SC_VAL64 (loff_t, nbytes), flags); +}
arch/sh/kernel/syscalls/syscall.tbl +2 -1
@@ -321,7 +321,7 @@ 311 common set_robust_list sys_set_robust_list 312 common get_robust_list sys_get_robust_list 313 common splice sys_splice -314 common sync_file_range sys_sync_file_range +314 common sync_file_range sys_sh_sync_file_range6 315 common tee sys_tee 316 common vmsplice sys_vmsplice 317 common move_pages sys_move_pages
@@ -395,6 +395,7 @@ 385 common pkey_alloc sys_pkey_alloc 386 common pkey_free sys_pkey_free 387 common rseq sys_rseq +388 common sync_file_range2 sys_sync_file_range2 # room for arch specific syscalls 393 common semget sys_semget 394 common semctl sys_semctl
Greg Kroah-Hartman
maintainerPATCH 176/222 btrfs: zoned: fix initial free space detection
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Naohiro Aota <[email protected]>
commit b9fd2affe4aa99a4ca14ee87e1f38fea22ece52a upstream.
When creating a new block group, it calls btrfs_add_new_free_space() to add the entire block group range into the free space accounting. __btrfs_add_free_space_zoned() checks if size == block_group->length to detect the initial free space adding, and proceed that case properly.
However, if the zone_capacity == zone_size and the over-write speed is fast enough, the entire zone can be over-written within one transaction. That confuses __btrfs_add_free_space_zoned() to handle it as an initial free space accounting. As a result, that block group becomes a strange state: 0 used bytes, 0 zone_unusable bytes, but alloc_offset == zone_capacity (no allocation anymore).
The initial free space accounting can properly be checked by checking alloc_offset too.
--- fs/btrfs/free-space-cache.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
fs/btrfs/free-space-cache.c +1 -1
@@ -2697,7 +2697,7 @@ static int __btrfs_add_free_space_zoned(u64 offset = bytenr - block_group->start;u64 to_free, to_unusable;int bg_reclaim_threshold =0 ; -bool initial = (size == block_group->length); +bool initial = ((size == block_group->length) && (block_group->alloc_offset ==0 ));u64 reclaimable_unusable;WARN_ON (!initial && offset + size > block_group->zone_capacity);
Greg Kroah-Hartman
maintainerPATCH 177/222 csky, hexagon: fix broken sys_sync_file_range
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Arnd Bergmann <[email protected]>
commit 3339b99ef6fe38dac43b534cba3a8a0e29fb2eff upstream.
Both of these architectures require u64 function arguments to be passed in even/odd pairs of registers or stack slots, which in case of sync_file_range would result in a seven-argument system call that is not currently possible. The system call is therefore incompatible with all existing binaries.
While it would be possible to implement support for seven arguments like on mips, it seems better to use a six-argument version, either with the normal argument order but misaligned as on most architectures or with the reordered sync_file_range2() calling conventions as on arm and powerpc.
--- arch/csky/include/uapi/asm/unistd.h | 1 + arch/hexagon/include/uapi/asm/unistd.h | 1 + 2 files changed, 2 insertions(+)
arch/csky/include/uapi/asm/unistd.h +1 -0
@@ -6,6 +6,7 @@#define __ARCH_WANT_SYS_CLONE3#define __ARCH_WANT_SET_GET_RLIMIT#define __ARCH_WANT_TIME32_SYSCALLS +#define __ARCH_WANT_SYNC_FILE_RANGE2#include <asm-generic/unistd.h> #define __NR_set_thread_area (__NR_arch_specific_syscall + 0)
arch/hexagon/include/uapi/asm/unistd.h +1 -0
@@ -36,5 +36,6 @@#define __ARCH_WANT_SYS_VFORK#define __ARCH_WANT_SYS_FORK#define __ARCH_WANT_TIME32_SYSCALLS +#define __ARCH_WANT_SYNC_FILE_RANGE2#include <asm-generic/unistd.h>
Greg Kroah-Hartman
maintainerPATCH 178/222 hexagon: fix fadvise64_64 calling conventions
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Arnd Bergmann <[email protected]>
commit 896842284c6ccba25ec9d78b7b6e62cdd507c083 upstream.
fadvise64_64() has two 64-bit arguments at the wrong alignment for hexagon, which turns them into a 7-argument syscall that is not supported by Linux.
The downstream musl port for hexagon actually asks for a 6-argument version the same way we do it on arm, csky, powerpc, so make the kernel do it the same way to avoid having to change both.
--- arch/hexagon/include/asm/syscalls.h | 6 ++++++ arch/hexagon/kernel/syscalltab.c | 7 +++++++ 2 files changed, 13 insertions(+) create mode 100644 arch/hexagon/include/asm/syscalls.h
arch/hexagon/include/asm/syscalls.h new file +6 -0
@@ -0,0 +1,6 @@ +/* SPDX-License-Identifier: GPL-2.0 */ + +#include <asm-generic/syscalls.h> + +asmlinkage long sys_hexagon_fadvise64_64 (int fd,int advice, +u32 a2,u32 a3,u32 a4,u32 a5);
arch/hexagon/kernel/syscalltab.c +7 -0
@@ -14,6 +14,13 @@#undef __SYSCALL#define __SYSCALL (nr, call) [nr] = (call), +SYSCALL_DEFINE6 (hexagon_fadvise64_64, int, fd, int, advice, + SC_ARG64(offset), SC_ARG64(len)) +{ +return ksys_fadvise64_64 (fd,SC_VAL64 (loff_t, offset),SC_VAL64 (loff_t, len), advice); +} +#define sys_fadvise64_64 sys_hexagon_fadvise64_64 + void *sys_call_table[__NR_syscalls] = {#include <asm/unistd.h> };
Greg Kroah-Hartman
maintainerPATCH 179/222 drm/drm_file: Fix pid refcounting race
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jann Horn <[email protected]>
commit 4f2a129b33a2054e62273edd5a051c34c08d96e9 upstream.
<[email protected]>, Maxime Ripard <[email protected]>, Thomas Zimmermann <[email protected]>
filp->pid is supposed to be a refcounted pointer; however, before this patch, drm_file_update_pid() only increments the refcount of a struct pid after storing a pointer to it in filp->pid and dropping the dev->filelist_mutex, making the following race possible:
process A process B
========= =========
begin drm_file_update_pid
mutex_lock(&dev->filelist_mutex)
rcu_replace_pointer(filp->pid, <pid B>, 1)
mutex_unlock(&dev->filelist_mutex)begin drm_file_update_pidmutex_lock(&dev->filelist_mutex)rcu_replace_pointer(filp->pid, <pid A>, 1)mutex_unlock(&dev->filelist_mutex)get_pid(<pid A>)synchronize_rcu()put_pid(<pid B>) *** pid B reaches refcount 0 and is freed here ***
get_pid(<pid B>) *** UAF ***
synchronize_rcu()
put_pid(<pid A>)As far as I know, this race can only occur with CONFIG_PREEMPT_RCU=y because it requires RCU to detect a quiescent state in code that is not explicitly calling into the scheduler.
This race leads to use-after-free of a "struct pid".
It is probably somewhat hard to hit because process A has to pass through a synchronize_rcu() operation while process B is between mutex_unlock() and get_pid().
Fix it by ensuring that by the time a pointer to the current task's pid is stored in the file, an extra reference to the pid has been taken.
This fix also removes the condition for synchronize_rcu(); I think that optimization is unnecessary complexity, since in that case we would usually have bailed out on the lockless check above.
--- drivers/gpu/drm/drm_file.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-)
drivers/gpu/drm/drm_file.c +3 -5
@@ -469,14 +469,12 @@ void drm_file_update_pid(struct drm_file dev = filp->minor->dev;mutex_lock (&dev->filelist_mutex); +get_pid (pid); old =rcu_replace_pointer (filp->pid, pid,1 );mutex_unlock (&dev->filelist_mutex); -if (pid != old) { -get_pid (pid); -synchronize_rcu (); -put_pid (old); - } +synchronize_rcu (); +put_pid (old); }/**
Greg Kroah-Hartman
maintainerPATCH 180/222 drm/nouveau/dispnv04: fix null pointer dereference in nv17_tv_get_ld_modes
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ma Ke <[email protected]>
commit 66edf3fb331b6c55439b10f9862987b0916b3726 upstream.
In nv17_tv_get_ld_modes(), the return value of drm_mode_duplicate() is assigned to mode, which will lead to a possible NULL pointer dereference on failure of drm_mode_duplicate(). Add a check to avoid npd.
--- drivers/gpu/drm/nouveau/dispnv04/tvnv17.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/gpu/drm/nouveau/dispnv04/tvnv17.c +2 -0
@@ -209,6 +209,8 @@ static int nv17_tv_get_ld_modes(struct dstruct drm_display_mode *mode; mode =drm_mode_duplicate (encoder->dev, tv_mode); +if (!mode) +continue ; mode->clock = tv_norm->tv_enc_mode.vrefresh * mode->htotal / 1000 *
Greg Kroah-Hartman
maintainerPATCH 181/222 drm/fbdev-dma: Only set smem_start is enable per module option
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Thomas Zimmermann <[email protected]>
commit d92a7580392ad4681b1d4f9275d00b95375ebe01 upstream.
Only export struct fb_info.fix.smem_start if that is required by the user and the memory does not come from vmalloc().
Setting struct fb_info.fix.smem_start breaks systems where DMA memory is backed by vmalloc address space. An example error is shown below.
[ 3.536043] ------------[ cut here ]------------ [ 3.540716] virt_to_phys used for non-linear address: 000000007fc4f540 (0xffff800086001000) [ 3.552628] WARNING: CPU: 4 PID: 61 at arch/arm64/mm/physaddr.c:12 __virt_to_phys+0x68/0x98 [ 3.565455] Modules linked in: [ 3.568525] CPU: 4 PID: 61 Comm: kworker/u12:5 Not tainted 6.6.23-06226-g4986cc3e1b75-dirty #250 [ 3.577310] Hardware name: NXP i.MX95 19X19 board (DT) [ 3.582452] Workqueue: events_unbound deferred_probe_work_func [ 3.588291] pstate: 60400009 (nZCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--) [ 3.595233] pc : __virt_to_phys+0x68/0x98 [ 3.599246] lr : __virt_to_phys+0x68/0x98 [ 3.603276] sp : ffff800083603990 [ 3.677939] Call trace: [ 3.680393] __virt_to_phys+0x68/0x98 [ 3.684067] drm_fbdev_dma_helper_fb_probe+0x138/0x238 [ 3.689214] __drm_fb_helper_initial_config_and_unlock+0x2b0/0x4c0 [ 3.695385] drm_fb_helper_initial_config+0x4c/0x68 [ 3.700264] drm_fbdev_dma_client_hotplug+0x8c/0xe0 [ 3.705161] drm_client_register+0x60/0xb0 [ 3.709269] drm_fbdev_dma_setup+0x94/0x148
Additionally, DMA memory is assumed to by contiguous in physical address space, which is not guaranteed by vmalloc().
Resolve this by checking the module flag drm_leak_fbdev_smem when DRM allocated the instance of struct fb_info. Fbdev-dma then only sets smem_start only if required (via FBINFO_HIDE_SMEM_START). Also guarantee that the framebuffer is not located in vmalloc address space.
--- drivers/gpu/drm/drm_fb_helper.c | 6 +++--- drivers/gpu/drm/drm_fbdev_dma.c | 5 ++++- 2 files changed, 7 insertions(+), 4 deletions(-)
drivers/gpu/drm/drm_fb_helper.c +3 -3
@@ -524,6 +524,9 @@ struct fb_info *drm_fb_helper_alloc_infoif (!info)return ERR_PTR (-ENOMEM ); +if (!drm_leak_fbdev_smem) + info->flags |=FBINFO_HIDE_SMEM_START ; + ret =fb_alloc_cmap (&info->cmap,256 ,0 );if (ret) goto err_release;
@@ -1860,9 +1863,6 @@ __drm_fb_helper_initial_config_and_unloc info = fb_helper->info; info->var.pixclock =0 ; -if (!drm_leak_fbdev_smem) - info->flags |=FBINFO_HIDE_SMEM_START ; -/* Need to drop locks to avoid recursive deadlock in * register_framebuffer. This is ok because the only thing left to do is * register the fbdev emulation instance in kernel_fb_helper_list. */
drivers/gpu/drm/drm_fbdev_dma.c +4 -1
@@ -130,7 +130,10 @@ static int drm_fbdev_dma_helper_fb_probe info->flags |=FBINFO_READS_FAST ;/* signal caching */ info->screen_size = sizes->surface_height * fb->pitches[0 ]; info->screen_buffer = map.vaddr; - info->fix.smem_start =page_to_phys (virt_to_page (info->screen_buffer)); +if (!(info->flags &FBINFO_HIDE_SMEM_START )) { +if (!drm_WARN_ON (dev,is_vmalloc_addr (info->screen_buffer))) + info->fix.smem_start =page_to_phys (virt_to_page (info->screen_buffer)); + } info->fix.smem_len = info->screen_size;return 0 ;
Greg Kroah-Hartman
maintainerPATCH 182/222 drm/amdgpu: avoid using null object of framebuffer
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Julia Zhang <[email protected]>
commit bcfa48ff785bd121316592b131ff6531e3e696bb upstream.
Instead of using state->fb->obj[0] directly, get object from framebuffer by calling drm_gem_fb_get_obj() and return error code when object is null to avoid using null object of framebuffer.
--- drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-)
drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c +16 -2
@@ -3,6 +3,7 @@#include <drm/drm_atomic_helper.h> #include <drm/drm_edid.h> #include <drm/drm_simple_kms_helper.h> +#include <drm/drm_gem_framebuffer_helper.h> #include <drm/drm_vblank.h> #include "amdgpu.h"
@@ -314,7 +315,13 @@ static int amdgpu_vkms_prepare_fb(structreturn 0 ; } afb =to_amdgpu_framebuffer (new_state->fb); - obj = new_state->fb->obj[0 ]; + + obj =drm_gem_fb_get_obj (new_state->fb,0 ); +if (!obj) { +DRM_ERROR ("Failed to get obj from framebuffer\n" ); +return -EINVAL ; + } + rbo =gem_to_amdgpu_bo (obj); adev =amdgpu_ttm_adev (rbo->tbo.bdev);
@@ -368,12 +375,19 @@ static void amdgpu_vkms_cleanup_fb(struc struct drm_plane_state *old_state) {struct amdgpu_bo *rbo; +struct drm_gem_object *obj;int r;if (!old_state->fb)return ; - rbo =gem_to_amdgpu_bo (old_state->fb->obj[0 ]); + obj =drm_gem_fb_get_obj (old_state->fb,0 ); +if (!obj) { +DRM_ERROR ("Failed to get obj from framebuffer\n" ); +return ; + } + + rbo =gem_to_amdgpu_bo (obj); r =amdgpu_bo_reserve (rbo, false);if (unlikely (r)) {DRM_ERROR ("failed to reserve rbo before unpin\n" );
Greg Kroah-Hartman
maintainerPATCH 183/222 drm/i915/gt: Fix potential UAF by revoke of fence registers
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Janusz Krzysztofik <[email protected]>
commit 996c3412a06578e9d779a16b9e79ace18125ab50 upstream.
CI has been sporadically reporting the following issue triggered by igt@i915_selftest@live@hangcheck on ADL-P and similar machines:
<6> [414.049203] i915: Running intel_hangcheck_live_selftests/igt_reset_evict_fence
...
<6> [414.068804] i915 0000:00:02.0: [drm] GT0: GUC: submission enabled
<6> [414.068812] i915 0000:00:02.0: [drm] GT0: GUC: SLPC enabled
<3> [414.070354] Unable to pin Y-tiled fence; err:-4
<3> [414.071282] i915_vma_revoke_fence:301 GEM_BUG_ON(!i915_active_is_idle(&fence->active))
...
<4>[ 609.603992] ------------[ cut here ]------------ <2>[ 609.603995] kernel BUG at drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c:301! <4>[ 609.604003] invalid opcode: 0000 [#1] PREEMPT SMP NOPTI <4>[ 609.604006] CPU: 0 PID: 268 Comm: kworker/u64:3 Tainted: G U W 6.9.0-CI_DRM_14785-g1ba62f8cea9c+ #1 <4>[ 609.604008] Hardware name: Intel Corporation Alder Lake Client Platform/AlderLake-P DDR4 RVP, BIOS RPLPFWI1.R00.4035.A00.2301200723 01/20/2023 <4>[ 609.604010] Workqueue: i915 __i915_gem_free_work [i915] <4>[ 609.604149] RIP: 0010:i915_vma_revoke_fence+0x187/0x1f0 [i915] ... <4>[ 609.604271] Call Trace: <4>[ 609.604273] <TASK> ... <4>[ 609.604716] __i915_vma_evict+0x2e9/0x550 [i915] <4>[ 609.604852] __i915_vma_unbind+0x7c/0x160 [i915] <4>[ 609.604977] force_unbind+0x24/0xa0 [i915] <4>[ 609.605098] i915_vma_destroy+0x2f/0xa0 [i915] <4>[ 609.605210] __i915_gem_object_pages_fini+0x51/0x2f0 [i915] <4>[ 609.605330] __i915_gem_free_objects.isra.0+0x6a/0xc0 [i915] <4>[ 609.605440] process_scheduled_works+0x351/0x690
...
In the past, there were similar failures reported by CI from other IGT tests, observed on other platforms.
Before commit 63baf4f3d587 ("drm/i915/gt: Only wait for GPU activity before unbinding a GGTT fence"), i915_vma_revoke_fence() was waiting for
idleness of vma->active via fence_update(). That commit introducedvma->fence->active in order for the fence_update() to be able to wait selectively on that one instead of vma->active since only idleness of fence registers was needed. But then, another commit 0d86ee35097a ("drm/i915/gt: Make fence revocation unequivocal") replaced the call to fence_update() in i915_vma_revoke_fence() with only fence_write(), and also added that GEM_BUG_ON(!i915_active_is_idle(&fence->active)) in front. No justification was provided on why we might then expect idleness of vma->fence->active without first waiting on it.
The issue can be potentially caused by a race among revocation of fence registers on one side and sequential execution of signal callbacks invoked on completion of a request that was using them on the other, still processed in parallel to revocation of those fence registers. Fix it by waiting for idleness of vma->fence->active in i915_vma_revoke_fence().
--- drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c | 1 + 1 file changed, 1 insertion(+)
drivers/gpu/drm/i915/gt/intel_ggtt_fencing.c +1 -0
@@ -298,6 +298,7 @@ void i915_vma_revoke_fence(struct i915_vreturn ;GEM_BUG_ON (fence->vma != vma); +i915_active_wait (&fence->active);GEM_BUG_ON (!i915_active_is_idle (&fence->active));GEM_BUG_ON (atomic_read (&fence->pin_count));
Greg Kroah-Hartman
maintainerPATCH 184/222 drm/nouveau/dispnv04: fix null pointer dereference in nv17_tv_get_hd_modes
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ma Ke <[email protected]>
commit 6d411c8ccc0137a612e0044489030a194ff5c843 upstream.
In nv17_tv_get_hd_modes(), the return value of drm_mode_duplicate() is assigned to mode, which will lead to a possible NULL pointer dereference on failure of drm_mode_duplicate(). The same applies to drm_cvt_mode(). Add a check to avoid null pointer dereference.
--- drivers/gpu/drm/nouveau/dispnv04/tvnv17.c | 4 ++++ 1 file changed, 4 insertions(+)
drivers/gpu/drm/nouveau/dispnv04/tvnv17.c +4 -0
@@ -260,6 +260,8 @@ static int nv17_tv_get_hd_modes(struct dif (modes[i].hdisplay == output_mode->hdisplay && modes[i].vdisplay == output_mode->vdisplay) { mode =drm_mode_duplicate (encoder->dev, output_mode); +if (!mode) +continue ; mode->type |=DRM_MODE_TYPE_PREFERRED ; }else {
@@ -267,6 +269,8 @@ static int nv17_tv_get_hd_modes(struct d modes[i].vdisplay,60 , false, (output_mode->flags & DRM_MODE_FLAG_INTERLACE), false); +if (!mode) +continue ; }/* CVT modes are sometimes unsuitable... */
Greg Kroah-Hartman
maintainerPATCH 185/222 drm/amd/display: Send DP_TOTAL_LTTPR_CNT during detection if LTTPR is present
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Michael Strauss <[email protected]>
commit 2ec6c7f802332d1eff16f03e7c757f1543ee1183 upstream.
[WHY]
New register field added in DP2.1 SCR, needed for auxless ALPM
[HOW]
Echo value read from 0xF0007 back to sink
--- drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_capability.c | 10 +++++++++- drivers/gpu/drm/amd/display/include/dpcd_defs.h | 5 +++++ 2 files changed, 14 insertions(+), 1 deletion(-)
drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_capability.c +9 -1
@@ -1590,9 +1590,17 @@ static bool retrieve_link_cap(struct dc_return false; } -if (dp_is_lttpr_present (link)) +if (dp_is_lttpr_present (link)) {configure_lttpr_mode_transparent (link); +// Echo TOTAL_LTTPR_CNT back downstream +core_link_write_dpcd ( + link, +DP_TOTAL_LTTPR_CNT , + &link->dpcd_caps.lttpr_caps.phy_repeater_cnt, +sizeof (link->dpcd_caps.lttpr_caps.phy_repeater_cnt)); + } +/* Read DP tunneling information. */ status =dpcd_get_tunneling_device_data (link);
drivers/gpu/drm/amd/display/include/dpcd_defs.h +5 -0
@@ -177,4 +177,9 @@ enum dpcd_psr_sink_states {#define DP_SINK_PR_PIXEL_DEVIATION_PER_LINE 0x379#define DP_SINK_PR_MAX_NUMBER_OF_DEVIATION_LINE 0x37A +/* Remove once drm_dp_helper.h is updated upstream */ +#ifndef DP_TOTAL_LTTPR_CNT +#define DP_TOTAL_LTTPR_CNT 0xF000A/* 2.1 */ +#endif +#endif /* __DAL_DPCD_DEFS_H__ */
Greg Kroah-Hartman
maintainerPATCH 186/222 drm/amdgpu/atomfirmware: fix parsing of vram_info
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Alex Deucher <[email protected]>
commit f6f49dda49db72e7a0b4ca32c77391d5ff5ce232 upstream.
v3.x changed the how vram width was encoded. The previous implementation actually worked correctly for most boards. Fix the implementation to work correctly everywhere.
This fixes the vram width reported in the kernel log on some boards.
--- drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c +1 -1
@@ -399,7 +399,7 @@ amdgpu_atomfirmware_get_vram_info(struct mem_channel_number = vram_info->v30.channel_num; mem_channel_width = vram_info->v30.channel_width;if (vram_width) - *vram_width = mem_channel_number * (1 << mem_channel_width); + *vram_width = mem_channel_number *16 ;break ;default :return -EINVAL ;
Greg Kroah-Hartman
maintainerPATCH 187/222 io_uring: signal SQPOLL task_work with TWA_SIGNAL_NO_IPI
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jens Axboe <[email protected]>
commit dbcabac138fdfc730ba458ed2199ff1f29a271fc upstream.
Before SQPOLL was transitioned to managing its own task_work, the core used TWA_SIGNAL_NO_IPI to ensure that task_work was processed. If not, we can't be sure that all task_work is processed at SQPOLL thread exit time.
--- io_uring/io_uring.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
io_uring/io_uring.c +2 -2
@@ -1374,8 +1374,8 @@ static void io_req_normal_work_add(strucif (ctx->flags &IORING_SETUP_SQPOLL ) {struct io_sq_data *sqd = ctx->sq_data; -if (wq_has_sleeper (&sqd->wait)) -wake_up (&sqd->wait); +if (sqd->thread) +__set_notify_signal (sqd->thread);return ; }
Greg Kroah-Hartman
maintainerPATCH 188/222 batman-adv: Dont accept TT entries for out-of-spec VIDs
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Sven Eckelmann <[email protected]>
commit 537a350d14321c8cca5efbf0a33a404fec3a9f9e upstream.
The internal handling of VLAN IDs in batman-adv is only specified for following encodings:
* VLAN is used
- bit 15 is 1
- bit 11 - bit 0 is the VLAN ID (0-4095)
- remaining bits are 0
* No VLAN is used
- bit 15 is 0
- remaining bits are 0
batman-adv was only preparing new translation table entries (based on its soft interface information) using this encoding format. But the receive path was never checking if entries in the roam or TT TVLVs were also following this encoding.
It was therefore possible to create more than the expected maximum of 4096
+ 1 entries in the originator VLAN list. Simply by setting the "remaining bits" to "random" values in corresponding TVLV.
--- net/batman-adv/originator.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+)
net/batman-adv/originator.c +27 -0
@@ -12,6 +12,7 @@#include <linux/errno.h> #include <linux/etherdevice.h> #include <linux/gfp.h> +#include <linux/if_vlan.h> #include <linux/jiffies.h> #include <linux/kref.h> #include <linux/list.h>
@@ -132,6 +133,29 @@ batadv_orig_node_vlan_get(struct batadv_ }/** +* batadv_vlan_id_valid() - check if vlan id is in valid batman-adv encoding +* @vid: the VLAN identifier +* +* Return: true when either no vlan is set or if VLAN is in correct range, +* false otherwise +*/ +static bool batadv_vlan_id_valid (unsigned short vid) +{ +unsigned short non_vlan = vid & ~(BATADV_VLAN_HAS_TAG |VLAN_VID_MASK ); + +if (vid ==0 ) +return true; + +if (!(vid &BATADV_VLAN_HAS_TAG )) +return false; + +if (non_vlan) +return false; + +return true; +} + +/** * batadv_orig_node_vlan_new() - search and possibly create an orig_node_vlan * object * @orig_node: the originator serving the VLAN
@@ -149,6 +173,9 @@ batadv_orig_node_vlan_new(struct batadv_ {struct batadv_orig_node_vlan *vlan; +if (!batadv_vlan_id_valid (vid)) +return NULL ; +spin_lock_bh (&orig_node->vlan_list_lock);/* first look if an object for this vid already exists */
Greg Kroah-Hartman
maintainerPATCH 189/222 can: mcp251xfd: fix infinite loop when xmit fails
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Vitor Soares <[email protected]>
commit d8fb63e46c884c898a38f061c2330f7729e75510 upstream.
When the mcp251xfd_start_xmit() function fails, the driver stops processing messages, and the interrupt routine does not return, running indefinitely even after killing the running application.
Error messages:
[ 441.298819] mcp251xfd spi2.0 can0: ERROR in mcp251xfd_start_xmit: -16 [ 441.306498] mcp251xfd spi2.0 can0: Transmit Event FIFO buffer not empty. (seq=0x000017c7, tef_tail=0x000017cf, tef_head=0x000017d0, tx_head=0x000017d3).
... and repeat forever.
The issue can be triggered when multiple devices share the same SPI interface. And there is concurrent access to the bus.
The problem occurs because tx_ring->head increments even if mcp251xfd_start_xmit() fails. Consequently, the driver skips one TX package while still expecting a response in mcp251xfd_handle_tefif_one().
Resolve the issue by starting a workqueue to write the tx obj synchronously if err = -EBUSY. In case of another error, decrement tx_ring->head, remove skb from the echo stack, and drop the message.
--- drivers/net/can/spi/mcp251xfd/mcp251xfd-core.c | 14 +++++- drivers/net/can/spi/mcp251xfd/mcp251xfd-tx.c | 55 +++++++++++++++++++++---- drivers/net/can/spi/mcp251xfd/mcp251xfd.h | 5 ++ 3 files changed, 65 insertions(+), 9 deletions(-)
drivers/net/can/spi/mcp251xfd/mcp251xfd-core.c +13 -1
@@ -1618,11 +1618,20 @@ static int mcp251xfd_open(struct net_devclear_bit (MCP251XFD_FLAGS_DOWN , priv->flags);can_rx_offload_enable (&priv->offload); + priv->wq =alloc_ordered_workqueue ("%s-mcp251xfd_wq" , +WQ_FREEZABLE |WQ_MEM_RECLAIM , +dev_name (&spi->dev)); +if (!priv->wq) { + err = -ENOMEM ; + goto out_can_rx_offload_disable; + } +INIT_WORK (&priv->tx_work, mcp251xfd_tx_obj_write_sync); + err =request_threaded_irq (spi->irq,NULL , mcp251xfd_irq,IRQF_SHARED |IRQF_ONESHOT ,dev_name (&spi->dev), priv);if (err) - goto out_can_rx_offload_disable; + goto out_destroy_workqueue; err =mcp251xfd_chip_interrupts_enable (priv);if (err)
@@ -1634,6 +1643,8 @@ static int mcp251xfd_open(struct net_dev out_free_irq:free_irq (spi->irq, priv); + out_destroy_workqueue: +destroy_workqueue (priv->wq); out_can_rx_offload_disable:can_rx_offload_disable (&priv->offload);set_bit (MCP251XFD_FLAGS_DOWN , priv->flags);
@@ -1661,6 +1672,7 @@ static int mcp251xfd_stop(struct net_devhrtimer_cancel (&priv->tx_irq_timer);mcp251xfd_chip_interrupts_disable (priv);free_irq (ndev->irq, priv); +destroy_workqueue (priv->wq);can_rx_offload_disable (&priv->offload);mcp251xfd_timestamp_stop (priv);mcp251xfd_chip_stop (priv,CAN_STATE_STOPPED );
drivers/net/can/spi/mcp251xfd/mcp251xfd-tx.c +47 -8
79 lines not on this page · raw message
drivers/net/can/spi/mcp251xfd/mcp251xfd.h +5 -0
@@ -633,6 +633,10 @@ struct mcp251xfd_priv {struct mcp251xfd_rx_ring *rx[MCP251XFD_FIFO_RX_NUM ];struct mcp251xfd_tx_ring tx[MCP251XFD_FIFO_TX_NUM ]; +struct workqueue_struct *wq; +struct work_struct tx_work; +struct mcp251xfd_tx_obj *tx_work_obj; +DECLARE_BITMAP (flags, __MCP251XFD_FLAGS_SIZE__);u8 rx_ring_num;
@@ -952,6 +956,7 @@ void mcp251xfd_skb_set_timestamp(const svoid mcp251xfd_timestamp_init (struct mcp251xfd_priv *priv);void mcp251xfd_timestamp_stop (struct mcp251xfd_priv *priv); +void mcp251xfd_tx_obj_write_sync (struct work_struct *work);netdev_tx_t mcp251xfd_start_xmit (struct sk_buff *skb,struct net_device *ndev);
Greg Kroah-Hartman
maintainerPATCH 190/222 ata: ahci: Clean up sysfs file on error
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Niklas Cassel <[email protected]>
commit eeb25a09c5e0805d92e4ebd12c4b0ad0df1b0295 upstream.
.probe() (ahci_init_one()) calls sysfs_add_file_to_group(), however, if probe() fails after this call, we currently never call sysfs_remove_file_from_group().
(The sysfs_remove_file_from_group() call in .remove() (ahci_remove_one()) does not help, as .remove() is not called on .probe() error.)
Thus, if probe() fails after the sysfs_add_file_to_group() call, the next time we insmod the module we will get:
sysfs: cannot create duplicate filename '/devices/pci0000:00/0000:00:04.0/remapped_nvme'
CPU: 11 PID: 954 Comm: modprobe Not tainted 6.10.0-rc5 #43 Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.3-2.fc40 04/01/2014 Call Trace: <TASK> dump_stack_lvl+0x5d/0x80 sysfs_warn_dup.cold+0x17/0x23 sysfs_add_file_mode_ns+0x11a/0x130 sysfs_add_file_to_group+0x7e/0xc0 ahci_init_one+0x31f/0xd40 [ahci]
--- drivers/ata/ahci.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-)
drivers/ata/ahci.c +12 -5
@@ -1975,8 +1975,10 @@ static int ahci_init_one(struct pci_dev n_ports =max (ahci_nr_ports (hpriv->cap),fls (hpriv->port_map)); host =ata_host_alloc_pinfo (&pdev->dev, ppi, n_ports); -if (!host) -return -ENOMEM ; +if (!host) { + rc = -ENOMEM ; + goto err_rm_sysfs_file; + } host->private_data = hpriv;if (ahci_init_msi (pdev, n_ports, hpriv) <0 ) {
@@ -2031,11 +2033,11 @@ static int ahci_init_one(struct pci_dev/* initialize adapter */ rc =ahci_configure_dma_masks (pdev, hpriv);if (rc) -return rc; + goto err_rm_sysfs_file; rc =ahci_pci_reset_controller (host);if (rc) -return rc; + goto err_rm_sysfs_file;ahci_pci_init_controller (host);ahci_pci_print_info (host);
@@ -2044,10 +2046,15 @@ static int ahci_init_one(struct pci_dev rc =ahci_host_activate (host, &ahci_sht);if (rc) -return rc; + goto err_rm_sysfs_file;pm_runtime_put_noidle (&pdev->dev);return 0 ; + +err_rm_sysfs_file: +sysfs_remove_file_from_group (&pdev->dev.kobj, + &dev_attr_remapped_nvme.attr,NULL ); +return rc; }static void ahci_shutdown_one (struct pci_dev *pdev)
Greg Kroah-Hartman
maintainerPATCH 191/222 ata: libata-core: Add ATA_HORKAGE_NOLPM for all Crucial BX SSD1 models
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Niklas Cassel <[email protected]>
commit 1066fe825987da007669d7c25306b4dbb50bd7dd upstream.
We got another report that CT1000BX500SSD1 does not work with LPM.
If you look in libata-core.c, we have six different Crucial devices that are marked with ATA_HORKAGE_NOLPM. This model would have been the seventh. (This quirk is used on Crucial models starting with both CT* and Crucial_CT*)
It is obvious that this vendor does not have a great history of supporting LPM properly, therefore, add the ATA_HORKAGE_NOLPM quirk for all Crucial BX SSD1 models.
--- drivers/ata/libata-core.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
drivers/ata/libata-core.c +1 -2
@@ -4181,8 +4181,7 @@ static const struct ata_blacklist_entry { "PIONEER BD-RW BDR-205", NULL, ATA_HORKAGE_NOLPM },/* Crucial devices with broken LPM support */ - { "CT500BX100SSD1", NULL, ATA_HORKAGE_NOLPM }, - { "CT240BX500SSD1", NULL, ATA_HORKAGE_NOLPM }, + { "CT*0BX*00SSD1", NULL, ATA_HORKAGE_NOLPM },/* 512GB MX100 with MU01 firmware has both queued TRIM and LPM issues */ { "Crucial_CT512MX100*", "MU01", ATA_HORKAGE_NO_NCQ_TRIM |
Greg Kroah-Hartman
maintainerPATCH 192/222 ata: libata-core: Fix double free on error
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Niklas Cassel <[email protected]>
commit ab9e0c529eb7cafebdd31fe1644524e80a48b05d upstream.
If e.g. the ata_port_alloc() call in ata_host_alloc() fails, we will jump to the err_out label, which will call devres_release_group(). devres_release_group() will trigger a call to ata_host_release(). ata_host_release() calls kfree(host), so executing the kfree(host) in ata_host_alloc() will lead to a double free:
kernel BUG at mm/slub.c:553!
Oops: invalid opcode: 0000 [#1] PREEMPT SMP NOPTI CPU: 11 PID: 599 Comm: (udev-worker) Not tainted 6.10.0-rc5 #47 Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.3-2.fc40 04/01/2014 RIP: 0010:kfree+0x2cf/0x2f0 Code: 5d 41 5e 41 5f 5d e9 80 d6 ff ff 4d 89 f1 41 b8 01 00 00 00 48 89 d9 48 89 da RSP: 0018:ffffc90000f377f0 EFLAGS: 00010246 RAX: ffff888112b1f2c0 RBX: ffff888112b1f2c0 RCX: ffff888112b1f320 RDX: 000000000000400b RSI: ffffffffc02c9de5 RDI: ffff888112b1f2c0 RBP: ffffc90000f37830 R08: 0000000000000000 R09: 0000000000000000 R10: ffffc90000f37610 R11: 617461203a736b6e R12: ffffea00044ac780 R13: ffff888100046400 R14: ffffffffc02c9de5 R15: 0000000000000006 FS: 00007f2f1cabe980(0000) GS:ffff88813b380000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 00007f2f1c3acf75 CR3: 0000000111724000 CR4: 0000000000750ef0 PKRU: 55555554 Call Trace: <TASK> ? __die_body.cold+0x19/0x27 ? die+0x2e/0x50 ? do_trap+0xca/0x110 ? do_error_trap+0x6a/0x90 ? kfree+0x2cf/0x2f0 ? exc_invalid_op+0x50/0x70 ? kfree+0x2cf/0x2f0 ? asm_exc_invalid_op+0x1a/0x20 ? ata_host_alloc+0xf5/0x120 [libata] ? ata_host_alloc+0xf5/0x120 [libata] ? kfree+0x2cf/0x2f0 ata_host_alloc+0xf5/0x120 [libata] ata_host_alloc_pinfo+0x14/0xa0 [libata] ahci_init_one+0x6c9/0xd20 [ahci]
Ensure that we will not call kfree(host) twice, by performing the kfree() only if the devres_open_group() call failed.
--- drivers/ata/libata-core.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
drivers/ata/libata-core.c +4 -4
@@ -5621,8 +5621,10 @@ struct ata_host *ata_host_alloc(struct dif (!host)return NULL ; -if (!devres_open_group (dev,NULL ,GFP_KERNEL )) - goto err_free; +if (!devres_open_group (dev,NULL ,GFP_KERNEL )) { +kfree (host); +return NULL ; + } dr =devres_alloc (ata_devres_release,0 ,GFP_KERNEL );if (!dr)
@@ -5654,8 +5656,6 @@ struct ata_host *ata_host_alloc(struct d err_out:devres_release_group (dev,NULL ); - err_free: -kfree (host);return NULL ; }EXPORT_SYMBOL_GPL (ata_host_alloc);
Greg Kroah-Hartman
maintainerPATCH 193/222 ftruncate: pass a signed offset
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Arnd Bergmann <[email protected]>
commit 4b8e88e563b5f666446d002ad0dc1e6e8e7102b0 upstream.
The old ftruncate() syscall, using the 32-bit off_t misses a sign extension when called in compat mode on 64-bit architectures. As a result, passing a negative length accidentally succeeds in truncating to file size between 2GiB and 4GiB.
Changing the type of the compat syscall to the signed compat_off_t changes the behavior so it instead returns -EINVAL.
The native entry point, the truncate() syscall and the corresponding loff_t based variants are all correct already and do not suffer from this mistake.
--- fs/open.c | 4 ++-- include/linux/compat.h | 2 +- include/linux/syscalls.h | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-)
fs/open.c +2 -2
@@ -202,13 +202,13 @@ long do_sys_ftruncate(unsigned int fd, lreturn error; } -SYSCALL_DEFINE2(ftruncate, unsigned int, fd, unsigned long, length) +SYSCALL_DEFINE2(ftruncate, unsigned int, fd, off_t, length) {return do_sys_ftruncate (fd, length,1 ); }#ifdef CONFIG_COMPAT -COMPAT_SYSCALL_DEFINE2(ftruncate, unsigned int, fd, compat_ulong_t, length) +COMPAT_SYSCALL_DEFINE2(ftruncate, unsigned int, fd, compat_off_t, length) {return do_sys_ftruncate (fd, length,1 ); }
include/linux/compat.h +1 -1
@@ -608,7 +608,7 @@ asmlinkage long compat_sys_fstatfs(unsigasmlinkage long compat_sys_fstatfs64 (unsigned int fd,compat_size_t sz,struct compat_statfs64 __user *buf);asmlinkage long compat_sys_truncate (const char __user *,compat_off_t ); -asmlinkage long compat_sys_ftruncate (unsigned int ,compat_ulong_t ); +asmlinkage long compat_sys_ftruncate (unsigned int ,compat_off_t );/* No generic prototype for truncate64, ftruncate64, fallocate */ asmlinkage long compat_sys_openat (int dfd,const char __user *filename,int flags,umode_t mode);
include/linux/syscalls.h +1 -1
@@ -418,7 +418,7 @@ asmlinkage long sys_listmount(const stru u64 __user *mnt_ids, size_t nr_mnt_ids, unsigned int flags);asmlinkage long sys_truncate (const char __user *path,long length); -asmlinkage long sys_ftruncate (unsigned int fd,unsigned long length); +asmlinkage long sys_ftruncate (unsigned int fd,off_t length);#if BITS_PER_LONG ==32 asmlinkage long sys_truncate64 (const char __user *path,loff_t length);asmlinkage long sys_ftruncate64 (unsigned int fd,loff_t length);
Greg Kroah-Hartman
maintainerPATCH 194/222 syscalls: fix compat_sys_io_pgetevents_time64 usage
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Arnd Bergmann <[email protected]>
commit d3882564a77c21eb746ba5364f3fa89b88de3d61 upstream.
Using sys_io_pgetevents() as the entry point for compat mode tasks works almost correctly, but misses the sign extension for the min_nr and nr arguments.
This was addressed on parisc by switching to compat_sys_io_pgetevents_time64() in commit 6431e92fc827 ("parisc:io_pgetevents_time64() needs compat syscall in 32-bit compat mode"), as well as by using more sophisticated system call wrappers on x86 and s390. However, arm64, mips, powerpc, sparc and riscv still have the same bug.
Change all of them over to use compat_sys_io_pgetevents_time64() like parisc already does. This was clearly the intention when the function was originally added, but it got hooked up incorrectly in the tables.
--- arch/arm64/include/asm/unistd32.h | 2 +- arch/mips/kernel/syscalls/syscall_n32.tbl | 2 +- arch/mips/kernel/syscalls/syscall_o32.tbl | 2 +- arch/powerpc/kernel/syscalls/syscall.tbl | 2 +- arch/s390/kernel/syscalls/syscall.tbl | 2 +- arch/sparc/kernel/syscalls/syscall.tbl | 2 +- arch/x86/entry/syscalls/syscall_32.tbl | 2 +- include/uapi/asm-generic/unistd.h | 2 +- kernel/sys_ni.c | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-)
arch/arm64/include/asm/unistd32.h +1 -1
@@ -840,7 +840,7 @@ __SYSCALL(__NR_pselect6_time64, compat_s#define __NR_ppoll_time64 414 __SYSCALL(__NR_ppoll_time64, compat_sys_ppoll_time64)#define __NR_io_pgetevents_time64 416 -__SYSCALL(__NR_io_pgetevents_time64, sys_io_pgetevents) +__SYSCALL(__NR_io_pgetevents_time64, compat_sys_io_pgetevents_time64)#define __NR_recvmmsg_time64 417 __SYSCALL(__NR_recvmmsg_time64, compat_sys_recvmmsg_time64)#define __NR_mq_timedsend_time64 418
arch/mips/kernel/syscalls/syscall_n32.tbl +1 -1
@@ -354,7 +354,7 @@ 412 n32 utimensat_time64 sys_utimensat 413 n32 pselect6_time64 compat_sys_pselect6_time64 414 n32 ppoll_time64 compat_sys_ppoll_time64 -416 n32 io_pgetevents_time64 sys_io_pgetevents +416 n32 io_pgetevents_time64 compat_sys_io_pgetevents_time64 417 n32 recvmmsg_time64 compat_sys_recvmmsg_time64 418 n32 mq_timedsend_time64 sys_mq_timedsend 419 n32 mq_timedreceive_time64 sys_mq_timedreceive
arch/mips/kernel/syscalls/syscall_o32.tbl +1 -1
@@ -403,7 +403,7 @@ 412 o32 utimensat_time64 sys_utimensat sys_utimensat 413 o32 pselect6_time64 sys_pselect6 compat_sys_pselect6_time64 414 o32 ppoll_time64 sys_ppoll compat_sys_ppoll_time64 -416 o32 io_pgetevents_time64 sys_io_pgetevents sys_io_pgetevents +416 o32 io_pgetevents_time64 sys_io_pgetevents compat_sys_io_pgetevents_time64 417 o32 recvmmsg_time64 sys_recvmmsg compat_sys_recvmmsg_time64 418 o32 mq_timedsend_time64 sys_mq_timedsend sys_mq_timedsend 419 o32 mq_timedreceive_time64 sys_mq_timedreceive sys_mq_timedreceive
arch/powerpc/kernel/syscalls/syscall.tbl +1 -1
@@ -506,7 +506,7 @@ 412 32 utimensat_time64 sys_utimensat sys_utimensat 413 32 pselect6_time64 sys_pselect6 compat_sys_pselect6_time64 414 32 ppoll_time64 sys_ppoll compat_sys_ppoll_time64 -416 32 io_pgetevents_time64 sys_io_pgetevents sys_io_pgetevents +416 32 io_pgetevents_time64 sys_io_pgetevents compat_sys_io_pgetevents_time64 417 32 recvmmsg_time64 sys_recvmmsg compat_sys_recvmmsg_time64 418 32 mq_timedsend_time64 sys_mq_timedsend sys_mq_timedsend 419 32 mq_timedreceive_time64 sys_mq_timedreceive sys_mq_timedreceive
arch/s390/kernel/syscalls/syscall.tbl +1 -1
@@ -418,7 +418,7 @@ 412 32 utimensat_time64 - sys_utimensat 413 32 pselect6_time64 - compat_sys_pselect6_time64 414 32 ppoll_time64 - compat_sys_ppoll_time64 -416 32 io_pgetevents_time64 - sys_io_pgetevents +416 32 io_pgetevents_time64 - compat_sys_io_pgetevents_time64 417 32 recvmmsg_time64 - compat_sys_recvmmsg_time64 418 32 mq_timedsend_time64 - sys_mq_timedsend 419 32 mq_timedreceive_time64 - sys_mq_timedreceive
arch/sparc/kernel/syscalls/syscall.tbl +1 -1
@@ -461,7 +461,7 @@ 412 32 utimensat_time64 sys_utimensat sys_utimensat 413 32 pselect6_time64 sys_pselect6 compat_sys_pselect6_time64 414 32 ppoll_time64 sys_ppoll compat_sys_ppoll_time64 -416 32 io_pgetevents_time64 sys_io_pgetevents sys_io_pgetevents +416 32 io_pgetevents_time64 sys_io_pgetevents compat_sys_io_pgetevents_time64 417 32 recvmmsg_time64 sys_recvmmsg compat_sys_recvmmsg_time64 418 32 mq_timedsend_time64 sys_mq_timedsend sys_mq_timedsend 419 32 mq_timedreceive_time64 sys_mq_timedreceive sys_mq_timedreceive
arch/x86/entry/syscalls/syscall_32.tbl +1 -1
@@ -420,7 +420,7 @@ 412 i386 utimensat_time64 sys_utimensat 413 i386 pselect6_time64 sys_pselect6 compat_sys_pselect6_time64 414 i386 ppoll_time64 sys_ppoll compat_sys_ppoll_time64 -416 i386 io_pgetevents_time64 sys_io_pgetevents +416 i386 io_pgetevents_time64 sys_io_pgetevents compat_sys_io_pgetevents_time64 417 i386 recvmmsg_time64 sys_recvmmsg compat_sys_recvmmsg_time64 418 i386 mq_timedsend_time64 sys_mq_timedsend 419 i386 mq_timedreceive_time64 sys_mq_timedreceive
include/uapi/asm-generic/unistd.h +1 -1
@@ -737,7 +737,7 @@ __SC_COMP(__NR_pselect6_time64, sys_psel#define __NR_ppoll_time64 414 __SC_COMP(__NR_ppoll_time64, sys_ppoll, compat_sys_ppoll_time64)#define __NR_io_pgetevents_time64 416 -__SYSCALL(__NR_io_pgetevents_time64, sys_io_pgetevents) +__SC_COMP(__NR_io_pgetevents_time64, sys_io_pgetevents, compat_sys_io_pgetevents_time64)#define __NR_recvmmsg_time64 417 __SC_COMP(__NR_recvmmsg_time64, sys_recvmmsg, compat_sys_recvmmsg_time64)#define __NR_mq_timedsend_time64 418
kernel/sys_ni.c +1 -1
@@ -46,8 +46,8 @@ COND_SYSCALL(io_getevents_time32);COND_SYSCALL (io_getevents);COND_SYSCALL (io_pgetevents_time32);COND_SYSCALL (io_pgetevents); -COND_SYSCALL_COMPAT (io_pgetevents_time32);COND_SYSCALL_COMPAT (io_pgetevents); +COND_SYSCALL_COMPAT (io_pgetevents_time64);COND_SYSCALL (io_uring_setup);COND_SYSCALL (io_uring_enter);COND_SYSCALL (io_uring_register);
Greg Kroah-Hartman
maintainerPATCH 195/222 syscalls: fix sys_fanotify_mark prototype
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Arnd Bergmann <[email protected]>
[ Upstream commit 63e2f40c9e3187641afacde4153f54b3ee4dbc8c ]
My earlier fix missed an incorrect function prototype that shows up on native 32-bit builds:
In file included from fs/notify/fanotify/fanotify_user.c:14:include/linux/syscalls.h:248:25: error: conflicting types for 'sys_fanotify_mark'; have 'long int(int, unsigned int, u32, u32, int, const char *)' {aka 'long int(int, unsigned int, unsigned int, unsigned int, int, const char *)'}
1924 | SYSCALL32_DEFINE6(fanotify_mark,
| ^~~~~~~~~~~~~~~~~
include/linux/syscalls.h:862:17: note: previous declaration of 'sys_fanotify_mark' with type 'long int(int, unsigned int, u64, int, const char *)' {aka 'long int(int, unsigned int, long long unsigned int, int, const char *)'}
On x86 and powerpc, the prototype is also wrong but hidden in an #ifdef, so it never caused problems.
Add another alternative declaration that matches the conditional function definition.
--- include/linux/syscalls.h | 6 ++++++ 1 file changed, 6 insertions(+)
include/linux/syscalls.h +6 -0
@@ -858,9 +858,15 @@ asmlinkage long sys_prlimit64(pid_t pid, unsigned int resource,const struct rlimit64 __user *new_rlim, struct rlimit64 __user *old_rlim);asmlinkage long sys_fanotify_init (unsigned int flags,unsigned int event_f_flags); +#if defined(CONFIG_ARCH_SPLIT_ARG64 ) +asmlinkage long sys_fanotify_mark (int fanotify_fd,unsigned int flags, +unsigned int mask_1,unsigned int mask_2, +int dfd,const char __user * pathname); +#else asmlinkage long sys_fanotify_mark (int fanotify_fd,unsigned int flags,u64 mask,int fd,const char __user *pathname); +#endif asmlinkage long sys_name_to_handle_at (int dfd,const char __user *name,struct file_handle __user *handle,int __user *mnt_id,int flag);
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 196/222 bcachefs: Fix sb_field_downgrade validation
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Kent Overstreet <[email protected]>
commit 692aa7a54b2b28d59f24b3bf8250837805484b99 upstream.
- bch2_sb_downgrade_validate() wasn't checking for a downgrade entry extending past the end of the superblock section
- for_each_downgrade_entry() is used in to_text() and needs to work on malformed input; it also was missing a check for a field extending past the end of the section
--- fs/bcachefs/sb-downgrade.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)
fs/bcachefs/sb-downgrade.c +5 -2
@@ -134,7 +134,8 @@ downgrade_entry_next_c(const struct bch_#define for_each_downgrade_entry (_d, _i) \ for (const struct bch_sb_field_downgrade_entry *_i = (_d)->entries; \ (void *) _i < vstruct_end(&(_d)->field) && \ - (void *) &_i->errors[0] < vstruct_end(&(_d)->field); \ + (void *) &_i->errors[0] <= vstruct_end(&(_d)->field) && \ + (void *) downgrade_entry_next_c(_i) <= vstruct_end(&(_d)->field); \ _i = downgrade_entry_next_c(_i)) static int bch2_sb_downgrade_validate(struct bch_sb *sb, struct bch_sb_field *f,
@@ -142,7 +143,9 @@ static int bch2_sb_downgrade_validate(st {struct bch_sb_field_downgrade *e =field_to_type (f, downgrade); -for_each_downgrade_entry (e, i) { +for (const struct bch_sb_field_downgrade_entry *i = e->entries; + (void *) i <vstruct_end (&e->field); + i =downgrade_entry_next_c (i)) {if (BCH_VERSION_MAJOR (le16_to_cpu (i->version)) !=BCH_VERSION_MAJOR (le16_to_cpu (sb->version))) { prt_printf(err, "downgrade entry with mismatched major version (%u != %u)",
Greg Kroah-Hartman
maintainerPATCH 197/222 bcachefs: Fix sb-downgrade validation
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Kent Overstreet <[email protected]>
commit 9242a34b760648b722f4958749ad83ef7d0f7525 upstream.
Superblock downgrade entries are only two byte aligned, but section sizes are 8 byte aligned, which means we have to be careful about overrun checks; an entry that crosses the end of the section is allowed (and ignored) as long as it has zero errors.
--- fs/bcachefs/sb-downgrade.c | 8 ++++++++ 1 file changed, 8 insertions(+)
fs/bcachefs/sb-downgrade.c +8 -0
@@ -146,6 +146,14 @@ static int bch2_sb_downgrade_validate(stfor (const struct bch_sb_field_downgrade_entry *i = e->entries; (void *) i <vstruct_end (&e->field); i =downgrade_entry_next_c (i)) { +/* +* Careful: sb_field_downgrade_entry is only 2 byte aligned, but +* section sizes are 8 byte aligned - an empty entry spanning +* the end of the section is allowed (and ignored): +*/ +if ((void *) &i->errors[0 ] >vstruct_end (&e->field)) +break ; +if (BCH_VERSION_MAJOR (le16_to_cpu (i->version)) !=BCH_VERSION_MAJOR (le16_to_cpu (sb->version))) { prt_printf(err, "downgrade entry with mismatched major version (%u != %u)",
Greg Kroah-Hartman
maintainerPATCH 198/222 bcachefs: Fix bch2_sb_downgrade_update()
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Kent Overstreet <[email protected]>
commit ddd118ab45e848b1956ef8c8ef84963a554b5b58 upstream.
Missing enum conversion
--- fs/bcachefs/sb-downgrade.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
fs/bcachefs/sb-downgrade.c +1 -1
@@ -225,7 +225,7 @@ int bch2_sb_downgrade_update(struct bch_ dst = (void *) &darray_top (table); dst->version =cpu_to_le16 (src->version); - dst->recovery_passes[0 ] =cpu_to_le64 (src->recovery_passes); + dst->recovery_passes[0 ] =cpu_to_le64 (bch2_recovery_passes_to_stable (src->recovery_passes)); dst->recovery_passes[1 ] =0 ; dst->nr_errors =cpu_to_le16 (src->nr_errors);for (unsigned i =0 ; i < src->nr_errors; i++)
Greg Kroah-Hartman
maintainerPATCH 199/222 bcachefs: Fix setting of downgrade recovery passes/errors
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Kent Overstreet <[email protected]>
commit 247c056bde2ebc9fad2fc62332dc7cc99b58d720 upstream.
bch2_check_version_downgrade() was setting c->sb.version, which bch2_sb_set_downgrade() expects to be at the previous version; and it shouldn't even have been set directly because c->sb.version is updated by write_super().
--- fs/bcachefs/super-io.c | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-)
fs/bcachefs/super-io.c +3 -9
@@ -1123,18 +1123,12 @@ bool bch2_check_version_downgrade(struct* c->sb will be checked before we write the superblock, so update it as * well: */ -if (BCH_SB_VERSION_UPGRADE_COMPLETE (c->disk_sb.sb) > bcachefs_metadata_version_current) { +if (BCH_SB_VERSION_UPGRADE_COMPLETE (c->disk_sb.sb) > bcachefs_metadata_version_current)SET_BCH_SB_VERSION_UPGRADE_COMPLETE (c->disk_sb.sb, bcachefs_metadata_version_current); - c->sb.version_upgrade_complete = bcachefs_metadata_version_current; - } -if (c->sb.version > bcachefs_metadata_version_current) { +if (c->sb.version > bcachefs_metadata_version_current) c->disk_sb.sb->version =cpu_to_le16 (bcachefs_metadata_version_current); - c->sb.version = bcachefs_metadata_version_current; - } -if (c->sb.version_min > bcachefs_metadata_version_current) { +if (c->sb.version_min > bcachefs_metadata_version_current) c->disk_sb.sb->version_min =cpu_to_le16 (bcachefs_metadata_version_current); - c->sb.version_min = bcachefs_metadata_version_current; - } c->disk_sb.sb->compat[0 ] &=cpu_to_le64 ((1ULL <<BCH_COMPAT_NR ) -1 );return ret; }
Greg Kroah-Hartman
maintainerPATCH 200/222 bcachefs: btree_gc can now handle unknown btrees
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Kent Overstreet <[email protected]>
commit 088d0de81220a74d7d553febb81656927f10bb16 upstream.
Compatibility fix - we no longer have a separate table for which order gc walks btrees in, and special case the stripes btree directly.
--- fs/bcachefs/bcachefs.h | 44 --------------------------------------- fs/bcachefs/btree_gc.c | 15 ++++++------- fs/bcachefs/btree_gc.h | 48 +++++++++++++++++++------------------------ fs/bcachefs/btree_gc_types.h | 29 +++++++++++++++++++++++++ fs/bcachefs/ec.c | 2 - 5 files changed, 60 insertions(+), 78 deletions(-) create mode 100644 fs/bcachefs/btree_gc_types.h
fs/bcachefs/bcachefs.h +1 -43
@@ -455,6 +455,7 @@ enum bch_time_stats { };#include "alloc_types.h" +#include "btree_gc_types.h" #include "btree_types.h" #include "btree_node_scan_types.h" #include "btree_write_buffer_types.h"
@@ -485,49 +486,6 @@ enum bch_time_stats {struct btree ; -enum gc_phase { -GC_PHASE_NOT_RUNNING , -GC_PHASE_START , -GC_PHASE_SB , - - GC_PHASE_BTREE_stripes, - GC_PHASE_BTREE_extents, - GC_PHASE_BTREE_inodes, - GC_PHASE_BTREE_dirents, - GC_PHASE_BTREE_xattrs, - GC_PHASE_BTREE_alloc, - GC_PHASE_BTREE_quotas, - GC_PHASE_BTREE_reflink, - GC_PHASE_BTREE_subvolumes, - GC_PHASE_BTREE_snapshots, - GC_PHASE_BTREE_lru, - GC_PHASE_BTREE_freespace, - GC_PHASE_BTREE_need_discard, - GC_PHASE_BTREE_backpointers, - GC_PHASE_BTREE_bucket_gens, - GC_PHASE_BTREE_snapshot_trees, - GC_PHASE_BTREE_deleted_inodes, - GC_PHASE_BTREE_logged_ops, - GC_PHASE_BTREE_rebalance_work, - GC_PHASE_BTREE_subvolume_children, - -GC_PHASE_PENDING_DELETE , -}; - -struct gc_pos { -enum gc_phase phase; -struct bpos pos; -unsigned level; -}; - -struct reflink_gc { -u64 offset; -u32 size; -u32 refcount; -}; - -typedef GENRADIX (struct reflink_gc )reflink_gc_table ; -struct io_count {u64 sectors[2 ][BCH_DATA_NR ]; };
fs/bcachefs/btree_gc.c +7 -8
@@ -1080,8 +1080,7 @@ fsck_err:static inline int btree_id_gc_phase_cmp (enum btree_id l,enum btree_id r) { -return (int )btree_id_to_gc_phase (l) - - (int )btree_id_to_gc_phase (r); +return cmp_int (gc_btree_order (l),gc_btree_order (r)); }static int bch2_gc_btrees (struct bch_fs *c,bool initial,bool metadata_only)
@@ -1126,7 +1125,7 @@ static void mark_metadata_sectors(structmin_t (u64,bucket_to_sector (ca, b +1 ), end) - start;bch2_mark_metadata_bucket (c, ca, b, type, sectors, -gc_phase (GC_PHASE_SB ), flags); +gc_phase (GC_PHASE_sb), flags); b++; start += sectors; }while (start < end);
@@ -1155,14 +1154,14 @@ static void bch2_mark_dev_superblock(str b = ca->journal.buckets[i];bch2_mark_metadata_bucket (c, ca, b, BCH_DATA_journal, ca->mi.bucket_size, -gc_phase (GC_PHASE_SB ), flags); +gc_phase (GC_PHASE_sb), flags); } }static void bch2_mark_superblocks (struct bch_fs *c) {mutex_lock (&c->sb_lock); -gc_pos_set (c,gc_phase (GC_PHASE_SB )); +gc_pos_set (c,gc_phase (GC_PHASE_sb));for_each_online_member (c, ca)bch2_mark_dev_superblock (c, ca,BTREE_TRIGGER_GC );
@@ -1773,7 +1772,7 @@ int bch2_gc(struct bch_fs *c, bool initiif (ret) goto out; again: -gc_pos_set (c,gc_phase (GC_PHASE_START )); +gc_pos_set (c,gc_phase (GC_PHASE_start));bch2_mark_superblocks (c);
@@ -1800,7 +1799,7 @@ again:*/ bch_info (c,"Second GC pass needed, restarting:" );clear_bit (BCH_FS_need_another_gc, &c->flags); -__gc_pos_set (c,gc_phase (GC_PHASE_NOT_RUNNING )); +__gc_pos_set (c,gc_phase (GC_PHASE_not_running));bch2_gc_stripes_reset (c, metadata_only);bch2_gc_alloc_reset (c, metadata_only);
@@ -1827,7 +1826,7 @@ out:percpu_down_write (&c->mark_lock);/* Indicates that gc is no longer in progress: */ -__gc_pos_set (c,gc_phase (GC_PHASE_NOT_RUNNING )); +__gc_pos_set (c,gc_phase (GC_PHASE_not_running));bch2_gc_free (c);percpu_up_write (&c->mark_lock);
fs/bcachefs/btree_gc.h +22 -26
72 lines not on this page · raw message
fs/bcachefs/btree_gc_types.h new file +29 -0
@@ -0,0 +1,29 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef _BCACHEFS_BTREE_GC_TYPES_H +#define _BCACHEFS_BTREE_GC_TYPES_H + +#include <linux/generic-radix-tree.h> + +enum gc_phase { + GC_PHASE_not_running, + GC_PHASE_start, + GC_PHASE_sb, + GC_PHASE_btree, +}; + +struct gc_pos { +enum gc_phase phase:8 ; +enum btree_id btree:8 ; +u16 level; +struct bpos pos; +}; + +struct reflink_gc { +u64 offset; +u32 size; +u32 refcount; +}; + +typedef GENRADIX (struct reflink_gc )reflink_gc_table ; + +#endif /* _BCACHEFS_BTREE_GC_TYPES_H */
fs/bcachefs/ec.c +1 -1
@@ -880,7 +880,7 @@ static int __ec_stripe_mem_alloc(structif (!genradix_ptr_alloc (&c->stripes, idx, gfp))return -BCH_ERR_ENOMEM_ec_stripe_mem_alloc; -if (c->gc_pos.phase !=GC_PHASE_NOT_RUNNING && +if (c->gc_pos.phase != GC_PHASE_not_running && !genradix_ptr_alloc (&c->gc_stripes, idx, gfp))return -BCH_ERR_ENOMEM_ec_stripe_mem_alloc;
Greg Kroah-Hartman
maintainerPATCH 201/222 Revert "net: sfp: enhance quirk for Fibrestore 2.5G copper SFP module"
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Greg Kroah-Hartman <[email protected]>
This reverts commit b3dcad0bfd62fcc9367d8092a71918db53804f53 which is commit cd4a32e60061789676f7f018a94fcc9ec56732a0 upstream.
Turned out that this should not have been applied to the stable tree.
--- drivers/net/phy/sfp.c | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-)
drivers/net/phy/sfp.c +6 -12
@@ -385,23 +385,18 @@ static void sfp_fixup_rollball(struct sf sfp->phy_t_retry =msecs_to_jiffies (1000 ); } -static void sfp_fixup_fs_2_5gt (struct sfp *sfp) +static void sfp_fixup_fs_10gt (struct sfp *sfp) { +sfp_fixup_10gbaset_30m (sfp);sfp_fixup_rollball (sfp); -/* The RollBall fixup is not enough for FS modules, the PHY chip inside +/* The RollBall fixup is not enough for FS modules, the AQR chip inside * them does not return 0xffff for PHY ID registers in all MMDs for the * while initializing. They need a 4 second wait before accessing PHY. */ sfp->module_t_wait =msecs_to_jiffies (4000 ); } -static void sfp_fixup_fs_10gt (struct sfp *sfp) -{ -sfp_fixup_10gbaset_30m (sfp); -sfp_fixup_fs_2_5gt (sfp); -} -static void sfp_fixup_halny_gsfp (struct sfp *sfp) {/* Ignore the TX_FAULT and LOS signals on this module.
@@ -477,10 +472,6 @@ static const struct sfp_quirk sfp_quirks// Rollball protocol to talk to the PHY. SFP_QUIRK_F ("FS" ,"SFP-10G-T" , sfp_fixup_fs_10gt), -// Fiberstore SFP-2.5G-T uses Rollball protocol to talk to the PHY and -// needs 4 sec wait before probing the PHY. -SFP_QUIRK_F ("FS" ,"SFP-2.5G-T" , sfp_fixup_fs_2_5gt), -// Fiberstore GPON-ONU-34-20BI can operate at 2500base-X, but report 1.2GBd // NRZ in their EEPROM SFP_QUIRK("FS", "GPON-ONU-34-20BI", sfp_quirk_2500basex,
@@ -497,6 +488,9 @@ static const struct sfp_quirk sfp_quirksSFP_QUIRK ("HUAWEI" ,"MA5671A" , sfp_quirk_2500basex, sfp_fixup_ignore_tx_fault), +// FS 2.5G Base-T +SFP_QUIRK_M ("FS" ,"SFP-2.5G-T" , sfp_quirk_oem_2_5g), +// Lantech 8330-262D-E can operate at 2500base-X, but incorrectly report // 2500MBd NRZ in their EEPROM SFP_QUIRK_M("Lantech", "8330-262D-E", sfp_quirk_2500basex),
Greg Kroah-Hartman
maintainerPATCH 202/222 mm/page_alloc: Separate THP PCP into movable and non-movable categories
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: yangge <[email protected]>
commit bf14ed81f571f8dba31cd72ab2e50fbcc877cc31 upstream.
Since commit 5d0a661d808f ("mm/page_alloc: use only one PCP list for THP-sized allocations") no longer differentiates the migration type of pages in THP-sized PCP list, it's possible that non-movable allocation requests may get a CMA page from the list, in some cases, it's not acceptable.
If a large number of CMA memory are configured in system (for example, the CMA memory accounts for 50% of the system memory), starting a virtual machine with device passthrough will get stuck. During starting the virtual machine, it will call pin_user_pages_remote(..., FOLL_LONGTERM, ...) to pin memory. Normally if a page is present and in CMA area, pin_user_pages_remote() will migrate the page from CMA area to non-CMA area because of FOLL_LONGTERM flag. But if non-movable allocation requests return CMA memory, migrate_longterm_unpinnable_pages() will migrate a CMA page to another CMA page, which will fail to pass the check in check_and_migrate_movable_pages() and cause migration endless.
Call trace:
pin_user_pages_remote
--__gup_longterm_locked // endless loops in this function ----_get_user_pages_locked ----check_and_migrate_movable_pages ------migrate_longterm_unpinnable_pages --------alloc_migration_target
This problem will also have a negative impact on CMA itself. For example, when CMA is borrowed by THP, and we need to reclaim it through cma_alloc() or dma_alloc_coherent(), we must move those pages out to ensure CMA's users can retrieve that contigous memory. Currently, CMA's memory is occupied by non-movable pages, meaning we can't relocate them. As a result, cma_alloc() is more likely to fail.
To fix the problem above, we add one PCP list for THP, which will not introduce a new cacheline for struct per_cpu_pages. THP will have 2 PCP lists, one PCP list is used by MOVABLE allocation, and the other PCP list is used by UNMOVABLE allocation. MOVABLE allocation contains GPF_MOVABLE, and UNMOVABLE allocation contains GFP_UNMOVABLE and GFP_RECLAIMABLE.
--- include/linux/mmzone.h | 9 ++++----- mm/page_alloc.c | 9 +++++++-- 2 files changed, 11 insertions(+), 7 deletions(-)
include/linux/mmzone.h +4 -5
@@ -651,13 +651,12 @@ enum zone_watermarks { };/* -* One per migratetype for each PAGE_ALLOC_COSTLY_ORDER. One additional list -* for THP which will usually be GFP_MOVABLE. Even if it is another type, -* it should not contribute to serious fragmentation causing THP allocation -* failures. +* One per migratetype for each PAGE_ALLOC_COSTLY_ORDER. Two additional lists +* are added for THP. One PCP list is used by GPF_MOVABLE, and the other PCP list +* is used by GFP_UNMOVABLE and GFP_RECLAIMABLE. */ #ifdef CONFIG_TRANSPARENT_HUGEPAGE -#define NR_PCP_THP 1 +#define NR_PCP_THP 2#else #define NR_PCP_THP 0#endif
mm/page_alloc.c +7 -2
@@ -521,10 +521,15 @@ out:static inline unsigned int order_to_pindex (int migratetype,int order) { +bool __maybe_unused movable; +#ifdef CONFIG_TRANSPARENT_HUGEPAGE if (order >PAGE_ALLOC_COSTLY_ORDER ) {VM_BUG_ON (order != pageblock_order); -return NR_LOWORDER_PCP_LISTS ; + + movable = migratetype ==MIGRATE_MOVABLE ; + +return NR_LOWORDER_PCP_LISTS + movable; }#else VM_BUG_ON (order >PAGE_ALLOC_COSTLY_ORDER );
@@ -538,7 +543,7 @@ static inline int pindex_to_order(unsignint order = pindex /MIGRATE_PCPTYPES ;#ifdef CONFIG_TRANSPARENT_HUGEPAGE -if (pindex ==NR_LOWORDER_PCP_LISTS ) +if (pindex >=NR_LOWORDER_PCP_LISTS ) order = pageblock_order;#else VM_BUG_ON (order >PAGE_ALLOC_COSTLY_ORDER );
Greg Kroah-Hartman
maintainerPATCH 203/222 pwm: stm32: Fix calculation of prescaler
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Uwe Kleine-König <[email protected]>
commit dab8f9f0fe3aada61c0eb013dcf7d3ff75a2c336 upstream.
A small prescaler is beneficial, as this improves the resolution of the duty_cycle configuration. However if the prescaler is too small, the maximal possible period becomes considerably smaller than the requested value.
One situation where this goes wrong is the following: With a parent clock rate of 208877930 Hz and max_arr = 0xffff = 65535, a request for period = 941243 ns currently results in PSC = 1. The value for ARR is then calculated to
ARR = 941243 * 208877930 / (1000000000 * 2) - 1 = 98301
This value is bigger than 65535 however and so doesn't fit into the respective register field. In this particular case the PWM was configured for a period of 313733.4806027616 ns (with ARR = 98301 & 0xffff). Even if ARR was configured to its maximal value, only period = 627495.6861167669 ns would be achievable.
Fix the calculation accordingly and adapt the comment to match the new algorithm.
With the calculation fixed the above case results in PSC = 2 and so an actual period of 941229.1667195285 ns.
--- drivers/pwm/pwm-stm32.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-)
drivers/pwm/pwm-stm32.c +12 -6
@@ -321,17 +321,23 @@ static int stm32_pwm_config(struct stm32* First we need to find the minimal value for prescaler such that * * period_ns * clkrate -* ------------------------------ +* ------------------------------ < max_arr + 1 * NSEC_PER_SEC * (prescaler + 1) * -* isn't bigger than max_arr. +* This equation is equivalent to +* +* period_ns * clkrate +* ---------------------------- < prescaler + 1 +* NSEC_PER_SEC * (max_arr + 1) +* +* Using integer division and knowing that the right hand side is +* integer, this is further equivalent to +* +* (period_ns * clkrate) // (NSEC_PER_SEC * (max_arr + 1)) ≤ prescaler */ prescaler =mul_u64_u64_div_u64 (period_ns,clk_get_rate (priv->clk), - (u64 )NSEC_PER_SEC * priv->max_arr); -if (prescaler >0 ) - prescaler -=1 ; - + (u64 )NSEC_PER_SEC * ((u64 )priv->max_arr +1 ));if (prescaler >MAX_TIM_PSC )return -EINVAL ;
Greg Kroah-Hartman
maintainerPATCH 204/222 pwm: stm32: Fix error message to not describe the previous error path
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Uwe Kleine-König <[email protected]>
commit f01af3022d4a46362c5dda3d35dea939f3246d10 upstream.
"Failed to lock the clock" is an appropriate error message for clk_rate_exclusive_get() failing, but not for the clock running too fast for the driver's calculations.
Adapt the error message accordingly.
--- drivers/pwm/pwm-stm32.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/pwm/pwm-stm32.c +2 -1
@@ -679,7 +679,8 @@ static int stm32_pwm_probe(struct platfo* .apply() won't overflow. */ if (clk_get_rate (priv->clk) >1000000000 ) -return dev_err_probe (dev, -EINVAL ,"Failed to lock clock\n" ); +return dev_err_probe (dev, -EINVAL ,"Clock freq too high (%lu)\n" , +clk_get_rate (priv->clk)); chip->ops = &stm32pwm_ops;
Greg Kroah-Hartman
maintainerPATCH 205/222 arm64: dts: rockchip: Fix SD NAND and eMMC init on rk3308-rock-pi-s
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jonas Karlman <[email protected]>
[ Upstream commit 1fb98c855ccd7bc7f50c7a9626fbb8440454760b ]
Radxa ROCK Pi S have optional onboard SD NAND on board revision v1.1, v1.2 and v1.3, revision v1.5 changed to use optional onboard eMMC.
The optional SD NAND typically fails to initialize:
mmc_host mmc0: Bus speed (slot 0) = 400000Hz (slot req 400000Hz, actual 400000HZ div = 0)
mmc0: error -110 whilst initialising SD card
mmc_host mmc0: Bus speed (slot 0) = 300000Hz (slot req 300000Hz, actual 300000HZ div = 0)
mmc0: error -110 whilst initialising SD card
mmc_host mmc0: Bus speed (slot 0) = 200000Hz (slot req 200000Hz, actual 200000HZ div = 0)
mmc0: error -110 whilst initialising SD card
mmc_host mmc0: Bus speed (slot 0) = 100000Hz (slot req 100000Hz, actual 100000HZ div = 0)
mmc0: error -110 whilst initialising SD card
Add pinctrl and cap-sd-highspeed to fix SD NAND initialization. Also drop bus-width and mmc-hs200-1_8v to fix eMMC initialization on the new v1.5 board revision, only 3v3 signal voltage is used.
--- arch/arm64/boot/dts/rockchip/rk3308-rock-pi-s.dts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
arch/arm64/boot/dts/rockchip/rk3308-rock-pi-s.dts +4 -2
@@ -126,10 +126,12 @@ }; &emmc { - bus-width = <4>; cap-mmc-highspeed; - mmc-hs200-1_8v; + cap-sd-highspeed; + no-sdio; non-removable; + pinctrl-names = "default"; + pinctrl-0 = <&emmc_bus8 &emmc_clk &emmc_cmd>; vmmc-supply = <&vcc_io>; status = "okay"; };
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 206/222 arm64: dts: rockchip: Rename LED related pinctrl nodes on rk3308-rock-pi-s
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jonas Karlman <[email protected]>
[ Upstream commit d2a52f678883fe4bc00bca89366b1ba504750abf ]
The nodename, <name>-gpio, of referenced pinctrl nodes for the two LEDs on the ROCK Pi S cause DT schema validation error:
leds: green-led-gpio: {'rockchip,pins': [[0, 6, 0, 90]], 'phandle': [[98]]} is not of type 'array'
from schema $id: http://devicetree.org/schemas/gpio/gpio-consumer.yaml#
leds: heartbeat-led-gpio: {'rockchip,pins': [[0, 5, 0, 90]], 'phandle': [[99]]} is not of type 'array'
from schema $id: http://devicetree.org/schemas/gpio/gpio-consumer.yaml#
Rename the pinctrl nodes and symbols to pass DT schema validation, also extend LED nodes with information about color and function.
--- arch/arm64/boot/dts/rockchip/rk3308-rock-pi-s.dts | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-)
arch/arm64/boot/dts/rockchip/rk3308-rock-pi-s.dts +9 -3
@@ -5,6 +5,8 @@ */ /dts-v1/; + +#include <dt-bindings/leds/common.h> #include "rk3308.dtsi" / {
@@ -24,17 +26,21 @@ leds { compatible = "gpio-leds"; pinctrl-names = "default"; - pinctrl-0 = <&green_led_gio>, <&heartbeat_led_gpio>; + pinctrl-0 = <&green_led>, <&heartbeat_led>; green-led { + color = <LED_COLOR_ID_GREEN>; default-state = "on"; + function = LED_FUNCTION_POWER; gpios = <&gpio0 RK_PA6 GPIO_ACTIVE_HIGH>; label = "rockpis:green:power"; linux,default-trigger = "default-on"; }; blue-led { + color = <LED_COLOR_ID_BLUE>; default-state = "on"; + function = LED_FUNCTION_HEARTBEAT; gpios = <&gpio0 RK_PA5 GPIO_ACTIVE_HIGH>; label = "rockpis:blue:user"; linux,default-trigger = "heartbeat";
@@ -216,11 +222,11 @@ pinctrl-0 = <&rtc_32k>; leds { - green_led_gio: green-led-gpio { + green_led: green-led { rockchip,pins = <0 RK_PA6 RK_FUNC_GPIO &pcfg_pull_none>; }; - heartbeat_led_gpio: heartbeat-led-gpio { + heartbeat_led: heartbeat-led { rockchip,pins = <0 RK_PA5 RK_FUNC_GPIO &pcfg_pull_none>; }; };
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 207/222 arm64: dts: rockchip: set correct pwm0 pinctrl on rk3588-tiger
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Heiko Stuebner <[email protected]>
[ Upstream commit a21d2cc2f9039023105bf9f9bf1acf324d5ebf9d ]
PWM0 on rk3588-tiger is connected to the BLT_CTRL pin of the Q7 connector meant as the name implies to control a backlight device.
Therefore set the correct M1 pinctrl variant for it. The M0 variant cannot ever be used because that pin is routed to a connector pin on the Q7 connector that is reserved for CAN use and the pin reachable by the M2 variant is reserved for the embedded MCU on the SoM.
--- arch/arm64/boot/dts/rockchip/rk3588-tiger.dtsi | 5 +++++ 1 file changed, 5 insertions(+)
arch/arm64/boot/dts/rockchip/rk3588-tiger.dtsi +5 -0
@@ -324,6 +324,11 @@ }; }; +&pwm0 { + pinctrl-0 = <&pwm0m1_pins>; + pinctrl-names = "default"; +}; + &saradc { vref-supply = <&vcc_1v8_s0>; status = "okay";
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 208/222 arm64: dts: rockchip: Fix the value of `dlg,jack-det-rate` mismatch on rk3399-gru
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Hsin-Te Yuan <[email protected]>
[ Upstream commit a500c0b4b589ae6fb79140c9d96bd5cd31393d41 ]
According to Documentation/devicetree/bindings/sound/dialog,da7219.yaml, the value of dlg,jack-det-rate property should be "32_64" instead of "32ms_64ms".
--- arch/arm64/boot/dts/rockchip/rk3399-gru.dtsi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/arm64/boot/dts/rockchip/rk3399-gru.dtsi +1 -1
@@ -450,7 +450,7 @@ ap_i2c_audio: &i2c8 { dlg,btn-cfg = <50>; dlg,mic-det-thr = <500>; dlg,jack-ins-deb = <20>; - dlg,jack-det-rate = "32ms_64ms"; + dlg,jack-det-rate = "32_64"; dlg,jack-rem-deb = <1>; dlg,a-d-btn-thr = <0xa>;
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 209/222 ARM: dts: rockchip: rk3066a: add #sound-dai-cells to hdmi node
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Johan Jonker <[email protected]>
[ Upstream commit cca46f811d0000c1522a5e18ea48c27a15e45c05 ]
'#sound-dai-cells' is required to properly interpret the list of DAI specified in the 'sound-dai' property, so add them to the 'hdmi' node for 'rk3066a.dtsi'.
--- arch/arm/boot/dts/rockchip/rk3066a.dtsi | 1 + 1 file changed, 1 insertion(+)
arch/arm/boot/dts/rockchip/rk3066a.dtsi +1 -0
@@ -128,6 +128,7 @@ pinctrl-0 = <&hdmii2c_xfer>, <&hdmi_hpd>; power-domains = <&power RK3066_PD_VIO>; rockchip,grf = <&grf>; + #sound-dai-cells = <0>; status = "disabled"; ports {
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 210/222 Revert "arm64: dts: rockchip: remove redundant cd-gpios from rk3588 sdmmc nodes"
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: FUKAUMI Naoki <[email protected]>
[ Upstream commit b56aed4a613e2d2cb3bfe05fd222dbf480f6b5d8 ]
This reverts commit d859ad305ed19d9a77d8c8ecd22459b73da36ba6.
Inserting and removing microSD card is not detected since above commit. Reverting it fixes this problem.
This is probably the same thing as 5 years ago on rk3399
https://lore.kernel.org/all/0608599d485117a9d99f5fb274fbb1b55f6ba9f7.1547466003.git.robin.murphy@arm.com/
So we'll go back to cd-gpios for now.
this patch is tested on Radxa ROCK 5A and 5B.
--- arch/arm64/boot/dts/rockchip/rk3588-orangepi-5-plus.dts | 1 + arch/arm64/boot/dts/rockchip/rk3588-quartzpro64.dts | 1 + arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts | 1 + arch/arm64/boot/dts/rockchip/rk3588s-rock-5a.dts | 1 + 4 files changed, 4 insertions(+)
arch/arm64/boot/dts/rockchip/rk3588-orangepi-5-plus.dts +1 -0
@@ -444,6 +444,7 @@ &sdmmc { bus-width = <4>; cap-sd-highspeed; + cd-gpios = <&gpio0 RK_PA4 GPIO_ACTIVE_LOW>; disable-wp; max-frequency = <150000000>; no-sdio;
arch/arm64/boot/dts/rockchip/rk3588-quartzpro64.dts +1 -0
@@ -429,6 +429,7 @@ &sdmmc { bus-width = <4>; cap-sd-highspeed; + cd-gpios = <&gpio0 RK_PA4 GPIO_ACTIVE_LOW>; disable-wp; max-frequency = <150000000>; no-sdio;
arch/arm64/boot/dts/rockchip/rk3588-rock-5b.dts +1 -0
@@ -378,6 +378,7 @@ bus-width = <4>; cap-mmc-highspeed; cap-sd-highspeed; + cd-gpios = <&gpio0 RK_PA4 GPIO_ACTIVE_LOW>; disable-wp; sd-uhs-sdr104; vmmc-supply = <&vcc_3v3_s3>;
arch/arm64/boot/dts/rockchip/rk3588s-rock-5a.dts +1 -0
@@ -366,6 +366,7 @@ bus-width = <4>; cap-mmc-highspeed; cap-sd-highspeed; + cd-gpios = <&gpio0 RK_PA4 GPIO_ACTIVE_LOW>; disable-wp; max-frequency = <150000000>; no-sdio;
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 211/222 arm64: dts: rockchip: make poweroff(8) work on Radxa ROCK 5A
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: FUKAUMI Naoki <[email protected]>
[ Upstream commit d05f7aff7ac23884ed9103a876325047ff9049aa ]
Designate the RK806 PMIC on the Radxa ROCK 5A as the system power controller, so the board shuts down properly on poweroff(8).
--- arch/arm64/boot/dts/rockchip/rk3588s-rock-5a.dts | 1 + 1 file changed, 1 insertion(+)
arch/arm64/boot/dts/rockchip/rk3588s-rock-5a.dts +1 -0
@@ -394,6 +394,7 @@ pinctrl-0 = <&pmic_pins>, <&rk806_dvs1_null>, <&rk806_dvs2_null>, <&rk806_dvs3_null>; spi-max-frequency = <1000000>; + system-power-controller; vcc1-supply = <&vcc5v0_sys>; vcc2-supply = <&vcc5v0_sys>;
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 212/222 cxl/region: Convert cxl_pmem_region_alloc to scope-based resource management
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dan Williams <[email protected]>
[ Upstream commit d357dd8ad2f154376e5cb930284e7bf4fe21ffaa ]
A recent bugfix to cxl_pmem_region_alloc() to fix an error-unwind-memleak [1], highlighted a use case for scope-based resource management.
Delete the goto for releasing @cxl_region_rwsem, and return error codes directly from error condition paths.
The caller, devm_cxl_add_pmem_region(), is no longer given @cxlr_pmem directly it must retrieve it from @cxlr->cxlr_pmem. This retrieval from @cxlr was already in place for @cxlr->cxl_nvb, and converting cxl_pmem_region_alloc() to return an int makes it less awkward to handle no_free_ptr().
Stable-dep-of: 84ec985944ef ("cxl/mem: Fix no cxl_nvd during pmem region auto-assembling")
--- drivers/cxl/core/region.c | 43 ++++++++++++++++----------------------- 1 file changed, 17 insertions(+), 26 deletions(-)
drivers/cxl/core/region.c +17 -26
@@ -2681,26 +2681,21 @@ int cxl_get_poison_by_endpoint(struct cxl_port *port)static struct lock_class_key cxl_pmem_region_key; -static struct cxl_pmem_region *cxl_pmem_region_alloc (struct cxl_region *cxlr) +static int cxl_pmem_region_alloc (struct cxl_region *cxlr) {struct cxl_region_params *p = &cxlr->params;struct cxl_nvdimm_bridge *cxl_nvb; -struct cxl_pmem_region *cxlr_pmem;struct device *dev;int i; -down_read (&cxl_region_rwsem); -if (p->state !=CXL_CONFIG_COMMIT ) { - cxlr_pmem =ERR_PTR (-ENXIO ); - goto out; - } +guard (rwsem_read)(&cxl_region_rwsem); +if (p->state !=CXL_CONFIG_COMMIT ) +return -ENXIO ; - cxlr_pmem =kzalloc (struct_size (cxlr_pmem, mapping, p->nr_targets), -GFP_KERNEL ); -if (!cxlr_pmem) { - cxlr_pmem =ERR_PTR (-ENOMEM ); - goto out; - } + struct cxl_pmem_region *cxlr_pmem __free(kfree) = +kzalloc (struct_size (cxlr_pmem, mapping, p->nr_targets),GFP_KERNEL ); +if (!cxlr_pmem) +return -ENOMEM ; cxlr_pmem->hpa_range.start = p->res->start; cxlr_pmem->hpa_range.end = p->res->end;
@@ -2718,11 +2713,8 @@ static struct cxl_pmem_region *cxl_pmem_region_alloc(struct cxl_region *cxlr)*/ if (i ==0 ) { cxl_nvb =cxl_find_nvdimm_bridge (cxlmd); -if (!cxl_nvb) { -kfree (cxlr_pmem); - cxlr_pmem =ERR_PTR (-ENODEV ); - goto out; - } +if (!cxl_nvb) +return -ENODEV ; cxlr->cxl_nvb = cxl_nvb; } m->cxlmd = cxlmd;
@@ -2733,18 +2725,16 @@ static struct cxl_pmem_region *cxl_pmem_region_alloc(struct cxl_region *cxlr) } dev = &cxlr_pmem->dev; - cxlr_pmem->cxlr = cxlr; - cxlr->cxlr_pmem = cxlr_pmem;device_initialize (dev);lockdep_set_class (&dev->mutex, &cxl_pmem_region_key);device_set_pm_not_required (dev); dev->parent = &cxlr->dev; dev->bus = &cxl_bus_type; dev->type = &cxl_pmem_region_type; -out: -up_read (&cxl_region_rwsem); + cxlr_pmem->cxlr = cxlr; + cxlr->cxlr_pmem =no_free_ptr (cxlr_pmem); -return cxlr_pmem; +return 0 ; }static void cxl_dax_region_release (struct device *dev)
@@ -2861,9 +2851,10 @@ static int devm_cxl_add_pmem_region(struct cxl_region *cxlr)struct device *dev;int rc; - cxlr_pmem =cxl_pmem_region_alloc (cxlr); -if (IS_ERR (cxlr_pmem)) -return PTR_ERR (cxlr_pmem); + rc =cxl_pmem_region_alloc (cxlr); +if (rc) +return rc; + cxlr_pmem = cxlr->cxlr_pmem; cxl_nvb = cxlr->cxl_nvb; dev = &cxlr_pmem->dev;
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 213/222 cxl/mem: Fix no cxl_nvd during pmem region auto-assembling
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Li Ming <[email protected]>
[ Upstream commit 84ec985944ef34a34a1605b93ce401aa8737af96 ]
When CXL subsystem is auto-assembling a pmem region during cxl endpoint port probing, always hit below calltrace.
BUG: kernel NULL pointer dereference, address: 0000000000000078 #PF: supervisor read access in kernel mode #PF: error_code(0x0000) - not-present page RIP: 0010:cxl_pmem_region_probe+0x22e/0x360 [cxl_pmem] Call Trace: <TASK> ? __die+0x24/0x70 ? page_fault_oops+0x82/0x160 ? do_user_addr_fault+0x65/0x6b0 ? exc_page_fault+0x7d/0x170 ? asm_exc_page_fault+0x26/0x30 ? cxl_pmem_region_probe+0x22e/0x360 [cxl_pmem] ? cxl_pmem_region_probe+0x1ac/0x360 [cxl_pmem] cxl_bus_probe+0x1b/0x60 [cxl_core] really_probe+0x173/0x410 ? __pfx___device_attach_driver+0x10/0x10 __driver_probe_device+0x80/0x170 driver_probe_device+0x1e/0x90 __device_attach_driver+0x90/0x120 bus_for_each_drv+0x84/0xe0 __device_attach+0xbc/0x1f0 bus_probe_device+0x90/0xa0 device_add+0x51c/0x710 devm_cxl_add_pmem_region+0x1b5/0x380 [cxl_core] cxl_bus_probe+0x1b/0x60 [cxl_core]
The cxl_nvd of the memdev needs to be available during the pmem region probe. Currently the cxl_nvd is registered after the endpoint port probe. The endpoint probe, in the case of autoassembly of regions, can cause a pmem region probe requiring the not yet available cxl_nvd. Adjust the sequence so this dependency is met.
This requires adding a port parameter to cxl_find_nvdimm_bridge() that can be used to query the ancestor root port. The endpoint port is not yet available, but will share a common ancestor with its parent, so start the query from there instead.
--- drivers/cxl/core/pmem.c | 16 +++++++++++----- drivers/cxl/core/region.c | 2 +- drivers/cxl/cxl.h | 4 ++-- drivers/cxl/mem.c | 17 +++++++++-------- 4 files changed, 23 insertions(+), 16 deletions(-)
drivers/cxl/core/pmem.c +11 -5
@@ -62,10 +62,14 @@ static int match_nvdimm_bridge(struct device *dev, void *data)return is_cxl_nvdimm_bridge (dev); } -struct cxl_nvdimm_bridge *cxl_find_nvdimm_bridge (struct cxl_memdev *cxlmd) +/** +* cxl_find_nvdimm_bridge() - find a bridge device relative to a port +* @port: any descendant port of an nvdimm-bridge associated +* root-cxl-port +*/ +struct cxl_nvdimm_bridge *cxl_find_nvdimm_bridge (struct cxl_port *port) { - struct cxl_root *cxl_root __free(put_cxl_root) = -find_cxl_root (cxlmd->endpoint); + struct cxl_root *cxl_root __free(put_cxl_root) = find_cxl_root(port);struct device *dev;if (!cxl_root)
@@ -242,18 +246,20 @@ static void cxlmd_release_nvdimm(void *_cxlmd)/** * devm_cxl_add_nvdimm() - add a bridge between a cxl_memdev and an nvdimm +* @parent_port: parent port for the (to be added) @cxlmd endpoint port * @cxlmd: cxl_memdev instance that will perform LIBNVDIMM operations * * Return: 0 on success negative error code on failure. */ -int devm_cxl_add_nvdimm (struct cxl_memdev *cxlmd) +int devm_cxl_add_nvdimm (struct cxl_port *parent_port, +struct cxl_memdev *cxlmd) {struct cxl_nvdimm_bridge *cxl_nvb;struct cxl_nvdimm *cxl_nvd;struct device *dev;int rc; - cxl_nvb =cxl_find_nvdimm_bridge (cxlmd); + cxl_nvb =cxl_find_nvdimm_bridge (parent_port);if (!cxl_nvb)return -ENODEV ;
drivers/cxl/core/region.c +1 -1
@@ -2712,7 +2712,7 @@ static int cxl_pmem_region_alloc(struct cxl_region *cxlr)* bridge for one device is the same for all. */ if (i ==0 ) { - cxl_nvb =cxl_find_nvdimm_bridge (cxlmd); + cxl_nvb =cxl_find_nvdimm_bridge (cxlmd->endpoint);if (!cxl_nvb)return -ENODEV ; cxlr->cxl_nvb = cxl_nvb;
drivers/cxl/cxl.h +2 -2
@@ -848,8 +848,8 @@ struct cxl_nvdimm_bridge *devm_cxl_add_nvdimm_bridge(struct device *host,struct cxl_nvdimm *to_cxl_nvdimm (struct device *dev);bool is_cxl_nvdimm (struct device *dev);bool is_cxl_nvdimm_bridge (struct device *dev); -int devm_cxl_add_nvdimm (struct cxl_memdev *cxlmd); -struct cxl_nvdimm_bridge *cxl_find_nvdimm_bridge (struct cxl_memdev *cxlmd); +int devm_cxl_add_nvdimm (struct cxl_port *parent_port,struct cxl_memdev *cxlmd); +struct cxl_nvdimm_bridge *cxl_find_nvdimm_bridge (struct cxl_port *port);#ifdef CONFIG_CXL_REGION bool is_cxl_pmem_region (struct device *dev);
drivers/cxl/mem.c +9 -8
@@ -152,6 +152,15 @@ static int cxl_mem_probe(struct device *dev)return -ENXIO ; } +if (resource_size (&cxlds->pmem_res) &&IS_ENABLED (CONFIG_CXL_PMEM )) { + rc =devm_cxl_add_nvdimm (parent_port, cxlmd); +if (rc) { +if (rc == -ENODEV ) +dev_info (dev,"PMEM disabled by platform\n" ); +return rc; + } + } +if (dport->rch) endpoint_parent = parent_port->uport_dev;else
@@ -174,14 +183,6 @@ static int cxl_mem_probe(struct device *dev)if (rc)return rc; -if (resource_size (&cxlds->pmem_res) &&IS_ENABLED (CONFIG_CXL_PMEM )) { - rc =devm_cxl_add_nvdimm (cxlmd); -if (rc == -ENODEV ) -dev_info (dev,"PMEM disabled by platform\n" ); -else -return rc; - } -/* * The kernel may be operating out of CXL memory on this device, * there is no spec defined way to determine whether this device
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 214/222 arm64: dts: rockchip: fix PMIC interrupt pin on ROCK Pi E
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: FUKAUMI Naoki <[email protected]>
[ Upstream commit 02afd3d5b9fa4ffed284c0f7e7bec609097804fc ]
use GPIO0_A2 as interrupt pin for PMIC. GPIO2_A6 was used for pre-production board.
--- arch/arm64/boot/dts/rockchip/rk3328-rock-pi-e.dts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
arch/arm64/boot/dts/rockchip/rk3328-rock-pi-e.dts +2 -2
@@ -241,8 +241,8 @@ rk805: pmic@18 { compatible = "rockchip,rk805"; reg = <0x18>; - interrupt-parent = <&gpio2>; - interrupts = <6 IRQ_TYPE_LEVEL_LOW>; + interrupt-parent = <&gpio0>; + interrupts = <2 IRQ_TYPE_LEVEL_LOW>; #clock-cells = <1>; clock-output-names = "xin32k", "rk805-clkout2"; gpio-controller;
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 215/222 reset: gpio: Fix missing gpiolib dependency for GPIO reset controller
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Mark Brown <[email protected]>
[ Upstream commit 01f6a84c7a3eaabafd787608d630db31c6904f5c ]
The GPIO reset controller uses gpiolib but there is no Kconfig dependency reflecting this fact, add one.
With the addition of the controller to the arm64 defconfig this is causing build breaks for arm64 virtconfig in -next:
aarch64-linux-gnu-ld: drivers/reset/core.o: in function `__reset_add_reset_gpio_lookup':
/build/stage/linux/drivers/reset/core.c:861:(.text+0xccc): undefined reference to `gpio_device_find_by_fwnode'
--- drivers/reset/Kconfig | 1 + 1 file changed, 1 insertion(+)
drivers/reset/Kconfig +1 -0
@@ -68,6 +68,7 @@ config RESET_BRCMSTB_RESCAL config RESET_GPIO tristate "GPIO reset controller" + depends on GPIOLIB help This enables a generic reset controller for resets attached via GPIOs. Typically for OF platforms this driver expects "reset-gpios"
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 216/222 arm64: dts: rockchip: Fix the i2c address of es8316 on Cool Pi 4B
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Andy Yan <[email protected]>
[ Upstream commit 5d101df8fc3261607bd946a222248dd193956a0a ]
According to the hardware design, the i2c address of audio codec es8316 on Cool Pi 4B is 0x10.
This fix the read/write error like bellow:
es8316 7-0011: ASoC: error at soc_component_write_no_lock on es8316.7-0011 for register: [0x0000000c] -6 es8316 7-0011: ASoC: error at soc_component_write_no_lock on es8316.7-0011 for register: [0x00000003] -6 es8316 7-0011: ASoC: error at soc_component_read_no_lock on es8316.7-0011 for register: [0x00000016] -6 es8316 7-0011: ASoC: error at soc_component_read_no_lock on es8316.7-0011 for register: [0x00000016] -6
--- arch/arm64/boot/dts/rockchip/rk3588s-coolpi-4b.dts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
arch/arm64/boot/dts/rockchip/rk3588s-coolpi-4b.dts +2 -2
@@ -283,9 +283,9 @@ pinctrl-0 = <&i2c7m0_xfer>; status = "okay"; - es8316: audio-codec@11 { + es8316: audio-codec@10 { compatible = "everest,es8316"; - reg = <0x11>; + reg = <0x10>; assigned-clocks = <&cru I2S0_8CH_MCLKOUT>; assigned-clock-rates = <12288000>; clocks = <&cru I2S0_8CH_MCLKOUT>;
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 217/222 arm64: dts: rockchip: Add sound-dai-cells for RK3368
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Alex Bee <[email protected]>
[ Upstream commit 8d7ec44aa5d1eb94a30319074762a1740440cdc8 ]
Add the missing #sound-dai-cells for RK3368's I2S and S/PDIF controllers.
--- arch/arm64/boot/dts/rockchip/rk3368.dtsi | 3 +++ 1 file changed, 3 insertions(+)
arch/arm64/boot/dts/rockchip/rk3368.dtsi +3 -0
@@ -793,6 +793,7 @@ dma-names = "tx"; pinctrl-names = "default"; pinctrl-0 = <&spdif_tx>; + #sound-dai-cells = <0>; status = "disabled"; };
@@ -804,6 +805,7 @@ clocks = <&cru SCLK_I2S_2CH>, <&cru HCLK_I2S_2CH>; dmas = <&dmac_bus 6>, <&dmac_bus 7>; dma-names = "tx", "rx"; + #sound-dai-cells = <0>; status = "disabled"; };
@@ -817,6 +819,7 @@ dma-names = "tx", "rx"; pinctrl-names = "default"; pinctrl-0 = <&i2s_8ch_bus>; + #sound-dai-cells = <0>; status = "disabled"; };
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 218/222 cxl/region: Move cxl_dpa_to_region() work to the region driver
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Alison Schofield <[email protected]>
[ Upstream commit b98d042698a32518c93e47730e9ad86b387a9c21 ]
This helper belongs in the region driver as it is only useful with CONFIG_CXL_REGION. Add a stub in core.h for when the region driver is not built.
Stable-dep-of: 285f2a088414 ("cxl/region: Avoid null pointer dereference in region lookup")
--- drivers/cxl/core/core.h | 7 +++++++ drivers/cxl/core/memdev.c | 44 --------------------------------------- drivers/cxl/core/region.c | 44 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 51 insertions(+), 44 deletions(-)
drivers/cxl/core/core.h +7 -0
@@ -27,7 +27,14 @@ void cxl_decoder_kill_region(struct cxl_endpoint_decoder *cxled);int cxl_region_init (void );void cxl_region_exit (void );int cxl_get_poison_by_endpoint (struct cxl_port *port); +struct cxl_region *cxl_dpa_to_region (const struct cxl_memdev *cxlmd,u64 dpa); +#else +static inline +struct cxl_region *cxl_dpa_to_region (const struct cxl_memdev *cxlmd,u64 dpa) +{ +return NULL ; +}static inline int cxl_get_poison_by_endpoint (struct cxl_port *port) {return 0 ;
drivers/cxl/core/memdev.c +0 -44
50 lines not on this page · raw message
drivers/cxl/core/region.c +44 -0
50 lines not on this page · raw message
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 219/222 cxl/region: Avoid null pointer dereference in region lookup
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Alison Schofield <[email protected]>
[ Upstream commit 285f2a08841432fc3e498b1cd00cce5216cdf189 ]
cxl_dpa_to_region() looks up a region based on a memdev and DPA. It wrongly assumes an endpoint found mapping the DPA is also of a fully assembled region. When not true it leads to a null pointer dereference looking up the region name.
This appears during testing of region lookup after a failure to assemble a BIOS defined region or if the lookup raced with the assembly of the BIOS defined region.
Failure to clean up BIOS defined regions that fail assembly is an issue in itself and a fix to that problem will alleviate some of the impact. It will not alleviate the race condition so let's harden this path.
The behavior change is that the kernel oops due to a null pointer dereference is replaced with a dev_dbg() message noting that an endpoint was mapped.
Additional comments are added so that future users of this function can more clearly understand what it provides.
--- drivers/cxl/core/region.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-)
drivers/cxl/core/region.c +15 -4
@@ -2688,22 +2688,33 @@ static int __cxl_dpa_to_region(struct device *dev, void *arg) {struct cxl_dpa_to_region_context *ctx = arg;struct cxl_endpoint_decoder *cxled; +struct cxl_region *cxlr;u64 dpa = ctx->dpa;if (!is_endpoint_decoder (dev))return 0 ; cxled =to_cxl_endpoint_decoder (dev); -if (!cxled->dpa_res || !resource_size (cxled->dpa_res)) +if (!cxled || !cxled->dpa_res || !resource_size (cxled->dpa_res))return 0 ;if (dpa > cxled->dpa_res->end || dpa < cxled->dpa_res->start)return 0 ; -dev_dbg (dev,"dpa:0x%llx mapped in region:%s\n" , dpa, -dev_name (&cxled->cxld.region->dev)); +/* +* Stop the region search (return 1) when an endpoint mapping is +* found. The region may not be fully constructed so offering +* the cxlr in the context structure is not guaranteed. +*/ + cxlr = cxled->cxld.region; +if (cxlr) +dev_dbg (dev,"dpa:0x%llx mapped in region:%s\n" , dpa, +dev_name (&cxlr->dev)); +else +dev_dbg (dev,"dpa:0x%llx mapped in endpoint:%s\n" , dpa, +dev_name (dev)); - ctx->cxlr = cxled->cxld.region; + ctx->cxlr = cxlr;return 1 ; }
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 220/222 cxl/region: check interleave capability
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: Yao Xingtao <[email protected]>
[ Upstream commit 84328c5acebc10c8cdcf17283ab6c6d548885bfc ]
Since interleave capability is not verified, if the interleave capability of a target does not match the region need, committing decoder should have failed at the device end.
In order to checkout this error as quickly as possible, driver needs to check the interleave capability of target during attaching it to region.
Per CXL specification r3.1(8.2.4.20.1 CXL HDM Decoder Capability Register), bits 11 and 12 indicate the capability to establish interleaving in 3, 6, 12 and 16 ways. If these bits are not set, the target cannot be attached to a region utilizing such interleave ways.
Additionally, bits 8 and 9 represent the capability of the bits used for interleaving in the address, Linux tracks this in the cxl_port interleave_mask.
Per CXL specification r3.1(8.2.4.20.13 Decoder Protection):
eIW means encoded Interleave Ways.
eIG means encoded Interleave Granularity.
in HPA:
if eIW is 0 or 8 (interleave ways: 1, 3), all the bits of HPA are used, the interleave bits are none, the following check is ignored.
if eIW is less than 8 (interleave ways: 2, 4, 8, 16), the interleave bits start at bit position eIG + 8 and end at eIG + eIW + 8 - 1.
if eIW is greater than 8 (interleave ways: 6, 12), the interleave bits start at bit position eIG + 8 and end at eIG + eIW - 1.
if the interleave mask is insufficient to cover the required interleave bits, the target cannot be attached to the region.
--- drivers/cxl/core/hdm.c | 13 ++++++ drivers/cxl/core/region.c | 82 ++++++++++++++++++++++++++++++++++++ drivers/cxl/cxl.h | 2 + drivers/cxl/cxlmem.h | 10 +++++ tools/testing/cxl/test/cxl.c | 4 ++ 5 files changed, 111 insertions(+)
drivers/cxl/core/hdm.c +13 -0
@@ -52,6 +52,14 @@ int devm_cxl_add_passthrough_decoder(struct cxl_port *port)struct cxl_dport *dport =NULL ;int single_port_map[1 ];unsigned long index; +struct cxl_hdm *cxlhdm =dev_get_drvdata (&port->dev); + +/* +* Capability checks are moot for passthrough decoders, support +* any and all possibilities. +*/ + cxlhdm->interleave_mask = ~0U ; + cxlhdm->iw_cap_mask = ~0UL ; cxlsd =cxl_switch_decoder_alloc (port,1 );if (IS_ERR (cxlsd))
@@ -79,6 +87,11 @@ static void parse_hdm_decoder_caps(struct cxl_hdm *cxlhdm) cxlhdm->interleave_mask |=GENMASK (11 ,8 );if (FIELD_GET (CXL_HDM_DECODER_INTERLEAVE_14_12 , hdm_cap)) cxlhdm->interleave_mask |=GENMASK (14 ,12 ); + cxlhdm->iw_cap_mask =BIT (1 ) |BIT (2 ) |BIT (4 ) |BIT (8 ); +if (FIELD_GET (CXL_HDM_DECODER_INTERLEAVE_3_6_12_WAY , hdm_cap)) + cxlhdm->iw_cap_mask |=BIT (3 ) |BIT (6 ) |BIT (12 ); +if (FIELD_GET (CXL_HDM_DECODER_INTERLEAVE_16_WAY , hdm_cap)) + cxlhdm->iw_cap_mask |=BIT (16 ); }static bool should_emulate_decoders (struct cxl_endpoint_dvsec_info *info)
drivers/cxl/core/region.c +82 -0
106 lines not on this page · raw message
drivers/cxl/cxl.h +2 -0
@@ -45,6 +45,8 @@#define CXL_HDM_DECODER_TARGET_COUNT_MASK GENMASK(7, 4)#define CXL_HDM_DECODER_INTERLEAVE_11_8 BIT(8)#define CXL_HDM_DECODER_INTERLEAVE_14_12 BIT(9) +#define CXL_HDM_DECODER_INTERLEAVE_3_6_12_WAY BIT(11) +#define CXL_HDM_DECODER_INTERLEAVE_16_WAY BIT(12)#define CXL_HDM_DECODER_CTRL_OFFSET 0x4#define CXL_HDM_DECODER_ENABLE BIT(1)#define CXL_HDM_DECODER0_BASE_LOW_OFFSET (i) (0x20 * (i) + 0x10)
drivers/cxl/cxlmem.h +10 -0
@@ -848,11 +848,21 @@ static inline void cxl_mem_active_dec(void)int cxl_mem_sanitize (struct cxl_memdev *cxlmd,u16 cmd); +/** +* struct cxl_hdm - HDM Decoder registers and cached / decoded capabilities +* @regs: mapped registers, see devm_cxl_setup_hdm() +* @decoder_count: number of decoders for this port +* @target_count: for switch decoders, max downstream port targets +* @interleave_mask: interleave granularity capability, see check_interleave_cap() +* @iw_cap_mask: bitmask of supported interleave ways, see check_interleave_cap() +* @port: mapped cxl_port, see devm_cxl_setup_hdm() +*/ struct cxl_hdm {struct cxl_component_regs regs;unsigned int decoder_count;unsigned int target_count;unsigned int interleave_mask; +unsigned long iw_cap_mask;struct cxl_port *port; };
tools/testing/cxl/test/cxl.c +4 -0
@@ -630,11 +630,15 @@ static struct cxl_hdm *mock_cxl_setup_hdm(struct cxl_port *port, struct cxl_endpoint_dvsec_info *info) {struct cxl_hdm *cxlhdm =devm_kzalloc (&port->dev,sizeof (*cxlhdm),GFP_KERNEL ); +struct device *dev = &port->dev;if (!cxlhdm)return ERR_PTR (-ENOMEM ); cxlhdm->port = port; + cxlhdm->interleave_mask = ~0U ; + cxlhdm->iw_cap_mask = ~0UL ; +dev_set_drvdata (dev, cxlhdm);return cxlhdm; }
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 221/222 netfs: Fix netfs_page_mkwrite() to check folio->mapping is valid
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: David Howells <[email protected]>
[ Upstream commit a81c98bfa40c11f8ea79b5a9b3f5fda73bfbb4d2 ]
Fix netfs_page_mkwrite() to check that folio->mapping is valid once it has taken the folio lock (as filemap_page_mkwrite() does). Without this, generic/247 occasionally oopses with something like the following:
BUG: kernel NULL pointer dereference, address: 0000000000000000
#PF: supervisor read access in kernel mode
#PF: error_code(0x0000) - not-present page
RIP: 0010:trace_event_raw_event_netfs_folio+0x61/0xc0
...
Call Trace:
<TASK>
? __die_body+0x1a/0x60
? page_fault_oops+0x6e/0xa0
? exc_page_fault+0xc2/0xe0
? asm_exc_page_fault+0x22/0x30
? trace_event_raw_event_netfs_folio+0x61/0xc0
trace_netfs_folio+0x39/0x40
netfs_page_mkwrite+0x14c/0x1d0
do_page_mkwrite+0x50/0x90
do_pte_missing+0x184/0x200
__handle_mm_fault+0x42d/0x500
handle_mm_fault+0x121/0x1f0
do_user_addr_fault+0x23e/0x3c0
exc_page_fault+0xc2/0xe0
asm_exc_page_fault+0x22/0x30This is due to the invalidate_inode_pages2_range() issued at the end of the DIO write interfering with the mmap'd writes.
--- fs/netfs/buffered_write.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-)
fs/netfs/buffered_write.c +7 -1
@@ -507,6 +507,7 @@ vm_fault_t netfs_page_mkwrite(struct vm_fault *vmf, struct netfs_group *netfs_gr {struct folio *folio =page_folio (vmf->page);struct file *file = vmf->vma->vm_file; +struct address_space *mapping = file->f_mapping;struct inode *inode =file_inode (file);vm_fault_t ret =VM_FAULT_RETRY ;int err;
@@ -520,6 +521,11 @@ vm_fault_t netfs_page_mkwrite(struct vm_fault *vmf, struct netfs_group *netfs_grif (folio_lock_killable (folio) <0 ) goto out; +if (folio->mapping != mapping) { +folio_unlock (folio); + ret =VM_FAULT_NOPAGE ; + goto out; + }/* Can we see a streaming write here? */ if (WARN_ON (!folio_test_uptodate (folio))) {
@@ -529,7 +535,7 @@ vm_fault_t netfs_page_mkwrite(struct vm_fault *vmf, struct netfs_group *netfs_grif (netfs_folio_group (folio) != netfs_group) {folio_unlock (folio); - err =filemap_fdatawait_range (inode->i_mapping, + err =filemap_fdatawait_range (mapping,folio_pos (folio),folio_pos (folio) +folio_size (folio));switch (err) {
Signature · 1 line
2.43.0
Greg Kroah-Hartman
maintainerPATCH 222/222 netfs: Fix netfs_page_mkwrite() to flush conflicting data, not wait
In reply to Greg Kroah-Hartman6.9-stable review patch. If anyone has any objections, please let me know.
------------------
From: David Howells <[email protected]>
[ Upstream commit 9d66154f73b7c7007c3be1113dfb50b99b791f8f ]
Fix netfs_page_mkwrite() to use filemap_fdatawrite_range(), not filemap_fdatawait_range() to flush conflicting data.
--- fs/netfs/buffered_write.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
fs/netfs/buffered_write.c +3 -3
@@ -535,9 +535,9 @@ vm_fault_t netfs_page_mkwrite(struct vm_fault *vmf, struct netfs_group *netfs_grif (netfs_folio_group (folio) != netfs_group) {folio_unlock (folio); - err =filemap_fdatawait_range (mapping, -folio_pos (folio), -folio_pos (folio) +folio_size (folio)); + err =filemap_fdatawrite_range (mapping, +folio_pos (folio), +folio_pos (folio) +folio_size (folio));switch (err) {case 0 : ret =VM_FAULT_RETRY ;
Signature · 1 line
2.43.0
Hello,
Quoted 5 lines · On Tue, 2 Jul 2024 19:00:38 +0200 Greg Kroah-Hartman…
This is the start of the stable review cycle for the 6.9.8 release. There are 222 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Quoted 8 lines
Responses should be made by Thu, 04 Jul 2024 17:01:55 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.9.8-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.9.y
and the diffstat can be found below.
This rc kernel passes DAMON functionality test[1] on my test machine. Attaching the test results summary below. Please note that I retrieved the kernel from linux-stable-rc tree[2].
[1] https://github.com/awslabs/damon-tests/tree/next/corr
[2] 03247eed042d ("Linux 6.9.8-rc1")
Thanks,
SJ
[...]
---
ok 6 selftests: damon: debugfs_duplicate_context_creation.sh
ok 7 selftests: damon: debugfs_rm_non_contexts.sh
ok 8 selftests: damon: debugfs_target_ids_read_before_terminate_race.sh ok 9 selftests: damon: debugfs_target_ids_pid_leak.sh
ok 10 selftests: damon: sysfs.sh
ok 11 selftests: damon: sysfs_update_removed_scheme_dir.sh
ok 12 selftests: damon: sysfs_update_schemes_tried_regions_hang.py ok 13 selftests: damon: sysfs_update_schemes_tried_regions_wss_estimation.py ok 14 selftests: damon: damos_quota.py
ok 15 selftests: damon: damos_apply_interval.py
ok 16 selftests: damon: reclaim.sh
ok 17 selftests: damon: lru_sort.sh
ok 1 selftests: damon-tests: kunit.sh
ok 2 selftests: damon-tests: huge_count_read_write.sh
ok 3 selftests: damon-tests: buffer_overflow.sh
ok 4 selftests: damon-tests: rm_contexts.sh
ok 5 selftests: damon-tests: record_null_deref.sh
ok 6 selftests: damon-tests: dbgfs_target_ids_read_before_terminate_race.sh ok 7 selftests: damon-tests: dbgfs_target_ids_pid_leak.sh
ok 8 selftests: damon-tests: damo_tests.sh
ok 9 selftests: damon-tests: masim-record.sh
ok 10 selftests: damon-tests: build_i386.sh
ok 11 selftests: damon-tests: build_arm64.sh
ok 12 selftests: damon-tests: build_m68k.sh
ok 13 selftests: damon-tests: build_i386_idle_flag.sh
ok 14 selftests: damon-tests: build_i386_highpte.sh
ok 15 selftests: damon-tests: build_nomemcg.sh
[33m
[92mPASS [39m
Quoted 4 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.9.8 release. There are 222 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Quoted 4 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.9.8 release. There are 222 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.9.8 release. There are 222 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Thu, 04 Jul 2024 17:01:55 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 9 lines
https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.9.8-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.9.y
and the diffstat can be found below.thanks,
greg k-h
Compiled and booted on my test system. No dmesg regressions.
thanks,
-- Shuah
Quoted 5 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.9.8 release. There are 222 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Successfully compiled and installed the kernel on my computer (Acer Aspire E15, Intel Core i3 Haswell). No noticeable regressions.
Signature · 1 line
An old man doll... just what I always wanted! - Clara
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.9.8 release. There are 222 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Thu, 04 Jul 2024 17:01:55 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 8 lines
https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.9.8-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.9.y
and the diffstat can be found below.thanks,
greg k-h
All tests passing for Tegra ...
Test results for stable-v6.9:
10 builds: 10 pass, 0 fail
26 boots: 26 pass, 0 fail
111 tests: 111 pass, 0 failLinux version: 6.9.8-rc1-g03247eed042d
Boards tested: tegra124-jetson-tk1, tegra186-p2771-0000,
tegra194-p2972-0000, tegra194-p3509-0000+p3668-0000,
tegra20-ventana, tegra210-p2371-2180,
tegra210-p3450-0000, tegra30-cardhu-a04Jon
Quoted 10 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.9.8 release. There are 222 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Thu, 04 Jul 2024 17:01:55 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 9 lines
https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.9.8-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.9.y
and the diffstat can be found below.thanks,
greg k-h
The following kernel warning was noticed on arm64 Qualcomm db845c device while booting stable-rc 6.9.8-rc1.
This is not always a reproducible warning.
Boot log:
------
[ 0.000000] Linux version 6.9.8-rc1 (tuxmake@tuxmake) (Debian clang version 18.1.8 (++20240615103650+3b5b5c1ec4a3-1~exp1~20240615223815.136), Debian LLD 18.1.8) #1 SMP PREEMPT @1719942561 [ 0.000000] KASLR enabled [ 0.000000] Machine model: Thundercomm Dragonboard 845c ... [ 7.097994] ------------[ cut here ]------------ [ 7.097997] WARNING: CPU: 5 PID: 418 at block/blk-mq.c:262 blk_mq_unquiesce_tagset (/builds/linux/block/blk-mq.c:295 /builds/linux/block/blk-mq.c:297) [ 7.098009] Modules linked in: drm_display_helper qcom_q6v5_mss
camcc_sdm845 i2c_qcom_geni videobuf2_memops qcom_rng bluetooth videobuf2_common spi_geni_qcom qrtr gpi phy_qcom_qmp_usb aux_bridge stm_core slim_qcom_ngd_ctrl qcrypto phy_qcom_qmp_ufs cfg80211 rfkill icc_osm_l3 phy_qcom_qmp_pcie lmh ufs_qcom slimbus qcom_wdt pdr_interface llcc_qcom qcom_q6v5_pas(+) qcom_pil_info icc_bwmon qcom_q6v5 display_connector qcom_sysmon qcom_common drm_kms_helper qcom_glink_smem mdt_loader qmi_helpers drm backlight socinfo rmtfs_mem
[ 7.098062] Hardware name: Thundercomm Dragonboard 845c (DT) [ 7.098064] Workqueue: devfreq_wq devfreq_monitor [ 7.098071] pstate: 604000c5 (nZCv daIF +PAN -UAO -TCO -DIT -SSBS BTYPE=--) [ 7.098074] pc : blk_mq_unquiesce_tagset (/builds/linux/block/blk-mq.c:295 /builds/linux/block/blk-mq.c:297) [ 7.098077] lr : blk_mq_unquiesce_tagset (/builds/linux/block/blk-mq.c:262 /builds/linux/block/blk-mq.c:297) [ 7.098080] sp : ffff8000812f3b40 [ 7.098081] x29: ffff8000812f3b40 x28: 00000000000f4240 x27: 20c49ba5e353f7cf [ 7.098086] x26: 0000000000000000 x25: 0000000000000000 x24: ffff5bbe0a2e9910 [ 7.098089] x23: ffff5bbe01f1a170 x22: ffff5bbe0a2e9220 x21: 0000000000000000 [ 7.098093] x20: ffff5bbe0a2e9620 x19: ffff5bbe01f1a0e0 x18: 0000000000000002 [ 7.098096] x17: 0000000000000400 x16: 0000000000000400 x15: 00000000a63e566e [ 7.098099] x14: 0000000000015eb9 x13: ffff8000812f0000 x12: ffff8000812f4000 [ 7.098103] x11: 7cea885bfc7e6700 x10: ffffb0c2e5eb69ac x9 : 0000000000000000 [ 7.098106] x8 : ffff5bbe0a2e9624 x7 : ffff5bbe0c828000 x6 : 0000000000000003 [ 7.098110] x5 : 00000000000009d3 x4 : 000000000000039e x3 : ffff8000812f3af0 [ 7.098113] x2 : ffff5bbe0a2acc00 x1 : 0000000000000000 x0 : 0000000000000000 [ 7.098117] Call trace: [ 7.098118] blk_mq_unquiesce_tagset (/builds/linux/block/blk-mq.c:295 /builds/linux/block/blk-mq.c:297) [ 7.098121] ufshcd_devfreq_scale (/builds/linux/drivers/ufs/core/ufshcd.c:2050 /builds/linux/drivers/ufs/core/ufshcd.c:1426 /builds/linux/drivers/ufs/core/ufshcd.c:1472) [ 7.098126] ufshcd_devfreq_target (/builds/linux/drivers/ufs/core/ufshcd.c:1581) [ 7.098129] devfreq_set_target (/builds/linux/drivers/devfreq/devfreq.c:364) [ 7.098132] devfreq_update_target (/builds/linux/drivers/devfreq/devfreq.c:0) [ 7.098134] devfreq_monitor (/builds/linux/drivers/devfreq/devfreq.c:461) [ 7.098136] process_scheduled_works (/builds/linux/kernel/workqueue.c:3272 /builds/linux/kernel/workqueue.c:3348) [ 7.098141] worker_thread (/builds/linux/include/linux/list.h:373 /builds/linux/kernel/workqueue.c:955 /builds/linux/kernel/workqueue.c:3430) [ 7.098143] kthread (/builds/linux/kernel/kthread.c:390) [ 7.098146] ret_from_fork (/builds/linux/arch/arm64/kernel/entry.S:861) [ 7.098150] ---[ end trace 0000000000000000 ]---
Full boot log link:
- https://qa-reports.linaro.org/lkft/linux-stable-rc-linux-6.9.y/build/v6.9.7-223-g03247eed042d/testrun/24504400/suite/log-parser-boot/test/check-kernel-exception/log
- https://lkft.validation.linaro.org/scheduler/job/7711345#L5312
Details of build and test environment:
- https://tuxapi.tuxsuite.com/v1/groups/linaro/projects/lkft/tests/2ihUJNrmztabOMpKVRNzLpixoUR
Build, vmlinux, System.map and Image,
- https://storage.tuxsuite.com/public/linaro/lkft/builds/2ihUHH774XQWba653iwCVtCnpjl/
metadata:
-------
git_describe: v6.9.7-223-g03247eed042d
git_repo: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git
git_sha: 03247eed042d6a770c3a2adaeed6b7b4a0f0b46c
kernel-config:
https://storage.tuxsuite.com/public/linaro/lkft/builds/2ihUHH774XQWba653iwCVtCnpjl/config
kernel_version: 6.9.8-rc1
toolchain: clang-18
build-url: https://storage.tuxsuite.com/public/linaro/lkft/builds/2ihUHH774XQWba653iwCVtCnpjl/
build_name: clang-18-lkftconfig
--
Linaro LKFT
https://lkft.linaro.org
Quoted 19 lines · Naresh Kamboju
Quoted 17 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.9.8 release. There are 222 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Thu, 04 Jul 2024 17:01:55 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.9.8-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.9.y
and the diffstat can be found below.thanks,
Quoted 7 lines
Quoted 2 lines
greg k-h
The following kernel warning was noticed on arm64 Qualcomm db845c device while booting stable-rc 6.9.8-rc1.
This is not always a reproducible warning.
I see that commit 77691af484e2 ("scsi: ufs: core: Quiesce request queues before checking pending cmds") got backported, and this adds direct calls to the function that warns, so this is my first suspicion without having done a detailed analysis.
Adding everyone from that commit to Cc.
Naresh, could you try reverting that commit?
Arnd
Quoted 93 lines
Boot log:
------[ 0.000000] Linux version 6.9.8-rc1 (tuxmake@tuxmake) (Debian clang version 18.1.8 (++20240615103650+3b5b5c1ec4a3-1~exp1~20240615223815.136), Debian LLD 18.1.8) #1 SMP PREEMPT @1719942561 [ 0.000000] KASLR enabled [ 0.000000] Machine model: Thundercomm Dragonboard 845c ... [ 7.097994] ------------[ cut here ]------------ [ 7.097997] WARNING: CPU: 5 PID: 418 at block/blk-mq.c:262 blk_mq_unquiesce_tagset (/builds/linux/block/blk-mq.c:295 /builds/linux/block/blk-mq.c:297) [ 7.098009] Modules linked in: drm_display_helper qcom_q6v5_mss
camcc_sdm845i2c_qcom_genivideobuf2_memopsqcom_rngbluetoothvideobuf2_commonspi_geni_qcomqrtr gpiphy_qcom_qmp_usbaux_bridgestm_coreslim_qcom_ngd_ctrlqcryptophy_qcom_qmp_ufscfg80211 rfkillicc_osm_l3phy_qcom_qmp_pcielmhufs_qcomslimbusqcom_wdtpdr_interfacellcc_qcomqcom_q6v5_pas(+)qcom_pil_infoicc_bwmonqcom_q6v5display_connectorqcom_sysmonqcom_commondrm_kms_helperqcom_glink_smemmdt_loaderqmi_helpersdrm backlight socinformtfs_mem[ 7.098062] Hardware name: Thundercomm Dragonboard 845c (DT) [ 7.098064] Workqueue: devfreq_wq devfreq_monitor [ 7.098071] pstate: 604000c5 (nZCv daIF +PAN -UAO -TCO -DIT -SSBS BTYPE=--) [ 7.098074] pc : blk_mq_unquiesce_tagset (/builds/linux/block/blk-mq.c:295 /builds/linux/block/blk-mq.c:297) [ 7.098077] lr : blk_mq_unquiesce_tagset (/builds/linux/block/blk-mq.c:262 /builds/linux/block/blk-mq.c:297) [ 7.098080] sp : ffff8000812f3b40 [ 7.098081] x29: ffff8000812f3b40 x28: 00000000000f4240 x27: 20c49ba5e353f7cf [ 7.098086] x26: 0000000000000000 x25: 0000000000000000 x24: ffff5bbe0a2e9910 [ 7.098089] x23: ffff5bbe01f1a170 x22: ffff5bbe0a2e9220 x21: 0000000000000000 [ 7.098093] x20: ffff5bbe0a2e9620 x19: ffff5bbe01f1a0e0 x18: 0000000000000002 [ 7.098096] x17: 0000000000000400 x16: 0000000000000400 x15: 00000000a63e566e [ 7.098099] x14: 0000000000015eb9 x13: ffff8000812f0000 x12: ffff8000812f4000 [ 7.098103] x11: 7cea885bfc7e6700 x10: ffffb0c2e5eb69ac x9 : 0000000000000000 [ 7.098106] x8 : ffff5bbe0a2e9624 x7 : ffff5bbe0c828000 x6 : 0000000000000003 [ 7.098110] x5 : 00000000000009d3 x4 : 000000000000039e x3 : ffff8000812f3af0 [ 7.098113] x2 : ffff5bbe0a2acc00 x1 : 0000000000000000 x0 : 0000000000000000 [ 7.098117] Call trace: [ 7.098118] blk_mq_unquiesce_tagset (/builds/linux/block/blk-mq.c:295 /builds/linux/block/blk-mq.c:297) [ 7.098121] ufshcd_devfreq_scale (/builds/linux/drivers/ufs/core/ufshcd.c:2050 /builds/linux/drivers/ufs/core/ufshcd.c:1426 /builds/linux/drivers/ufs/core/ufshcd.c:1472) [ 7.098126] ufshcd_devfreq_target (/builds/linux/drivers/ufs/core/ufshcd.c:1581) [ 7.098129] devfreq_set_target (/builds/linux/drivers/devfreq/devfreq.c:364) [ 7.098132] devfreq_update_target (/builds/linux/drivers/devfreq/devfreq.c:0) [ 7.098134] devfreq_monitor (/builds/linux/drivers/devfreq/devfreq.c:461) [ 7.098136] process_scheduled_works (/builds/linux/kernel/workqueue.c:3272 /builds/linux/kernel/workqueue.c:3348) [ 7.098141] worker_thread (/builds/linux/include/linux/list.h:373 /builds/linux/kernel/workqueue.c:955 /builds/linux/kernel/workqueue.c:3430) [ 7.098143] kthread (/builds/linux/kernel/kthread.c:390) [ 7.098146] ret_from_fork (/builds/linux/arch/arm64/kernel/entry.S:861) [ 7.098150] ---[ end trace 0000000000000000 ]---Full boot log link:
-
https://qa-reports.linaro.org/lkft/linux-stable-rc-linux-6.9.y/build/v6.9.7-223-g03247eed042d/testrun/24504400/suite/log-parser-boot/test/check-kernel-exception/log
- https://lkft.validation.linaro.org/scheduler/job/7711345#L5312Details of build and test environment:
-
https://tuxapi.tuxsuite.com/v1/groups/linaro/projects/lkft/tests/2ihUJNrmztabOMpKVRNzLpixoURBuild, vmlinux, System.map and Image,
-
https://storage.tuxsuite.com/public/linaro/lkft/builds/2ihUHH774XQWba653iwCVtCnpjl/metadata:
-------
git_describe: v6.9.7-223-g03247eed042dgit_repo:
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git
git_sha:03247eed042d6a770c3a2adaeed6b7b4a0f0b46ckernel-config:
https://storage.tuxsuite.com/public/linaro/lkft/builds/2ihUHH774XQWba653iwCVtCnpjl/config
kernel_version: 6.9.8-rc1
toolchain: clang-18
build-url:
https://storage.tuxsuite.com/public/linaro/lkft/builds/2ihUHH774XQWba653iwCVtCnpjl/
build_name: clang-18-lkftconfig--
Linaro LKFT
https://lkft.linaro.org
Quoted 29 lines · Arnd Bergmann
Quoted 19 lines · Naresh Kamboju
Quoted 17 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.9.8 release. There are 222 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Thu, 04 Jul 2024 17:01:55 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.9.8-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.9.y
and the diffstat can be found below.thanks,
Quoted 7 lines
Quoted 2 lines
greg k-h
The following kernel warning was noticed on arm64 Qualcomm db845c device while booting stable-rc 6.9.8-rc1.
This is not always a reproducible warning.
Quoted 8 lines
I see that commit
77691af484e2("scsi: ufs: core: Quiesce request queues before checking pending cmds") got backported, and this adds direct calls to the function that warns, so this is my first suspicion without having done a detailed analysis.Adding everyone from that commit to Cc.
Naresh, could you try reverting that commit?
I have reverted the above patch and boot tested and it works. Since the reported problem is not easy to reproduce It is hard to confirm that the issue has been fixed.
However, I have submitted jobs with and without the patch and running tests in a loop.
Quoted 2 lines
Arnd
- Naresh
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.9.8 release. There are 222 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Thu, 04 Jul 2024 17:01:55 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 8 lines
https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.9.8-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.9.y
and the diffstat can be found below.thanks,
greg k-h
Tested rc1 against the Fedora build system (aarch64, ppc64le, s390x, x86_64), and boot tested x86_64. No regressions noted.
Hi!
Quoted 4 lines
This is the start of the stable review cycle for the 6.9.8 release. There are 222 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
CIP testing did not find any problems here:
https://gitlab.com/cip-project/cip-testing/linux-stable-rc-ci/-/tree/linux-6.9.y
6.6, 5.15, 5.4 pass our testing, too:
https://gitlab.com/cip-project/cip-testing/linux-stable-rc-ci/-/tree/linux-6.6.y
https://gitlab.com/cip-project/cip-testing/linux-stable-rc-ci/-/tree/linux-5.15.y
https://gitlab.com/cip-project/cip-testing/linux-stable-rc-ci/-/tree/linux-5.4.y
Best regards,
Pavel
Signature · 2 lines
DENX Software Engineering GmbH, Managing Director: Erika Unter HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Am 02.07.2024 um 19:00 schrieb Greg Kroah-Hartman:
Quoted 4 lines
This is the start of the stable review cycle for the 6.9.8 release. There are 222 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Builds, boots and works on my 2-socket Ivy Bridge Xeon E5-2697 v2 server. No dmesg oddities or regressions found.
Beste Grüße,
Peter Schneider
Signature · 8 lines
Climb the mountain not to plant your flag, but to embrace the challenge, enjoy the air and behold the view. Climb it so you can see the world, not so the world can see you. -- David McCullough Jr. OpenPGP: 0xA3828BD796CCE11A8CADE8866E3A92C92C3FF244 Download: https://www.peters-netzplatz.de/download/pschneider1968_pub.asc https://keys.mailvelope.com/pks/lookup?op=get&[email protected] https://keys.mailvelope.com/pks/lookup?op=get&[email protected]
Quoted 8 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.9.8 release. There are 222 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Thu, 04 Jul 2024 17:01:55 +0000. Anything received after that time might be too late.
No regressions found on WSL (x86 and arm64).
Built, booted, and reviewed dmesg.
Thank you. :)
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.9.8 release. There are 222 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Thu, 04 Jul 2024 17:01:55 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 8 lines
https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.9.8-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.9.y
and the diffstat can be found below.thanks,
greg k-h
Built and booted successfully on RISC-V RV64 (HiFive Unmatched).
Quoted 10 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.9.8 release. There are 222 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Thu, 04 Jul 2024 17:01:55 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 8 lines
https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.9.8-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.9.y
and the diffstat can be found below.thanks,
greg k-h
Results from Linaro’s test farm.
No regressions on arm64, arm, x86_64, and i386.
NOTE:
Reported boot warning on arm64 db845c,
WARNING: CPU: 5 PID: 418 at block/blk-mq.c:262 blk_mq_unquiesce_tagset
(block/blk-mq.c:295 block/blk-mq.c:297))
Reported on below email thread,
- https://lore.kernel.org/stable/CA+G9fYuK+dFrz3dcuUkxbP3R-5NUiSVNJ3tAcRc=Wn=Hs0C5ng@mail.gmail.com/
## Build
* kernel: 6.9.8-rc1
* git: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git
* git commit: 03247eed042d6a770c3a2adaeed6b7b4a0f0b46c
* git describe: v6.9.7-223-g03247eed042d
* test details:
https://qa-reports.linaro.org/lkft/linux-stable-rc-linux-6.9.y/build/v6.9.7-223-g03247eed042d
## Test Regressions (compared to v6.9.6-251-g681fedcb9fc6)
## Metric Regressions (compared to v6.9.6-251-g681fedcb9fc6)
## Test Fixes (compared to v6.9.6-251-g681fedcb9fc6)
## Metric Fixes (compared to v6.9.6-251-g681fedcb9fc6)
## Test result summary
total: 253786, pass: 219442, fail: 4430, skip: 29914, xfail: 0
## Build Summary
* arc: 5 total, 5 passed, 0 failed
* arm: 127 total, 127 passed, 0 failed
* arm64: 36 total, 36 passed, 0 failed
* i386: 27 total, 27 passed, 0 failed
* mips: 24 total, 24 passed, 0 failed
* parisc: 3 total, 3 passed, 0 failed
* powerpc: 34 total, 34 passed, 0 failed
* riscv: 17 total, 17 passed, 0 failed
* s390: 12 total, 12 passed, 0 failed
* sh: 10 total, 10 passed, 0 failed
* sparc: 6 total, 6 passed, 0 failed
* x86_64: 31 total, 31 passed, 0 failed
## Test suites summary
* boot
* kselftest-arm64
* kselftest-breakpoints
* kselftest-capabilities
* kselftest-cgroup
* kselftest-clone3
* kselftest-core
* kselftest-cpu-hotplug
* kselftest-cpufreq
* kselftest-efivarfs
* kselftest-exec
* kselftest-filesystems
* kselftest-filesystems-binderfs
* kselftest-filesystems-epoll
* kselftest-firmware
* kselftest-fpu
* kselftest-ftrace
* kselftest-futex
* kselftest-gpio
* kselftest-intel_pstate
* kselftest-ipc
* kselftest-kcmp
* kselftest-kvm
* kselftest-livepatch
* kselftest-membarrier
* kselftest-memfd
* kselftest-mincore
* kselftest-mqueue
* kselftest-net
* kselftest-net-mptcp
* kselftest-openat2
* kselftest-ptrace
* kselftest-rseq
* kselftest-rtc
* kselftest-seccomp
* kselftest-sigaltstack
* kselftest-size
* kselftest-tc-testing
* kselftest-timers
* kselftest-tmpfs
* kselftest-tpm2
* kselftest-user_events
* kselftest-vDSO
* kselftest-watchdog
* kselftest-x86
* kunit
* kvm-unit-tests
* libgpiod
* libhugetlbfs
* log-parser-boot
* log-parser-test
* ltp-commands
* ltp-containers
* ltp-controllers
* ltp-cpuhotplug
* ltp-crypto
* ltp-cve
* ltp-dio
* ltp-fcntl-locktests
* ltp-fs
* ltp-fs_bind
* ltp-fs_perms_simple
* ltp-hugetlb
* ltp-ipc
* ltp-math
* ltp-mm
* ltp-nptl
* ltp-pty
* ltp-sched
* ltp-smoke
* ltp-smoketest
* ltp-syscalls
* ltp-tracing
* perf
* rcutorture
--
Linaro LKFT
https://lkft.linaro.org
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 6.9.8 release. There are 222 patches in this series, all will be posted as a response to this one. If anyone has any issues with these being applied, please let me know.
Responses should be made by Thu, 04 Jul 2024 17:01:55 +0000. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 8 lines
https://www.kernel.org/pub/linux/kernel/v6.x/stable-review/patch-6.9.8-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-6.9.y
and the diffstat can be found below.thanks,
greg k-h
On ARCH_BRCMSTB using 32-bit and 64-bit ARM kernels, build tested on BMIPS_GENERIC:
Signature · 1 line
Florian