Why after power cycle the server the interface was not detected in RHEL 5 ?

Solution Verified - Updated -

Environment

  • Red Hat Enterprise Linux 5.8
  • Red Hat Enterprise Linux 6

Issue

  • Why after power cycle the server the interface was not detected in RHEL 5 and RHEL 6 ?
  • The interface were not detected on system with below error.
ACPI: PCI Interrupt 0000:02:00.0[A] -> GSI 16 (level, low) -> IRQ 177
PCI: Setting latency timer of device 0000:02:00.0 to 64
igb 0000:02:00.0: 0 vfs allocated
igb 0000:02:00.0: The NVM Checksum Is Not Valid
igb: probe of 0000:02:00.0 failed with error -5

Resolution

  • This appears as a Hardware issue. With the replacement of nic on servers , the network devices start appearing in the OS.

Root Cause

  • This error is reported in the function here at line 124:
drivers/base/dd.c

 63 /**
 64  *      driver_probe_device - attempt to bind device & driver.
 65  *      @drv:   driver.
 66  *      @dev:   device.
 67  *
 68  *      First, we call the bus's match function, if one present, which
 69  *      should compare the device IDs the driver supports with the
 70  *      device IDs of the device. Note we don't do this ourselves
 71  *      because we don't know the format of the ID structures, nor what
 72  *      is to be considered a match and what is not.
 73  *
 74  *      This function returns 1 if a match is found, an error if one
 75  *      occurs (that is not -ENODEV or -ENXIO), and 0 otherwise.
 76  *
 77  *      This function must be called with @dev->sem held.  When called
 78  *      for a USB interface, @dev->parent->sem must be held as well.
 79  */
 80 int driver_probe_device(struct device_driver * drv, struct device * dev)
 81 {
 82         int ret = 0;
 83 
 84         if (!device_is_registered(dev))
 85                 return -ENODEV;
 86         if (drv->bus->match && !drv->bus->match(dev, drv))
 87                 goto Done;
 88 
 89         pr_debug("%s: Matched Device %s with Driver %s\n",
 90                  drv->bus->name, dev->bus_id, drv->name);
 91 
 92         dev->driver = drv;
 93         if (dev->bus->probe) {
 94                 ret = dev->bus->probe(dev);
 95                 if (ret) {
 96                         dev->driver = NULL;
 97                         devres_release_all(dev);
 98                         goto ProbeFailed;
 99                 }
100         } else if (drv->probe) {
101                 ret = drv->probe(dev);
102                 if (ret) {
103                         dev->driver = NULL;
104                         devres_release_all(dev);
105                         goto ProbeFailed;
106                 }
107         }
108         device_bind_driver(dev);
109         ret = 1;
110         pr_debug("%s: Bound Device %s to Driver %s\n",
111                  drv->bus->name, dev->bus_id, drv->name);
112         goto Done;
113 
114  ProbeFailed:
115         if (ret == -ENODEV || ret == -ENXIO) {
116                 /* Driver matched, but didn't support device
117                  * or device not found.
118                  * Not an error; keep going.
119                  */
120                 ret = 0;
121         } else {
122                 /* driver matched but the probe failed */
123                 printk(KERN_WARNING
124                        "%s: probe of %s failed with error %d\n", <<----
125                        drv->name, dev->bus_id, ret);
126         }
127  Done:
128         return ret;
129 }
  • This code is used to load the appropriate module for a discovered device. If this fails It indicates a hardware issue.

This solution is part of Red Hat’s fast-track publication program, providing a huge library of solutions that Red Hat engineers have created while supporting our customers. To give you the knowledge you need the instant it becomes available, these articles may be presented in a raw and unedited form.

Comments