Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6: net: Remove CONFIG_KMOD from net/ (towards removing CONFIG_KMOD entirely) ipv4: Add a missing rcu_assign_pointer() in routing cache. [netdrvr] ibmtr: PCMCIA IBMTR is ok on 64bit xen-netfront: Avoid unaligned accesses to IP header lmc: copy_*_user under spinlock [netdrvr] myri10ge, ixgbe: remove broken select INTEL_IOATDMA
This commit is contained in:
commit
b225ee5bed
|
@ -2410,7 +2410,6 @@ config IXGBE
|
||||||
tristate "Intel(R) 10GbE PCI Express adapters support"
|
tristate "Intel(R) 10GbE PCI Express adapters support"
|
||||||
depends on PCI && INET
|
depends on PCI && INET
|
||||||
select INET_LRO
|
select INET_LRO
|
||||||
select INTEL_IOATDMA
|
|
||||||
---help---
|
---help---
|
||||||
This driver supports Intel(R) 10GbE PCI Express family of
|
This driver supports Intel(R) 10GbE PCI Express family of
|
||||||
adapters. For more information on how to identify your adapter, go
|
adapters. For more information on how to identify your adapter, go
|
||||||
|
@ -2426,6 +2425,11 @@ config IXGBE
|
||||||
To compile this driver as a module, choose M here. The module
|
To compile this driver as a module, choose M here. The module
|
||||||
will be called ixgbe.
|
will be called ixgbe.
|
||||||
|
|
||||||
|
config IXGBE_DCA
|
||||||
|
bool
|
||||||
|
default y
|
||||||
|
depends on IXGBE && DCA && !(IXGBE=y && DCA=m)
|
||||||
|
|
||||||
config IXGB
|
config IXGB
|
||||||
tristate "Intel(R) PRO/10GbE support"
|
tristate "Intel(R) PRO/10GbE support"
|
||||||
depends on PCI
|
depends on PCI
|
||||||
|
@ -2462,7 +2466,6 @@ config MYRI10GE
|
||||||
select FW_LOADER
|
select FW_LOADER
|
||||||
select CRC32
|
select CRC32
|
||||||
select INET_LRO
|
select INET_LRO
|
||||||
select INTEL_IOATDMA
|
|
||||||
---help---
|
---help---
|
||||||
This driver supports Myricom Myri-10G Dual Protocol interface in
|
This driver supports Myricom Myri-10G Dual Protocol interface in
|
||||||
Ethernet mode. If the eeprom on your board is not recent enough,
|
Ethernet mode. If the eeprom on your board is not recent enough,
|
||||||
|
@ -2474,6 +2477,11 @@ config MYRI10GE
|
||||||
To compile this driver as a module, choose M here. The module
|
To compile this driver as a module, choose M here. The module
|
||||||
will be called myri10ge.
|
will be called myri10ge.
|
||||||
|
|
||||||
|
config MYRI10GE_DCA
|
||||||
|
bool
|
||||||
|
default y
|
||||||
|
depends on MYRI10GE && DCA && !(MYRI10GE=y && DCA=m)
|
||||||
|
|
||||||
config NETXEN_NIC
|
config NETXEN_NIC
|
||||||
tristate "NetXen Multi port (1/10) Gigabit Ethernet NIC"
|
tristate "NetXen Multi port (1/10) Gigabit Ethernet NIC"
|
||||||
depends on PCI
|
depends on PCI
|
||||||
|
|
|
@ -36,7 +36,7 @@
|
||||||
#include "ixgbe_type.h"
|
#include "ixgbe_type.h"
|
||||||
#include "ixgbe_common.h"
|
#include "ixgbe_common.h"
|
||||||
|
|
||||||
#if defined(CONFIG_DCA) || defined(CONFIG_DCA_MODULE)
|
#ifdef CONFIG_IXGBE_DCA
|
||||||
#include <linux/dca.h>
|
#include <linux/dca.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -136,7 +136,7 @@ struct ixgbe_ring {
|
||||||
* offset associated with this ring, which is different
|
* offset associated with this ring, which is different
|
||||||
* for DCE and RSS modes */
|
* for DCE and RSS modes */
|
||||||
|
|
||||||
#if defined(CONFIG_DCA) || defined(CONFIG_DCA_MODULE)
|
#ifdef CONFIG_IXGBE_DCA
|
||||||
/* cpu for tx queue */
|
/* cpu for tx queue */
|
||||||
int cpu;
|
int cpu;
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -80,7 +80,7 @@ static struct pci_device_id ixgbe_pci_tbl[] = {
|
||||||
};
|
};
|
||||||
MODULE_DEVICE_TABLE(pci, ixgbe_pci_tbl);
|
MODULE_DEVICE_TABLE(pci, ixgbe_pci_tbl);
|
||||||
|
|
||||||
#if defined(CONFIG_DCA) || defined(CONFIG_DCA_MODULE)
|
#ifdef CONFIG_IXGBE_DCA
|
||||||
static int ixgbe_notify_dca(struct notifier_block *, unsigned long event,
|
static int ixgbe_notify_dca(struct notifier_block *, unsigned long event,
|
||||||
void *p);
|
void *p);
|
||||||
static struct notifier_block dca_notifier = {
|
static struct notifier_block dca_notifier = {
|
||||||
|
@ -296,7 +296,7 @@ done_cleaning:
|
||||||
return (total_packets ? true : false);
|
return (total_packets ? true : false);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(CONFIG_DCA) || defined(CONFIG_DCA_MODULE)
|
#ifdef CONFIG_IXGBE_DCA
|
||||||
static void ixgbe_update_rx_dca(struct ixgbe_adapter *adapter,
|
static void ixgbe_update_rx_dca(struct ixgbe_adapter *adapter,
|
||||||
struct ixgbe_ring *rx_ring)
|
struct ixgbe_ring *rx_ring)
|
||||||
{
|
{
|
||||||
|
@ -383,7 +383,7 @@ static int __ixgbe_notify_dca(struct device *dev, void *data)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* CONFIG_DCA or CONFIG_DCA_MODULE */
|
#endif /* CONFIG_IXGBE_DCA */
|
||||||
/**
|
/**
|
||||||
* ixgbe_receive_skb - Send a completed packet up the stack
|
* ixgbe_receive_skb - Send a completed packet up the stack
|
||||||
* @adapter: board private structure
|
* @adapter: board private structure
|
||||||
|
@ -947,7 +947,7 @@ static irqreturn_t ixgbe_msix_clean_tx(int irq, void *data)
|
||||||
r_idx = find_first_bit(q_vector->txr_idx, adapter->num_tx_queues);
|
r_idx = find_first_bit(q_vector->txr_idx, adapter->num_tx_queues);
|
||||||
for (i = 0; i < q_vector->txr_count; i++) {
|
for (i = 0; i < q_vector->txr_count; i++) {
|
||||||
tx_ring = &(adapter->tx_ring[r_idx]);
|
tx_ring = &(adapter->tx_ring[r_idx]);
|
||||||
#if defined(CONFIG_DCA) || defined(CONFIG_DCA_MODULE)
|
#ifdef CONFIG_IXGBE_DCA
|
||||||
if (adapter->flags & IXGBE_FLAG_DCA_ENABLED)
|
if (adapter->flags & IXGBE_FLAG_DCA_ENABLED)
|
||||||
ixgbe_update_tx_dca(adapter, tx_ring);
|
ixgbe_update_tx_dca(adapter, tx_ring);
|
||||||
#endif
|
#endif
|
||||||
|
@ -1022,7 +1022,7 @@ static int ixgbe_clean_rxonly(struct napi_struct *napi, int budget)
|
||||||
|
|
||||||
r_idx = find_first_bit(q_vector->rxr_idx, adapter->num_rx_queues);
|
r_idx = find_first_bit(q_vector->rxr_idx, adapter->num_rx_queues);
|
||||||
rx_ring = &(adapter->rx_ring[r_idx]);
|
rx_ring = &(adapter->rx_ring[r_idx]);
|
||||||
#if defined(CONFIG_DCA) || defined(CONFIG_DCA_MODULE)
|
#ifdef CONFIG_IXGBE_DCA
|
||||||
if (adapter->flags & IXGBE_FLAG_DCA_ENABLED)
|
if (adapter->flags & IXGBE_FLAG_DCA_ENABLED)
|
||||||
ixgbe_update_rx_dca(adapter, rx_ring);
|
ixgbe_update_rx_dca(adapter, rx_ring);
|
||||||
#endif
|
#endif
|
||||||
|
@ -1066,7 +1066,7 @@ static int ixgbe_clean_rxonly_many(struct napi_struct *napi, int budget)
|
||||||
r_idx = find_first_bit(q_vector->rxr_idx, adapter->num_rx_queues);
|
r_idx = find_first_bit(q_vector->rxr_idx, adapter->num_rx_queues);
|
||||||
for (i = 0; i < q_vector->rxr_count; i++) {
|
for (i = 0; i < q_vector->rxr_count; i++) {
|
||||||
rx_ring = &(adapter->rx_ring[r_idx]);
|
rx_ring = &(adapter->rx_ring[r_idx]);
|
||||||
#if defined(CONFIG_DCA) || defined(CONFIG_DCA_MODULE)
|
#ifdef CONFIG_IXGBE_DCA
|
||||||
if (adapter->flags & IXGBE_FLAG_DCA_ENABLED)
|
if (adapter->flags & IXGBE_FLAG_DCA_ENABLED)
|
||||||
ixgbe_update_rx_dca(adapter, rx_ring);
|
ixgbe_update_rx_dca(adapter, rx_ring);
|
||||||
#endif
|
#endif
|
||||||
|
@ -2155,7 +2155,7 @@ void ixgbe_down(struct ixgbe_adapter *adapter)
|
||||||
|
|
||||||
netif_carrier_off(netdev);
|
netif_carrier_off(netdev);
|
||||||
|
|
||||||
#if defined(CONFIG_DCA) || defined(CONFIG_DCA_MODULE)
|
#ifdef CONFIG_IXGBE_DCA
|
||||||
if (adapter->flags & IXGBE_FLAG_DCA_ENABLED) {
|
if (adapter->flags & IXGBE_FLAG_DCA_ENABLED) {
|
||||||
adapter->flags &= ~IXGBE_FLAG_DCA_ENABLED;
|
adapter->flags &= ~IXGBE_FLAG_DCA_ENABLED;
|
||||||
dca_remove_requester(&adapter->pdev->dev);
|
dca_remove_requester(&adapter->pdev->dev);
|
||||||
|
@ -2167,7 +2167,7 @@ void ixgbe_down(struct ixgbe_adapter *adapter)
|
||||||
ixgbe_clean_all_tx_rings(adapter);
|
ixgbe_clean_all_tx_rings(adapter);
|
||||||
ixgbe_clean_all_rx_rings(adapter);
|
ixgbe_clean_all_rx_rings(adapter);
|
||||||
|
|
||||||
#if defined(CONFIG_DCA) || defined(CONFIG_DCA_MODULE)
|
#ifdef CONFIG_IXGBE_DCA
|
||||||
/* since we reset the hardware DCA settings were cleared */
|
/* since we reset the hardware DCA settings were cleared */
|
||||||
if (dca_add_requester(&adapter->pdev->dev) == 0) {
|
if (dca_add_requester(&adapter->pdev->dev) == 0) {
|
||||||
adapter->flags |= IXGBE_FLAG_DCA_ENABLED;
|
adapter->flags |= IXGBE_FLAG_DCA_ENABLED;
|
||||||
|
@ -2193,7 +2193,7 @@ static int ixgbe_poll(struct napi_struct *napi, int budget)
|
||||||
struct ixgbe_adapter *adapter = q_vector->adapter;
|
struct ixgbe_adapter *adapter = q_vector->adapter;
|
||||||
int tx_cleaned, work_done = 0;
|
int tx_cleaned, work_done = 0;
|
||||||
|
|
||||||
#if defined(CONFIG_DCA) || defined(CONFIG_DCA_MODULE)
|
#ifdef CONFIG_IXGBE_DCA
|
||||||
if (adapter->flags & IXGBE_FLAG_DCA_ENABLED) {
|
if (adapter->flags & IXGBE_FLAG_DCA_ENABLED) {
|
||||||
ixgbe_update_tx_dca(adapter, adapter->tx_ring);
|
ixgbe_update_tx_dca(adapter, adapter->tx_ring);
|
||||||
ixgbe_update_rx_dca(adapter, adapter->rx_ring);
|
ixgbe_update_rx_dca(adapter, adapter->rx_ring);
|
||||||
|
@ -3922,7 +3922,7 @@ static int __devinit ixgbe_probe(struct pci_dev *pdev,
|
||||||
if (err)
|
if (err)
|
||||||
goto err_register;
|
goto err_register;
|
||||||
|
|
||||||
#if defined(CONFIG_DCA) || defined(CONFIG_DCA_MODULE)
|
#ifdef CONFIG_IXGBE_DCA
|
||||||
if (dca_add_requester(&pdev->dev) == 0) {
|
if (dca_add_requester(&pdev->dev) == 0) {
|
||||||
adapter->flags |= IXGBE_FLAG_DCA_ENABLED;
|
adapter->flags |= IXGBE_FLAG_DCA_ENABLED;
|
||||||
/* always use CB2 mode, difference is masked
|
/* always use CB2 mode, difference is masked
|
||||||
|
@ -3972,7 +3972,7 @@ static void __devexit ixgbe_remove(struct pci_dev *pdev)
|
||||||
|
|
||||||
flush_scheduled_work();
|
flush_scheduled_work();
|
||||||
|
|
||||||
#if defined(CONFIG_DCA) || defined(CONFIG_DCA_MODULE)
|
#ifdef CONFIG_IXGBE_DCA
|
||||||
if (adapter->flags & IXGBE_FLAG_DCA_ENABLED) {
|
if (adapter->flags & IXGBE_FLAG_DCA_ENABLED) {
|
||||||
adapter->flags &= ~IXGBE_FLAG_DCA_ENABLED;
|
adapter->flags &= ~IXGBE_FLAG_DCA_ENABLED;
|
||||||
dca_remove_requester(&pdev->dev);
|
dca_remove_requester(&pdev->dev);
|
||||||
|
@ -4105,10 +4105,10 @@ static int __init ixgbe_init_module(void)
|
||||||
|
|
||||||
printk(KERN_INFO "%s: %s\n", ixgbe_driver_name, ixgbe_copyright);
|
printk(KERN_INFO "%s: %s\n", ixgbe_driver_name, ixgbe_copyright);
|
||||||
|
|
||||||
#if defined(CONFIG_DCA) || defined(CONFIG_DCA_MODULE)
|
#ifdef CONFIG_IXGBE_DCA
|
||||||
dca_register_notify(&dca_notifier);
|
dca_register_notify(&dca_notifier);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
ret = pci_register_driver(&ixgbe_driver);
|
ret = pci_register_driver(&ixgbe_driver);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -4123,13 +4123,13 @@ module_init(ixgbe_init_module);
|
||||||
**/
|
**/
|
||||||
static void __exit ixgbe_exit_module(void)
|
static void __exit ixgbe_exit_module(void)
|
||||||
{
|
{
|
||||||
#if defined(CONFIG_DCA) || defined(CONFIG_DCA_MODULE)
|
#ifdef CONFIG_IXGBE_DCA
|
||||||
dca_unregister_notify(&dca_notifier);
|
dca_unregister_notify(&dca_notifier);
|
||||||
#endif
|
#endif
|
||||||
pci_unregister_driver(&ixgbe_driver);
|
pci_unregister_driver(&ixgbe_driver);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(CONFIG_DCA) || defined(CONFIG_DCA_MODULE)
|
#ifdef CONFIG_IXGBE_DCA
|
||||||
static int ixgbe_notify_dca(struct notifier_block *nb, unsigned long event,
|
static int ixgbe_notify_dca(struct notifier_block *nb, unsigned long event,
|
||||||
void *p)
|
void *p)
|
||||||
{
|
{
|
||||||
|
@ -4140,7 +4140,7 @@ static int ixgbe_notify_dca(struct notifier_block *nb, unsigned long event,
|
||||||
|
|
||||||
return ret_val ? NOTIFY_BAD : NOTIFY_DONE;
|
return ret_val ? NOTIFY_BAD : NOTIFY_DONE;
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_DCA or CONFIG_DCA_MODULE */
|
#endif /* CONFIG_IXGBE_DCA */
|
||||||
|
|
||||||
module_exit(ixgbe_exit_module);
|
module_exit(ixgbe_exit_module);
|
||||||
|
|
||||||
|
|
|
@ -188,7 +188,7 @@ struct myri10ge_slice_state {
|
||||||
dma_addr_t fw_stats_bus;
|
dma_addr_t fw_stats_bus;
|
||||||
int watchdog_tx_done;
|
int watchdog_tx_done;
|
||||||
int watchdog_tx_req;
|
int watchdog_tx_req;
|
||||||
#if (defined CONFIG_DCA) || (defined CONFIG_DCA_MODULE)
|
#ifdef CONFIG_MYRI10GE_DCA
|
||||||
int cached_dca_tag;
|
int cached_dca_tag;
|
||||||
int cpu;
|
int cpu;
|
||||||
__be32 __iomem *dca_tag;
|
__be32 __iomem *dca_tag;
|
||||||
|
@ -220,7 +220,7 @@ struct myri10ge_priv {
|
||||||
int msi_enabled;
|
int msi_enabled;
|
||||||
int msix_enabled;
|
int msix_enabled;
|
||||||
struct msix_entry *msix_vectors;
|
struct msix_entry *msix_vectors;
|
||||||
#if (defined CONFIG_DCA) || (defined CONFIG_DCA_MODULE)
|
#ifdef CONFIG_MYRI10GE_DCA
|
||||||
int dca_enabled;
|
int dca_enabled;
|
||||||
#endif
|
#endif
|
||||||
u32 link_state;
|
u32 link_state;
|
||||||
|
@ -902,7 +902,7 @@ static int myri10ge_reset(struct myri10ge_priv *mgp)
|
||||||
struct myri10ge_slice_state *ss;
|
struct myri10ge_slice_state *ss;
|
||||||
int i, status;
|
int i, status;
|
||||||
size_t bytes;
|
size_t bytes;
|
||||||
#if (defined CONFIG_DCA) || (defined CONFIG_DCA_MODULE)
|
#ifdef CONFIG_MYRI10GE_DCA
|
||||||
unsigned long dca_tag_off;
|
unsigned long dca_tag_off;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -1012,7 +1012,7 @@ static int myri10ge_reset(struct myri10ge_priv *mgp)
|
||||||
}
|
}
|
||||||
put_be32(htonl(mgp->intr_coal_delay), mgp->intr_coal_delay_ptr);
|
put_be32(htonl(mgp->intr_coal_delay), mgp->intr_coal_delay_ptr);
|
||||||
|
|
||||||
#if (defined CONFIG_DCA) || (defined CONFIG_DCA_MODULE)
|
#ifdef CONFIG_MYRI10GE_DCA
|
||||||
status = myri10ge_send_cmd(mgp, MXGEFW_CMD_GET_DCA_OFFSET, &cmd, 0);
|
status = myri10ge_send_cmd(mgp, MXGEFW_CMD_GET_DCA_OFFSET, &cmd, 0);
|
||||||
dca_tag_off = cmd.data0;
|
dca_tag_off = cmd.data0;
|
||||||
for (i = 0; i < mgp->num_slices; i++) {
|
for (i = 0; i < mgp->num_slices; i++) {
|
||||||
|
@ -1051,7 +1051,7 @@ static int myri10ge_reset(struct myri10ge_priv *mgp)
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if (defined CONFIG_DCA) || (defined CONFIG_DCA_MODULE)
|
#ifdef CONFIG_MYRI10GE_DCA
|
||||||
static void
|
static void
|
||||||
myri10ge_write_dca(struct myri10ge_slice_state *ss, int cpu, int tag)
|
myri10ge_write_dca(struct myri10ge_slice_state *ss, int cpu, int tag)
|
||||||
{
|
{
|
||||||
|
@ -1505,7 +1505,7 @@ static int myri10ge_poll(struct napi_struct *napi, int budget)
|
||||||
struct net_device *netdev = ss->mgp->dev;
|
struct net_device *netdev = ss->mgp->dev;
|
||||||
int work_done;
|
int work_done;
|
||||||
|
|
||||||
#if (defined CONFIG_DCA) || (defined CONFIG_DCA_MODULE)
|
#ifdef CONFIG_MYRI10GE_DCA
|
||||||
if (ss->mgp->dca_enabled)
|
if (ss->mgp->dca_enabled)
|
||||||
myri10ge_update_dca(ss);
|
myri10ge_update_dca(ss);
|
||||||
#endif
|
#endif
|
||||||
|
@ -1736,7 +1736,7 @@ static const char myri10ge_gstrings_main_stats[][ETH_GSTRING_LEN] = {
|
||||||
"tx_boundary", "WC", "irq", "MSI", "MSIX",
|
"tx_boundary", "WC", "irq", "MSI", "MSIX",
|
||||||
"read_dma_bw_MBs", "write_dma_bw_MBs", "read_write_dma_bw_MBs",
|
"read_dma_bw_MBs", "write_dma_bw_MBs", "read_write_dma_bw_MBs",
|
||||||
"serial_number", "watchdog_resets",
|
"serial_number", "watchdog_resets",
|
||||||
#if (defined CONFIG_DCA) || (defined CONFIG_DCA_MODULE)
|
#ifdef CONFIG_MYRI10GE_DCA
|
||||||
"dca_capable_firmware", "dca_device_present",
|
"dca_capable_firmware", "dca_device_present",
|
||||||
#endif
|
#endif
|
||||||
"link_changes", "link_up", "dropped_link_overflow",
|
"link_changes", "link_up", "dropped_link_overflow",
|
||||||
|
@ -1815,7 +1815,7 @@ myri10ge_get_ethtool_stats(struct net_device *netdev,
|
||||||
data[i++] = (unsigned int)mgp->read_write_dma;
|
data[i++] = (unsigned int)mgp->read_write_dma;
|
||||||
data[i++] = (unsigned int)mgp->serial_number;
|
data[i++] = (unsigned int)mgp->serial_number;
|
||||||
data[i++] = (unsigned int)mgp->watchdog_resets;
|
data[i++] = (unsigned int)mgp->watchdog_resets;
|
||||||
#if (defined CONFIG_DCA) || (defined CONFIG_DCA_MODULE)
|
#ifdef CONFIG_MYRI10GE_DCA
|
||||||
data[i++] = (unsigned int)(mgp->ss[0].dca_tag != NULL);
|
data[i++] = (unsigned int)(mgp->ss[0].dca_tag != NULL);
|
||||||
data[i++] = (unsigned int)(mgp->dca_enabled);
|
data[i++] = (unsigned int)(mgp->dca_enabled);
|
||||||
#endif
|
#endif
|
||||||
|
@ -3844,7 +3844,7 @@ static int myri10ge_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||||
dev_err(&pdev->dev, "failed reset\n");
|
dev_err(&pdev->dev, "failed reset\n");
|
||||||
goto abort_with_slices;
|
goto abort_with_slices;
|
||||||
}
|
}
|
||||||
#if (defined CONFIG_DCA) || (defined CONFIG_DCA_MODULE)
|
#ifdef CONFIG_MYRI10GE_DCA
|
||||||
myri10ge_setup_dca(mgp);
|
myri10ge_setup_dca(mgp);
|
||||||
#endif
|
#endif
|
||||||
pci_set_drvdata(pdev, mgp);
|
pci_set_drvdata(pdev, mgp);
|
||||||
|
@ -3948,7 +3948,7 @@ static void myri10ge_remove(struct pci_dev *pdev)
|
||||||
netdev = mgp->dev;
|
netdev = mgp->dev;
|
||||||
unregister_netdev(netdev);
|
unregister_netdev(netdev);
|
||||||
|
|
||||||
#if (defined CONFIG_DCA) || (defined CONFIG_DCA_MODULE)
|
#ifdef CONFIG_MYRI10GE_DCA
|
||||||
myri10ge_teardown_dca(mgp);
|
myri10ge_teardown_dca(mgp);
|
||||||
#endif
|
#endif
|
||||||
myri10ge_dummy_rdma(mgp, 0);
|
myri10ge_dummy_rdma(mgp, 0);
|
||||||
|
@ -3993,7 +3993,7 @@ static struct pci_driver myri10ge_driver = {
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
#if (defined CONFIG_DCA) || (defined CONFIG_DCA_MODULE)
|
#ifdef CONFIG_MYRI10GE_DCA
|
||||||
static int
|
static int
|
||||||
myri10ge_notify_dca(struct notifier_block *nb, unsigned long event, void *p)
|
myri10ge_notify_dca(struct notifier_block *nb, unsigned long event, void *p)
|
||||||
{
|
{
|
||||||
|
@ -4024,7 +4024,7 @@ static __init int myri10ge_init_module(void)
|
||||||
myri10ge_driver.name, myri10ge_rss_hash);
|
myri10ge_driver.name, myri10ge_rss_hash);
|
||||||
myri10ge_rss_hash = MXGEFW_RSS_HASH_TYPE_SRC_PORT;
|
myri10ge_rss_hash = MXGEFW_RSS_HASH_TYPE_SRC_PORT;
|
||||||
}
|
}
|
||||||
#if (defined CONFIG_DCA) || (defined CONFIG_DCA_MODULE)
|
#ifdef CONFIG_MYRI10GE_DCA
|
||||||
dca_register_notify(&myri10ge_dca_notifier);
|
dca_register_notify(&myri10ge_dca_notifier);
|
||||||
#endif
|
#endif
|
||||||
if (myri10ge_max_slices > MYRI10GE_MAX_SLICES)
|
if (myri10ge_max_slices > MYRI10GE_MAX_SLICES)
|
||||||
|
@ -4037,7 +4037,7 @@ module_init(myri10ge_init_module);
|
||||||
|
|
||||||
static __exit void myri10ge_cleanup_module(void)
|
static __exit void myri10ge_cleanup_module(void)
|
||||||
{
|
{
|
||||||
#if (defined CONFIG_DCA) || (defined CONFIG_DCA_MODULE)
|
#ifdef CONFIG_MYRI10GE_DCA
|
||||||
dca_unregister_notify(&myri10ge_dca_notifier);
|
dca_unregister_notify(&myri10ge_dca_notifier);
|
||||||
#endif
|
#endif
|
||||||
pci_unregister_driver(&myri10ge_driver);
|
pci_unregister_driver(&myri10ge_driver);
|
||||||
|
|
|
@ -111,7 +111,7 @@ config ARCNET_COM20020_CS
|
||||||
|
|
||||||
config PCMCIA_IBMTR
|
config PCMCIA_IBMTR
|
||||||
tristate "IBM PCMCIA tokenring adapter support"
|
tristate "IBM PCMCIA tokenring adapter support"
|
||||||
depends on IBMTR!=y && TR && !64BIT
|
depends on IBMTR!=y && TR
|
||||||
help
|
help
|
||||||
Say Y here if you intend to attach this type of Token Ring PCMCIA
|
Say Y here if you intend to attach this type of Token Ring PCMCIA
|
||||||
card to your computer. You then also need to say Y to "Token Ring
|
card to your computer. You then also need to say Y to "Token Ring
|
||||||
|
|
|
@ -122,7 +122,6 @@ int lmc_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) /*fold00*/
|
||||||
* Most functions mess with the structure
|
* Most functions mess with the structure
|
||||||
* Disable interrupts while we do the polling
|
* Disable interrupts while we do the polling
|
||||||
*/
|
*/
|
||||||
spin_lock_irqsave(&sc->lmc_lock, flags);
|
|
||||||
|
|
||||||
switch (cmd) {
|
switch (cmd) {
|
||||||
/*
|
/*
|
||||||
|
@ -152,6 +151,7 @@ int lmc_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) /*fold00*/
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
spin_lock_irqsave(&sc->lmc_lock, flags);
|
||||||
sc->lmc_media->set_status (sc, &ctl);
|
sc->lmc_media->set_status (sc, &ctl);
|
||||||
|
|
||||||
if(ctl.crc_length != sc->ictl.crc_length) {
|
if(ctl.crc_length != sc->ictl.crc_length) {
|
||||||
|
@ -161,6 +161,7 @@ int lmc_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) /*fold00*/
|
||||||
else
|
else
|
||||||
sc->TxDescriptControlInit &= ~LMC_TDES_ADD_CRC_DISABLE;
|
sc->TxDescriptControlInit &= ~LMC_TDES_ADD_CRC_DISABLE;
|
||||||
}
|
}
|
||||||
|
spin_unlock_irqrestore(&sc->lmc_lock, flags);
|
||||||
|
|
||||||
ret = 0;
|
ret = 0;
|
||||||
break;
|
break;
|
||||||
|
@ -187,15 +188,18 @@ int lmc_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) /*fold00*/
|
||||||
break; /* no change */
|
break; /* no change */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
spin_lock_irqsave(&sc->lmc_lock, flags);
|
||||||
lmc_proto_close(sc);
|
lmc_proto_close(sc);
|
||||||
|
|
||||||
sc->if_type = new_type;
|
sc->if_type = new_type;
|
||||||
lmc_proto_attach(sc);
|
lmc_proto_attach(sc);
|
||||||
ret = lmc_proto_open(sc);
|
ret = lmc_proto_open(sc);
|
||||||
|
spin_unlock_irqrestore(&sc->lmc_lock, flags);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case LMCIOCGETXINFO: /*fold01*/
|
case LMCIOCGETXINFO: /*fold01*/
|
||||||
|
spin_lock_irqsave(&sc->lmc_lock, flags);
|
||||||
sc->lmc_xinfo.Magic0 = 0xBEEFCAFE;
|
sc->lmc_xinfo.Magic0 = 0xBEEFCAFE;
|
||||||
|
|
||||||
sc->lmc_xinfo.PciCardType = sc->lmc_cardtype;
|
sc->lmc_xinfo.PciCardType = sc->lmc_cardtype;
|
||||||
|
@ -208,6 +212,7 @@ int lmc_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) /*fold00*/
|
||||||
sc->lmc_xinfo.MaxFrameSize = LMC_PKT_BUF_SZ;
|
sc->lmc_xinfo.MaxFrameSize = LMC_PKT_BUF_SZ;
|
||||||
sc->lmc_xinfo.link_status = sc->lmc_media->get_link_status (sc);
|
sc->lmc_xinfo.link_status = sc->lmc_media->get_link_status (sc);
|
||||||
sc->lmc_xinfo.mii_reg16 = lmc_mii_readreg (sc, 0, 16);
|
sc->lmc_xinfo.mii_reg16 = lmc_mii_readreg (sc, 0, 16);
|
||||||
|
spin_unlock_irqrestore(&sc->lmc_lock, flags);
|
||||||
|
|
||||||
sc->lmc_xinfo.Magic1 = 0xDEADBEEF;
|
sc->lmc_xinfo.Magic1 = 0xDEADBEEF;
|
||||||
|
|
||||||
|
@ -220,6 +225,7 @@ int lmc_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) /*fold00*/
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LMCIOCGETLMCSTATS:
|
case LMCIOCGETLMCSTATS:
|
||||||
|
spin_lock_irqsave(&sc->lmc_lock, flags);
|
||||||
if (sc->lmc_cardtype == LMC_CARDTYPE_T1) {
|
if (sc->lmc_cardtype == LMC_CARDTYPE_T1) {
|
||||||
lmc_mii_writereg(sc, 0, 17, T1FRAMER_FERR_LSB);
|
lmc_mii_writereg(sc, 0, 17, T1FRAMER_FERR_LSB);
|
||||||
sc->extra_stats.framingBitErrorCount +=
|
sc->extra_stats.framingBitErrorCount +=
|
||||||
|
@ -243,6 +249,7 @@ int lmc_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) /*fold00*/
|
||||||
sc->extra_stats.severelyErroredFrameCount +=
|
sc->extra_stats.severelyErroredFrameCount +=
|
||||||
regVal & T1FRAMER_SEF_MASK;
|
regVal & T1FRAMER_SEF_MASK;
|
||||||
}
|
}
|
||||||
|
spin_unlock_irqrestore(&sc->lmc_lock, flags);
|
||||||
if (copy_to_user(ifr->ifr_data, &sc->lmc_device->stats,
|
if (copy_to_user(ifr->ifr_data, &sc->lmc_device->stats,
|
||||||
sizeof(sc->lmc_device->stats)) ||
|
sizeof(sc->lmc_device->stats)) ||
|
||||||
copy_to_user(ifr->ifr_data + sizeof(sc->lmc_device->stats),
|
copy_to_user(ifr->ifr_data + sizeof(sc->lmc_device->stats),
|
||||||
|
@ -258,12 +265,14 @@ int lmc_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) /*fold00*/
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
spin_lock_irqsave(&sc->lmc_lock, flags);
|
||||||
memset(&sc->lmc_device->stats, 0, sizeof(sc->lmc_device->stats));
|
memset(&sc->lmc_device->stats, 0, sizeof(sc->lmc_device->stats));
|
||||||
memset(&sc->extra_stats, 0, sizeof(sc->extra_stats));
|
memset(&sc->extra_stats, 0, sizeof(sc->extra_stats));
|
||||||
sc->extra_stats.check = STATCHECK;
|
sc->extra_stats.check = STATCHECK;
|
||||||
sc->extra_stats.version_size = (DRIVER_VERSION << 16) +
|
sc->extra_stats.version_size = (DRIVER_VERSION << 16) +
|
||||||
sizeof(sc->lmc_device->stats) + sizeof(sc->extra_stats);
|
sizeof(sc->lmc_device->stats) + sizeof(sc->extra_stats);
|
||||||
sc->extra_stats.lmc_cardtype = sc->lmc_cardtype;
|
sc->extra_stats.lmc_cardtype = sc->lmc_cardtype;
|
||||||
|
spin_unlock_irqrestore(&sc->lmc_lock, flags);
|
||||||
ret = 0;
|
ret = 0;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -282,8 +291,10 @@ int lmc_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) /*fold00*/
|
||||||
ret = -EFAULT;
|
ret = -EFAULT;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
spin_lock_irqsave(&sc->lmc_lock, flags);
|
||||||
sc->lmc_media->set_circuit_type(sc, ctl.circuit_type);
|
sc->lmc_media->set_circuit_type(sc, ctl.circuit_type);
|
||||||
sc->ictl.circuit_type = ctl.circuit_type;
|
sc->ictl.circuit_type = ctl.circuit_type;
|
||||||
|
spin_unlock_irqrestore(&sc->lmc_lock, flags);
|
||||||
ret = 0;
|
ret = 0;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
@ -294,12 +305,14 @@ int lmc_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) /*fold00*/
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
spin_lock_irqsave(&sc->lmc_lock, flags);
|
||||||
/* Reset driver and bring back to current state */
|
/* Reset driver and bring back to current state */
|
||||||
printk (" REG16 before reset +%04x\n", lmc_mii_readreg (sc, 0, 16));
|
printk (" REG16 before reset +%04x\n", lmc_mii_readreg (sc, 0, 16));
|
||||||
lmc_running_reset (dev);
|
lmc_running_reset (dev);
|
||||||
printk (" REG16 after reset +%04x\n", lmc_mii_readreg (sc, 0, 16));
|
printk (" REG16 after reset +%04x\n", lmc_mii_readreg (sc, 0, 16));
|
||||||
|
|
||||||
LMC_EVENT_LOG(LMC_EVENT_FORCEDRESET, LMC_CSR_READ (sc, csr_status), lmc_mii_readreg (sc, 0, 16));
|
LMC_EVENT_LOG(LMC_EVENT_FORCEDRESET, LMC_CSR_READ (sc, csr_status), lmc_mii_readreg (sc, 0, 16));
|
||||||
|
spin_unlock_irqrestore(&sc->lmc_lock, flags);
|
||||||
|
|
||||||
ret = 0;
|
ret = 0;
|
||||||
break;
|
break;
|
||||||
|
@ -338,14 +351,15 @@ int lmc_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) /*fold00*/
|
||||||
*/
|
*/
|
||||||
netif_stop_queue(dev);
|
netif_stop_queue(dev);
|
||||||
|
|
||||||
if (copy_from_user(&xc, ifr->ifr_data, sizeof(struct lmc_xilinx_control))) {
|
if (copy_from_user(&xc, ifr->ifr_data, sizeof(struct lmc_xilinx_control))) {
|
||||||
ret = -EFAULT;
|
ret = -EFAULT;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
switch(xc.command){
|
switch(xc.command){
|
||||||
case lmc_xilinx_reset: /*fold02*/
|
case lmc_xilinx_reset: /*fold02*/
|
||||||
{
|
{
|
||||||
u16 mii;
|
u16 mii;
|
||||||
|
spin_lock_irqsave(&sc->lmc_lock, flags);
|
||||||
mii = lmc_mii_readreg (sc, 0, 16);
|
mii = lmc_mii_readreg (sc, 0, 16);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -404,6 +418,7 @@ int lmc_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) /*fold00*/
|
||||||
lmc_led_off(sc, LMC_DS3_LED2);
|
lmc_led_off(sc, LMC_DS3_LED2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
spin_unlock_irqrestore(&sc->lmc_lock, flags);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -416,6 +431,7 @@ int lmc_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) /*fold00*/
|
||||||
{
|
{
|
||||||
u16 mii;
|
u16 mii;
|
||||||
int timeout = 500000;
|
int timeout = 500000;
|
||||||
|
spin_lock_irqsave(&sc->lmc_lock, flags);
|
||||||
mii = lmc_mii_readreg (sc, 0, 16);
|
mii = lmc_mii_readreg (sc, 0, 16);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -451,13 +467,14 @@ int lmc_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) /*fold00*/
|
||||||
*/
|
*/
|
||||||
while( (LMC_CSR_READ(sc, csr_gp) & LMC_GEP_INIT) == 0 &&
|
while( (LMC_CSR_READ(sc, csr_gp) & LMC_GEP_INIT) == 0 &&
|
||||||
(timeout-- > 0))
|
(timeout-- > 0))
|
||||||
;
|
cpu_relax();
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* stop driving Xilinx-related signals
|
* stop driving Xilinx-related signals
|
||||||
*/
|
*/
|
||||||
lmc_gpio_mkinput(sc, 0xff);
|
lmc_gpio_mkinput(sc, 0xff);
|
||||||
|
spin_unlock_irqrestore(&sc->lmc_lock, flags);
|
||||||
|
|
||||||
ret = 0x0;
|
ret = 0x0;
|
||||||
|
|
||||||
|
@ -493,6 +510,7 @@ int lmc_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) /*fold00*/
|
||||||
|
|
||||||
printk("%s: Starting load of data Len: %d at 0x%p == 0x%p\n", dev->name, xc.len, xc.data, data);
|
printk("%s: Starting load of data Len: %d at 0x%p == 0x%p\n", dev->name, xc.len, xc.data, data);
|
||||||
|
|
||||||
|
spin_lock_irqsave(&sc->lmc_lock, flags);
|
||||||
lmc_gpio_mkinput(sc, 0xff);
|
lmc_gpio_mkinput(sc, 0xff);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -545,7 +563,7 @@ int lmc_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) /*fold00*/
|
||||||
*/
|
*/
|
||||||
while( (LMC_CSR_READ(sc, csr_gp) & LMC_GEP_INIT) == 0 &&
|
while( (LMC_CSR_READ(sc, csr_gp) & LMC_GEP_INIT) == 0 &&
|
||||||
(timeout-- > 0))
|
(timeout-- > 0))
|
||||||
;
|
cpu_relax();
|
||||||
|
|
||||||
printk(KERN_DEBUG "%s: Waited %d for the Xilinx to clear it's memory\n", dev->name, 500000-timeout);
|
printk(KERN_DEBUG "%s: Waited %d for the Xilinx to clear it's memory\n", dev->name, 500000-timeout);
|
||||||
|
|
||||||
|
@ -588,6 +606,7 @@ int lmc_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) /*fold00*/
|
||||||
|
|
||||||
sc->lmc_miireg16 &= ~LMC_MII16_FIFO_RESET;
|
sc->lmc_miireg16 &= ~LMC_MII16_FIFO_RESET;
|
||||||
lmc_mii_writereg(sc, 0, 16, sc->lmc_miireg16);
|
lmc_mii_writereg(sc, 0, 16, sc->lmc_miireg16);
|
||||||
|
spin_unlock_irqrestore(&sc->lmc_lock, flags);
|
||||||
|
|
||||||
kfree(data);
|
kfree(data);
|
||||||
|
|
||||||
|
@ -611,8 +630,6 @@ int lmc_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) /*fold00*/
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
spin_unlock_irqrestore(&sc->lmc_lock, flags); /*fold01*/
|
|
||||||
|
|
||||||
lmc_trace(dev, "lmc_ioctl out");
|
lmc_trace(dev, "lmc_ioctl out");
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|
|
@ -239,11 +239,14 @@ static void xennet_alloc_rx_buffers(struct net_device *dev)
|
||||||
*/
|
*/
|
||||||
batch_target = np->rx_target - (req_prod - np->rx.rsp_cons);
|
batch_target = np->rx_target - (req_prod - np->rx.rsp_cons);
|
||||||
for (i = skb_queue_len(&np->rx_batch); i < batch_target; i++) {
|
for (i = skb_queue_len(&np->rx_batch); i < batch_target; i++) {
|
||||||
skb = __netdev_alloc_skb(dev, RX_COPY_THRESHOLD,
|
skb = __netdev_alloc_skb(dev, RX_COPY_THRESHOLD + NET_IP_ALIGN,
|
||||||
GFP_ATOMIC | __GFP_NOWARN);
|
GFP_ATOMIC | __GFP_NOWARN);
|
||||||
if (unlikely(!skb))
|
if (unlikely(!skb))
|
||||||
goto no_skb;
|
goto no_skb;
|
||||||
|
|
||||||
|
/* Align ip header to a 16 bytes boundary */
|
||||||
|
skb_reserve(skb, NET_IP_ALIGN);
|
||||||
|
|
||||||
page = alloc_page(GFP_ATOMIC | __GFP_NOWARN);
|
page = alloc_page(GFP_ATOMIC | __GFP_NOWARN);
|
||||||
if (!page) {
|
if (!page) {
|
||||||
kfree_skb(skb);
|
kfree_skb(skb);
|
||||||
|
|
|
@ -37,10 +37,7 @@
|
||||||
#include <linux/poll.h>
|
#include <linux/poll.h>
|
||||||
#include <net/sock.h>
|
#include <net/sock.h>
|
||||||
#include <asm/ioctls.h>
|
#include <asm/ioctls.h>
|
||||||
|
|
||||||
#if defined(CONFIG_KMOD)
|
|
||||||
#include <linux/kmod.h>
|
#include <linux/kmod.h>
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <net/bluetooth/bluetooth.h>
|
#include <net/bluetooth/bluetooth.h>
|
||||||
|
|
||||||
|
@ -145,11 +142,8 @@ static int bt_sock_create(struct net *net, struct socket *sock, int proto)
|
||||||
if (proto < 0 || proto >= BT_MAX_PROTO)
|
if (proto < 0 || proto >= BT_MAX_PROTO)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
#if defined(CONFIG_KMOD)
|
if (!bt_proto[proto])
|
||||||
if (!bt_proto[proto]) {
|
|
||||||
request_module("bt-proto-%d", proto);
|
request_module("bt-proto-%d", proto);
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
err = -EPROTONOSUPPORT;
|
err = -EPROTONOSUPPORT;
|
||||||
|
|
||||||
|
|
|
@ -305,23 +305,14 @@ find_inlist_lock_noload(struct list_head *head, const char *name, int *error,
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef CONFIG_KMOD
|
|
||||||
#define find_inlist_lock(h,n,p,e,m) find_inlist_lock_noload((h),(n),(e),(m))
|
|
||||||
#else
|
|
||||||
static void *
|
static void *
|
||||||
find_inlist_lock(struct list_head *head, const char *name, const char *prefix,
|
find_inlist_lock(struct list_head *head, const char *name, const char *prefix,
|
||||||
int *error, struct mutex *mutex)
|
int *error, struct mutex *mutex)
|
||||||
{
|
{
|
||||||
void *ret;
|
return try_then_request_module(
|
||||||
|
find_inlist_lock_noload(head, name, error, mutex),
|
||||||
ret = find_inlist_lock_noload(head, name, error, mutex);
|
"%s%s", prefix, name);
|
||||||
if (!ret) {
|
|
||||||
request_module("%s%s", prefix, name);
|
|
||||||
ret = find_inlist_lock_noload(head, name, error, mutex);
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
static inline struct ebt_table *
|
static inline struct ebt_table *
|
||||||
find_table_lock(const char *name, int *error, struct mutex *mutex)
|
find_table_lock(const char *name, int *error, struct mutex *mutex)
|
||||||
|
|
|
@ -128,8 +128,8 @@ static int can_create(struct net *net, struct socket *sock, int protocol)
|
||||||
if (net != &init_net)
|
if (net != &init_net)
|
||||||
return -EAFNOSUPPORT;
|
return -EAFNOSUPPORT;
|
||||||
|
|
||||||
#ifdef CONFIG_KMOD
|
#ifdef CONFIG_MODULES
|
||||||
/* try to load protocol module, when CONFIG_KMOD is defined */
|
/* try to load protocol module kernel is modular */
|
||||||
if (!proto_tab[protocol]) {
|
if (!proto_tab[protocol]) {
|
||||||
err = request_module("can-proto-%d", protocol);
|
err = request_module("can-proto-%d", protocol);
|
||||||
|
|
||||||
|
|
|
@ -4956,8 +4956,6 @@ EXPORT_SYMBOL(br_fdb_get_hook);
|
||||||
EXPORT_SYMBOL(br_fdb_put_hook);
|
EXPORT_SYMBOL(br_fdb_put_hook);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_KMOD
|
|
||||||
EXPORT_SYMBOL(dev_load);
|
EXPORT_SYMBOL(dev_load);
|
||||||
#endif
|
|
||||||
|
|
||||||
EXPORT_PER_CPU_SYMBOL(softnet_data);
|
EXPORT_PER_CPU_SYMBOL(softnet_data);
|
||||||
|
|
|
@ -1040,7 +1040,7 @@ static int rtnl_newlink(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg)
|
||||||
struct nlattr *linkinfo[IFLA_INFO_MAX+1];
|
struct nlattr *linkinfo[IFLA_INFO_MAX+1];
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
#ifdef CONFIG_KMOD
|
#ifdef CONFIG_MODULES
|
||||||
replay:
|
replay:
|
||||||
#endif
|
#endif
|
||||||
err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFLA_MAX, ifla_policy);
|
err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFLA_MAX, ifla_policy);
|
||||||
|
@ -1129,7 +1129,7 @@ replay:
|
||||||
return -EOPNOTSUPP;
|
return -EOPNOTSUPP;
|
||||||
|
|
||||||
if (!ops) {
|
if (!ops) {
|
||||||
#ifdef CONFIG_KMOD
|
#ifdef CONFIG_MODULES
|
||||||
if (kind[0]) {
|
if (kind[0]) {
|
||||||
__rtnl_unlock();
|
__rtnl_unlock();
|
||||||
request_module("rtnl-link-%s", kind);
|
request_module("rtnl-link-%s", kind);
|
||||||
|
|
|
@ -154,7 +154,7 @@ struct ccid *ccid_new(unsigned char id, struct sock *sk, int rx, gfp_t gfp)
|
||||||
struct ccid *ccid = NULL;
|
struct ccid *ccid = NULL;
|
||||||
|
|
||||||
ccids_read_lock();
|
ccids_read_lock();
|
||||||
#ifdef CONFIG_KMOD
|
#ifdef CONFIG_MODULES
|
||||||
if (ccids[id] == NULL) {
|
if (ccids[id] == NULL) {
|
||||||
/* We only try to load if in process context */
|
/* We only try to load if in process context */
|
||||||
ccids_read_unlock();
|
ccids_read_unlock();
|
||||||
|
|
|
@ -490,9 +490,7 @@ int dn_dev_ioctl(unsigned int cmd, void __user *arg)
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
ifr->ifr_name[IFNAMSIZ-1] = 0;
|
ifr->ifr_name[IFNAMSIZ-1] = 0;
|
||||||
|
|
||||||
#ifdef CONFIG_KMOD
|
|
||||||
dev_load(&init_net, ifr->ifr_name);
|
dev_load(&init_net, ifr->ifr_name);
|
||||||
#endif
|
|
||||||
|
|
||||||
switch(cmd) {
|
switch(cmd) {
|
||||||
case SIOCGIFADDR:
|
case SIOCGIFADDR:
|
||||||
|
|
|
@ -613,9 +613,7 @@ int devinet_ioctl(struct net *net, unsigned int cmd, void __user *arg)
|
||||||
if (colon)
|
if (colon)
|
||||||
*colon = 0;
|
*colon = 0;
|
||||||
|
|
||||||
#ifdef CONFIG_KMOD
|
|
||||||
dev_load(net, ifr.ifr_name);
|
dev_load(net, ifr.ifr_name);
|
||||||
#endif
|
|
||||||
|
|
||||||
switch (cmd) {
|
switch (cmd) {
|
||||||
case SIOCGIFADDR: /* Get interface address */
|
case SIOCGIFADDR: /* Get interface address */
|
||||||
|
|
|
@ -53,11 +53,9 @@ static DEFINE_MUTEX(inet_diag_table_mutex);
|
||||||
|
|
||||||
static const struct inet_diag_handler *inet_diag_lock_handler(int type)
|
static const struct inet_diag_handler *inet_diag_lock_handler(int type)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_KMOD
|
|
||||||
if (!inet_diag_table[type])
|
if (!inet_diag_table[type])
|
||||||
request_module("net-pf-%d-proto-%d-type-%d", PF_NETLINK,
|
request_module("net-pf-%d-proto-%d-type-%d", PF_NETLINK,
|
||||||
NETLINK_INET_DIAG, type);
|
NETLINK_INET_DIAG, type);
|
||||||
#endif
|
|
||||||
|
|
||||||
mutex_lock(&inet_diag_table_mutex);
|
mutex_lock(&inet_diag_table_mutex);
|
||||||
if (!inet_diag_table[type])
|
if (!inet_diag_table[type])
|
||||||
|
|
|
@ -1109,7 +1109,12 @@ restart:
|
||||||
printk("\n");
|
printk("\n");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
rt_hash_table[hash].chain = rt;
|
/*
|
||||||
|
* Since lookup is lockfree, we must make sure
|
||||||
|
* previous writes to rt are comitted to memory
|
||||||
|
* before making rt visible to other CPUS.
|
||||||
|
*/
|
||||||
|
rcu_assign_pointer(rt_hash_table[hash].chain, rt);
|
||||||
spin_unlock_bh(rt_hash_lock_addr(hash));
|
spin_unlock_bh(rt_hash_lock_addr(hash));
|
||||||
*rp = rt;
|
*rp = rt;
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -115,7 +115,7 @@ int tcp_set_default_congestion_control(const char *name)
|
||||||
|
|
||||||
spin_lock(&tcp_cong_list_lock);
|
spin_lock(&tcp_cong_list_lock);
|
||||||
ca = tcp_ca_find(name);
|
ca = tcp_ca_find(name);
|
||||||
#ifdef CONFIG_KMOD
|
#ifdef CONFIG_MODULES
|
||||||
if (!ca && capable(CAP_SYS_MODULE)) {
|
if (!ca && capable(CAP_SYS_MODULE)) {
|
||||||
spin_unlock(&tcp_cong_list_lock);
|
spin_unlock(&tcp_cong_list_lock);
|
||||||
|
|
||||||
|
@ -244,7 +244,7 @@ int tcp_set_congestion_control(struct sock *sk, const char *name)
|
||||||
if (ca == icsk->icsk_ca_ops)
|
if (ca == icsk->icsk_ca_ops)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
#ifdef CONFIG_KMOD
|
#ifdef CONFIG_MODULES
|
||||||
/* not found attempt to autoload module */
|
/* not found attempt to autoload module */
|
||||||
if (!ca && capable(CAP_SYS_MODULE)) {
|
if (!ca && capable(CAP_SYS_MODULE)) {
|
||||||
rcu_read_unlock();
|
rcu_read_unlock();
|
||||||
|
|
|
@ -822,7 +822,7 @@ ctnetlink_parse_nat_setup(struct nf_conn *ct,
|
||||||
|
|
||||||
parse_nat_setup = rcu_dereference(nfnetlink_parse_nat_setup_hook);
|
parse_nat_setup = rcu_dereference(nfnetlink_parse_nat_setup_hook);
|
||||||
if (!parse_nat_setup) {
|
if (!parse_nat_setup) {
|
||||||
#ifdef CONFIG_KMOD
|
#ifdef CONFIG_MODULES
|
||||||
rcu_read_unlock();
|
rcu_read_unlock();
|
||||||
nfnl_unlock();
|
nfnl_unlock();
|
||||||
if (request_module("nf-nat-ipv4") < 0) {
|
if (request_module("nf-nat-ipv4") < 0) {
|
||||||
|
|
|
@ -137,7 +137,7 @@ static int nfnetlink_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh)
|
||||||
replay:
|
replay:
|
||||||
ss = nfnetlink_get_subsys(type);
|
ss = nfnetlink_get_subsys(type);
|
||||||
if (!ss) {
|
if (!ss) {
|
||||||
#ifdef CONFIG_KMOD
|
#ifdef CONFIG_MODULES
|
||||||
nfnl_unlock();
|
nfnl_unlock();
|
||||||
request_module("nfnetlink-subsys-%d", NFNL_SUBSYS_ID(type));
|
request_module("nfnetlink-subsys-%d", NFNL_SUBSYS_ID(type));
|
||||||
nfnl_lock();
|
nfnl_lock();
|
||||||
|
|
|
@ -435,7 +435,7 @@ static int netlink_create(struct net *net, struct socket *sock, int protocol)
|
||||||
return -EPROTONOSUPPORT;
|
return -EPROTONOSUPPORT;
|
||||||
|
|
||||||
netlink_lock_table();
|
netlink_lock_table();
|
||||||
#ifdef CONFIG_KMOD
|
#ifdef CONFIG_MODULES
|
||||||
if (!nl_table[protocol].registered) {
|
if (!nl_table[protocol].registered) {
|
||||||
netlink_unlock_table();
|
netlink_unlock_table();
|
||||||
request_module("net-pf-%d-proto-%d", PF_NETLINK, protocol);
|
request_module("net-pf-%d-proto-%d", PF_NETLINK, protocol);
|
||||||
|
|
|
@ -67,11 +67,10 @@ static int pn_socket_create(struct net *net, struct socket *sock, int protocol)
|
||||||
}
|
}
|
||||||
|
|
||||||
pnp = phonet_proto_get(protocol);
|
pnp = phonet_proto_get(protocol);
|
||||||
#ifdef CONFIG_KMOD
|
|
||||||
if (pnp == NULL &&
|
if (pnp == NULL &&
|
||||||
request_module("net-pf-%d-proto-%d", PF_PHONET, protocol) == 0)
|
request_module("net-pf-%d-proto-%d", PF_PHONET, protocol) == 0)
|
||||||
pnp = phonet_proto_get(protocol);
|
pnp = phonet_proto_get(protocol);
|
||||||
#endif
|
|
||||||
if (pnp == NULL)
|
if (pnp == NULL)
|
||||||
return -EPROTONOSUPPORT;
|
return -EPROTONOSUPPORT;
|
||||||
if (sock->type != pnp->sock_type) {
|
if (sock->type != pnp->sock_type) {
|
||||||
|
|
|
@ -494,7 +494,7 @@ struct tc_action *tcf_action_init_1(struct nlattr *nla, struct nlattr *est,
|
||||||
|
|
||||||
a_o = tc_lookup_action_n(act_name);
|
a_o = tc_lookup_action_n(act_name);
|
||||||
if (a_o == NULL) {
|
if (a_o == NULL) {
|
||||||
#ifdef CONFIG_KMOD
|
#ifdef CONFIG_MODULES
|
||||||
rtnl_unlock();
|
rtnl_unlock();
|
||||||
request_module("act_%s", act_name);
|
request_module("act_%s", act_name);
|
||||||
rtnl_lock();
|
rtnl_lock();
|
||||||
|
|
|
@ -227,7 +227,7 @@ replay:
|
||||||
err = -ENOENT;
|
err = -ENOENT;
|
||||||
tp_ops = tcf_proto_lookup_ops(tca[TCA_KIND]);
|
tp_ops = tcf_proto_lookup_ops(tca[TCA_KIND]);
|
||||||
if (tp_ops == NULL) {
|
if (tp_ops == NULL) {
|
||||||
#ifdef CONFIG_KMOD
|
#ifdef CONFIG_MODULES
|
||||||
struct nlattr *kind = tca[TCA_KIND];
|
struct nlattr *kind = tca[TCA_KIND];
|
||||||
char name[IFNAMSIZ];
|
char name[IFNAMSIZ];
|
||||||
|
|
||||||
|
|
|
@ -224,7 +224,7 @@ static int tcf_em_validate(struct tcf_proto *tp,
|
||||||
|
|
||||||
if (em->ops == NULL) {
|
if (em->ops == NULL) {
|
||||||
err = -ENOENT;
|
err = -ENOENT;
|
||||||
#ifdef CONFIG_KMOD
|
#ifdef CONFIG_MODULES
|
||||||
__rtnl_unlock();
|
__rtnl_unlock();
|
||||||
request_module("ematch-kind-%u", em_hdr->kind);
|
request_module("ematch-kind-%u", em_hdr->kind);
|
||||||
rtnl_lock();
|
rtnl_lock();
|
||||||
|
|
|
@ -764,7 +764,7 @@ qdisc_create(struct net_device *dev, struct netdev_queue *dev_queue,
|
||||||
struct qdisc_size_table *stab;
|
struct qdisc_size_table *stab;
|
||||||
|
|
||||||
ops = qdisc_lookup_ops(kind);
|
ops = qdisc_lookup_ops(kind);
|
||||||
#ifdef CONFIG_KMOD
|
#ifdef CONFIG_MODULES
|
||||||
if (ops == NULL && kind != NULL) {
|
if (ops == NULL && kind != NULL) {
|
||||||
char name[IFNAMSIZ];
|
char name[IFNAMSIZ];
|
||||||
if (nla_strlcpy(name, kind, IFNAMSIZ) < IFNAMSIZ) {
|
if (nla_strlcpy(name, kind, IFNAMSIZ) < IFNAMSIZ) {
|
||||||
|
|
|
@ -1142,7 +1142,7 @@ static int __sock_create(struct net *net, int family, int type, int protocol,
|
||||||
|
|
||||||
sock->type = type;
|
sock->type = type;
|
||||||
|
|
||||||
#if defined(CONFIG_KMOD)
|
#ifdef CONFIG_MODULES
|
||||||
/* Attempt to load a protocol module if the find failed.
|
/* Attempt to load a protocol module if the find failed.
|
||||||
*
|
*
|
||||||
* 12/09/1996 Marcin: But! this makes REALLY only sense, if the user
|
* 12/09/1996 Marcin: But! this makes REALLY only sense, if the user
|
||||||
|
|
|
@ -83,10 +83,8 @@ rpcauth_create(rpc_authflavor_t pseudoflavor, struct rpc_clnt *clnt)
|
||||||
if (flavor >= RPC_AUTH_MAXFLAVOR)
|
if (flavor >= RPC_AUTH_MAXFLAVOR)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
#ifdef CONFIG_KMOD
|
|
||||||
if ((ops = auth_flavors[flavor]) == NULL)
|
if ((ops = auth_flavors[flavor]) == NULL)
|
||||||
request_module("rpc-auth-%u", flavor);
|
request_module("rpc-auth-%u", flavor);
|
||||||
#endif
|
|
||||||
spin_lock(&rpc_authflavor_lock);
|
spin_lock(&rpc_authflavor_lock);
|
||||||
ops = auth_flavors[flavor];
|
ops = auth_flavors[flavor];
|
||||||
if (ops == NULL || !try_module_get(ops->owner)) {
|
if (ops == NULL || !try_module_get(ops->owner)) {
|
||||||
|
|
Loading…
Reference in New Issue