mirror of https://github.com/ipxe/ipxe.git
[efi] Return only registered EFI devices from efidev_parent()
efidev_parent() currently assumes that any device with BUS_TYPE_EFI is part of a struct efi_device. This assumption is not valid, since the code in efi_device_info() may also create a device with BUS_TYPE_EFI. Fix by searching through the list of registered EFI devices when looking for a match, instead of relying on the bus type value. Signed-off-by: Michael Brown <mcb30@ipxe.org>pull/50/head
parent
c2226b3d1a
commit
a385e23768
|
@ -73,11 +73,14 @@ static struct efi_device * efidev_find ( EFI_HANDLE device ) {
|
|||
*/
|
||||
struct efi_device * efidev_parent ( struct device *dev ) {
|
||||
struct device *parent;
|
||||
struct efi_device *efidev;
|
||||
|
||||
/* Walk upwards until we find an EFI device */
|
||||
/* Walk upwards until we find a registered EFI device */
|
||||
while ( ( parent = dev->parent ) ) {
|
||||
if ( parent->desc.bus_type == BUS_TYPE_EFI )
|
||||
return container_of ( parent, struct efi_device, dev );
|
||||
list_for_each_entry ( efidev, &efi_devices, dev.siblings ) {
|
||||
if ( parent == &efidev->dev )
|
||||
return efidev;
|
||||
}
|
||||
dev = parent;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue