Re: [PATCH v4] xhci: tegra: fix checked USB2 port number

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, Oct 14, 2024 at 12:21:34PM +0800, Henry Lin wrote:
> If USB virtualizatoin is enabled, USB2 ports are shared between all
> Virtual Functions. The USB2 port number owned by an USB2 root hub in
> a Virtual Function may be less than total USB2 phy number supported
> by the Tegra XUSB controller.
> 
> Using total USB2 phy number as port number to check all PORTSC values
> would cause invalid memory access.
> 
> [  116.923438] Unable to handle kernel paging request at virtual address 006c622f7665642f
> ...
> [  117.213640] Call trace:
> [  117.216783]  tegra_xusb_enter_elpg+0x23c/0x658
> [  117.222021]  tegra_xusb_runtime_suspend+0x40/0x68
> [  117.227260]  pm_generic_runtime_suspend+0x30/0x50
> [  117.232847]  __rpm_callback+0x84/0x3c0
> [  117.237038]  rpm_suspend+0x2dc/0x740
> [  117.241229] pm_runtime_work+0xa0/0xb8
> [  117.245769]  process_scheduled_works+0x24c/0x478
> [  117.251007]  worker_thread+0x23c/0x328
> [  117.255547]  kthread+0x104/0x1b0
> [  117.259389]  ret_from_fork+0x10/0x20
> [  117.263582] Code: 54000222 f9461ae8 f8747908 b4ffff48 (f9400100)
> 
> Cc: <stable@xxxxxxxxxxxxxxx> # v6.3+
> Fixes: a30951d31b25 ("xhci: tegra: USB2 pad power controls")
> Signed-off-by: Henry Lin <henryl@xxxxxxxxxx>
> ---
> V1 -> V2: Add Fixes tag and the cc stable line
> V2 -> V3: Update commit message to clarify issue
> V3 -> V4: Resend for patch changelogs that are missing in V3
> 
>  drivers/usb/host/xhci-tegra.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/usb/host/xhci-tegra.c b/drivers/usb/host/xhci-tegra.c
> index 6246d5ad1468..76f228e7443c 100644
> --- a/drivers/usb/host/xhci-tegra.c
> +++ b/drivers/usb/host/xhci-tegra.c
> @@ -2183,7 +2183,7 @@ static int tegra_xusb_enter_elpg(struct tegra_xusb *tegra, bool runtime)
>  		goto out;
>  	}
>  
> -	for (i = 0; i < tegra->num_usb_phys; i++) {
> +	for (i = 0; i < xhci->usb2_rhub.num_ports; i++) {
>  		if (!xhci->usb2_rhub.ports[i])
>  			continue;
>  		portsc = readl(xhci->usb2_rhub.ports[i]->addr);

Given that the size of usb2_rhub.ports is given by usb2_rhub.num_ports,
this seems the right thing to do regardless of virtualization.

Acked-by: Thierry Reding <treding@xxxxxxxxxx>

Attachment: signature.asc
Description: PGP signature


[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux