From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: Re: [PATCH] xen-pciback: provide a "reset" sysfs file to try harder at an SBR Date: Wed, 9 Jul 2014 12:10:20 -0400 Message-ID: <20140709161020.GC31601@laptop.dumpdata.com> References: <1404914999-5153-1-git-send-email-david.vrabel@citrix.com> <20140709142212.GH21837@laptop.dumpdata.com> <20140709145629.GD27881@laptop.dumpdata.com> <53BD67C5.8040408@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Received: from mail6.bemta14.messagelabs.com ([193.109.254.103]) by lists.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1X4uRv-0005rb-9e for xen-devel@lists.xenproject.org; Wed, 09 Jul 2014 16:10:27 +0000 Content-Disposition: inline In-Reply-To: <53BD67C5.8040408@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: David Vrabel Cc: xen-devel@lists.xenproject.org, Boris Ostrovsky List-Id: xen-devel@lists.xenproject.org On Wed, Jul 09, 2014 at 05:03:17PM +0100, David Vrabel wrote: > On 09/07/14 15:56, Konrad Rzeszutek Wilk wrote: > > > > I think for your patch to work it has to de-register what the > > generic PCI code does in pci_create_capabilities_sysfs: > > > > 1339 if (!pci_probe_reset_function(dev)) { > > 1340 retval = device_create_file(&dev->dev, &reset_attr); > > 1341 if (retval) > > 1342 goto error; > > 1343 dev->reset_fn = 1; > > 1344 } > > It just needs to have the inverse test. > > --- a/drivers/xen/xen-pciback/pci_stub.c > +++ b/drivers/xen/xen-pciback/pci_stub.c > @@ -151,14 +151,11 @@ static int pcistub_try_create_reset_file(struct > pci_dev *pci) > { > struct xen_pcibk_dev_data *dev_data = pci_get_drvdata(pci); > struct device *dev = &pci->dev; > - struct kernfs_node *reset_dirent; > int ret; > > - reset_dirent = sysfs_get_dirent(dev->kobj.sd, "reset"); > - if (reset_dirent) { > - sysfs_put(reset_dirent); > + /* Already have a per-function reset? */ > + if (pci_dev_reset(dev, 1) == 0) OK, however the'reset' in SysFS does not do bus/slot reset. It only calls 'pci_reset_function' - which is inadequate in certain cases (GPUs, device does not really go in D3 when asked too, etc) and that is where bus/slot reset functionality is needed. > return 0; > - } > > ret = device_create_file(dev, &dev_attr_reset); > if (ret < 0) > > David