5.14.3-rc1 review
Subsystems (2)
Greg Kroah-Hartman
maintainercover 5.14.3-rc1 review
This is the start of the stable review cycle for the 5.14.3 release. There are 23 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 Sun, 12 Sep 2021 12:29:07 +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/v5.x/stable-review/patch-5.14.3-rc1.gz
or in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-5.14.y
and the diffstat can be found below.
thanks,
greg k-h
-------------
Pseudo-Shortlog of commits:
Greg Kroah-Hartman <[email protected]>
Linux 5.14.3-rc1
Alison Schofield <[email protected]>
cxl/acpi: Do not add DSDT disabled ACPI0016 host bridge ports
Dan Williams <[email protected]>
cxl/pci: Fix lockdown level
Li Qiang (Johnny Li) <[email protected]>
cxl/pci: Fix debug message in cxl_probe_regs()
Marek Behún <[email protected]>
PCI: Call Max Payload Size-related fixup quirks early
Paul Gortmaker <[email protected]>
x86/reboot: Limit Dell Optiplex 990 quirk to early BIOS versions
Sergio Paracuellos <[email protected]>
staging: mt7621-pci: fix hang when nothing is connected to pcie ports
Mathias Nyman <[email protected]>
xhci: Fix failure to give back some cached cancelled URBs.
Mathias Nyman <[email protected]>
xhci: fix unsafe memory usage in xhci tracing
Mathias Nyman <[email protected]>
xhci: fix even more unsafe memory usage in xhci tracing
Chunfeng Yun <[email protected]>
usb: mtu3: fix the wrong HS mult value
Chunfeng Yun <[email protected]>
usb: mtu3: use @mult for HS isoc or intr
Chunfeng Yun <[email protected]>
usb: mtu3: restore HS function when set SS/SSP
Chunfeng Yun <[email protected]>
usb: gadget: tegra-xudc: fix the wrong mult value for HS isoc or intr
Chunfeng Yun <[email protected]>
usb: cdnsp: fix the wrong mult value for HS isoc or intr
Chunfeng Yun <[email protected]>
usb: xhci-mtk: fix issue of out-of-bounds array access
Yoshihiro Shimoda <[email protected]>
usb: host: xhci-rcar: Don't reload firmware after the completion
Ismael Ferreras Morezuelas <[email protected]>
Bluetooth: btusb: Make the CSR clone chip force-suspend workaround more generic
Larry Finger <[email protected]>
Bluetooth: Add additional Bluetooth part for Realtek 8852AE
Alexander Tsoy <[email protected]>
ALSA: usb-audio: Add registration quirk for JBL Quantum 800
Hayes Wang <[email protected]>
Revert "r8169: avoid link-up interrupt issue on RTL8106e if user enables ASPM"
Liu Jian <[email protected]>
igmp: Add ip_mc_list lock in ip_check_mc_rcu
Tong Zhang <[email protected]>
can: c_can: fix null-ptr-deref on ioctl()
Hans de Goede <[email protected]>
firmware: dmi: Move product_sku info to the end of the modalias
-------------
Diffstat:
Makefile | 4 +- arch/x86/kernel/reboot.c | 3 +- drivers/bluetooth/btusb.c | 59 ++++++++++++++----------- drivers/cxl/acpi.c | 12 +++-- drivers/cxl/pci.c | 6 +-- drivers/firmware/dmi-id.c | 6 ++- drivers/net/can/c_can/c_can_ethtool.c | 4 +- drivers/net/ethernet/realtek/r8169_main.c | 1 + drivers/pci/quirks.c | 12 ++--- drivers/staging/mt7621-pci/pci-mt7621.c | 13 +++++- drivers/usb/cdns3/cdnsp-mem.c | 2 +- drivers/usb/gadget/udc/tegra-xudc.c | 4 +- drivers/usb/host/xhci-debugfs.c | 14 ++++-- drivers/usb/host/xhci-mtk-sch.c | 10 +++-- drivers/usb/host/xhci-rcar.c | 7 +++ drivers/usb/host/xhci-ring.c | 43 +++++++++++------- drivers/usb/host/xhci-trace.h | 26 ++++++----- drivers/usb/host/xhci.h | 73 +++++++++++++++---------------- drivers/usb/mtu3/mtu3_core.c | 4 +- drivers/usb/mtu3/mtu3_gadget.c | 6 +-- net/ipv4/igmp.c | 2 + sound/usb/quirks.c | 1 + 22 files changed, 185 insertions(+), 127 deletions(-)
Greg Kroah-Hartman
maintainerPATCH 1/23 firmware: dmi: Move product_sku info to the end of the modalias
From: Hans de Goede <[email protected]>
commit f97a2103f1a75ca70f23deadb4d96a16c4d85e7d upstream.
Commit e26f023e01ef ("firmware/dmi: Include product_sku info to modalias") added a new field to the modalias in the middle of the modalias, breaking some existing udev/hwdb matches on the whole modalias without a wildcard ('*') in between the pvr and rvn fields.
All modalias matches in e.g. :
https://github.com/systemd/systemd/blob/main/hwdb.d/60-sensor.hwdb
deliberately end in ':*' so that new fields can be added at *the end* of the modalias, but adding a new field in the middle like this breaks things.
Move the new sku field to the end of the modalias to fix some hwdb entries no longer matching.
The new sku field has already been put to use in 2 new hwdb entries:
sensor:modalias:platform:HID-SENSOR-200073:dmi:*svnDell*:sku0A3E:*
ACCEL_LOCATION=base
sensor:modalias:platform:HID-SENSOR-200073:dmi:*svnDell*:sku0B0B:*
ACCEL_LOCATION=base
The wildcard use before and after the sku in these matches means that they should keep working with the sku moved to the end.
Note that there is a second instance of in essence the same problem, commit f5152f4ded3c ("firmware/dmi: Report DMI Bios & EC firmware release")
Added 2 new br and efr fields in the middle of the modalias. This too breaks some hwdb modalias matches, but this has gone unnoticed for over a year. So some newer hwdb modalias matches actually depend on these fields being in the middle of the string. Moving these to the end now would break 3 hwdb entries, while fixing 8 entries.
Since there is no good answer for the new br and efr fields I have chosen to leave these as is. Instead I'll submit a hwdb update to put a wildcard at the place where these fields may or may not be present depending on the kernel version.
--- drivers/firmware/dmi-id.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
drivers/firmware/dmi-id.c +5 -1
@@ -73,6 +73,10 @@ static void ascii_filter(char *d, conststatic ssize_t get_modalias (char *buffer,size_t buffer_size) { +/* +* Note new fields need to be added at the end to keep compatibility +* with udev's hwdb which does matches on "`cat dmi/id/modalias`*". +*/ static const struct mafield { const char *prefix; int field;
@@ -85,13 +89,13 @@ static ssize_t get_modalias(char *buffer { "svn", DMI_SYS_VENDOR }, { "pn", DMI_PRODUCT_NAME }, { "pvr", DMI_PRODUCT_VERSION }, - { "sku", DMI_PRODUCT_SKU }, { "rvn", DMI_BOARD_VENDOR }, { "rn", DMI_BOARD_NAME }, { "rvr", DMI_BOARD_VERSION }, { "cvn", DMI_CHASSIS_VENDOR }, { "ct", DMI_CHASSIS_TYPE }, { "cvr", DMI_CHASSIS_VERSION }, + { "sku", DMI_PRODUCT_SKU }, { NULL, DMI_NONE } };
Greg Kroah-Hartman
maintainerPATCH 2/23 can: c_can: fix null-ptr-deref on ioctl()
In reply to Greg Kroah-HartmanFrom: Tong Zhang <[email protected]>
commit 644d0a5bcc3361170d84fb8d0b13943c354119db upstream.
The pdev maybe not a platform device, e.g. c_can_pci device, in this case, calling to_platform_device() would not make sense. Also, per the comment in drivers/net/can/c_can/c_can_ethtool.c, @bus_info should match dev_name() string, so I am replacing this with dev_name() to fix this issue.
[ 1.458583] BUG: unable to handle page fault for address: 0000000100000000 [ 1.460921] RIP: 0010:strnlen+0x1a/0x30 [ 1.466336] ? c_can_get_drvinfo+0x65/0xb0 [c_can] [ 1.466597] ethtool_get_drvinfo+0xae/0x360 [ 1.466826] dev_ethtool+0x10f8/0x2970 [ 1.467880] sock_ioctl+0xef/0x300
--- drivers/net/can/c_can/c_can_ethtool.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-)
drivers/net/can/c_can/c_can_ethtool.c +1 -3
@@ -15,10 +15,8 @@ static void c_can_get_drvinfo(struct net struct ethtool_drvinfo *info) {struct c_can_priv *priv =netdev_priv (netdev); -struct platform_device *pdev =to_platform_device (priv->device); -strscpy (info->driver,"c_can" ,sizeof (info->driver)); -strscpy (info->bus_info, pdev->name,sizeof (info->bus_info)); +strscpy (info->bus_info,dev_name (priv->device),sizeof (info->bus_info)); } static void c_can_get_ringparam(struct net_device *netdev,
Greg Kroah-Hartman
maintainerPATCH 3/23 igmp: Add ip_mc_list lock in ip_check_mc_rcu
In reply to Greg Kroah-HartmanFrom: Liu Jian <[email protected]>
commit 23d2b94043ca8835bd1e67749020e839f396a1c2 upstream.
I got below panic when doing fuzz test:
Kernel panic - not syncing: panic_on_warn set ... CPU: 0 PID: 4056 Comm: syz-executor.3 Tainted: G B 5.14.0-rc1-00195-gcff5c4254439-dirty #2 Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.12.0-59-gc9ba5276e321-prebuilt.qemu.org 04/01/2014 Call Trace: dump_stack_lvl+0x7a/0x9b panic+0x2cd/0x5af end_report.cold+0x5a/0x5a kasan_report+0xec/0x110 ip_check_mc_rcu+0x556/0x5d0 __mkroute_output+0x895/0x1740 ip_route_output_key_hash_rcu+0x2d0/0x1050 ip_route_output_key_hash+0x182/0x2e0 ip_route_output_flow+0x28/0x130 udp_sendmsg+0x165d/0x2280 udpv6_sendmsg+0x121e/0x24f0 inet6_sendmsg+0xf7/0x140 sock_sendmsg+0xe9/0x180 ____sys_sendmsg+0x2b8/0x7a0 ___sys_sendmsg+0xf0/0x160 __sys_sendmmsg+0x17e/0x3c0 __x64_sys_sendmmsg+0x9e/0x100 do_syscall_64+0x3b/0x90 entry_SYSCALL_64_after_hwframe+0x44/0xae RIP: 0033:0x462eb9 Code: f7 d8 64 89 02 b8 ff ff ff ff c3 66 0f 1f 44 00 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 bc ff ff ff f7 d8 64 89 01 48 RSP: 002b:00007f3df5af1c58 EFLAGS: 00000246 ORIG_RAX: 0000000000000133 RAX: ffffffffffffffda RBX: 000000000073bf00 RCX: 0000000000462eb9 RDX: 0000000000000312 RSI: 0000000020001700 RDI: 0000000000000007 RBP: 0000000000000004 R08: 0000000000000000 R09: 0000000000000000 R10: 0000000000000000 R11: 0000000000000246 R12: 00007f3df5af26bc R13: 00000000004c372d R14: 0000000000700b10 R15: 00000000ffffffff
It is one use-after-free in ip_check_mc_rcu.
In ip_mc_del_src, the ip_sf_list of pmc has been freed under pmc->lock protection. But access to ip_sf_list in ip_check_mc_rcu is not protected by the lock.
--- net/ipv4/igmp.c | 2 ++ 1 file changed, 2 insertions(+)
net/ipv4/igmp.c +2 -0
@@ -2720,6 +2720,7 @@ int ip_check_mc_rcu(struct in_device *in rv =1 ; }else if (im) {if (src_addr) { +spin_lock_bh (&im->lock);for (psf = im->sources; psf; psf = psf->sf_next) {if (psf->sf_inaddr == src_addr)break ;
@@ -2730,6 +2731,7 @@ int ip_check_mc_rcu(struct in_device *in im->sfcount[MCAST_EXCLUDE ]; else rv = im->sfcount[MCAST_EXCLUDE ] !=0 ; +spin_unlock_bh (&im->lock); }else rv =1 ;/* unspecified source; tentatively allow */ }
Greg Kroah-Hartman
maintainerPATCH 4/23 Revert "r8169: avoid link-up interrupt issue on RTL8106e if user enables ASPM"
In reply to Greg Kroah-HartmanFrom: Hayes Wang <[email protected]>
commit 2115d3d482656ea702f7cf308c0ded3500282903 upstream.
This reverts commit 1ee8856de82faec9bc8bd0f2308a7f27e30ba207.
This is used to re-enable ASPM on RTL8106e, if it is possible.
--- drivers/net/ethernet/realtek/r8169_main.c | 1 + 1 file changed, 1 insertion(+)
drivers/net/ethernet/realtek/r8169_main.c +1 -0
@@ -3489,6 +3489,7 @@ static void rtl_hw_start_8402(struct rtlrtl_eri_write (tp,0x1b0 ,ERIAR_MASK_0011 ,0x0000 );rtl_pcie_state_l2l3_disable (tp); +rtl_hw_aspm_clkreq_enable (tp, true); }static void rtl_hw_start_8106 (struct rtl8169_private *tp)
Greg Kroah-Hartman
maintainerPATCH 5/23 ALSA: usb-audio: Add registration quirk for JBL Quantum 800
In reply to Greg Kroah-HartmanFrom: Alexander Tsoy <[email protected]>
commit c8b177b6e3a005bd8fb0395a4bc5db3470301c28 upstream.
Add another device ID for JBL Quantum 800. It requires the same quirk as other JBL Quantum devices.
--- sound/usb/quirks.c | 1 + 1 file changed, 1 insertion(+)
sound/usb/quirks.c +1 -0
@@ -1898,6 +1898,7 @@ static const struct registration_quirk rREG_QUIRK_ENTRY (0x0951 ,0x16ed ,2 ),/* Kingston HyperX Cloud Alpha S */ REG_QUIRK_ENTRY (0x0951 ,0x16ea ,2 ),/* Kingston HyperX Cloud Flight S */ REG_QUIRK_ENTRY (0x0ecb ,0x1f46 ,2 ),/* JBL Quantum 600 */ +REG_QUIRK_ENTRY (0x0ecb ,0x1f47 ,2 ),/* JBL Quantum 800 */ REG_QUIRK_ENTRY (0x0ecb ,0x2039 ,2 ),/* JBL Quantum 400 */ REG_QUIRK_ENTRY (0x0ecb ,0x203c ,2 ),/* JBL Quantum 600 */ REG_QUIRK_ENTRY(0x0ecb, 0x203e, 2), /* JBL Quantum 800 */
Greg Kroah-Hartman
maintainerPATCH 6/23 Bluetooth: Add additional Bluetooth part for Realtek 8852AE
In reply to Greg Kroah-HartmanFrom: Larry Finger <[email protected]>
commit 6eefec4a0b668de9bbb33bd3e7acfbcc794162b0 upstream.
This Realtek device has both wifi and BT components. The latter reports a USB ID of 04ca:4006, which is not in the table.
The portion of /sys/kernel/debug/usb/devices pertaining to this device is
T: Bus=02 Lev=01 Prnt=01 Port=12 Cnt=04 Dev#= 4 Spd=12 MxCh= 0 D: Ver= 1.00 Cls=e0(wlcon) Sub=01 Prot=01 MxPS=64 #Cfgs= 1 P: Vendor=04ca ProdID=4006 Rev= 0.00 S: Manufacturer=Realtek S: Product=Bluetooth Radio S: SerialNumber=00e04c000001 C:* #Ifs= 2 Cfg#= 1 Atr=e0 MxPwr=500mA I:* If#= 0 Alt= 0 #EPs= 3 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb E: Ad=81(I) Atr=03(Int.) MxPS= 16 Ivl=1ms E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms E: Ad=82(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms I:* If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb E: Ad=03(O) Atr=01(Isoc) MxPS= 0 Ivl=1ms E: Ad=83(I) Atr=01(Isoc) MxPS= 0 Ivl=1ms I: If#= 1 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb E: Ad=03(O) Atr=01(Isoc) MxPS= 9 Ivl=1ms E: Ad=83(I) Atr=01(Isoc) MxPS= 9 Ivl=1ms I: If#= 1 Alt= 2 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb E: Ad=03(O) Atr=01(Isoc) MxPS= 17 Ivl=1ms E: Ad=83(I) Atr=01(Isoc) MxPS= 17 Ivl=1ms I: If#= 1 Alt= 3 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb E: Ad=03(O) Atr=01(Isoc) MxPS= 25 Ivl=1ms E: Ad=83(I) Atr=01(Isoc) MxPS= 25 Ivl=1ms I: If#= 1 Alt= 4 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb E: Ad=03(O) Atr=01(Isoc) MxPS= 33 Ivl=1ms E: Ad=83(I) Atr=01(Isoc) MxPS= 33 Ivl=1ms I: If#= 1 Alt= 5 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb E: Ad=03(O) Atr=01(Isoc) MxPS= 49 Ivl=1ms E: Ad=83(I) Atr=01(Isoc) MxPS= 49 Ivl=1ms
--- drivers/bluetooth/btusb.c | 4 ++++ 1 file changed, 4 insertions(+)
drivers/bluetooth/btusb.c +4 -0
@@ -452,6 +452,10 @@ static const struct usb_device_id blackl/* Additional Realtek 8822CE Bluetooth devices */ { USB_DEVICE(0x04ca, 0x4005), .driver_info = BTUSB_REALTEK | BTUSB_WIDEBAND_SPEECH }, + /* Bluetooth component of Realtek 8852AE device */ + { USB_DEVICE(0x04ca, 0x4006), .driver_info = BTUSB_REALTEK | + BTUSB_WIDEBAND_SPEECH }, + { USB_DEVICE(0x04c5, 0x161f), .driver_info = BTUSB_REALTEK | BTUSB_WIDEBAND_SPEECH }, { USB_DEVICE(0x0b05, 0x18ef), .driver_info = BTUSB_REALTEK |
Greg Kroah-Hartman
maintainerPATCH 7/23 Bluetooth: btusb: Make the CSR clone chip force-suspend workaround more generic
In reply to Greg Kroah-HartmanFrom: Ismael Ferreras Morezuelas <[email protected]>
commit f4292e2faf522f899b642d2040a2edbcbd455b9f upstream.
Turns out Hans de Goede completed the work I started last year trying to improve Chinese-clone detection of CSR controller chips. Quirk after quirk these Bluetooth dongles are more usable now.
Even after a few BlueZ regressions; these clones are so fickle that some days they stop working altogether. Except on Windows, they work fine.
But this force-suspend initialization quirk seems to mostly do the trick, after a lot of testing Bluetooth now seems to work *all* the time.
The only problem is that the solution ended up being masked under a very stringent check; when there are probably hundreds of fake dongle models out there that benefit from a good reset. Make it so.
--- drivers/bluetooth/btusb.c | 63 ++++++++++++++++++++++++---------------------- 1 file changed, 34 insertions(+), 29 deletions(-)
drivers/bluetooth/btusb.c +34 -29
@@ -1899,7 +1899,7 @@ static int btusb_setup_csr(struct hci_de is_fake = true;if (is_fake) { -bt_dev_warn (hdev,"CSR: Unbranded CSR clone detected; adding workarounds..." ); +bt_dev_warn (hdev,"CSR: Unbranded CSR clone detected; adding workarounds and force-suspending once..." );/* Generally these clones have big discrepancies between * advertised features and what's actually supported.
@@ -1916,41 +1916,46 @@ static int btusb_setup_csr(struct hci_declear_bit (HCI_QUIRK_SIMULTANEOUS_DISCOVERY , &hdev->quirks);/* -* Special workaround for clones with a Barrot 8041a02 chip, -* these clones are really messed-up: -* 1. Their bulk rx endpoint will never report any data unless -* the device was suspended at least once (yes really). +* Special workaround for these BT 4.0 chip clones, and potentially more: +* +* - 0x0134: a Barrot 8041a02 (HCI rev: 0x1012 sub: 0x0810) +* - 0x7558: IC markings FR3191AHAL 749H15143 (HCI rev/sub-version: 0x0709) +* +* These controllers are really messed-up. +* +* 1. Their bulk RX endpoint will never report any data unless +* the device was suspended at least once (yes, really). * 2. They will not wakeup when autosuspended and receiving data -* on their bulk rx endpoint from e.g. a keyboard or mouse +* on their bulk RX endpoint from e.g. a keyboard or mouse * (IOW remote-wakeup support is broken for the bulk endpoint). * * To fix 1. enable runtime-suspend, force-suspend the -* hci and then wake-it up by disabling runtime-suspend. +* HCI and then wake-it up by disabling runtime-suspend. * -* To fix 2. clear the hci's can_wake flag, this way the hci +* To fix 2. clear the HCI's can_wake flag, this way the HCI * will still be autosuspended when it is not open. +* +* -- +* +* Because these are widespread problems we prefer generic solutions; so +* apply this initialization quirk to every controller that gets here, +* it should be harmless. The alternative is to not work at all. */ -if (bcdDevice ==0x8891 && -le16_to_cpu (rp->lmp_subver) ==0x1012 && -le16_to_cpu (rp->hci_rev) ==0x0810 && -le16_to_cpu (rp->hci_ver) ==BLUETOOTH_VER_4_0 ) { -bt_dev_warn (hdev,"CSR: detected a fake CSR dongle using a Barrot 8041a02 chip, this chip is very buggy and may have issues" ); - -pm_runtime_allow (&data->udev->dev); - - ret =pm_runtime_suspend (&data->udev->dev); -if (ret >=0 ) -msleep (200 ); -else -bt_dev_err (hdev,"Failed to suspend the device for Barrot 8041a02 receive-issue workaround" ); - -pm_runtime_forbid (&data->udev->dev); - -device_set_wakeup_capable (&data->udev->dev, false); -/* Re-enable autosuspend if this was requested */ -if (enable_autosuspend) -usb_enable_autosuspend (data->udev); - } +pm_runtime_allow (&data->udev->dev); + + ret =pm_runtime_suspend (&data->udev->dev); +if (ret >=0 ) +msleep (200 ); +else +bt_dev_err (hdev,"CSR: Failed to suspend the device for our Barrot 8041a02 receive-issue workaround" ); + +pm_runtime_forbid (&data->udev->dev); + +device_set_wakeup_capable (&data->udev->dev, false); + +/* Re-enable autosuspend if this was requested */ +if (enable_autosuspend) +usb_enable_autosuspend (data->udev); }kfree_skb (skb);
Greg Kroah-Hartman
maintainerPATCH 8/23 usb: host: xhci-rcar: Dont reload firmware after the completion
In reply to Greg Kroah-HartmanFrom: Yoshihiro Shimoda <[email protected]>
commit 57f3ffdc11143f56f1314972fe86fe17a0dcde85 upstream.
According to the datasheet, "Upon the completion of FW Download, there is no need to write or reload FW.". Otherwise, it's possible to cause unexpected behaviors. So, adds such a condition.
--- drivers/usb/host/xhci-rcar.c | 7 +++++++ 1 file changed, 7 insertions(+)
drivers/usb/host/xhci-rcar.c +7 -0
@@ -134,6 +134,13 @@ static int xhci_rcar_download_firmware(sconst struct soc_device_attribute *attr;const char *firmware_name; +/* +* According to the datasheet, "Upon the completion of FW Download, +* there is no need to write or reload FW". +*/ +if (readl (regs +RCAR_USB3_DL_CTRL ) &RCAR_USB3_DL_CTRL_FW_SUCCESS ) +return 0 ; + attr =soc_device_match (rcar_quirks_match);if (attr) quirks = (uintptr_t )attr->data;
Greg Kroah-Hartman
maintainerPATCH 9/23 usb: xhci-mtk: fix issue of out-of-bounds array access
In reply to Greg Kroah-HartmanFrom: Chunfeng Yun <[email protected]>
commit de5107f473190538a65aac7edea85209cd5c1a8f upstream.
Bus bandwidth array access is based on esit, increase one will cause out-of-bounds issue; for example, when esit is XHCI_MTK_MAX_ESIT, will overstep boundary.
--- drivers/usb/host/xhci-mtk-sch.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-)
drivers/usb/host/xhci-mtk-sch.c +6 -4
@@ -575,10 +575,12 @@ static u32 get_esit_boundary(struct mu3hu32 boundary = sch_ep->esit;if (sch_ep->sch_tt) {/* LS/FS with TT */ -/* tune for CS */ -if (sch_ep->ep_type !=ISOC_OUT_EP ) - boundary++; -else if (boundary >1 )/* normally esit >= 8 for FS/LS */ +/* +* tune for CS, normally esit >= 8 for FS/LS, +* not add one for other types to avoid access array +* out of boundary +*/ +if (sch_ep->ep_type ==ISOC_OUT_EP && boundary >1 ) boundary--; }
Greg Kroah-Hartman
maintainerPATCH 10/23 usb: cdnsp: fix the wrong mult value for HS isoc or intr
In reply to Greg Kroah-HartmanFrom: Chunfeng Yun <[email protected]>
commit e9ab75f26eb9354dfc03aea3401b8cfb42cd6718 upstream.
usb_endpoint_maxp() only returns the bit[10:0] of wMaxPacketSize of endpoint descriptor, not include bit[12:11] anymore, so use usb_endpoint_maxp_mult() instead.
--- drivers/usb/cdns3/cdnsp-mem.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/usb/cdns3/cdnsp-mem.c +1 -1
@@ -882,7 +882,7 @@ static u32 cdnsp_get_endpoint_max_burst(if (g->speed ==USB_SPEED_HIGH && (usb_endpoint_xfer_isoc (pep->endpoint.desc) ||usb_endpoint_xfer_int (pep->endpoint.desc))) -return (usb_endpoint_maxp (pep->endpoint.desc) &0x1800 ) >>11 ; +return usb_endpoint_maxp_mult (pep->endpoint.desc) -1 ;return 0 ; }
Greg Kroah-Hartman
maintainerPATCH 11/23 usb: gadget: tegra-xudc: fix the wrong mult value for HS isoc or intr
In reply to Greg Kroah-HartmanFrom: Chunfeng Yun <[email protected]>
commit eeb0cfb6b2b6b731902e68af641e30bd31be3c7b upstream.
usb_endpoint_maxp() only returns the bit[10:0] of wMaxPacketSize of endpoint descriptor, not includes bit[12:11] anymore, so use usb_endpoint_maxp_mult() instead.
Meanwhile no need AND 0x7ff when get maxp, remove it.
--- drivers/usb/gadget/udc/tegra-xudc.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/usb/gadget/udc/tegra-xudc.c +2 -2
@@ -1610,7 +1610,7 @@ static void tegra_xudc_ep_context_setup(u16 maxpacket, maxburst =0 , esit =0 ;u32 val; - maxpacket =usb_endpoint_maxp (desc) &0x7ff ; + maxpacket =usb_endpoint_maxp (desc);if (xudc->gadget.speed ==USB_SPEED_SUPER ) {if (!usb_endpoint_xfer_control (desc)) maxburst = comp_desc->bMaxBurst;
@@ -1621,7 +1621,7 @@ static void tegra_xudc_ep_context_setup( (usb_endpoint_xfer_int(desc) || usb_endpoint_xfer_isoc(desc))) {if (xudc->gadget.speed ==USB_SPEED_HIGH ) { - maxburst = (usb_endpoint_maxp (desc) >>11 ) &0x3 ; + maxburst =usb_endpoint_maxp_mult (desc) -1 ;if (maxburst ==0x3 ) {dev_warn (xudc->dev,"invalid endpoint maxburst\n" );
Greg Kroah-Hartman
maintainerPATCH 12/23 usb: mtu3: restore HS function when set SS/SSP
In reply to Greg Kroah-HartmanFrom: Chunfeng Yun <[email protected]>
commit e88f28514065a6c48aadc367efb0ef6378a01543 upstream.
Due to HS function is disabled when set as FS, need restore it when set as SS/SSP.
--- drivers/usb/mtu3/mtu3_core.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/usb/mtu3/mtu3_core.c +3 -1
@@ -227,11 +227,13 @@ static void mtu3_set_speed(struct mtu3 *mtu3_setbits (mbase,U3D_POWER_MANAGEMENT ,HS_ENABLE );break ;case USB_SPEED_SUPER : +mtu3_setbits (mbase,U3D_POWER_MANAGEMENT ,HS_ENABLE );mtu3_clrbits (mtu->ippc_base,SSUSB_U3_CTRL (0 ),SSUSB_U3_PORT_SSP_SPEED );break ;case USB_SPEED_SUPER_PLUS : -mtu3_setbits (mtu->ippc_base,SSUSB_U3_CTRL (0 ), +mtu3_setbits (mbase,U3D_POWER_MANAGEMENT ,HS_ENABLE ); +mtu3_setbits (mtu->ippc_base,SSUSB_U3_CTRL (0 ),SSUSB_U3_PORT_SSP_SPEED );break ;default :
Greg Kroah-Hartman
maintainerPATCH 13/23 usb: mtu3: use @mult for HS isoc or intr
In reply to Greg Kroah-HartmanFrom: Chunfeng Yun <[email protected]>
commit fd7cb394ec7efccc3985feb0978cee4d352e1817 upstream.
For HS isoc or intr, should use @mult but not @burst to save mult value.
--- drivers/usb/mtu3/mtu3_gadget.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/usb/mtu3/mtu3_gadget.c +1 -1
@@ -92,7 +92,7 @@ static int mtu3_ep_enable(struct mtu3_ep usb_endpoint_xfer_int(desc)) { interval = desc->bInterval; interval =clamp_val (interval,1 ,16 ) -1 ; - burst = (max_packet &GENMASK (12 ,11 )) >>11 ; + mult = (max_packet &GENMASK (12 ,11 )) >>11 ; }break ;default :
Greg Kroah-Hartman
maintainerPATCH 14/23 usb: mtu3: fix the wrong HS mult value
In reply to Greg Kroah-HartmanFrom: Chunfeng Yun <[email protected]>
commit 44e4439d8f9f8d0e9da767d1f31e7c211081feca upstream.
usb_endpoint_maxp() returns actual max packet size, @mult will always be zero, fix it by using usb_endpoint_maxp_mult() instead to get mult.
--- drivers/usb/mtu3/mtu3_gadget.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-)
drivers/usb/mtu3/mtu3_gadget.c +2 -4
@@ -64,14 +64,12 @@ static int mtu3_ep_enable(struct mtu3_epu32 interval =0 ;u32 mult =0 ;u32 burst =0 ; -int max_packet;int ret; desc = mep->desc; comp_desc = mep->comp_desc; mep->type =usb_endpoint_type (desc); - max_packet =usb_endpoint_maxp (desc); - mep->maxp = max_packet &GENMASK (10 ,0 ); + mep->maxp =usb_endpoint_maxp (desc);switch (mtu->g.speed) {case USB_SPEED_SUPER :
@@ -92,7 +90,7 @@ static int mtu3_ep_enable(struct mtu3_ep usb_endpoint_xfer_int(desc)) { interval = desc->bInterval; interval =clamp_val (interval,1 ,16 ) -1 ; - mult = (max_packet &GENMASK (12 ,11 )) >>11 ; + mult =usb_endpoint_maxp_mult (desc) -1 ; }break ;default :
Greg Kroah-Hartman
maintainerPATCH 15/23 xhci: fix even more unsafe memory usage in xhci tracing
In reply to Greg Kroah-HartmanFrom: Mathias Nyman <[email protected]>
commit 4843b4b5ec64b875a5e334f280508f1f75e7d3e4 upstream.
Removes static char buffer usage in the following decode functions:
xhci_decode_ctrl_ctx() xhci_decode_slot_context()
xhci_decode_usbsts()
xhci_decode_doorbell()
xhci_decode_ep_context()
Caller must provide a buffer to use.
In tracing use __get_str() as recommended to pass buffer.
Minor changes are needed in other xhci code as these functions are also used elsewhere
--- drivers/usb/host/xhci-debugfs.c | 8 ++++++-- drivers/usb/host/xhci-ring.c | 3 ++- drivers/usb/host/xhci-trace.h | 18 +++++++++++------- drivers/usb/host/xhci.h | 21 ++++++++------------- 4 files changed, 27 insertions(+), 23 deletions(-)
drivers/usb/host/xhci-debugfs.c +6 -2
@@ -260,11 +260,13 @@ static int xhci_slot_context_show(structstruct xhci_slot_ctx *slot_ctx;struct xhci_slot_priv *priv = s->private;struct xhci_virt_device *dev = priv->dev; +char str[XHCI_MSG_MAX ]; xhci =hcd_to_xhci (bus_to_hcd (dev->udev->bus)); slot_ctx =xhci_get_slot_ctx (xhci, dev->out_ctx);seq_printf (s,"%pad: %s\n" , &dev->out_ctx->dma, -xhci_decode_slot_context (le32_to_cpu (slot_ctx->dev_info), +xhci_decode_slot_context (str, +le32_to_cpu (slot_ctx->dev_info),le32_to_cpu (slot_ctx->dev_info2),le32_to_cpu (slot_ctx->tt_info),le32_to_cpu (slot_ctx->dev_state)));
@@ -280,6 +282,7 @@ static int xhci_endpoint_context_show(ststruct xhci_ep_ctx *ep_ctx;struct xhci_slot_priv *priv = s->private;struct xhci_virt_device *dev = priv->dev; +char str[XHCI_MSG_MAX ]; xhci =hcd_to_xhci (bus_to_hcd (dev->udev->bus));
@@ -287,7 +290,8 @@ static int xhci_endpoint_context_show(st ep_ctx =xhci_get_ep_ctx (xhci, dev->out_ctx, ep_index); dma = dev->out_ctx->dma + (ep_index +1 ) *CTX_SIZE (xhci->hcc_params);seq_printf (s,"%pad: %s\n" , &dma, -xhci_decode_ep_context (le32_to_cpu (ep_ctx->ep_info), +xhci_decode_ep_context (str, +le32_to_cpu (ep_ctx->ep_info),le32_to_cpu (ep_ctx->ep_info2),le64_to_cpu (ep_ctx->deq),le32_to_cpu (ep_ctx->tx_info)));
drivers/usb/host/xhci-ring.c +2 -1
@@ -1212,6 +1212,7 @@ void xhci_stop_endpoint_command_watchdogstruct xhci_hcd *xhci = ep->xhci;unsigned long flags;u32 usbsts; +char str[XHCI_MSG_MAX ];spin_lock_irqsave (&xhci->lock, flags);
@@ -1225,7 +1226,7 @@ void xhci_stop_endpoint_command_watchdog usbsts =readl (&xhci->op_regs->status);xhci_warn (xhci,"xHCI host not responding to stop endpoint command.\n" ); -xhci_warn (xhci,"USBSTS:%s\n" ,xhci_decode_usbsts (usbsts)); +xhci_warn (xhci,"USBSTS:%s\n" ,xhci_decode_usbsts (str, usbsts)); ep->ep_state &= ~EP_STOP_CMD_PENDING ;
drivers/usb/host/xhci-trace.h +11 -7
@@ -323,6 +323,7 @@ DECLARE_EVENT_CLASS(xhci_log_ep_ctx, __field(u32, info2) __field(u64, deq) __field(u32, tx_info) +__dynamic_array (char, str,XHCI_MSG_MAX ) ),TP_fast_assign ( __entry->info = le32_to_cpu(ctx->ep_info);
@@ -330,8 +331,8 @@ DECLARE_EVENT_CLASS(xhci_log_ep_ctx, __entry->deq =le64_to_cpu (ctx->deq); __entry->tx_info =le32_to_cpu (ctx->tx_info); ), -TP_printk ("%s" ,xhci_decode_ep_context (__entry->info, - __entry->info2, __entry->deq, __entry->tx_info) +TP_printk ("%s" ,xhci_decode_ep_context (__get_str (str), + __entry->info, __entry->info2, __entry->deq, __entry->tx_info) ) );
@@ -368,6 +369,7 @@ DECLARE_EVENT_CLASS(xhci_log_slot_ctx, __field(u32, info2) __field(u32, tt_info) __field(u32, state) +__dynamic_array (char, str,XHCI_MSG_MAX ) ),TP_fast_assign ( __entry->info = le32_to_cpu(ctx->dev_info);
@@ -375,9 +377,9 @@ DECLARE_EVENT_CLASS(xhci_log_slot_ctx, __entry->tt_info =le64_to_cpu (ctx->tt_info); __entry->state =le32_to_cpu (ctx->dev_state); ), -TP_printk ("%s" ,xhci_decode_slot_context (__entry->info, - __entry->info2, __entry->tt_info, - __entry->state) +TP_printk ("%s" ,xhci_decode_slot_context (__get_str (str), + __entry->info, __entry->info2, + __entry->tt_info, __entry->state) ) );
@@ -432,12 +434,13 @@ DECLARE_EVENT_CLASS(xhci_log_ctrl_ctx,TP_STRUCT__entry (__field (u32 ,drop )__field (u32, add) +__dynamic_array (char, str,XHCI_MSG_MAX ) ),TP_fast_assign ( __entry->drop = le32_to_cpu(ctrl_ctx->drop_flags); __entry->add =le32_to_cpu (ctrl_ctx->add_flags); ), -TP_printk ("%s" ,xhci_decode_ctrl_ctx (__entry->drop, __entry->add) +TP_printk ("%s" ,xhci_decode_ctrl_ctx (__get_str (str), __entry->drop, __entry->add) ) );
@@ -555,13 +558,14 @@ DECLARE_EVENT_CLASS(xhci_log_doorbell,TP_STRUCT__entry (__field (u32 ,slot )__field (u32, doorbell) +__dynamic_array (char, str,XHCI_MSG_MAX ) ),TP_fast_assign ( __entry->slot = slot; __entry->doorbell = doorbell; ),TP_printk ("Ring doorbell for %s" , -xhci_decode_doorbell (__entry->slot, __entry->doorbell) +xhci_decode_doorbell (__get_str (str), __entry->slot, __entry->doorbell) ) );
drivers/usb/host/xhci.h +8 -13
@@ -2455,10 +2455,9 @@ static inline const char *xhci_decode_trreturn str; } -static inline const char *xhci_decode_ctrl_ctx (unsigned long drop, -unsigned long add) +static inline const char *xhci_decode_ctrl_ctx (char *str, +unsigned long drop,unsigned long add) { -static char str[1024 ];unsigned int bit;int ret =0 ;
@@ -2484,10 +2483,9 @@ static inline const char *xhci_decode_ctreturn str; } -static inline const char *xhci_decode_slot_context (u32 info,u32 info2, -u32 tt_info,u32 state) +static inline const char *xhci_decode_slot_context (char *str, +u32 info,u32 info2,u32 tt_info,u32 state) { -static char str[1024 ];u32 speed;u32 hub;u32 mtt;
@@ -2617,9 +2615,8 @@ static inline const char *xhci_decode_poreturn str; } -static inline const char *xhci_decode_usbsts (u32 usbsts) +static inline const char *xhci_decode_usbsts (char *str,u32 usbsts) { -static char str[256 ];int ret =0 ;if (usbsts == ~(u32 )0 )
@@ -2646,9 +2643,8 @@ static inline const char *xhci_decode_usreturn str; } -static inline const char *xhci_decode_doorbell (u32 slot,u32 doorbell) +static inline const char *xhci_decode_doorbell (char *str,u32 slot,u32 doorbell) { -static char str[256 ];u8 ep;u16 stream;int ret;
@@ -2715,10 +2711,9 @@ static inline const char *xhci_ep_type_s } } -static inline const char *xhci_decode_ep_context (u32 info,u32 info2,u64 deq, -u32 tx_info) +static inline const char *xhci_decode_ep_context (char *str,u32 info, +u32 info2,u64 deq,u32 tx_info) { -static char str[1024 ];int ret;u32 esit;
Greg Kroah-Hartman
maintainerPATCH 16/23 xhci: fix unsafe memory usage in xhci tracing
In reply to Greg Kroah-HartmanFrom: Mathias Nyman <[email protected]>
commit cbf286e8ef8337308c259ff5b9ce2e74d403be5a upstream.
Removes static char buffer usage in the following decode functions:
xhci_decode_trb()
xhci_decode_ptortsc()
Caller must provide a buffer to use.
In tracing use __get_str() as recommended to pass buffer.
Minor chanes are needed in xhci debugfs code as these functions are also used there. Changes include moving XHCI_MSG_MAX definititon from xhci-trace.h to xhci.h
--- drivers/usb/host/xhci-debugfs.c | 6 +++- drivers/usb/host/xhci-trace.h | 8 +++--- drivers/usb/host/xhci.h | 52 +++++++++++++++++++++------------------- 3 files changed, 36 insertions(+), 30 deletions(-)
drivers/usb/host/xhci-debugfs.c +4 -2
@@ -198,12 +198,13 @@ static void xhci_ring_dump_segment(strucint i;dma_addr_t dma;union xhci_trb *trb; +char str[XHCI_MSG_MAX ];for (i =0 ; i <TRBS_PER_SEGMENT ; i++) { trb = &seg->trbs[i]; dma = seg->dma + i *sizeof (*trb);seq_printf (s,"%pad: %s\n" , &dma, -xhci_decode_trb (le32_to_cpu (trb->generic.field[0 ]), +xhci_decode_trb (str,XHCI_MSG_MAX ,le32_to_cpu (trb->generic.field[0 ]),le32_to_cpu (trb->generic.field[1 ]),le32_to_cpu (trb->generic.field[2 ]),le32_to_cpu (trb->generic.field[3 ])));
@@ -345,9 +346,10 @@ static int xhci_portsc_show(struct seq_f {struct xhci_port *port = s->private;u32 portsc; +char str[XHCI_MSG_MAX ]; portsc =readl (port->addr); -seq_printf (s,"%s\n" ,xhci_decode_portsc (portsc)); +seq_printf (s,"%s\n" ,xhci_decode_portsc (str, portsc));return 0 ; }
drivers/usb/host/xhci-trace.h +4 -4
@@ -25,8 +25,6 @@#include "xhci.h" #include "xhci-dbgcap.h" -#define XHCI_MSG_MAX 500 - DECLARE_EVENT_CLASS(xhci_log_msg, TP_PROTO(struct va_format *vaf), TP_ARGS(vaf),
@@ -122,6 +120,7 @@ DECLARE_EVENT_CLASS(xhci_log_trb, __field(u32, field1) __field(u32, field2) __field(u32, field3) +__dynamic_array (char, str,XHCI_MSG_MAX ) ),TP_fast_assign ( __entry->type = ring->type;
@@ -131,7 +130,7 @@ DECLARE_EVENT_CLASS(xhci_log_trb, __entry->field3 =le32_to_cpu (trb->field[3 ]); ),TP_printk ("%s: %s" ,xhci_ring_type_string (__entry->type), -xhci_decode_trb (__entry->field0, __entry->field1, +xhci_decode_trb (__get_str (str),XHCI_MSG_MAX , __entry->field0, __entry->field1, __entry->field2, __entry->field3) ) );
@@ -526,6 +525,7 @@ DECLARE_EVENT_CLASS(xhci_log_portsc,TP_STRUCT__entry (__field (u32 ,portnum )__field (u32, portsc) +__dynamic_array (char, str,XHCI_MSG_MAX ) ),TP_fast_assign ( __entry->portnum = portnum;
@@ -533,7 +533,7 @@ DECLARE_EVENT_CLASS(xhci_log_portsc, ),TP_printk ("port-%d: %s" , __entry->portnum, -xhci_decode_portsc (__entry->portsc) +xhci_decode_portsc (__get_str (str), __entry->portsc) ) );
drivers/usb/host/xhci.h +28 -24
184 lines not on this page · raw message
Greg Kroah-Hartman
maintainerPATCH 17/23 xhci: Fix failure to give back some cached cancelled URBs.
In reply to Greg Kroah-HartmanFrom: Mathias Nyman <[email protected]>
commit 94f339147fc3eb9edef7ee4ef6e39c569c073753 upstream.
Only TDs with status TD_CLEARING_CACHE will be given back after cache is cleared with a set TR deq command.
xhci_invalidate_cached_td() failed to set the TD_CLEARING_CACHE status for some cancelled TDs as it assumed an endpoint only needs to clear the TD it stopped on.
This isn't always true. For example with streams enabled an endpoint may have several stream rings, each stopping on a different TDs.
Note that if an endpoint has several stream rings, the current code will still only clear the cache of the stream pointed to by the last cancelled TD in the cancel list.
This patch only focus on making sure all canceled TDs are given back, avoiding hung task after device removal.
Another fix to solve clearing the caches of all stream rings with cancelled TDs is needed, but not as urgent.
This issue was simultanously discovered and debugged by by Tao Wang, with a slightly different fix proposal.
--- drivers/usb/host/xhci-ring.c | 40 +++++++++++++++++++++++++--------------- 1 file changed, 25 insertions(+), 15 deletions(-)
drivers/usb/host/xhci-ring.c +25 -15
@@ -942,17 +942,21 @@ static int xhci_invalidate_cancelled_tds td->urb->stream_id); hw_deq &= ~0xf ; -if (td->cancel_status ==TD_HALTED ) { - cached_td = td; - }else if (trb_in_td (xhci, td->start_seg, td->first_trb, - td->last_trb, hw_deq, false)) { +if (td->cancel_status ==TD_HALTED || +trb_in_td (xhci, td->start_seg, td->first_trb, td->last_trb, hw_deq, false)) {switch (td->cancel_status) {case TD_CLEARED :/* TD is already no-op */ case TD_CLEARING_CACHE :/* set TR deq command already queued */ break ;case TD_DIRTY :/* TD is cached, clear it */ case TD_HALTED : -/* FIXME stream case, several stopped rings */ + td->cancel_status =TD_CLEARING_CACHE ; +if (cached_td) +/* FIXME stream case, several stopped rings */ +xhci_dbg (xhci, +"Move dq past stream %u URB %p instead of stream %u URB %p\n" , + td->urb->stream_id, td->urb, + cached_td->urb->stream_id, cached_td->urb); cached_td = td;break ; }
@@ -961,18 +965,24 @@ static int xhci_invalidate_cancelled_tds td->cancel_status =TD_CLEARED ; } } -if (cached_td) { - cached_td->cancel_status =TD_CLEARING_CACHE ; - err =xhci_move_dequeue_past_td (xhci, slot_id, ep->ep_index, - cached_td->urb->stream_id, - cached_td); -/* Failed to move past cached td, try just setting it noop */ -if (err) { -td_to_noop (xhci, ring, cached_td, false); - cached_td->cancel_status =TD_CLEARED ; +/* If there's no need to move the dequeue pointer then we're done */ +if (!cached_td) +return 0 ; + + err =xhci_move_dequeue_past_td (xhci, slot_id, ep->ep_index, + cached_td->urb->stream_id, + cached_td); +if (err) { +/* Failed to move past cached td, just set cached TDs to no-op */ +list_for_each_entry_safe (td, tmp_td, &ep->cancelled_td_list, cancelled_td_list) { +if (td->cancel_status !=TD_CLEARING_CACHE ) +continue ; +xhci_dbg (xhci,"Failed to clear cancelled cached URB %p, mark clear anyway\n" , + td->urb); +td_to_noop (xhci, ring, td, false); + td->cancel_status =TD_CLEARED ; } - cached_td =NULL ; }return 0 ; }
Greg Kroah-Hartman
maintainerPATCH 18/23 staging: mt7621-pci: fix hang when nothing is connected to pcie ports
In reply to Greg Kroah-HartmanFrom: Sergio Paracuellos <[email protected]>
commit 7d761b084b3c785e1fbbe707fbdf7baba905c6ad upstream.
When nothing is connected to pcie ports, each port is set to reset state. When this occurs, next access result in a hang on boot as follows:
mt7621-pci 1e140000.pcie: pcie0 no card, disable it (RST & CLK) mt7621-pci 1e140000.pcie: pcie1 no card, disable it (RST & CLK) mt7621-pci 1e140000.pcie: pcie2 no card, disable it (RST & CLK) [ HANGS HERE ]
Fix this just detecting 'nothing is connected state' to avoid next accesses to pcie port related configuration registers.
--- drivers/staging/mt7621-pci/pci-mt7621.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-)
drivers/staging/mt7621-pci/pci-mt7621.c +11 -2
@@ -56,6 +56,7 @@#define PCIE_BAR_ENABLE BIT(0)#define PCIE_PORT_INT_EN (x) BIT(20 + (x))#define PCIE_PORT_LINKUP BIT(0) +#define PCIE_PORT_CNT 3#define PERST_DELAY_MS 100
@@ -388,10 +389,11 @@ static void mt7621_pcie_reset_ep_deassermsleep (PERST_DELAY_MS ); } -static void mt7621_pcie_init_ports (struct mt7621_pcie *pcie) +static int mt7621_pcie_init_ports (struct mt7621_pcie *pcie) {struct device *dev = pcie->dev;struct mt7621_pcie_port *port, *tmp; +u8 num_disabled =0 ;int err;mt7621_pcie_reset_assert (pcie);
@@ -423,6 +425,7 @@ static void mt7621_pcie_init_ports(struc slot);mt7621_control_assert (port); port->enabled = false; + num_disabled++;if (slot ==0 ) { tmp = port;
@@ -433,6 +436,8 @@ static void mt7621_pcie_init_ports(strucphy_power_off (tmp->phy); } } + +return (num_disabled !=PCIE_PORT_CNT ) ?0 : -ENODEV ; }static void mt7621_pcie_enable_port (struct mt7621_pcie_port *port)
@@ -540,7 +545,11 @@ static int mt7621_pci_probe(struct platfreturn err; } -mt7621_pcie_init_ports (pcie); + err =mt7621_pcie_init_ports (pcie); +if (err) { +dev_err (dev,"Nothing connected in virtual bridges\n" ); +return 0 ; + } err =mt7621_pcie_enable_ports (bridge);if (err) {
Greg Kroah-Hartman
maintainerPATCH 19/23 x86/reboot: Limit Dell Optiplex 990 quirk to early BIOS versions
In reply to Greg Kroah-HartmanFrom: Paul Gortmaker <[email protected]>
commit a729691b541f6e63043beae72e635635abe5dc09 upstream.
When this platform was relatively new in November 2011, with early BIOS revisions, a reboot quirk was added in commit 6be30bb7d750 ("x86/reboot:
Blacklist Dell OptiPlex 990 known to require PCI reboot")
However, this quirk (and several others) are open-ended to all BIOS versions and left no automatic expiry if/when the system BIOS fixed the issue, meaning that nobody is likely to come along and re-test.
What is really problematic with using PCI reboot as this quirk does, is that it causes this platform to do a full power down, wait one second, and then power back on. This is less than ideal if one is using it for boot testing and/or bisecting kernels when legacy rotating hard disks are installed.
It was only by chance that the quirk was noticed in dmesg - and when disabled it turned out that it wasn't required anymore (BIOS A24), and a default reboot would work fine without the "harshness" of power cycling the machine (and disks) down and up like the PCI reboot does.
Doing a bit more research, it seems that the "newest" BIOS for which the issue was reported[1] was version A06, however Dell[2] seemed to suggest only up to and including version A05, with the A06 having a large number of fixes[3] listed.
As is typical with a new platform, the initial BIOS updates come frequently and then taper off (and in this case, with a revival for CPU CVEs); a search for O990-A<ver>.exe reveals the following dates:
A02 16 Mar 2011
A03 11 May 2011
A06 14 Sep 2011
A07 24 Oct 2011
A10 08 Dec 2011
A14 06 Sep 2012
A16 15 Oct 2012
A18 30 Sep 2013
A19 23 Sep 2015
A20 02 Jun 2017
A23 07 Mar 2018
A24 21 Aug 2018While it's overkill to flash and test each of the above, it would seem likely that the issue was contained within A0x BIOS versions, given the dates above and the dates of issue reports[4] from distros. So rather than just throw out the quirk entirely, limit the scope to just those early BIOS versions, in case people are still running systems from 2011 with the original as-shipped early A0x BIOS versions.
[1] https://lore.kernel.org/lkml/[email protected]/
[2] https://www.dell.com/support/kbdoc/en-ca/000131908/linux-based-operating-systems-stall-upon-reboot-on-optiplex-390-790-990-systems
[3] https://www.dell.com/support/home/en-ca/drivers/driversdetails?driverid=85j10
[4] https://bugs.launchpad.net/ubuntu/+source/linux/+bug/768039
--- arch/x86/kernel/reboot.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
arch/x86/kernel/reboot.c +2 -1
@@ -388,10 +388,11 @@ static const struct dmi_system_id reboot }, {/* Handle problems with rebooting on the OptiPlex 990. */ .callback = set_pci_reboot, - .ident = "Dell OptiPlex 990", + .ident = "Dell OptiPlex 990 BIOS A0x", .matches = {DMI_MATCH (DMI_SYS_VENDOR ,"Dell Inc." ),DMI_MATCH (DMI_PRODUCT_NAME ,"OptiPlex 990" ), + DMI_MATCH(DMI_BIOS_VERSION, "A0"), }, }, { /* Handle problems with rebooting on Dell 300's */
Greg Kroah-Hartman
maintainerPATCH 20/23 PCI: Call Max Payload Size-related fixup quirks early
In reply to Greg Kroah-HartmanFrom: Marek Behún <[email protected]>
commit b8da302e2955fe4d41eb9d48199242674d77dbe0 upstream.
pci_device_add() calls HEADER fixups after pci_configure_device(), which configures Max Payload Size.
Convert MPS-related fixups to EARLY fixups so pci_configure_mps() takes them into account.
--- drivers/pci/quirks.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-)
drivers/pci/quirks.c +6 -6
@@ -3235,12 +3235,12 @@ static void fixup_mpss_256(struct pci_de { dev->pcie_mpss =1 ;/* 256 bytes */ } -DECLARE_PCI_FIXUP_HEADER (PCI_VENDOR_ID_SOLARFLARE , -PCI_DEVICE_ID_SOLARFLARE_SFC4000A_0 , fixup_mpss_256); -DECLARE_PCI_FIXUP_HEADER (PCI_VENDOR_ID_SOLARFLARE , -PCI_DEVICE_ID_SOLARFLARE_SFC4000A_1 , fixup_mpss_256); -DECLARE_PCI_FIXUP_HEADER (PCI_VENDOR_ID_SOLARFLARE , -PCI_DEVICE_ID_SOLARFLARE_SFC4000B , fixup_mpss_256); +DECLARE_PCI_FIXUP_EARLY (PCI_VENDOR_ID_SOLARFLARE , +PCI_DEVICE_ID_SOLARFLARE_SFC4000A_0 , fixup_mpss_256); +DECLARE_PCI_FIXUP_EARLY (PCI_VENDOR_ID_SOLARFLARE , +PCI_DEVICE_ID_SOLARFLARE_SFC4000A_1 , fixup_mpss_256); +DECLARE_PCI_FIXUP_EARLY (PCI_VENDOR_ID_SOLARFLARE , +PCI_DEVICE_ID_SOLARFLARE_SFC4000B , fixup_mpss_256);/* * Intel 5000 and 5100 Memory controllers have an erratum with read completion
Greg Kroah-Hartman
maintainerPATCH 21/23 cxl/pci: Fix debug message in cxl_probe_regs()
In reply to Greg Kroah-HartmanFrom: Li Qiang (Johnny Li) <[email protected]>
commit da582aa5ad5787c46e3f475ab3f4602ec84c1617 upstream.
Indicator string for mbox and memdev register set to status incorrectly in error message.
--- drivers/cxl/pci.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/cxl/pci.c +2 -2
@@ -1022,8 +1022,8 @@ static int cxl_probe_regs(struct cxl_mem !dev_map->memdev.valid) {dev_err (dev,"registers not found: %s%s%s\n" , !dev_map->status.valid ?"status " :"" , - !dev_map->mbox.valid ?"status " :"" , - !dev_map->memdev.valid ?"status " :"" ); + !dev_map->mbox.valid ?"mbox " :"" , + !dev_map->memdev.valid ?"memdev " :"" );return -ENXIO ; }
Greg Kroah-Hartman
maintainerPATCH 22/23 cxl/pci: Fix lockdown level
In reply to Greg Kroah-HartmanFrom: Dan Williams <[email protected]>
commit 9e56614c44b994b78fc9fcb2070bcbe3f5df0d7b upstream.
A proposed rework of security_locked_down() users identified that the cxl_pci driver was passing the wrong lockdown_reason. Update cxl_mem_raw_command_allowed() to fail raw command access when raw pci access is also disabled.
--- drivers/cxl/pci.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/cxl/pci.c +1 -1
@@ -568,7 +568,7 @@ static bool cxl_mem_raw_command_allowed(if (!IS_ENABLED (CONFIG_CXL_MEM_RAW_COMMANDS ))return false; -if (security_locked_down (LOCKDOWN_NONE )) +if (security_locked_down (LOCKDOWN_PCI_ACCESS ))return false;if (cxl_raw_allow_all)
Greg Kroah-Hartman
maintainerPATCH 23/23 cxl/acpi: Do not add DSDT disabled ACPI0016 host bridge ports
In reply to Greg Kroah-HartmanFrom: Alison Schofield <[email protected]>
commit a7bfaad54b8b9cf06041528988d6b75b4b921546 upstream.
During CXL ACPI probe, host bridge ports are discovered by scanning the ACPI0017 root port for ACPI0016 host bridge devices. The scan matches on the hardware id of "ACPI0016". An issue occurs when an ACPI0016 device is defined in the DSDT yet disabled on the platform. Attempts by the cxl_acpi driver to add host bridge ports using a disabled device fails, and the entire cxl_acpi probe fails.
The DSDT table includes an _STA method that sets the status and the ACPI subsystem has checks available to examine it. One such check is in the acpi_pci_find_root() path. Move the call to acpi_pci_find_root() to the matching function to prevent this issue when adding either upstream or downstream ports.
--- drivers/cxl/acpi.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-)
drivers/cxl/acpi.c +8 -4
@@ -243,6 +243,9 @@ static struct acpi_device *to_cxl_host_b {struct acpi_device *adev =to_acpi_device (dev); +if (!acpi_pci_find_root (adev->handle)) +return NULL ; +if (strcmp (acpi_device_hid (adev),"ACPI0016" ) ==0 )return adev;return NULL ;
@@ -266,10 +269,6 @@ static int add_host_bridge_uport(structif (!bridge)return 0 ; - pci_root =acpi_pci_find_root (bridge->handle); -if (!pci_root) -return -ENXIO ; - dport =find_dport_by_dev (root_port, match);if (!dport) {dev_dbg (host,"host bridge expected and not found\n" );
@@ -282,6 +281,11 @@ static int add_host_bridge_uport(structreturn PTR_ERR (port);dev_dbg (host,"%s: add: %s\n" ,dev_name (match),dev_name (&port->dev)); +/* +* Note that this lookup already succeeded in +* to_cxl_host_bridge(), so no need to check for failure here +*/ + pci_root =acpi_pci_find_root (bridge->handle); ctx = (struct cxl_walk_context ){ .dev = host, .root = pci_root->bus,
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.14.3 release. There are 23 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 Sun, 12 Sep 2021 12:29:07 +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/v5.x/stable-review/patch-5.14.3-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-5.14.y
and the diffstat can be found below.thanks,
greg k-h
On ARCH_BRCMSTB using 32-bit and 64-bit ARM kernels:
Signature · 1 line
Florian
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.14.3 release. There are 23 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 Sun, 12 Sep 2021 12:29:07 +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/v5.x/stable-review/patch-5.14.3-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-5.14.y
and the diffstat can be found below.thanks,
greg k-h
5.14.3-rc1 Successfully Compiled and booted on my Raspberry PI 4b (8g) (bcm2711)
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.14.3 release. There are 23 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 Sun, 12 Sep 2021 12:29:07 +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/v5.x/stable-review/patch-5.14.3-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-5.14.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 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.14.3 release. There are 23 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 Sun, 12 Sep 2021 12:29:07 +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/v5.x/stable-review/patch-5.14.3-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-5.14.y
and the diffstat can be found below.thanks,
greg k-h
Tested rc1 against the Fedora build system (aarch64, armv7, ppc64le, s390x, x86_64), and boot tested x86_64. No regressions noted.
Quoted 8 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.14.3 release. There are 23 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 Sun, 12 Sep 2021 12:29:07 +0000. Anything received after that time might be too late.
Build results:
total: 154 pass: 154 fail: 0 Qemu test results: total: 479 pass: 479 fail: 0
Guenter
Hello!
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.14.3 release. There are 23 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 Sun, 12 Sep 2021 12:29:07 +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/v5.x/stable-review/patch-5.14.3-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-5.14.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.
## Build
* kernel: 5.14.3-rc1
* git: https://gitlab.com/Linaro/lkft/mirrors/stable/linux-stable-rc
* git branch: linux-5.14.y
* git commit: 08d4da79178d3d352115625b6aaa4eb58e173f0e
* git describe: v5.14.2-24-g08d4da79178d
* test details: https://qa-reports.linaro.org/lkft/linux-stable-rc-linux-5.14.y/build/v5.14.2-24-g08d4da79178d
## No regressions (compared to v5.14.2)
## No fixes (compared to v5.14.2)
## Test result summary
total: 85896, pass: 71970, fail: 1039, skip: 12121, xfail: 766
## Build Summary
* arc: 10 total, 10 passed, 0 failed
* arm: 289 total, 289 passed, 0 failed
* arm64: 39 total, 39 passed, 0 failed
* dragonboard-410c: 1 total, 1 passed, 0 failed
* hi6220-hikey: 1 total, 1 passed, 0 failed
* i386: 38 total, 38 passed, 0 failed
* juno-r2: 1 total, 1 passed, 0 failed
* mips: 51 total, 51 passed, 0 failed
* parisc: 12 total, 12 passed, 0 failed
* powerpc: 72 total, 70 passed, 2 failed
* riscv: 30 total, 30 passed, 0 failed
* s390: 18 total, 18 passed, 0 failed
* sh: 24 total, 24 passed, 0 failed
* sparc: 12 total, 12 passed, 0 failed
* x15: 1 total, 0 passed, 1 failed
* x86: 1 total, 1 passed, 0 failed
* x86_64: 39 total, 39 passed, 0 failed
## Test suites summary
* fwts
* igt-gpu-tools
* install-android-platform-tools-r2600
* kselftest-android
* kselftest-arm64
* kselftest-bpf
* kselftest-breakpoints
* kselftest-capabilities
* kselftest-cgroup
* kselftest-clone3
* kselftest-core
* kselftest-cpu-hotplug
* kselftest-cpufreq
* kselftest-drivers
* kselftest-efivarfs
* kselftest-filesystems
* kselftest-firmware
* kselftest-fpu
* kselftest-futex
* kselftest-gpio
* kselftest-intel_pstate
* kselftest-ipc
* kselftest-ir
* kselftest-kcmp
* kselftest-kexec
* kselftest-kvm
* kselftest-lib
* kselftest-livepatch
* kselftest-lkdtm
* kselftest-membarrier
* kselftest-memfd
* kselftest-memory-hotplug
* kselftest-mincore
* kselftest-mount
* kselftest-mqueue
* kselftest-net
* kselftest-netfilter
* kselftest-nsfs
* kselftest-openat2
* kselftest-pid_namespace
* kselftest-pidfd
* kselftest-proc
* kselftest-pstore
* kselftest-ptrace
* kselftest-rseq
* kselftest-rtc
* kselftest-seccomp
* kselftest-sigaltstack
* kselftest-size
* kselftest-splice
* kselftest-static_keys
* kselftest-sync
* kselftest-sysctl
* kselftest-tc-testing
* kselftest-timens
* kselftest-timers
* kselftest-tmpfs
* kselftest-tpm2
* kselftest-user
* kselftest-vm
* kselftest-x86
* kselftest-zram
* kunit
* kvm-unit-tests
* libgpiod
* libhugetlbfs
* linux-log-parser
* ltp-cap_bounds-tests
* ltp-commands-tests
* ltp-containers-tests
* ltp-controllers-tests
* ltp-cpuhotplug-tests
* ltp-crypto-tests
* ltp-cve-tests
* ltp-dio-tests
* ltp-fcntl-locktests-tests
* ltp-filecaps-tests
* ltp-fs-tests
* ltp-fs_bind-tests
* ltp-fs_perms_simple-tests
* ltp-fsx-tests
* ltp-hugetlb-tests
* ltp-io-tests
* ltp-ipc-tests
* ltp-math-tests
* ltp-mm-tests
* ltp-nptl-tests
* ltp-open-posix-tests
* ltp-pty-tests
* ltp-sched-tests
* ltp-securebits-tests
* ltp-syscalls-tests
* ltp-tracing-tests
* network-basic-tests
* packetdrill
* perf
* rcutorture
* ssuite
* v4l2-compliance
Greetings!
Daniel Díaz
[email protected]
Signature · 2 lines
Linaro LKFT https://lkft.linaro.org
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 5.14.3 release. There are 23 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 Sun, 12 Sep 2021 12:29:07 +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/v5.x/stable-review/patch-5.14.3-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-5.14.y
and the diffstat can be found below.thanks,
greg k-h
All tests passing for Tegra ...
Test results for stable-v5.14:
10 builds: 10 pass, 0 fail
28 boots: 28 pass, 0 fail
114 tests: 114 pass, 0 failLinux version: 5.14.3-rc1-g08d4da79178d
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