lkml.org 
[lkml]   [2012]   [Aug]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 2/5] PCI/vga: simplify code by hotplug safe pci_get_domain_bus_and_slot()
    Date
    Following code has a race window between pci_find_bus() and pci_get_slot()
    if PCI hotplug operation happens between them which removes the pci_bus.
    So use PCI hotplug safe interface pci_get_domain_bus_and_slot() instead,
    which also reduces code complexity.

    struct pci_bus *pci_bus = pci_find_bus(domain, busno);
    struct pci_dev *pci_dev = pci_get_slot(pci_bus, devfn);

    Signed-off-by: Jiang Liu <jiang.liu@huawei.com>
    ---
    drivers/gpu/vga/vgaarb.c | 15 +++------------
    1 file changed, 3 insertions(+), 12 deletions(-)

    diff --git a/drivers/gpu/vga/vgaarb.c b/drivers/gpu/vga/vgaarb.c
    index 3df8fc0..b6852b7 100644
    --- a/drivers/gpu/vga/vgaarb.c
    +++ b/drivers/gpu/vga/vgaarb.c
    @@ -1066,7 +1066,6 @@ static ssize_t vga_arb_write(struct file *file, const char __user * buf,
    }

    } else if (strncmp(curr_pos, "target ", 7) == 0) {
    - struct pci_bus *pbus;
    unsigned int domain, bus, devfn;
    struct vga_device *vgadev;

    @@ -1085,19 +1084,11 @@ static ssize_t vga_arb_write(struct file *file, const char __user * buf,
    pr_debug("vgaarb: %s ==> %x:%x:%x.%x\n", curr_pos,
    domain, bus, PCI_SLOT(devfn), PCI_FUNC(devfn));

    - pbus = pci_find_bus(domain, bus);
    - pr_debug("vgaarb: pbus %p\n", pbus);
    - if (pbus == NULL) {
    - pr_err("vgaarb: invalid PCI domain and/or bus address %x:%x\n",
    - domain, bus);
    - ret_val = -ENODEV;
    - goto done;
    - }
    - pdev = pci_get_slot(pbus, devfn);
    + pdev = pci_get_domain_bus_and_slot(domain, bus, devfn);
    pr_debug("vgaarb: pdev %p\n", pdev);
    if (!pdev) {
    - pr_err("vgaarb: invalid PCI address %x:%x\n",
    - bus, devfn);
    + pr_err("vgaarb: invalid PCI address %x:%x:%x\n",
    + domain, bus, devfn);
    ret_val = -ENODEV;
    goto done;
    }
    --
    1.7.9.5


    \
     
     \ /
      Last update: 2012-08-28 18:21    [W:4.514 / U:0.060 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site