All of lore.kernel.org
 help / color / mirror / Atom feed
From: Guenter Roeck <linux@roeck-us.net>
To: Kim Phillips <kim.phillips@freescale.com>,
	Alex Williamson <alex.williamson@redhat.com>
Cc: Kim Phillips <kim.phillips@linaro.org>,
	gregkh@linuxfoundation.org, stuart.yoder@freescale.com,
	kvm@vger.kernel.org, jan.kiszka@siemens.com, will.deacon@arm.com,
	linux-kernel@vger.kernel.org, mhocko@suse.cz,
	bhelgaas@google.com, Varun.Sethi@freescale.com,
	kvmarm@lists.cs.columbia.edu, rafael.j.wysocki@intel.com,
	agraf@suse.de, linux-pci@vger.kernel.org, konrad.wilk@oracle.com,
	d.kasatkin@samsung.com, tj@kernel.org, scottwood@freescale.com,
	a.motakis@virtualopensystems.com, tech@virtualopensystems.com,
	Bharat.Bhushan@freescale.com, toshi.kani@hp.com,
	a.rigo@virtualopensystems.com, iommu@lists.linux-foundation.org,
	joe@perches.com, christoffer.dall@linaro.org
Subject: Re: [RFC PATCH] PCI: Introduce new device binding path using pci_dev.driver_override
Date: Fri, 04 Apr 2014 19:07:29 -0700	[thread overview]
Message-ID: <533F6561.2090205@roeck-us.net> (raw)
In-Reply-To: <20140404203512.5b5ac8a134a71065518712c3@freescale.com>

