Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d7c1255a authored by Linus Torvalds's avatar Linus Torvalds
Browse files
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6: (42 commits)
  ipv4: dont create routes on down devices
  epic100: hamachi: yellowfin: Fix skb allocation size
  sundance: Fix oopses with corrupted skb_shared_info
  Revert "ipv4: Allow configuring subnets as local addresses"
  USB: mcs7830: return negative if auto negotiate fails
  irda: prevent integer underflow in IRLMP_ENUMDEVICES
  tcp: fix listening_get_next()
  atl1c: Do not use legacy PCI power management
  mac80211: fix mesh forwarding
  MAINTAINERS: email address change
  net: Fix range checks in tcf_valid_offset().
  net_sched: sch_sfq: fix allot handling
  hostap: remove netif_stop_queue from init
  mac80211/rt2x00: add ieee80211_tx_status_ni()
  typhoon: memory corruption in typhoon_get_drvinfo()
  net: Add USB PID for new MOSCHIP USB ethernet controller MCS7832 variant
  net_sched: always clone skbs
  ipv6: Fragment locally generated tunnel-mode IPSec6 packets as needed.
  netlink: fix gcc -Wconversion compilation warning
  asix: add USB ID for Logitec LAN-GTJ U2A
  ...
parents d3c7e1ab fc75fc83
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -4590,7 +4590,7 @@ F: drivers/pcmcia/
F:	include/pcmcia/

PCNET32 NETWORK DRIVER
M:	Don Fry <pcnet32@verizon.net>
M:	Don Fry <pcnet32@frontier.com>
L:	netdev@vger.kernel.org
S:	Maintained
F:	drivers/net/pcnet32.c
+4 −2
Original line number Diff line number Diff line
@@ -311,11 +311,13 @@ static void hci_uart_tty_close(struct tty_struct *tty)

		if (test_and_clear_bit(HCI_UART_PROTO_SET, &hu->flags)) {
			hu->proto->close(hu);
			if (hdev) {
				hci_unregister_dev(hdev);
				hci_free_dev(hdev);
			}
		}
	}
}

/* hci_uart_tty_wakeup()
 *
+15 −24
Original line number Diff line number Diff line
@@ -702,6 +702,7 @@ static int __devinit atl1c_sw_init(struct atl1c_adapter *adapter)


	adapter->wol = 0;
	device_set_wakeup_enable(&pdev->dev, false);
	adapter->link_speed = SPEED_0;
	adapter->link_duplex = FULL_DUPLEX;
	adapter->num_rx_queues = AT_DEF_RECEIVE_QUEUE;
@@ -2444,8 +2445,9 @@ static int atl1c_close(struct net_device *netdev)
	return 0;
}

static int atl1c_suspend(struct pci_dev *pdev, pm_message_t state)
static int atl1c_suspend(struct device *dev)
{
	struct pci_dev *pdev = to_pci_dev(dev);
	struct net_device *netdev = pci_get_drvdata(pdev);
	struct atl1c_adapter *adapter = netdev_priv(netdev);
	struct atl1c_hw *hw = &adapter->hw;
@@ -2454,7 +2456,6 @@ static int atl1c_suspend(struct pci_dev *pdev, pm_message_t state)
	u32 wol_ctrl_data = 0;
	u16 mii_intr_status_data = 0;
	u32 wufc = adapter->wol;
	int retval = 0;

	atl1c_disable_l0s_l1(hw);
	if (netif_running(netdev)) {
@@ -2462,9 +2463,6 @@ static int atl1c_suspend(struct pci_dev *pdev, pm_message_t state)
		atl1c_down(adapter);
	}
	netif_device_detach(netdev);
	retval = pci_save_state(pdev);
	if (retval)
		return retval;

	if (wufc)
		if (atl1c_phy_power_saving(hw) != 0)
@@ -2525,12 +2523,8 @@ static int atl1c_suspend(struct pci_dev *pdev, pm_message_t state)
		AT_WRITE_REG(hw, REG_WOL_CTRL, wol_ctrl_data);
		AT_WRITE_REG(hw, REG_MAC_CTRL, mac_ctrl_data);

		/* pcie patch */
		device_set_wakeup_enable(&pdev->dev, 1);

		AT_WRITE_REG(hw, REG_GPHY_CTRL, GPHY_CTRL_DEFAULT |
			GPHY_CTRL_EXT_RESET);
		pci_prepare_to_sleep(pdev);
	} else {
		AT_WRITE_REG(hw, REG_GPHY_CTRL, GPHY_CTRL_POWER_SAVING);
		master_ctrl_data |= MASTER_CTRL_CLK_SEL_DIS;
@@ -2540,25 +2534,17 @@ static int atl1c_suspend(struct pci_dev *pdev, pm_message_t state)
		AT_WRITE_REG(hw, REG_MAC_CTRL, mac_ctrl_data);
		AT_WRITE_REG(hw, REG_WOL_CTRL, 0);
		hw->phy_configured = false; /* re-init PHY when resume */
		pci_enable_wake(pdev, pci_choose_state(pdev, state), 0);
	}

	pci_disable_device(pdev);
	pci_set_power_state(pdev, pci_choose_state(pdev, state));

	return 0;
}

