xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
From: "Jan Beulich" <JBeulich@suse.com>
To: Govinda Tatti <Govinda.Tatti@Oracle.COM>
Cc: Juergen Gross <jgross@suse.com>,
	linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org,
	bhelgaas@google.com, xen-devel@lists.xenproject.org,
	boris.ostrovsky@Oracle.COM, roger.pau@citrix.com
Subject: Re: [PATCH V3 2/2] Xen/PCIback: Implement PCI flr/slot/bus reset with 'reset' SysFS attribute
Date: Fri, 08 Dec 2017 02:34:25 -0700	[thread overview]
Message-ID: <5A2A6AB10200007800195D4F@prv-mh.provo.novell.com> (raw)
In-Reply-To: <20171207222145.9769-3-Govinda.Tatti@Oracle.COM>

>>> On 07.12.17 at 23:21, <Govinda.Tatti@Oracle.COM> wrote:
> Due to the complexity with the PCI lock we cannot do the reset when a
> device is bound ('echo $BDF > bind') or when unbound ('echo $BDF > unbind')
> as the pci_[slot|bus]_reset also takes the same lock resulting in a
> dead-lock.

It took me a moment to figure that here you're referring to the
process of (un)binding, not the state. To avoid that ambiguity in
wording, how about "... we cannot do the reset while a device is
being bound (...) or while it is being unbound ..."?

> --- a/Documentation/ABI/testing/sysfs-driver-pciback
> +++ b/Documentation/ABI/testing/sysfs-driver-pciback
> @@ -11,3 +11,18 @@ Description:
>                  #echo 00:19.0-E0:2:FF > /sys/bus/pci/drivers/pciback/quirks
>                  will allow the guest to read and write to the configuration
>                  register 0x0E.
> +
> +What:           /sys/bus/pci/drivers/pciback/reset
> +Date:           Dec 2017
> +KernelVersion:  4.15
> +Contact:        xen-devel@lists.xenproject.org 
> +Description:
> +                An option to perform a flr/slot/bus reset when a PCI device
> +		is owned by Xen PCI backend. Writing a string of DDDD:BB:DD.F

