Message ID | 1380714911-6254-1-git-send-email-kraxel@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
> -----Original Message----- > From: Gerd Hoffmann [mailto:kraxel@redhat.com] > Sent: Wednesday, October 02, 2013 4:55 AM > Cc: Gerd Hoffmann; KY Srinivasan; Haiyang Zhang; Jean-Christophe Plagniol- > Villard; Tomi Valkeinen; open list:Hyper-V CORE AND...; open list:FRAMEBUFFER > LAYER; open list > Subject: [PATCH 1/2] hyperv-fb: add pci stub > > This patch adds a pci stub driver to hyper-fb. The hyperv framebuffer > driver will bind to the pci device then, so linux kernel and userspace > know there is a proper kernel driver for the device active. lspci shows > this for example: > > [root@dhcp231 ~]# lspci -vs8 > 00:08.0 VGA compatible controller: Microsoft Corporation Hyper-V virtual > VGA (prog-if 00 [VGA controller]) > Flags: bus master, fast devsel, latency 0, IRQ 11 > Memory at f8000000 (32-bit, non-prefetchable) [size=64M] > Expansion ROM at <unassigned> [disabled] > Kernel driver in use: hyperv_fb > > Another effect is that the xorg vesa driver will not attach to the > device and thus the Xorg server will automatically use the fbdev > driver instead. > > Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> > --- > drivers/video/hyperv_fb.c | 40 > +++++++++++++++++++++++++++++++++++++++- > 1 file changed, 39 insertions(+), 1 deletion(-) > > diff --git a/drivers/video/hyperv_fb.c b/drivers/video/hyperv_fb.c > index 8ac99b8..8d456dc 100644 > --- a/drivers/video/hyperv_fb.c > +++ b/drivers/video/hyperv_fb.c > @@ -795,12 +795,21 @@ static int hvfb_remove(struct hv_device *hdev) > } > > > +static DEFINE_PCI_DEVICE_TABLE(pci_stub_id_table) = { > + { > + .vendor = PCI_VENDOR_ID_MICROSOFT, > + .device = PCI_DEVICE_ID_HYPERV_VIDEO, > + }, > + { /* end of list */ } > +}; > + > static const struct hv_vmbus_device_id id_table[] = { > /* Synthetic Video Device GUID */ > {HV_SYNTHVID_GUID}, > {} > }; > > +MODULE_DEVICE_TABLE(pci, pci_stub_id_table); > MODULE_DEVICE_TABLE(vmbus, id_table); > > static struct hv_driver hvfb_drv = { > @@ -810,14 +819,43 @@ static struct hv_driver hvfb_drv = { > .remove = hvfb_remove, > }; > > +static int hvfb_pci_stub_probe(struct pci_dev *pdev, > + const struct pci_device_id *ent) > +{ > + return 0; > +} > + > +static void hvfb_pci_stub_remove(struct pci_dev *pdev) > +{ > +} > + > +static struct pci_driver hvfb_pci_stub_driver = { > + .name = KBUILD_MODNAME, > + .id_table = pci_stub_id_table, > + .probe = hvfb_pci_stub_probe, > + .remove = hvfb_pci_stub_remove, > +}; > > static int __init hvfb_drv_init(void) > { > - return vmbus_driver_register(&hvfb_drv); > + int ret; > + > + ret = vmbus_driver_register(&hvfb_drv); > + if (ret != 0) > + return ret; > + > + ret = pci_register_driver(&hvfb_pci_stub_driver); > + if (ret != 0) { > + vmbus_driver_unregister(&hvfb_drv); > + return ret; > + } > + > + return 0; > } > > static void __exit hvfb_drv_exit(void) > { > + pci_unregister_driver(&hvfb_pci_stub_driver); > vmbus_driver_unregister(&hvfb_drv); > } > > -- > 1.8.3.1 Gerd, Thanks for doing this. This certainly will address some of the issues that are reported. I do have a question though - how would this work if we don't have PCI bus in the guest. Regards, K. Y -- To unsubscribe from this list: send the line "unsubscribe linux-fbdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
> -----Original Message----- > From: linux-fbdev-owner@vger.kernel.org [mailto:linux-fbdev- > owner@vger.kernel.org] On Behalf Of Gerd Hoffmann > Sent: Wednesday, October 2, 2013 7:55 AM > Cc: Gerd Hoffmann; KY Srinivasan; Haiyang Zhang; Jean-Christophe Plagniol- > Villard; Tomi Valkeinen; open list:Hyper-V CORE AND...; open > list:FRAMEBUFFER LAYER; open list > Subject: [PATCH 1/2] hyperv-fb: add pci stub > > This patch adds a pci stub driver to hyper-fb. The hyperv framebuffer driver > will bind to the pci device then, so linux kernel and userspace know there is a > proper kernel driver for the device active. lspci shows this for example: > > [root@dhcp231 ~]# lspci -vs8 > 00:08.0 VGA compatible controller: Microsoft Corporation Hyper-V virtual > VGA (prog-if 00 [VGA controller]) > Flags: bus master, fast devsel, latency 0, IRQ 11 > Memory at f8000000 (32-bit, non-prefetchable) [size=64M] > Expansion ROM at <unassigned> [disabled] > Kernel driver in use: hyperv_fb > > Another effect is that the xorg vesa driver will not attach to the device and > thus the Xorg server will automatically use the fbdev driver instead. > > Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> Acked-by: Haiyang Zhang <haiyangz@microsoft.com> Thank you for fixing this! - Haiyang -- To unsubscribe from this list: send the line "unsubscribe linux-fbdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Mi, 2013-10-02 at 14:29 +0000, KY Srinivasan wrote: > > > This patch adds a pci stub driver to hyper-fb. The hyperv framebuffer > > driver will bind to the pci device then, so linux kernel and userspace > > know there is a proper kernel driver for the device active. lspci shows > > this for example: > Gerd, > > Thanks for doing this. This certainly will address some of the issues that are reported. I do have a question though - how would this work if we don't have PCI bus in the guest. The hyperv framebuffer driver wouldn't work in the first place then as it looks up the framebuffer address in pci config space (see hvfb_getmem function). cheers, Gerd -- To unsubscribe from this list: send the line "unsubscribe linux-fbdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
> -----Original Message----- > From: Gerd Hoffmann [mailto:kraxel@redhat.com] > Sent: Sunday, October 06, 2013 11:51 PM > To: KY Srinivasan > Cc: Haiyang Zhang; Jean-Christophe Plagniol-Villard; Tomi Valkeinen; open > list:Hyper-V CORE AND...; open list:FRAMEBUFFER LAYER; open list > Subject: Re: [PATCH 1/2] hyperv-fb: add pci stub > > On Mi, 2013-10-02 at 14:29 +0000, KY Srinivasan wrote: > > > > > This patch adds a pci stub driver to hyper-fb. The hyperv framebuffer > > > driver will bind to the pci device then, so linux kernel and userspace > > > know there is a proper kernel driver for the device active. lspci shows > > > this for example: > > > Gerd, > > > > Thanks for doing this. This certainly will address some of the issues that are > reported. I do have a question though - how would this work if we don't have PCI > bus in the guest. > > The hyperv framebuffer driver wouldn't work in the first place then as > it looks up the framebuffer address in pci config space (see hvfb_getmem > function). We are going to fix this as we move this code to run on our UEFI firmware. Regards, K. Y
On Mo, 2013-10-07 at 17:12 +0000, KY Srinivasan wrote: > > > -----Original Message----- > > From: Gerd Hoffmann [mailto:kraxel@redhat.com] > > Sent: Sunday, October 06, 2013 11:51 PM > > To: KY Srinivasan > > Cc: Haiyang Zhang; Jean-Christophe Plagniol-Villard; Tomi Valkeinen; open > > list:Hyper-V CORE AND...; open list:FRAMEBUFFER LAYER; open list > > Subject: Re: [PATCH 1/2] hyperv-fb: add pci stub > > > > On Mi, 2013-10-02 at 14:29 +0000, KY Srinivasan wrote: > > > > > > > This patch adds a pci stub driver to hyper-fb. The hyperv framebuffer > > > > driver will bind to the pci device then, so linux kernel and userspace > > > > know there is a proper kernel driver for the device active. lspci shows > > > > this for example: > > > > > Gerd, > > > > > > Thanks for doing this. This certainly will address some of the issues that are > > reported. I do have a question though - how would this work if we don't have PCI > > bus in the guest. > > > > The hyperv framebuffer driver wouldn't work in the first place then as > > it looks up the framebuffer address in pci config space (see hvfb_getmem > > function). > > We are going to fix this as we move this code to run on our UEFI firmware. Hmm, windows server 2012 seems to have no option to enable uefi. So I guess this is still in development? How this is going to look like? Probably you are going for pure uefi firmware, without csm, to be able to leave all the legacy bios stuff behind in uefi mode. Therefore no vesa bios support. efi drivers for vmbus network/storage/display/input in the firmware. No legacy ide/vga pci devices. Correct? The linux kernel will come up with efifb then, switching over to hyperv-fb once the driver is loaded. The hyperv-fb pci stub driver will not bind to the hyperv vga pci device if it isn't present in the guest. hyperv-fb will load just fine nevertheless (once hvfb_getmem is fixed to not depend on the pci device config space). The pci stub added by the patch and the vmbus driver in hyperv-fb are completely independent. cheers, Gerd -- To unsubscribe from this list: send the line "unsubscribe linux-fbdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On 02/10/13 14:55, Gerd Hoffmann wrote: > This patch adds a pci stub driver to hyper-fb. The hyperv framebuffer > driver will bind to the pci device then, so linux kernel and userspace > know there is a proper kernel driver for the device active. lspci shows > this for example: > > [root@dhcp231 ~]# lspci -vs8 > 00:08.0 VGA compatible controller: Microsoft Corporation Hyper-V virtual > VGA (prog-if 00 [VGA controller]) > Flags: bus master, fast devsel, latency 0, IRQ 11 > Memory at f8000000 (32-bit, non-prefetchable) [size=64M] > Expansion ROM at <unassigned> [disabled] > Kernel driver in use: hyperv_fb > > Another effect is that the xorg vesa driver will not attach to the > device and thus the Xorg server will automatically use the fbdev > driver instead. > > Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> > --- > drivers/video/hyperv_fb.c | 40 +++++++++++++++++++++++++++++++++++++++- > 1 file changed, 39 insertions(+), 1 deletion(-) > Thanks, queuing the series for 3.13. Tomi
diff --git a/drivers/video/hyperv_fb.c b/drivers/video/hyperv_fb.c index 8ac99b8..8d456dc 100644 --- a/drivers/video/hyperv_fb.c +++ b/drivers/video/hyperv_fb.c @@ -795,12 +795,21 @@ static int hvfb_remove(struct hv_device *hdev) } +static DEFINE_PCI_DEVICE_TABLE(pci_stub_id_table) = { + { + .vendor = PCI_VENDOR_ID_MICROSOFT, + .device = PCI_DEVICE_ID_HYPERV_VIDEO, + }, + { /* end of list */ } +}; + static const struct hv_vmbus_device_id id_table[] = { /* Synthetic Video Device GUID */ {HV_SYNTHVID_GUID}, {} }; +MODULE_DEVICE_TABLE(pci, pci_stub_id_table); MODULE_DEVICE_TABLE(vmbus, id_table); static struct hv_driver hvfb_drv = { @@ -810,14 +819,43 @@ static struct hv_driver hvfb_drv = { .remove = hvfb_remove, }; +static int hvfb_pci_stub_probe(struct pci_dev *pdev, + const struct pci_device_id *ent) +{ + return 0; +} + +static void hvfb_pci_stub_remove(struct pci_dev *pdev) +{ +} + +static struct pci_driver hvfb_pci_stub_driver = { + .name = KBUILD_MODNAME, + .id_table = pci_stub_id_table, + .probe = hvfb_pci_stub_probe, + .remove = hvfb_pci_stub_remove, +}; static int __init hvfb_drv_init(void) { - return vmbus_driver_register(&hvfb_drv); + int ret; + + ret = vmbus_driver_register(&hvfb_drv); + if (ret != 0) + return ret; + + ret = pci_register_driver(&hvfb_pci_stub_driver); + if (ret != 0) { + vmbus_driver_unregister(&hvfb_drv); + return ret; + } + + return 0; } static void __exit hvfb_drv_exit(void) { + pci_unregister_driver(&hvfb_pci_stub_driver); vmbus_driver_unregister(&hvfb_drv); }
This patch adds a pci stub driver to hyper-fb. The hyperv framebuffer driver will bind to the pci device then, so linux kernel and userspace know there is a proper kernel driver for the device active. lspci shows this for example: [root@dhcp231 ~]# lspci -vs8 00:08.0 VGA compatible controller: Microsoft Corporation Hyper-V virtual VGA (prog-if 00 [VGA controller]) Flags: bus master, fast devsel, latency 0, IRQ 11 Memory at f8000000 (32-bit, non-prefetchable) [size=64M] Expansion ROM at <unassigned> [disabled] Kernel driver in use: hyperv_fb Another effect is that the xorg vesa driver will not attach to the device and thus the Xorg server will automatically use the fbdev driver instead. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> --- drivers/video/hyperv_fb.c | 40 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-)