]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[efi] Ignore failures when attempting to install SNP HII protocol
authorMichael Brown <mcb30@ipxe.org>
Wed, 30 Jul 2014 17:44:09 +0000 (18:44 +0100)
committerMichael Brown <mcb30@ipxe.org>
Wed, 30 Jul 2014 17:44:09 +0000 (18:44 +0100)
HII seems to fail on several systems.  Since it is non-essential,
treat HII problems as non-fatal.

Debugged-by: Curtis Larsen <larsen@dixie.edu>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/interface/efi/efi_snp.c
src/interface/efi/efi_snp_hii.c

index a301f3b48cf634df94040ebcabf77832e2df9f04..d869c30f835ec7b19b5128164cd369fb240a067e 100644 (file)
@@ -1053,7 +1053,10 @@ static int efi_snp_probe ( struct net_device *netdev ) {
        if ( ( rc = efi_snp_hii_install ( snpdev ) ) != 0 ) {
                DBGC ( snpdev, "SNPDEV %p could not install HII: %s\n",
                       snpdev, strerror ( rc ) );
-               goto err_hii_install;
+               /* HII fails on several platforms.  It's
+                * non-essential, so treat this as a non-fatal
+                * error.
+                */
        }
 
        /* Add to list of SNP devices */
@@ -1064,8 +1067,8 @@ static int efi_snp_probe ( struct net_device *netdev ) {
               efi_devpath_text ( &snpdev->path ) );
        return 0;
 
-       efi_snp_hii_uninstall ( snpdev );
- err_hii_install:
+       if ( snpdev->package_list )
+               efi_snp_hii_uninstall ( snpdev );
        efidev_child_del ( efidev, snpdev->handle );
  err_efidev_child_add:
        bs->UninstallMultipleProtocolInterfaces (
@@ -1130,7 +1133,8 @@ static void efi_snp_remove ( struct net_device *netdev ) {
        }
 
        /* Uninstall the SNP */
-       efi_snp_hii_uninstall ( snpdev );
+       if ( snpdev->package_list )
+               efi_snp_hii_uninstall ( snpdev );
        efidev_child_del ( snpdev->efidev, snpdev->handle );
        list_del ( &snpdev->list );
        bs->UninstallMultipleProtocolInterfaces (
index 51634a09234ce7b36f60e2d4b6370989c544c021..f300de436fa2057087a84c45c425c67a93e7fa86 100644 (file)
@@ -649,8 +649,10 @@ int efi_snp_hii_install ( struct efi_snp_device *snpdev ) {
        int rc;
 
        /* Do nothing if HII database protocol is not supported */
-       if ( ! efihii )
-               return 0;
+       if ( ! efihii ) {
+               rc = -ENOTSUP;
+               goto err_no_hii;
+       }
 
        /* Initialise HII protocol */
        memcpy ( &snpdev->hii, &efi_snp_device_hii, sizeof ( snpdev->hii ) );
@@ -697,6 +699,7 @@ int efi_snp_hii_install ( struct efi_snp_device *snpdev ) {
        free ( snpdev->package_list );
        snpdev->package_list = NULL;
  err_build_package_list:
+ err_no_hii:
        return rc;
 }