SSSS:BB:DD.F (or else the D-s are ambiguous, the more that "domain"
in Xen code is ambiguous anyway - I continue to be mislead by struct
pcistub_device_id's domain field)

Also I assume the SSSS part is optional (default zero), which
probably can and should be expressed in some way.

> --- a/drivers/xen/xen-pciback/pci_stub.c
> +++ b/drivers/xen/xen-pciback/pci_stub.c
> @@ -313,6 +313,102 @@ void pcistub_put_pci_dev(struct pci_dev *dev)
>  	up_write(&pcistub_sem);
>  }
>  
> +struct pcistub_args {
> +	const struct pci_dev *dev;
> +	unsigned int dcount;

The sole use of this field is for a debug message. Why not drop it
and make "dev" the "data" argument without further indirection?

> +static int pcistub_device_search(struct pci_dev *dev, void *data)
> +{
> +	struct pcistub_device *psdev;
> +	struct pcistub_args *arg = data;
> +	bool found = false;
> +	unsigned long flags;
> +
> +	spin_lock_irqsave(&pcistub_devices_lock, flags);
> +
> +	list_for_each_entry(psdev, &pcistub_devices, dev_list) {
> +		if (psdev->dev == dev) {
> +			found = true;
> +			arg->dcount++;
> +			break;

Neither here nor in the caller I can see a check whether the device
is currently assigned to a guest. Ownership by pciback alone imo is
not sufficient to allow a reset to be performed.

> +static int pcistub_device_reset(struct pci_dev *dev)
> +{
> +	struct xen_pcibk_dev_data *dev_data;
> +	bool slot = false, bus = false;
> +	struct pcistub_args arg = {};
> +
> +	if (!dev)
> +		return -EINVAL;
> +
> +	dev_dbg(&dev->dev, "[%s]\n", __func__);
> +
> +	/* First check and try FLR */
> +	if (pcie_has_flr(dev)) {
> +		dev_dbg(&dev->dev, "resetting %s device using FLR\n",
> +			pci_name(dev));
> +		pcie_flr(dev);

The lack of error check here puzzled me, but I see the function
indeed returns void right now. I think the prereq patch should
change this along with exporting the function - you really don't
want the device to be handed to a guest when the FLR timed
out.

> +		return 0;
> +	}
> +
> +	if (!pci_probe_reset_slot(dev->slot))
> +		slot = true;
> +	else if ((!pci_probe_reset_bus(dev->bus)) &&
> +		 (!pci_is_root_bus(dev->bus)))

Too many parentheses for my taste.

> +static ssize_t reset_store(struct device_driver *drv, const char *buf,
> +			   size_t count)
> +{
> +	struct pcistub_device *psdev;
> +	int domain, bus, slot, func;
> +	int err;
> +
> +	err = str_to_slot(buf, &domain, &bus, &slot, &func);
> +	if (err)
> +		return err;
> +
> +	psdev = pcistub_device_find(domain, bus, slot, func);
> +	if (psdev) {
> +		err = pcistub_device_reset(psdev->dev);
> +		pcistub_device_put(psdev);
> +	} else {
> +		err = -ENODEV;
> +	}
> +
> +	if (!err)
> +		err = count;
> +
> +	return err;
> +}
> +static DRIVER_ATTR_WO(reset);

Would it be worth for reads of the file to return whether the device
can be reset this way (i.e. the result of the checks you do before
actually doing the reset)?

Jan

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

  parent reply	other threads:[~2017-12-08  9:34 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20171207222145.9769-1-Govinda.Tatti@Oracle.COM>
2017-12-07 22:21 ` [PATCH V3 1/2] Drivers/PCI: Export pcie_has_flr() interface Govinda Tatti
2017-12-08 20:24   ` Bjorn Helgaas
     [not found]   ` <20171208202424.GC12367@bhelgaas-glaptop.roam.corp.google.com>
2017-12-12  0:29     ` Govinda Tatti
     [not found]     ` <426eeeab-0dcd-8de3-9c5f-a166acf2c130@Oracle.COM>
2017-12-12  0:59       ` Bjorn Helgaas
     [not found]       ` <20171212005919.GB30595@bhelgaas-glaptop.roam.corp.google.com>
2017-12-13 20:46         ` Govinda Tatti
     [not found]         ` <49956aaf-5fd5-939d-5fc7-231ffdb98b70@Oracle.COM>
2017-12-13 21:24           ` Bjorn Helgaas
     [not found]           ` <20171213212420.GH30595@bhelgaas-glaptop.roam.corp.google.com>
2017-12-14 12:52             ` Christoph Hellwig
     [not found]             ` <20171214125206.GA24958@infradead.org>
2017-12-15  0:24               ` Bjorn Helgaas
2017-12-15 15:48             ` Govinda Tatti
2017-12-15 18:18               ` Bjorn Helgaas
     [not found]               ` <20171215181801.GU30595@bhelgaas-glaptop.roam.corp.google.com>
2017-12-15 20:01                 ` Govinda Tatti
2017-12-18  3:09                 ` Alexey Kardashevskiy
2017-12-18 12:26                 ` Christoph Hellwig
     [not found]                 ` <20171218122629.GA18423@infradead.org>
2017-12-18 17:22                   ` Govinda Tatti
2018-09-09 18:59                   ` Pasi Kärkkäinen
     [not found]                   ` <20180909185944.GC18222@reaktio.net>
2018-09-10  2:33                     ` Sinan Kaya
     [not found]                     ` <9ffe43d2-a44b-974c-85c9-9923d71c5dba@kernel.org>
2018-09-10  9:52                       ` Pasi Kärkkäinen
     [not found]                       ` <20180910095231.GD18222@reaktio.net>
2018-09-10 17:04                         ` Sinan Kaya
2017-12-12 15:07     ` Christoph Hellwig
2017-12-07 22:21 ` [PATCH V3 2/2] Xen/PCIback: Implement PCI flr/slot/bus reset with 'reset' SysFS attribute Govinda Tatti
     [not found] ` <20171207222145.9769-3-Govinda.Tatti@Oracle.COM>
2017-12-08  9:34   ` Jan Beulich [this message]
2017-12-12 14:48     ` Govinda Tatti
2017-12-12 15:01       ` Jan Beulich
     [not found]       ` <5A2FFD690200007800196DFB@prv-mh.provo.novell.com>
2017-12-12 15:14         ` Govinda Tatti
2017-12-15 19:52       ` Govinda Tatti
     [not found]       ` <f19dbb09-ef22-2cf4-fb38-2a7c42b5dc48@Oracle.COM>
2017-12-18  7:36         ` Jan Beulich
     [not found]         ` <5A377E020200007800197FFA@prv-mh.provo.novell.com>
2017-12-18 17:32           ` Boris Ostrovsky
     [not found]           ` <559ffd12-b541-8a69-60bd-fbe10e3dc159@oracle.com>
2018-09-16 11:43             ` Pasi Kärkkäinen
     [not found]             ` <20180916114306.GF18222@reaktio.net>
2018-09-17 18:06               ` Boris Ostrovsky
     [not found]               ` <a726840b-8a5c-0890-73c6-3a95a7205153@oracle.com>
2018-09-18  7:15                 ` Pasi Kärkkäinen
     [not found]                 ` <20180918071519.GG18222@reaktio.net>
2018-09-18  9:32                   ` George Dunlap
     [not found]                   ` <5E7DDB68-4E68-48A5-AEEC-EE1B21A50E9E@citrix.com>
2018-09-18 18:09                     ` Boris Ostrovsky
     [not found]                     ` <352310b3-ec9b-2ceb-83f0-4550718120c3@oracle.com>
2018-09-19  9:05                       ` Roger Pau Monné
     [not found]                       ` <20180919090526.s3ahnemrt2ik2tx3@mac.bytemobile.com>
2018-10-03 15:51                         ` Pasi Kärkkäinen
     [not found]                         ` <20181003155104.GH5318@reaktio.net>
2018-10-08 14:32                           ` Boris Ostrovsky
     [not found]                           ` <f6b8e055-7afc-b4de-af88-425d799dcd28@oracle.com>
2018-10-23 18:40                             ` Håkon Alstadheim
2018-10-29 15:30                               ` Pasi Kärkkäinen
2018-11-14 14:24                               ` [PATCH cargo-cult-version] For linux-4.19.x . " Håkon Alstadheim
2019-08-26 21:05                             ` [Xen-devel] [PATCH V3 2/2] " Pasi Kärkkäinen
2017-12-12 15:01     ` Govinda Tatti

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=5A2A6AB10200007800195D4F@prv-mh.provo.novell.com \
    --to=jbeulich@suse.com \
    --cc=Govinda.Tatti@Oracle.COM \
    --cc=bhelgaas@google.com \
    --cc=boris.ostrovsky@Oracle.COM \
    --cc=jgross@suse.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pci@vger.kernel.org \
    --cc=roger.pau@citrix.com \
    --cc=xen-devel@lists.xenproject.org \
    /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;
as well as URLs for NNTP newsgroup(s).