From: greg@kroah.com (Greg KH)
Subject: [PATCH] NVMe: Add a character device for each nvme device
Date: Fri, 27 Jul 2012 12:21:00 -0700 [thread overview]
Message-ID: <20120727192100.GA2247@kroah.com> (raw)
In-Reply-To: <20120727190821.GO22985@linux.intel.com>
On Fri, Jul 27, 2012@03:08:21PM -0400, Matthew Wilcox wrote:
> On Fri, Jul 27, 2012@11:25:46AM -0700, Greg KH wrote:
> > On Fri, Jul 27, 2012@02:12:12PM -0400, Matthew Wilcox wrote:
> > > I don't see a problem here, but I'm no expert at sysfs / character devices.
> > > Alan, Greg, anyone else see any problems with how this character device is
> > > created / destroyed?
> >
> > Yes, see below:
>
> Thanks!
>
> > > > + device_create(nvme_char_cl, NULL, MKDEV(nvme_char_major, dev->instance),
> > > > + NULL, "nvme%d", dev->instance);
> >
> > You just created a device at the "root" of sysfs, which is wrong,
> > especially when you do have a parent device here. Please use it.
>
> OK, that makes sense; this device should be the child of the pci_dev that
> it belongs to.
>
> > Also, why are you creating your own class? Can't this just be a misc
> > device? And if you want to create your own class, please don't, use a
> > bus, as that is what is really happening here, right? We are trying to
> > move away from using 'struct class' wherever possible (one of these days
> > we'll just remove it...)
>
> What we're trying to achieve here is to create one character device
> per NVMe controller that gets plugged in. Each NVMe controller is-a
> PCI function. The reason we're trying to do this is so that we can send
> commands to the NVMe controller, even when there is no storage present
> (eg a drive is shipped from the factory with no configured storage).
>
> So we have no particular desire to create a new struct class, or struct
> bus. If we can create a misc device per PCIe function that's bound to our
> driver, that's great! Can you recommend a driver that does this already?
I don't think there is one, but it shouldn't be that hard to just create
a 'struct misdevice' for each one of the devices you want to create,
would it?
But, as you really are a "specific type", a bus_type might be overkill,
so the original use of device_create() should be fine. Just be sure to
fix the parent pointer issue, and you should be fine, right?
greg k-h
WARNING: multiple messages have this Message-ID (diff)
From: Greg KH <greg@kroah.com>
To: Matthew Wilcox <willy@linux.intel.com>
Cc: Keith Busch <keith.busch@intel.com>,
linux-nvme@lists.infradead.org, linux-kernel@vger.kernel.org,
Alan Cox <alan@lxorguk.ukuu.org.uk>
Subject: Re: [PATCH] NVMe: Add a character device for each nvme device
Date: Fri, 27 Jul 2012 12:21:00 -0700 [thread overview]
Message-ID: <20120727192100.GA2247@kroah.com> (raw)
In-Reply-To: <20120727190821.GO22985@linux.intel.com>
On Fri, Jul 27, 2012 at 03:08:21PM -0400, Matthew Wilcox wrote:
> On Fri, Jul 27, 2012 at 11:25:46AM -0700, Greg KH wrote:
> > On Fri, Jul 27, 2012 at 02:12:12PM -0400, Matthew Wilcox wrote:
> > > I don't see a problem here, but I'm no expert at sysfs / character devices.
> > > Alan, Greg, anyone else see any problems with how this character device is
> > > created / destroyed?
> >
> > Yes, see below:
>
> Thanks!
>
> > > > + device_create(nvme_char_cl, NULL, MKDEV(nvme_char_major, dev->instance),
> > > > + NULL, "nvme%d", dev->instance);
> >
> > You just created a device at the "root" of sysfs, which is wrong,
> > especially when you do have a parent device here. Please use it.
>
> OK, that makes sense; this device should be the child of the pci_dev that
> it belongs to.
>
> > Also, why are you creating your own class? Can't this just be a misc
> > device? And if you want to create your own class, please don't, use a
> > bus, as that is what is really happening here, right? We are trying to
> > move away from using 'struct class' wherever possible (one of these days
> > we'll just remove it...)
>
> What we're trying to achieve here is to create one character device
> per NVMe controller that gets plugged in. Each NVMe controller is-a
> PCI function. The reason we're trying to do this is so that we can send
> commands to the NVMe controller, even when there is no storage present
> (eg a drive is shipped from the factory with no configured storage).
>
> So we have no particular desire to create a new struct class, or struct
> bus. If we can create a misc device per PCIe function that's bound to our
> driver, that's great! Can you recommend a driver that does this already?
I don't think there is one, but it shouldn't be that hard to just create
a 'struct misdevice' for each one of the devices you want to create,
would it?
But, as you really are a "specific type", a bus_type might be overkill,
so the original use of device_create() should be fine. Just be sure to
fix the parent pointer issue, and you should be fine, right?
greg k-h
next prev parent reply other threads:[~2012-07-27 19:21 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-07-27 16:44 [PATCH] NVMe: Add a character device for each nvme device Keith Busch
2012-07-27 18:12 ` Matthew Wilcox
2012-07-27 18:12 ` Matthew Wilcox
2012-07-27 18:25 ` Greg KH
2012-07-27 18:25 ` Greg KH
2012-07-27 19:08 ` Matthew Wilcox
2012-07-27 19:08 ` Matthew Wilcox
2012-07-27 19:21 ` Greg KH [this message]
2012-07-27 19:21 ` Greg KH
2012-07-27 20:30 ` Matthew Wilcox
2012-07-27 20:30 ` Matthew Wilcox
2012-07-27 19:28 ` Jeff Garzik
2012-07-27 19:28 ` Jeff Garzik
2012-07-27 20:26 ` Matthew Wilcox
2012-07-27 20:26 ` Matthew Wilcox
2012-07-27 20:42 ` Jeff Garzik
2012-07-27 20:42 ` Jeff Garzik
2012-07-27 20:44 ` Matthew Wilcox
-- strict thread matches above, loose matches on Subject: below --
2012-08-02 19:10 Keith Busch
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=20120727192100.GA2247@kroah.com \
--to=greg@kroah.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.