Messages in this thread | | | Date | Thu, 13 Jan 2022 16:08:07 -0800 | Subject | Re: [PATCH v1 1/9] drivers: hv: dxgkrnl: Driver initialization and creation of dxgadapter | From | Iouri Tarassov <> |
| |
On 1/12/2022 11:46 PM, Greg KH wrote: > On Wed, Jan 12, 2022 at 11:55:06AM -0800, Iouri Tarassov wrote: > > + dev_dbg(dxgglobaldev, "%s: %x:%x %p %pUb\n", > > + __func__, adapter->luid.b, adapter->luid.a, hdev->channel, > > + &hdev->channel->offermsg.offer.if_instance); > > When I see something like "global device pointer", that is a HUGE red > flag. > > No driver should ever have anything that is static to the driver like > this, it should always be per-device. Please use the correct device > model here, which does not include a global pointer, but rather unique > ones that are given to you by the driver core. That way you are never > tied to only "one device per system" as that is a constraint that you > will have to fix eventually, might as well do it all correctly the first > time as it is not any extra effort to do so Hi Greg,
dxgglobaldev is a pointer to the global driver data. By design there is a single hyper-v VM bus and a single corresponding /dev/dxg device. Virtual GPU adapters are present on the VM bus. /dev/dxg device is used to enumerate all virtual GPUs, which are accessible only via IOCTLs to /dev/dxg. dxgglobaldev has a list of all vGPU adapters and other global driver state. This follows the design on Windows where a single global object in dxgkrnl.sys driver is used to enumerate and access all GPU devices. This is also how the public D3DKMT interface to dxgkrnl is structured.
Thanks Iouri
| |