• Y
    PCI: Fix default vga ref_count · 84544a1d
    Yinghai Lu 提交于
    when __ARCH_HAS_VGA_DEFAULT_DEVICE is not defined, aka EFIFB is not used,
    for static path, vga_default setting is through vga_arbiter_add_pci_device.
    and later x86 pci_fixup_video, will skip setting again.
    - subsys_initcall(vga_arb_device_init) come first to call
    vga_arbiter_add_pci_device. It will call pci_get_dev to hold one reference.
    
    for hotplug add path, even vga_arbiter_add_pci_device is called via
    notifier, but it will check VGA_RSRC_LEGACY_MASK that is not set for
    hotplug path.  So x86 pci_fixup_video will take over to call
    vga_set_default_device().  It will not hold one refrence.
    
    Later for hotplug remove path, vga_arbiter_del_pci_device that does not
    check VGA_RSRC_LEGACY_MASK will call put_device and it will cause ref_count
    to decrease extra. that will have that pci device get deleted early
    wrongly.
    
    Need to make get/put balance for both cases.
    Signed-off-by: NYinghai Lu <yinghai@kernel.org>
    Signed-off-by: NBjorn Helgaas <bhelgaas@google.com>
    Cc: x86@kernel.org
    Cc: Dave Airlie <airlied@redhat.com>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Julia Lawall <julia@diku.dk>
    Cc: Matthew Garrett <mjg@redhat.com>
    84544a1d
vgaarb.c 34.9 KB