On 04/04/2014 06:35 PM, Kim Phillips wrote:
> Needed by platform device drivers, such as the vfio-platform driver [1],
> in order to bypass the existing OF, ACPI, id_table and name string matches,
> and successfully be able to be bound to any device, like so:
>
> echo vfio-platform > /sys/bus/platform/devices/fff51000.ethernet/driver_override
> echo fff51000.ethernet > /sys/bus/platform/devices/fff51000.ethernet/driver/unbind
> echo fff51000.ethernet > /sys/bus/platform/drivers_probe
>
> This mimics "PCI: Introduce new device binding path using
> pci_dev.driver_override" [2], which is an interface enhancement
> for more deterministic PCI device binding, e.g., when in the
> presence of hotplug.
>
> [1] http://lkml.iu.edu/hypermail/linux/kernel/1402.1/00177.html
> [2] http://thread.gmane.org/gmane.linux.kernel.iommu/4605
>
> Signed-off-by: Kim Phillips <kim.phillips@freescale.com>
> ---
> if this looks ok, should it be included in the next version of the
> vfio-platform submission series, like last time ([1] above)?
>
>   Documentation/ABI/testing/sysfs-bus-platform | 17 ++++++++++
>   drivers/base/platform.c                      | 46 ++++++++++++++++++++++++++++
>   include/linux/platform_device.h              |  1 +
>   3 files changed, 64 insertions(+)
>   create mode 100644 Documentation/ABI/testing/sysfs-bus-platform
>
> diff --git a/Documentation/ABI/testing/sysfs-bus-platform b/Documentation/ABI/testing/sysfs-bus-platform
> new file mode 100644
> index 0000000..6b14a6a
> --- /dev/null
> +++ b/Documentation/ABI/testing/sysfs-bus-platform
> @@ -0,0 +1,17 @@
> +What:		/sys/bus/platform/devices/.../driver_override
> +Date:		April 2014
> +Contact:	Kim Phillips <kim.phillips@freescale.com>
> +Description:
> +		This file allows the driver for a device to be specified
> +		which will override standard OF, ACPI, ID table, and name
> +		matching.  When specified, only a driver with a name matching
> +		the value written to driver_override will have an opportunity
> +		to bind to the device.  The override may be cleared by
> +		writing an empty string (ex. echo > driver_override), returning
> +		the device to standard matching rules binding.  Writing to
> +		driver_override does not automatically unbind the device from
> +		its current driver or make any attempt to automatically load
> +		the specified driver name.  If no driver with a matching name
> +		is currently loaded in the kernel, no match will be found.
> +		This also allows devices to opt-out of driver binding using
> +		a driver_override name such as "none".
> diff --git a/drivers/base/platform.c b/drivers/base/platform.c
> index e714709..ded1db1 100644
> --- a/drivers/base/platform.c
> +++ b/drivers/base/platform.c
> @@ -22,6 +22,7 @@
>   #include <linux/pm_runtime.h>
>   #include <linux/idr.h>
>   #include <linux/acpi.h>
> +#include <linux/limits.h>
>
>   #include "base.h"
>   #include "power/power.h"
> @@ -690,8 +691,49 @@ static ssize_t modalias_show(struct device *dev, struct device_attribute *a,
>   }
>   static DEVICE_ATTR_RO(modalias);
>
> +static ssize_t driver_override_store(struct device *dev,
> +				     struct device_attribute *attr,
> +				     const char *buf, size_t count)
> +{
> +	struct platform_device *pdev = to_platform_device(dev);
> +	char *driver_override, *old = pdev->driver_override;
> +
> +	if (count > PATH_MAX)
> +		return -EINVAL;
> +
> +	driver_override = kstrndup(buf, count, GFP_KERNEL);
> +	if (!driver_override)
> +		return -ENOMEM;
> +
> +	while (strlen(driver_override) &&
> +	       driver_override[strlen(driver_override) - 1] == '\n')
> +		driver_override[strlen(driver_override) - 1] = '\0';
> +

Seems to me that something like

	cp = strchr(driver_override, '\n');
	if (cp)
		*cp = '\0';

would be much simpler.

Guenter

  reply	other threads:[~2014-04-05  2:07 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-04-01 16:28 [RFC PATCH] PCI: Introduce new device binding path using pci_dev.driver_override Alex Williamson
2014-04-01 16:28 ` Alex Williamson
2014-04-01 16:47 ` Greg KH
     [not found]   ` <20140401164725.GA4649-U8xfFu+wG4EAvxtiuMwx3w@public.gmane.org>
2014-04-01 17:15     ` Alex Williamson
2014-04-01 17:15       ` Alex Williamson
2014-04-02  0:39       ` Christoffer Dall
2014-04-01 23:52 ` Kim Phillips
2014-04-02  0:23   ` Greg KH
2014-04-02 22:06     ` Kim Phillips
2014-04-02 23:02       ` Alex Williamson
2014-04-05  1:35         ` Kim Phillips
2014-04-05  1:35           ` Kim Phillips
2014-04-05  2:07           ` Guenter Roeck [this message]
     [not found] ` <20140401161851.18815.31108.stgit-xdHQ/5r00wBBDLzU/O5InQ@public.gmane.org>
2014-04-10 20:52   ` Stuart Yoder
2014-04-10 20:52     ` Stuart Yoder
     [not found]     ` <9b087b78bf9e41628cca2bd9e6f6a1c2-ufbTtyGzTTT8GZusEWM6WuO6mTEJWrR4XA4E9RH9d+qIuWR1G4zioA@public.gmane.org>
2014-04-10 21:15       ` Alex Williamson
2014-04-10 21:15         ` Alex Williamson
     [not found]         ` <1397164516.3142.51.camel-85EaTFmN5p//9pzu0YdTqQ@public.gmane.org>
2014-04-10 22:16           ` Alex Williamson
2014-04-10 22:16             ` Alex Williamson

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=533F6561.2090205@roeck-us.net \
    --to=linux@roeck-us.net \
    --cc=Bharat.Bhushan@freescale.com \
    --cc=Varun.Sethi@freescale.com \
    --cc=a.motakis@virtualopensystems.com \
    --cc=a.rigo@virtualopensystems.com \
    --cc=agraf@suse.de \
    --cc=alex.williamson@redhat.com \
    --cc=bhelgaas@google.com \
    --cc=christoffer.dall@linaro.org \
    --cc=d.kasatkin@samsung.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=iommu@lists.linux-foundation.org \
    --cc=jan.kiszka@siemens.com \
    --cc=joe@perches.com \
    --cc=kim.phillips@freescale.com \
    --cc=kim.phillips@linaro.org \
    --cc=konrad.wilk@oracle.com \
    --cc=kvm@vger.kernel.org \
    --cc=kvmarm@lists.cs.columbia.edu \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pci@vger.kernel.org \
    --cc=mhocko@suse.cz \
    --cc=rafael.j.wysocki@intel.com \
    --cc=scottwood@freescale.com \
    --cc=stuart.yoder@freescale.com \
    --cc=tech@virtualopensystems.com \
    --cc=tj@kernel.org \
    --cc=toshi.kani@hp.com \
    --cc=will.deacon@arm.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.