[PATCH xserver v2] xfree86: recognize primary BUS_PCI device in xf86IsPrimaryPlatform()
Hans de Goede
hdegoede at redhat.com
Wed Sep 7 15:15:22 UTC 2016
Hi,
On 07-09-16 15:08, Laszlo Ersek wrote:
> The new platform bus code and the old PCI bus code overlap. Platform bus
> can handle any type of device, including PCI devices, whereas the PCI code
> can only handle PCI devices. Some drivers only support the old style
> PCI-probe methods, but the primary device detection code is server based,
> not driver based; so we might end up with a primary device which only has
> a PCI bus-capable driver, but was detected as primary by the platform
> code, or the other way around.
>
> (The above paragraph was shamelessly stolen from Hans de Goede, and
> customized.)
>
> The latter case applies to QEMU's virtio-gpu-pci device: it is detected as
> a BUS_PCI primary device, but we actually probe it first (with the
> modesetting driver) through xf86platformProbeDev(). The
> xf86IsPrimaryPlatform() function doesn't recognize the device as primary
> (it bails out as soon as it sees BUS_PCI); instead, we add the device as a
> secondary graphics card under "autoAddGPU". In turn, the success of this
> automatic probing-as-GPU prevents xf86CallDriverProbe() from proceeding to
> the PCI probing.
>
> The result is that the server exits with no primary devices detected.
>
> Commit cf66471353ac ("xfree86: use udev to provide device enumeration for
> kms devices (v10)") added "cross-bus" matching to xf86IsPrimaryPci(). Port
> that now to xf86IsPrimaryPlatform(), so that we can probe virtio-gpu-pci
> as a primary card in platform bus code.
>
> Cc: Adam Jackson <ajax at redhat.com>
> Cc: Dave Airlie <airlied at redhat.com>
> Cc: Hans de Goede <hdegoede at redhat.com>
> Cc: Keith Packard <keithp at keithp.com>
> Cc: Marcin Juszkiewicz <mjuszkiewicz at redhat.com>
> Signed-off-by: Laszlo Ersek <lersek at redhat.com>
Patch looks good to me:
Reviewed-by: Hans de Goede <hdegoede at redhat.com>
> ---
>
> Notes:
> - F24 scratch build:
> <http://arm.koji.fedoraproject.org/koji/taskinfo?taskID=3710269>
>
> - Marcin, can you please test this too on your phys hw setup? Thanks!
>
> hw/xfree86/common/xf86platformBus.c | 10 +++++++++-
> 1 file changed, 9 insertions(+), 1 deletion(-)
>
> diff --git a/hw/xfree86/common/xf86platformBus.c b/hw/xfree86/common/xf86platformBus.c
> index 96895a6e17f4..71f8df1d7681 100644
> --- a/hw/xfree86/common/xf86platformBus.c
> +++ b/hw/xfree86/common/xf86platformBus.c
> @@ -114,7 +114,15 @@ xf86_find_platform_device_by_devnum(int major, int minor)
> static Bool
> xf86IsPrimaryPlatform(struct xf86_platform_device *plat)
> {
> - return ((primaryBus.type == BUS_PLATFORM) && (plat == primaryBus.id.plat));
> + if (primaryBus.type == BUS_PLATFORM)
> + return plat == primaryBus.id.plat;
> +#ifdef XSERVER_LIBPCIACCESS
> + if (primaryBus.type == BUS_PCI)
> + if (plat->pdev)
> + if (MATCH_PCI_DEVICES(primaryBus.id.pci, plat->pdev))
> + return TRUE;
> +#endif
> + return FALSE;
> }
>
> static void
>
More information about the xorg-devel
mailing list