static int atl1c_resume(struct pci_dev *pdev)
static int atl1c_resume(struct device *dev)
{
	struct pci_dev *pdev = to_pci_dev(dev);
	struct net_device *netdev = pci_get_drvdata(pdev);
	struct atl1c_adapter *adapter = netdev_priv(netdev);

	pci_set_power_state(pdev, PCI_D0);
	pci_restore_state(pdev);
	pci_enable_wake(pdev, PCI_D3hot, 0);
	pci_enable_wake(pdev, PCI_D3cold, 0);

	AT_WRITE_REG(&adapter->hw, REG_WOL_CTRL, 0);
	atl1c_reset_pcie(&adapter->hw, ATL1C_PCIE_L0S_L1_DISABLE |
			ATL1C_PCIE_PHY_RESET);
@@ -2582,7 +2568,12 @@ static int atl1c_resume(struct pci_dev *pdev)

static void atl1c_shutdown(struct pci_dev *pdev)
{
	atl1c_suspend(pdev, PMSG_SUSPEND);
	struct net_device *netdev = pci_get_drvdata(pdev);
	struct atl1c_adapter *adapter = netdev_priv(netdev);

	atl1c_suspend(&pdev->dev);
	pci_wake_from_d3(pdev, adapter->wol);
	pci_set_power_state(pdev, PCI_D3hot);
}

static const struct net_device_ops atl1c_netdev_ops = {
@@ -2886,16 +2877,16 @@ static struct pci_error_handlers atl1c_err_handler = {
	.resume = atl1c_io_resume,
};

static SIMPLE_DEV_PM_OPS(atl1c_pm_ops, atl1c_suspend, atl1c_resume);

static struct pci_driver atl1c_driver = {
	.name     = atl1c_driver_name,
	.id_table = atl1c_pci_tbl,
	.probe    = atl1c_probe,
	.remove   = __devexit_p(atl1c_remove),
	/* Power Managment Hooks */
	.suspend  = atl1c_suspend,
	.resume   = atl1c_resume,
	.shutdown = atl1c_shutdown,
	.err_handler = &atl1c_err_handler
	.err_handler = &atl1c_err_handler,
	.driver.pm = &atl1c_pm_ops,
};

/*
+1 −1
Original line number Diff line number Diff line
@@ -234,7 +234,7 @@ struct be_adapter {
	u8 __iomem *db;		/* Door Bell */
	u8 __iomem *pcicfg;	/* PCI config space */

	spinlock_t mbox_lock;	/* For serializing mbox cmds to BE card */
	struct mutex mbox_lock; /* For serializing mbox cmds to BE card */
	struct be_dma_mem mbox_mem;
	/* Mbox mem is adjusted to align to 16 bytes. The allocated addr
	 * is stored for freeing purpose */
+45 −30
Original line number Diff line number Diff line
@@ -462,7 +462,8 @@ int be_cmd_fw_init(struct be_adapter *adapter)
	u8 *wrb;
	int status;

	spin_lock(&adapter->mbox_lock);
	if (mutex_lock_interruptible(&adapter->mbox_lock))
		return -1;

	wrb = (u8 *)wrb_from_mbox(adapter);
	*wrb++ = 0xFF;
@@ -476,7 +477,7 @@ int be_cmd_fw_init(struct be_adapter *adapter)

	status = be_mbox_notify_wait(adapter);

	spin_unlock(&adapter->mbox_lock);
	mutex_unlock(&adapter->mbox_lock);
	return status;
}

@@ -491,7 +492,8 @@ int be_cmd_fw_clean(struct be_adapter *adapter)
	if (adapter->eeh_err)
		return -EIO;

	spin_lock(&adapter->mbox_lock);
	if (mutex_lock_interruptible(&adapter->mbox_lock))
		return -1;

	wrb = (u8 *)wrb_from_mbox(adapter);
	*wrb++ = 0xFF;
@@ -505,7 +507,7 @@ int be_cmd_fw_clean(struct be_adapter *adapter)

	status = be_mbox_notify_wait(adapter);

	spin_unlock(&adapter->mbox_lock);
	mutex_unlock(&adapter->mbox_lock);
	return status;
}
int be_cmd_eq_create(struct be_adapter *adapter,
@@ -516,7 +518,8 @@ int be_cmd_eq_create(struct be_adapter *adapter,
	struct be_dma_mem *q_mem = &eq->dma_mem;
	int status;

	spin_lock(&adapter->mbox_lock);
	if (mutex_lock_interruptible(&adapter->mbox_lock))
		return -1;

	wrb = wrb_from_mbox(adapter);
	req = embedded_payload(wrb);
@@ -546,7 +549,7 @@ int be_cmd_eq_create(struct be_adapter *adapter,
		eq->created = true;
	}

	spin_unlock(&adapter->mbox_lock);
	mutex_unlock(&adapter->mbox_lock);
	return status;
}

@@ -558,7 +561,8 @@ int be_cmd_mac_addr_query(struct be_adapter *adapter, u8 *mac_addr,
	struct be_cmd_req_mac_query *req;
	int status;

	spin_lock(&adapter->mbox_lock);
	if (mutex_lock_interruptible(&adapter->mbox_lock))
		return -1;

	wrb = wrb_from_mbox(adapter);
	req = embedded_payload(wrb);
@@ -583,7 +587,7 @@ int be_cmd_mac_addr_query(struct be_adapter *adapter, u8 *mac_addr,
		memcpy(mac_addr, resp->mac.addr, ETH_ALEN);
	}

	spin_unlock(&adapter->mbox_lock);
	mutex_unlock(&adapter->mbox_lock);
	return status;
}

@@ -667,7 +671,8 @@ int be_cmd_cq_create(struct be_adapter *adapter,
	void *ctxt;
	int status;

	spin_lock(&adapter->mbox_lock);
	if (mutex_lock_interruptible(&adapter->mbox_lock))
		return -1;

	wrb = wrb_from_mbox(adapter);
	req = embedded_payload(wrb);
@@ -701,7 +706,7 @@ int be_cmd_cq_create(struct be_adapter *adapter,
		cq->created = true;
	}

	spin_unlock(&adapter->mbox_lock);
	mutex_unlock(&adapter->mbox_lock);

	return status;
}
@@ -724,7 +729,8 @@ int be_cmd_mccq_create(struct be_adapter *adapter,
	void *ctxt;
	int status;

	spin_lock(&adapter->mbox_lock);
	if (mutex_lock_interruptible(&adapter->mbox_lock))
		return -1;

	wrb = wrb_from_mbox(adapter);
	req = embedded_payload(wrb);
@@ -754,7 +760,7 @@ int be_cmd_mccq_create(struct be_adapter *adapter,
		mccq->id = le16_to_cpu(resp->id);
		mccq->created = true;
	}
	spin_unlock(&adapter->mbox_lock);
	mutex_unlock(&adapter->mbox_lock);

	return status;
}
@@ -769,7 +775,8 @@ int be_cmd_txq_create(struct be_adapter *adapter,
	void *ctxt;
	int status;

	spin_lock(&adapter->mbox_lock);
	if (mutex_lock_interruptible(&adapter->mbox_lock))
		return -1;

	wrb = wrb_from_mbox(adapter);
	req = embedded_payload(wrb);
@@ -801,7 +808,7 @@ int be_cmd_txq_create(struct be_adapter *adapter,
		txq->created = true;
	}

	spin_unlock(&adapter->mbox_lock);
	mutex_unlock(&adapter->mbox_lock);

	return status;
}
@@ -816,7 +823,8 @@ int be_cmd_rxq_create(struct be_adapter *adapter,
	struct be_dma_mem *q_mem = &rxq->dma_mem;
	int status;

	spin_lock(&adapter->mbox_lock);
	if (mutex_lock_interruptible(&adapter->mbox_lock))
		return -1;

	wrb = wrb_from_mbox(adapter);
	req = embedded_payload(wrb);
@@ -843,7 +851,7 @@ int be_cmd_rxq_create(struct be_adapter *adapter,
		*rss_id = resp->rss_id;
	}

	spin_unlock(&adapter->mbox_lock);
	mutex_unlock(&adapter->mbox_lock);

	return status;
}
@@ -862,7 +870,8 @@ int be_cmd_q_destroy(struct be_adapter *adapter, struct be_queue_info *q,
	if (adapter->eeh_err)
		return -EIO;

	spin_lock(&adapter->mbox_lock);
	if (mutex_lock_interruptible(&adapter->mbox_lock))
		return -1;

	wrb = wrb_from_mbox(adapter);
	req = embedded_payload(wrb);
@@ -899,7 +908,7 @@ int be_cmd_q_destroy(struct be_adapter *adapter, struct be_queue_info *q,

	status = be_mbox_notify_wait(adapter);

	spin_unlock(&adapter->mbox_lock);
	mutex_unlock(&adapter->mbox_lock);

	return status;
}
@@ -915,7 +924,8 @@ int be_cmd_if_create(struct be_adapter *adapter, u32 cap_flags, u32 en_flags,
	struct be_cmd_req_if_create *req;
	int status;

	spin_lock(&adapter->mbox_lock);
	if (mutex_lock_interruptible(&adapter->mbox_lock))
		return -1;

	wrb = wrb_from_mbox(adapter);
	req = embedded_payload(wrb);
@@ -941,7 +951,7 @@ int be_cmd_if_create(struct be_adapter *adapter, u32 cap_flags, u32 en_flags,
			*pmac_id = le32_to_cpu(resp->pmac_id);
	}

	spin_unlock(&adapter->mbox_lock);
	mutex_unlock(&adapter->mbox_lock);
	return status;
}

@@ -955,7 +965,8 @@ int be_cmd_if_destroy(struct be_adapter *adapter, u32 interface_id)
	if (adapter->eeh_err)
		return -EIO;

	spin_lock(&adapter->mbox_lock);
	if (mutex_lock_interruptible(&adapter->mbox_lock))
		return -1;

	wrb = wrb_from_mbox(adapter);
	req = embedded_payload(wrb);
@@ -970,7 +981,7 @@ int be_cmd_if_destroy(struct be_adapter *adapter, u32 interface_id)

	status = be_mbox_notify_wait(adapter);

	spin_unlock(&adapter->mbox_lock);
	mutex_unlock(&adapter->mbox_lock);

	return status;
}
@@ -1060,7 +1071,8 @@ int be_cmd_get_fw_ver(struct be_adapter *adapter, char *fw_ver)
	struct be_cmd_req_get_fw_version *req;
	int status;

	spin_lock(&adapter->mbox_lock);
	if (mutex_lock_interruptible(&adapter->mbox_lock))
		return -1;

	wrb = wrb_from_mbox(adapter);
	req = embedded_payload(wrb);
@@ -1077,7 +1089,7 @@ int be_cmd_get_fw_ver(struct be_adapter *adapter, char *fw_ver)
		strncpy(fw_ver, resp->firmware_version_string, FW_VER_LEN);
	}

	spin_unlock(&adapter->mbox_lock);
	mutex_unlock(&adapter->mbox_lock);
	return status;
}

@@ -1322,7 +1334,8 @@ int be_cmd_query_fw_cfg(struct be_adapter *adapter, u32 *port_num,
	struct be_cmd_req_query_fw_cfg *req;
	int status;

	spin_lock(&adapter->mbox_lock);
	if (mutex_lock_interruptible(&adapter->mbox_lock))
		return -1;

	wrb = wrb_from_mbox(adapter);
	req = embedded_payload(wrb);
@@ -1341,7 +1354,7 @@ int be_cmd_query_fw_cfg(struct be_adapter *adapter, u32 *port_num,
		*caps = le32_to_cpu(resp->function_caps);
	}

	spin_unlock(&adapter->mbox_lock);
	mutex_unlock(&adapter->mbox_lock);
	return status;
}

@@ -1352,7 +1365,8 @@ int be_cmd_reset_function(struct be_adapter *adapter)
	struct be_cmd_req_hdr *req;
	int status;

	spin_lock(&adapter->mbox_lock);
	if (mutex_lock_interruptible(&adapter->mbox_lock))
		return -1;

	wrb = wrb_from_mbox(adapter);
	req = embedded_payload(wrb);
@@ -1365,7 +1379,7 @@ int be_cmd_reset_function(struct be_adapter *adapter)

	status = be_mbox_notify_wait(adapter);

	spin_unlock(&adapter->mbox_lock);
	mutex_unlock(&adapter->mbox_lock);
	return status;
}

@@ -1376,7 +1390,8 @@ int be_cmd_rss_config(struct be_adapter *adapter, u8 *rsstable, u16 table_size)
	u32 myhash[10];
	int status;

	spin_lock(&adapter->mbox_lock);
	if (mutex_lock_interruptible(&adapter->mbox_lock))
		return -1;

	wrb = wrb_from_mbox(adapter);
	req = embedded_payload(wrb);
@@ -1396,7 +1411,7 @@ int be_cmd_rss_config(struct be_adapter *adapter, u8 *rsstable, u16 table_size)

	status = be_mbox_notify_wait(adapter);

	spin_unlock(&adapter->mbox_lock);
	mutex_unlock(&adapter->mbox_lock);
	return status;
}

Loading