Merge branch 'pci/feng-avoid-kmalloc' into next
* 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
This commit is contained in:
commit
2c1f56acb2
1 changed files with 16 additions and 35 deletions
|
@ -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;
|
||||
struct pci_device_id id = {
|
||||
.vendor = vendor,
|
||||
.device = device,
|
||||
.subvendor = ss_vendor,
|
||||
.subdevice = ss_device,
|
||||
};
|
||||
|
||||
/*
|
||||
* 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;
|
||||
return pci_get_dev_by_id(&id, from);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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;
|
||||
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,
|
||||
};
|
||||
|
||||
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;
|
||||
return pci_get_dev_by_id(&id, from);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in a new issue