Thread (36 messages) 36 messages, 4 authors, 2020-02-19

Re: [PATCH V2 3/5] vDPA: introduce vDPA bus

From: "Michael S. Tsirkin" <mst@redhat.com>
Date: 2020-02-13 15:41:24
Also in: kvm, lkml, virtualization

On Thu, Feb 13, 2020 at 11:05:42AM -0400, Jason Gunthorpe wrote:
On Thu, Feb 13, 2020 at 10:58:44PM +0800, Jason Wang wrote:
quoted
On 2020/2/13 下午9:41, Jason Gunthorpe wrote:
quoted
On Thu, Feb 13, 2020 at 11:34:10AM +0800, Jason Wang wrote:
quoted
quoted
   You have dev, type or
class to choose from. Type is rarely used and doesn't seem to be used
by vdpa, so class seems the right choice

Jason
Yes, but my understanding is class and bus are mutually exclusive. So we
can't add a class to a device which is already attached on a bus.
While I suppose there are variations, typically 'class' devices are
user facing things and 'bus' devices are internal facing (ie like a
PCI device)

Though all vDPA devices have the same programming interface, but the
semantic is different. So it looks to me that use bus complies what
class.rst said:

"

Each device class defines a set of semantics and a programming interface
that devices of that class adhere to. Device drivers are the
implementation of that programming interface for a particular device on
a particular bus.

"
Here we are talking about the /dev/XX node that provides the
programming interface. All the vdpa devices have the same basic
chardev interface and discover any semantic variations 'in band'
quoted
quoted
So why is this using a bus? VDPA is a user facing object, so the
driver should create a class vhost_vdpa device directly, and that
driver should live in the drivers/vhost/ directory.
 
This is because we want vDPA to be generic for being used by different
drivers which is not limited to vhost-vdpa. E.g in this series, it allows
vDPA to be used by kernel virtio drivers. And in the future, we will
probably introduce more drivers in the future.
I don't see how that connects with using a bus.

Every class of virtio traffic is going to need a special HW driver to
enable VDPA, that special driver can create the correct vhost side
class device.

That's just a ton of useless code duplication, and a good chance
to have minor variations in implementations confusing
userspace.

Instead, each device implement the same interface, and then
vhost sits on top.
quoted
quoted
For the PCI VF case this driver would bind to a PCI device like
everything else

For our future SF/ADI cases the driver would bind to some
SF/ADI/whatever device on a bus.
All these driver will still be bound to their own bus (PCI or other). And
what the driver needs is to present a vDPA device to virtual vDPA bus on
top.
Again, I can't see any reason to inject a 'vdpa virtual bus' on
top. That seems like mis-using the driver core.

Jason
That bus is exactly what Greg KH proposed. There are other ways
to solve this I guess but this bikeshedding is getting tiring.
Come on it's an internal kernel interface, if we feel
it was a wrong direction to take we can change our minds later.
Main thing is getting UAPI right.

-- 
MST
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help