Message ID | 1333335645-14413-1-git-send-email-tomoya.rohm@gmail.com |
---|---|
State | Not Applicable, archived |
Delegated to: | David Miller |
Headers | show |
On Mon, Apr 02, 2012 at 12:00:44PM +0900, Tomoya MORINAGA wrote: > If the MAC is invalid or not implemented, do not abort the probe. Issue > a warning and prevent bringing the interface up until a MAC is set manually > (via ifconfig $IFACE hw ether $MAC). > > Tested on two platforms, one with a valid MAC, the other without a MAC. The real > MAC is used if present, the interface fails to come up until the MAC is set on > the other. They successfully get an IP over DHCP and pass a simple ping and > login over ssh test. > > This is meant to allow the Inforce SYS940X development board: > http://www.inforcecomputing.com/SYS940X_ECX.html > (and others suffering from a missing MAC) to work with the mainline kernel. > Without this patch, the probe will fail and the interface will not be created, > preventing the user from configuring the MAC manually. > > This does not make any attempt to address a missing or invalid MAC for the > pch_phub driver. > > commit: 2b53d07891630dead46d65c8f896955fd3ae0302 > kernel version: 3.0, 3.2 How can you want this in 3.0, when the file this patches is not in the 3.0 kernel tree? Please be more careful. greg k-h -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c index 48406ca..43c7b25 100644 --- a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c +++ b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c @@ -1745,6 +1745,12 @@ int pch_gbe_up(struct pch_gbe_adapter *adapter) struct pch_gbe_rx_ring *rx_ring = adapter->rx_ring; int err; + /* Ensure we have a valid MAC */ + if (!is_valid_ether_addr(adapter->hw.mac.addr)) { + pr_err("Error: Invalid MAC address\n"); + return -EINVAL; + } + /* hardware has been reset, we need to reload some things */ pch_gbe_set_multi(netdev); @@ -2467,9 +2473,14 @@ static int pch_gbe_probe(struct pci_dev *pdev, memcpy(netdev->dev_addr, adapter->hw.mac.addr, netdev->addr_len); if (!is_valid_ether_addr(netdev->dev_addr)) { - dev_err(&pdev->dev, "Invalid MAC Address\n"); - ret = -EIO; - goto err_free_adapter; + /* + * If the MAC is invalid (or just missing), display a warning + * but do not abort setting up the device. pch_gbe_up will + * prevent the interface from being brought up until a valid MAC + * is set. + */ + dev_err(&pdev->dev, "Invalid MAC address, " + "interface disabled.\n"); } setup_timer(&adapter->watchdog_timer, pch_gbe_watchdog, (unsigned long)adapter);