Skip to content

Commit

Permalink
Merge branch 'pci/feng-avoid-kmalloc' into next
Browse files Browse the repository at this point in the history
* pci/feng-avoid-kmalloc:
  PCI: Remove the obsolete no_pci_devices() check
  PCI: Use pci_device_id on stack for pci_get_subsys/class() to avoid kmalloc
  • Loading branch information
Bjorn Helgaas committed Sep 10, 2012
2 parents be017b2 + e9bf104 commit 2c1f56a
Showing 1 changed file with 18 additions and 37 deletions.
55 changes: 18 additions & 37 deletions drivers/pci/search.c
Original file line number Diff line number Diff line change
Expand Up @@ -243,30 +243,14 @@ struct pci_dev *pci_get_subsys(unsigned int vendor, unsigned int device,
unsigned int ss_vendor, unsigned int ss_device,
struct pci_dev *from)
{
struct pci_dev *pdev;
struct pci_device_id *id;

/*
* pci_find_subsys() can be called on the ide_setup() path,
* super-early in boot. But the down_read() will enable local
* interrupts, which can cause some machines to crash. So here we
* detect and flag that situation and bail out early.
*/
if (unlikely(no_pci_devices()))
return NULL;

id = kzalloc(sizeof(*id), GFP_KERNEL);
if (!id)
return NULL;
id->vendor = vendor;
id->device = device;
id->subvendor = ss_vendor;
id->subdevice = ss_device;

pdev = pci_get_dev_by_id(id, from);
kfree(id);

return pdev;
struct pci_device_id id = {
.vendor = vendor,
.device = device,
.subvendor = ss_vendor,
.subdevice = ss_device,
};

return pci_get_dev_by_id(&id, from);
}

/**
Expand Down Expand Up @@ -305,19 +289,16 @@ pci_get_device(unsigned int vendor, unsigned int device, struct pci_dev *from)
*/
struct pci_dev *pci_get_class(unsigned int class, struct pci_dev *from)
{
struct pci_dev *dev;
struct pci_device_id *id;

id = kzalloc(sizeof(*id), GFP_KERNEL);
if (!id)
return NULL;
id->vendor = id->device = id->subvendor = id->subdevice = PCI_ANY_ID;
id->class_mask = PCI_ANY_ID;
id->class = class;

dev = pci_get_dev_by_id(id, from);
kfree(id);
return dev;
struct pci_device_id id = {
.vendor = PCI_ANY_ID,
.device = PCI_ANY_ID,
.subvendor = PCI_ANY_ID,
.subdevice = PCI_ANY_ID,
.class_mask = PCI_ANY_ID,
.class = class,
};

return pci_get_dev_by_id(&id, from);
}

/**
Expand Down

0 comments on commit 2c1f56a

Please sign in to comment.