public inbox for linux-usb@vger.kernel.org
 help / color / mirror / Atom feed
From: "Neronin, Niklas" <niklas.neronin@linux.intel.com>
To: Michal Pecio <michal.pecio@gmail.com>
Cc: mathias.nyman@linux.intel.com, linux-usb@vger.kernel.org,
	raoxu@uniontech.com
Subject: Re: [PATCH 3/9] usb: xhci: factor out roothub bandwidth cleanup
Date: Tue, 31 Mar 2026 12:34:36 +0300	[thread overview]
Message-ID: <108b65c0-349b-4854-b703-f6951b53bc33@linux.intel.com> (raw)
In-Reply-To: <20260330102910.0059972c.michal.pecio@gmail.com>



On 30/03/2026 11.29, Michal Pecio wrote:
>> +/* Cleanup roothub bandwidth data */
>> +static void xhci_rh_bw_cleanup(struct xhci_hcd *xhci)
>> +{
>> +	struct xhci_root_port_bw_info *rh_bw;
>> +	struct xhci_tt_bw_info *tt_info, *tt_next;
>> +	struct list_head *eps, *ep, *ep_next;
>> +
>> +	for (int i = 0; i < xhci->max_ports; i++) {
>> +		rh_bw = &xhci->rh_bw[i];
>> +
>> +		/* Clear and free all TT bandwidth entries */
>> +		list_for_each_entry_safe(tt_info, tt_next, &rh_bw->tts, tt_list) {
>> +			list_del(&tt_info->tt_list);
>> +			kfree(tt_info);
>> +		}
> 
> This loop is theoretically pointless, because each tt_info corresponds
> to a hub virtual device, and all this stuff should have been destroyed
> by xhci_free_virt_devices_depth_first() earlier.
> 
> If anything, it seems to paper over potential memory leaks in there.
> 
>> +
>> +		/* Clear per-interval endpoint lists */
>> +		for (int j = 0; j < XHCI_MAX_INTERVAL; j++) {
>> +			eps = &rh_bw->bw_table.interval_bw[j].endpoints;
>> +
>> +			list_for_each_safe(ep, ep_next, eps)
>> +				list_del_init(ep);
>> +		}
> 
> This loop used to run before xhci_free_virt_devices_depth_first(), but
> now it will run after. It seems that the endpoints here are virt_ep
> which also should be gone already, so this loop likely does nothing
> (empty list) or writes to virtual devices after free (somebody forgot
> to unlink some endpoints from the list).

In my testing, when xhci_rh_bw_cleanup() is called after
xhci_free_virt_devices_depth_first() in xhci_resume(), all related
resources have already been freed.
That said, I have chosen to keep the existing freeing in this patch set.
Removing it would introduce an additional behavioral change and a
potential regression point, which I prefer to avoid at this stage.

> 
> Do we trust xhci_free_virt_devices_depth_first() to work correctly?
> If yes then it seems this whole function is unnecessary.

I don't, mostly because it is recursive and complex. Which makes it
difficult to follow edge case issues (IMO).

> 
> If not, perhaps delete this monstrosity and write a simpler cleanup:

Planning to rework xhci_free_virt_devices_depth_first() in a later patch
set, which will then result in the removal of xhci_rh_bw_cleanup().

> 
> 1. for each slot_id
>   - disable debugfs
>   - free virt_device and child allocations but don't worry about tt_info
> 2. for each root hub port
>   - free all tt_info allocations but don't worry about eps or vdevs
> 
> And since this will be used by reset on resume:
> 
> 3. zero out DCBAA and xhci->devs
> 4. reinitialize xhci->rb_hw


  reply	other threads:[~2026-03-31  9:34 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-03-27 12:34 [PATCH 0/9] xhci: usb: optimize resuming from S4 (suspend-to-disk) Niklas Neronin
2026-03-27 12:34 ` [PATCH 1/9] usb: xhci: simplify CMRT initialization logic Niklas Neronin
2026-03-27 12:34 ` [PATCH 2/9] usb: xhci: relocate Restore/Controller error check Niklas Neronin
2026-03-27 12:34 ` [PATCH 3/9] usb: xhci: factor out roothub bandwidth cleanup Niklas Neronin
2026-03-30  8:29   ` Michal Pecio
2026-03-31  9:34     ` Neronin, Niklas [this message]
2026-04-01  9:58       ` Michal Pecio
2026-03-27 12:34 ` [PATCH 4/9] usb: xhci: move reserving command ring trb Niklas Neronin
2026-03-27 12:34 ` [PATCH 5/9] usb: xhci: move ring initialization Niklas Neronin
2026-03-30  8:42   ` Michal Pecio
2026-03-30  8:53     ` Neronin, Niklas
2026-04-01  9:31       ` Michal Pecio
2026-03-27 12:34 ` [PATCH 6/9] usb: xhci: move initialization for lifetime objects Niklas Neronin
2026-03-30  8:49   ` Michal Pecio
2026-03-27 12:34 ` [PATCH 7/9] usb: xhci: split core allocation and initialization Niklas Neronin
2026-03-30  8:57   ` Michal Pecio
2026-03-27 12:34 ` [PATCH 8/9] usb: xhci: improve debug messages during suspend Niklas Neronin
2026-03-30  9:14   ` Michal Pecio
2026-03-30 11:44     ` Neronin, Niklas
2026-03-27 12:34 ` [PATCH 9/9] usb: xhci: optimize resuming from S4 (suspend-to-disk) Niklas Neronin
2026-03-30  9:45   ` Michal Pecio
2026-03-31  9:59     ` Neronin, Niklas
2026-04-01 10:38       ` Michal Pecio

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=108b65c0-349b-4854-b703-f6951b53bc33@linux.intel.com \
    --to=niklas.neronin@linux.intel.com \
    --cc=linux-usb@vger.kernel.org \
    --cc=mathias.nyman@linux.intel.com \
    --cc=michal.pecio@gmail.com \
    --cc=raoxu@uniontech.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox