Thread (3 messages) 3 messages, 2 authors, 2013-06-14

Re: [RFC PATCH v2, part3 07/11] PCI, xen-pcifront: use new PCI interfaces to simplify implementation

From: Konrad Rzeszutek Wilk <hidden>
Date: 2013-06-14 18:07:56
Also in: linux-pci, lkml, xen-devel

On Tue, Jun 11, 2013 at 01:08:14AM +0800, Jiang Liu wrote:
On Tue 11 Jun 2013 12:58:01 AM CST, Konrad Rzeszutek Wilk wrote:
quoted
On Mon, Jun 10, 2013 at 12:50:46AM +0800, Jiang Liu wrote:
quoted
On Sat 08 Jun 2013 01:07:06 AM CST, Konrad Rzeszutek Wilk wrote:
quoted
On Sat, Jun 08, 2013 at 12:50:31AM +0800, Jiang Liu wrote:
quoted
On 06/07/2013 11:38 PM, Konrad Rzeszutek Wilk wrote:
quoted
On Fri, Jun 07, 2013 at 10:50:24AM -0400, Konrad Rzeszutek Wilk wrote:
quoted
On Thu, May 16, 2013 at 11:50:55PM +0800, Jiang Liu wrote:
quoted
Use new PCI interfaces to simplify xen-pcifront implementation:
1) Use pci_create_root_bus() instead of pci_scan_bus_parented()
   because pci_scan_bus_parented() is marked as __deprecated.This
   also gets rid of a duplicated call of pci_bus_start_devices().
2) Use pci_stop_root_bus() and pci_remove_root_bus() instead of
   open-coded private implementation.
3) Use pci_set_host_bridge_release() to release data structures
   associated with PCI root buses.
4) Use pci_bus_get()/pci_bus_put() to manage PCI root bus reference
   count.

This is also a preparation for coming PCI bus lock enhancement.
With this patch from :

 Merge branch 'pci_lock_v3' of https://github.com/jiangliu/linux into testing


it blows up when detaching the device.
Hi Konrad,
   Thanks for testing! According to the log messages, this issue should
be related to pci bus reference counter management. Seems we have done
an extra(unbalanced) release of pci bus device.
   Will investigate it tomorrow!
That is quite commendable that you are willing to look over this on
the weekend but I am not going to be able to rerun this test until
some time in the week. You could enjoy the weekend and just look at
this during the week.
Hi Konrad,
     We should have root-caused this bug, which is caused by
for_each_pci_root_bus().
Current implementation doesn't support root bus deletion when walking
PCI root
buses by for_each_pci_root_bus(). The reference counter
(pci_bus->dev.knode_class.n_ref)
becomes zero after returning from pci_remove_root_bus(), so it triggers
kref warnings
and double-free of klist_node object when we call
pci_get_next_root_bus() to get the
next PCI root bus.
     So we will first revert to  list_for_each_entry_safe(bus, temp,
&pci_root_buses, node)
and solve this issue in next version of for_each_pci_root_bus().
That definitly solves the issue. Thanks!

I used pci_lock_v3 of https://github.com/jiangliu/linux and the fix
below.

Is there a new patchset you are going to be posting or a git branch
that I can look over?

Thanks.
Hi Konrad,
     Really appreciate your support! I will try to post a new version 
tomorrow,
but I think there won't be big changes except addressing some review
comments from you.
I also get this:

ERROR: "pci_set_host_bridge_release" [drivers/pci/xen-pcifront.ko] undefined!
ERROR: "pci_create_root_bus" [drivers/pci/xen-pcifront.ko] undefined!
ERROR: "pci_remove_root_bus" [drivers/pci/xen-pcifront.ko] undefined!
ERROR: "pci_stop_root_bus" [drivers/pci/xen-pcifront.ko] undefined!

when building it as a module.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help