Hi Greg, Jason, > From: Greg KH <gregkh@xxxxxxxxxxxxxxxxxxx> > Sent: Tuesday, November 12, 2019 3:28 PM > > From: Dave Ertman <david.m.ertman@xxxxxxxxx> > > > > This is the initial implementation of the Virtual Bus, virtbus_device > > and virtbus_driver. The virtual bus is a software based bus intended > > to support lightweight devices and drivers and provide matching > > between them and probing of the registered drivers. > > > > Files added: > > drivers/bus/virtual_bus.c > > include/linux/virtual_bus.h > > Documentation/driver-api/virtual_bus.rst > > > > The primary purpose of the virual bus is to provide matching services > > and to pass the data pointer contained in the virtbus_device to the > > virtbus_driver during its probe call. This will allow two separate > > kernel objects to match up and start communication. > > > > The bus will support probe/remove shutdown and suspend/resume > > callbacks. > > > > Kconfig and Makefile alterations are included > > [..] I have a basic question with this bus. I read device-driver model [1] few times but couldn't get the clarity. mlx5_core driver will create virtbus device on virtbus. mlx5_ib driver binds to virtbus device in probe(). However mlx5_ib driver's probe() will create rdma device whose parent device will be PCI device and not virtbus_device. Is that correct? If so, bus driver of bus A, creating devices binding to device of bus B (pci) adheres to the linux device model? If so, such cross binding is not just limited to virtbus, right? [1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/driver-api/driver-model