Why after power cycle the server the interface was not detected in RHEL 5 ?
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