Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
linux-davinci
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
linux
linux-davinci
Commits
0344f1c6
Commit
0344f1c6
authored
Jun 19, 2008
by
David S. Miller
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
Conflicts: net/mac80211/tx.c
parents
dad9b335
ef3a62d2
Changes
20
Show whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
307 additions
and
272 deletions
+307
-272
drivers/net/atlx/atl1.c
drivers/net/atlx/atl1.c
+0
-1
drivers/net/enc28j60.c
drivers/net/enc28j60.c
+60
-27
drivers/net/ibm_newemac/Kconfig
drivers/net/ibm_newemac/Kconfig
+1
-0
drivers/net/netxen/netxen_nic.h
drivers/net/netxen/netxen_nic.h
+1
-17
drivers/net/netxen/netxen_nic_ethtool.c
drivers/net/netxen/netxen_nic_ethtool.c
+3
-3
drivers/net/netxen/netxen_nic_hw.c
drivers/net/netxen/netxen_nic_hw.c
+48
-64
drivers/net/netxen/netxen_nic_init.c
drivers/net/netxen/netxen_nic_init.c
+21
-25
drivers/net/netxen/netxen_nic_isr.c
drivers/net/netxen/netxen_nic_isr.c
+2
-2
drivers/net/netxen/netxen_nic_main.c
drivers/net/netxen/netxen_nic_main.c
+41
-92
drivers/net/netxen/netxen_nic_niu.c
drivers/net/netxen/netxen_nic_niu.c
+11
-11
drivers/net/sky2.c
drivers/net/sky2.c
+1
-0
drivers/net/tun.c
drivers/net/tun.c
+15
-0
include/net/netfilter/nf_conntrack_extend.h
include/net/netfilter/nf_conntrack_extend.h
+1
-0
net/ipv4/netfilter/nf_nat_core.c
net/ipv4/netfilter/nf_nat_core.c
+1
-2
net/ipv4/xfrm4_mode_tunnel.c
net/ipv4/xfrm4_mode_tunnel.c
+1
-1
net/mac80211/tx.c
net/mac80211/tx.c
+1
-1
net/netfilter/nf_conntrack_extend.c
net/netfilter/nf_conntrack_extend.c
+8
-1
net/netfilter/nf_conntrack_h323_main.c
net/netfilter/nf_conntrack_h323_main.c
+15
-7
net/netlink/genetlink.c
net/netlink/genetlink.c
+6
-9
net/unix/af_unix.c
net/unix/af_unix.c
+70
-9
No files found.
drivers/net/atlx/atl1.c
View file @
0344f1c6
...
...
@@ -471,7 +471,6 @@ static int atl1_get_permanent_address(struct atl1_hw *hw)
memcpy
(
hw
->
perm_mac_addr
,
eth_addr
,
ETH_ALEN
);
return
0
;
}
return
1
;
}
/* see if SPI FLAGS exist ? */
...
...
drivers/net/enc28j60.c
View file @
0344f1c6
...
...
@@ -400,26 +400,31 @@ enc28j60_packet_write(struct enc28j60_net *priv, int len, const u8 *data)
mutex_unlock
(
&
priv
->
lock
);
}
/*
* Wait until the PHY operation is complete.
*/
static
int
wait_phy_ready
(
struct
enc28j60_net
*
priv
)
static
unsigned
long
msec20_to_jiffies
;
static
int
poll_ready
(
struct
enc28j60_net
*
priv
,
u8
reg
,
u8
mask
,
u8
val
)
{
unsigned
long
timeout
=
jiffies
+
20
*
HZ
/
1000
;
int
ret
=
1
;
unsigned
long
timeout
=
jiffies
+
msec20_to_jiffies
;
/* 20 msec timeout read */
while
(
nolock_regb_read
(
priv
,
MISTAT
)
&
MISTAT_BUSY
)
{
while
(
(
nolock_regb_read
(
priv
,
reg
)
&
mask
)
!=
val
)
{
if
(
time_after
(
jiffies
,
timeout
))
{
if
(
netif_msg_drv
(
priv
))
printk
(
KERN_DEBUG
DRV_NAME
": PHY ready timeout!
\n
"
);
ret
=
0
;
break
;
dev_dbg
(
&
priv
->
spi
->
dev
,
"reg %02x ready timeout!
\n
"
,
reg
);
return
-
ETIMEDOUT
;
}
cpu_relax
();
}
return
ret
;
return
0
;
}
/*
* Wait until the PHY operation is complete.
*/
static
int
wait_phy_ready
(
struct
enc28j60_net
*
priv
)
{
return
poll_ready
(
priv
,
MISTAT
,
MISTAT_BUSY
,
0
)
?
0
:
1
;
}
/*
...
...
@@ -594,6 +599,32 @@ static void nolock_txfifo_init(struct enc28j60_net *priv, u16 start, u16 end)
nolock_regw_write
(
priv
,
ETXNDL
,
end
);
}
/*
* Low power mode shrinks power consumption about 100x, so we'd like
* the chip to be in that mode whenever it's inactive. (However, we
* can't stay in lowpower mode during suspend with WOL active.)
*/
static
void
enc28j60_lowpower
(
struct
enc28j60_net
*
priv
,
bool
is_low
)
{
if
(
netif_msg_drv
(
priv
))
dev_dbg
(
&
priv
->
spi
->
dev
,
"%s power...
\n
"
,
is_low
?
"low"
:
"high"
);
mutex_lock
(
&
priv
->
lock
);
if
(
is_low
)
{
nolock_reg_bfclr
(
priv
,
ECON1
,
ECON1_RXEN
);
poll_ready
(
priv
,
ESTAT
,
ESTAT_RXBUSY
,
0
);
poll_ready
(
priv
,
ECON1
,
ECON1_TXRTS
,
0
);
/* ECON2_VRPS was set during initialization */
nolock_reg_bfset
(
priv
,
ECON2
,
ECON2_PWRSV
);
}
else
{
nolock_reg_bfclr
(
priv
,
ECON2
,
ECON2_PWRSV
);
poll_ready
(
priv
,
ESTAT
,
ESTAT_CLKRDY
,
ESTAT_CLKRDY
);
/* caller sets ECON1_RXEN */
}
mutex_unlock
(
&
priv
->
lock
);
}
static
int
enc28j60_hw_init
(
struct
enc28j60_net
*
priv
)
{
u8
reg
;
...
...
@@ -612,8 +643,8 @@ static int enc28j60_hw_init(struct enc28j60_net *priv)
priv
->
tx_retry_count
=
0
;
priv
->
max_pk_counter
=
0
;
priv
->
rxfilter
=
RXFILTER_NORMAL
;
/* enable address auto increment */
nolock_regb_write
(
priv
,
ECON2
,
ECON2_AUTOINC
);
/* enable address auto increment
and voltage regulator powersave
*/
nolock_regb_write
(
priv
,
ECON2
,
ECON2_AUTOINC
|
ECON2_VRPS
);
nolock_rxfifo_init
(
priv
,
RXSTART_INIT
,
RXEND_INIT
);
nolock_txfifo_init
(
priv
,
TXSTART_INIT
,
TXEND_INIT
);
...
...
@@ -690,7 +721,7 @@ static int enc28j60_hw_init(struct enc28j60_net *priv)
static
void
enc28j60_hw_enable
(
struct
enc28j60_net
*
priv
)
{
/* enable interru
tp
s */
/* enable interru
pt
s */
if
(
netif_msg_hw
(
priv
))
printk
(
KERN_DEBUG
DRV_NAME
": %s() enabling interrupts.
\n
"
,
__FUNCTION__
);
...
...
@@ -726,15 +757,12 @@ enc28j60_setlink(struct net_device *ndev, u8 autoneg, u16 speed, u8 duplex)
int
ret
=
0
;
if
(
!
priv
->
hw_enable
)
{
if
(
autoneg
==
AUTONEG_DISABLE
&&
speed
==
SPEED_10
)
{
/* link is in low power mode now; duplex setting
* will take effect on next enc28j60_hw_init().
*/
if
(
autoneg
==
AUTONEG_DISABLE
&&
speed
==
SPEED_10
)
priv
->
full_duplex
=
(
duplex
==
DUPLEX_FULL
);
if
(
!
enc28j60_hw_init
(
priv
))
{
if
(
netif_msg_drv
(
priv
))
dev_err
(
&
ndev
->
dev
,
"hw_reset() failed
\n
"
);
ret
=
-
EINVAL
;
}
}
else
{
else
{
if
(
netif_msg_link
(
priv
))
dev_warn
(
&
ndev
->
dev
,
"unsupported link setting
\n
"
);
...
...
@@ -1307,7 +1335,8 @@ static int enc28j60_net_open(struct net_device *dev)
}
return
-
EADDRNOTAVAIL
;
}
/* Reset the hardware here */
/* Reset the hardware here (and take it out of low power mode) */
enc28j60_lowpower
(
priv
,
false
);
enc28j60_hw_disable
(
priv
);
if
(
!
enc28j60_hw_init
(
priv
))
{
if
(
netif_msg_ifup
(
priv
))
...
...
@@ -1337,6 +1366,7 @@ static int enc28j60_net_close(struct net_device *dev)
printk
(
KERN_DEBUG
DRV_NAME
": %s() enter
\n
"
,
__FUNCTION__
);
enc28j60_hw_disable
(
priv
);
enc28j60_lowpower
(
priv
,
true
);
netif_stop_queue
(
dev
);
return
0
;
...
...
@@ -1537,6 +1567,8 @@ static int __devinit enc28j60_probe(struct spi_device *spi)
dev
->
watchdog_timeo
=
TX_TIMEOUT
;
SET_ETHTOOL_OPS
(
dev
,
&
enc28j60_ethtool_ops
);
enc28j60_lowpower
(
priv
,
true
);
ret
=
register_netdev
(
dev
);
if
(
ret
)
{
if
(
netif_msg_probe
(
priv
))
...
...
@@ -1556,7 +1588,7 @@ error_alloc:
return
ret
;
}
static
int
enc28j60_remove
(
struct
spi_device
*
spi
)
static
int
__devexit
enc28j60_remove
(
struct
spi_device
*
spi
)
{
struct
enc28j60_net
*
priv
=
dev_get_drvdata
(
&
spi
->
dev
);
...
...
@@ -1573,7 +1605,6 @@ static int enc28j60_remove(struct spi_device *spi)
static
struct
spi_driver
enc28j60_driver
=
{
.
driver
=
{
.
name
=
DRV_NAME
,
.
bus
=
&
spi_bus_type
,
.
owner
=
THIS_MODULE
,
},
.
probe
=
enc28j60_probe
,
...
...
@@ -1582,6 +1613,8 @@ static struct spi_driver enc28j60_driver = {
static
int
__init
enc28j60_init
(
void
)
{
msec20_to_jiffies
=
msecs_to_jiffies
(
20
);
return
spi_register_driver
(
&
enc28j60_driver
);
}
...
...
drivers/net/ibm_newemac/Kconfig
View file @
0344f1c6
config IBM_NEW_EMAC
tristate "IBM EMAC Ethernet support"
depends on PPC_DCR && PPC_MERGE
select CRC32
help
This driver supports the IBM EMAC family of Ethernet controllers
typically found on 4xx embedded PowerPC chips, but also on the
...
...
drivers/net/netxen/netxen_nic.h
View file @
0344f1c6
...
...
@@ -776,7 +776,6 @@ struct netxen_hardware_context {
u8
revision_id
;
u16
board_type
;
u16
max_ports
;
struct
netxen_board_info
boardcfg
;
u32
xg_linkup
;
u32
qg_linksup
;
...
...
@@ -863,6 +862,7 @@ struct netxen_adapter {
unsigned
char
mac_addr
[
ETH_ALEN
];
int
mtu
;
int
portnum
;
u8
physical_port
;
struct
work_struct
watchdog_task
;
struct
timer_list
watchdog_timer
;
...
...
@@ -1034,7 +1034,6 @@ int netxen_rom_se(struct netxen_adapter *adapter, int addr);
/* Functions from netxen_nic_isr.c */
void
netxen_initialize_adapter_sw
(
struct
netxen_adapter
*
adapter
);
void
netxen_initialize_adapter_hw
(
struct
netxen_adapter
*
adapter
);
void
*
netxen_alloc
(
struct
pci_dev
*
pdev
,
size_t
sz
,
dma_addr_t
*
ptr
,
struct
pci_dev
**
used_dev
);
void
netxen_initialize_adapter_ops
(
struct
netxen_adapter
*
adapter
);
...
...
@@ -1077,20 +1076,6 @@ static const struct netxen_brdinfo netxen_boards[] = {
#define NUM_SUPPORTED_BOARDS ARRAY_SIZE(netxen_boards)
static
inline
void
get_brd_port_by_type
(
u32
type
,
int
*
ports
)
{
int
i
,
found
=
0
;
for
(
i
=
0
;
i
<
NUM_SUPPORTED_BOARDS
;
++
i
)
{
if
(
netxen_boards
[
i
].
brdtype
==
type
)
{
*
ports
=
netxen_boards
[
i
].
ports
;
found
=
1
;
break
;
}
}
if
(
!
found
)
*
ports
=
0
;
}
static
inline
void
get_brd_name_by_type
(
u32
type
,
char
*
name
)
{
int
i
,
found
=
0
;
...
...
@@ -1169,5 +1154,4 @@ extern int netxen_rom_fast_read(struct netxen_adapter *adapter, int addr,
extern
struct
ethtool_ops
netxen_nic_ethtool_ops
;
extern
int
physical_port
[];
/* physical port # from virtual port.*/
#endif
/* __NETXEN_NIC_H_ */
drivers/net/netxen/netxen_nic_ethtool.c
View file @
0344f1c6
...
...
@@ -369,7 +369,7 @@ netxen_nic_get_regs(struct net_device *dev, struct ethtool_regs *regs, void *p)
for
(
i
=
3
;
niu_registers
[
mode
].
reg
[
i
-
3
]
!=
-
1
;
i
++
)
{
/* GB: port specific registers */
if
(
mode
==
0
&&
i
>=
19
)
window
=
physical_port
[
adapter
->
portnum
]
*
window
=
adapter
->
physical_port
*
NETXEN_NIC_PORT_WINDOW
;
NETXEN_NIC_LOCKED_READ_REG
(
niu_registers
[
mode
].
...
...
@@ -527,7 +527,7 @@ netxen_nic_get_pauseparam(struct net_device *dev,
{
struct
netxen_adapter
*
adapter
=
netdev_priv
(
dev
);
__u32
val
;
int
port
=
physical_port
[
adapter
->
portnum
]
;
int
port
=
adapter
->
physical_port
;
if
(
adapter
->
ahw
.
board_type
==
NETXEN_NIC_GBE
)
{
if
((
port
<
0
)
||
(
port
>
NETXEN_NIU_MAX_GBE_PORTS
))
...
...
@@ -573,7 +573,7 @@ netxen_nic_set_pauseparam(struct net_device *dev,
{
struct
netxen_adapter
*
adapter
=
netdev_priv
(
dev
);
__u32
val
;
int
port
=
physical_port
[
adapter
->
portnum
]
;
int
port
=
adapter
->
physical_port
;
/* read mode */
if
(
adapter
->
ahw
.
board_type
==
NETXEN_NIC_GBE
)
{
if
((
port
<
0
)
||
(
port
>
NETXEN_NIU_MAX_GBE_PORTS
))
...
...
drivers/net/netxen/netxen_nic_hw.c
View file @
0344f1c6
...
...
@@ -396,11 +396,8 @@ int netxen_nic_hw_resources(struct netxen_adapter *adapter)
}
adapter
->
intr_scheme
=
readl
(
NETXEN_CRB_NORMALIZE
(
adapter
,
CRB_NIC_CAPABILITIES_FW
));
printk
(
KERN_NOTICE
"%s: FW capabilities:0x%x
\n
"
,
netxen_nic_driver_name
,
adapter
->
intr_scheme
);
adapter
->
msi_mode
=
readl
(
NETXEN_CRB_NORMALIZE
(
adapter
,
CRB_NIC_MSI_MODE_FW
));
DPRINTK
(
INFO
,
"Receive Peg ready too. starting stuff
\n
"
);
addr
=
netxen_alloc
(
adapter
->
ahw
.
pdev
,
sizeof
(
struct
netxen_ring_ctx
)
+
...
...
@@ -408,8 +405,6 @@ int netxen_nic_hw_resources(struct netxen_adapter *adapter)
(
dma_addr_t
*
)
&
adapter
->
ctx_desc_phys_addr
,
&
adapter
->
ctx_desc_pdev
);
printk
(
KERN_INFO
"ctx_desc_phys_addr: 0x%llx
\n
"
,
(
unsigned
long
long
)
adapter
->
ctx_desc_phys_addr
);
if
(
addr
==
NULL
)
{
DPRINTK
(
ERR
,
"bad return from pci_alloc_consistent
\n
"
);
err
=
-
ENOMEM
;
...
...
@@ -429,8 +424,6 @@ int netxen_nic_hw_resources(struct netxen_adapter *adapter)
adapter
->
max_tx_desc_count
,
(
dma_addr_t
*
)
&
hw
->
cmd_desc_phys_addr
,
&
adapter
->
ahw
.
cmd_desc_pdev
);
printk
(
KERN_INFO
"cmd_desc_phys_addr: 0x%llx
\n
"
,
(
unsigned
long
long
)
hw
->
cmd_desc_phys_addr
);
if
(
addr
==
NULL
)
{
DPRINTK
(
ERR
,
"bad return from pci_alloc_consistent
\n
"
);
...
...
@@ -1032,15 +1025,15 @@ int netxen_nic_get_board_info(struct netxen_adapter *adapter)
int
netxen_nic_set_mtu_gb
(
struct
netxen_adapter
*
adapter
,
int
new_mtu
)
{
netxen_nic_write_w0
(
adapter
,
NETXEN_NIU_GB_MAX_FRAME_SIZE
(
physical_port
[
adapter
->
portnum
]),
new_mtu
);
NETXEN_NIU_GB_MAX_FRAME_SIZE
(
adapter
->
physical_port
),
new_mtu
);
return
0
;
}
int
netxen_nic_set_mtu_xgb
(
struct
netxen_adapter
*
adapter
,
int
new_mtu
)
{
new_mtu
+=
NETXEN_NIU_HDRSIZE
+
NETXEN_NIU_TLRSIZE
;
if
(
physical_port
[
adapter
->
portnum
]
==
0
)
if
(
adapter
->
physical_port
==
0
)
netxen_nic_write_w0
(
adapter
,
NETXEN_NIU_XGE_MAX_FRAME_SIZE
,
new_mtu
);
else
...
...
@@ -1051,7 +1044,7 @@ int netxen_nic_set_mtu_xgb(struct netxen_adapter *adapter, int new_mtu)
void
netxen_nic_init_niu_gb
(
struct
netxen_adapter
*
adapter
)
{
netxen_niu_gbe_init_port
(
adapter
,
physical_port
[
adapter
->
portnum
]
);
netxen_niu_gbe_init_port
(
adapter
,
adapter
->
physical_port
);
}
void
...
...
@@ -1127,7 +1120,6 @@ void netxen_nic_set_link_parameters(struct netxen_adapter *adapter)
void
netxen_nic_flash_print
(
struct
netxen_adapter
*
adapter
)
{
int
valid
=
1
;
u32
fw_major
=
0
;
u32
fw_minor
=
0
;
u32
fw_build
=
0
;
...
...
@@ -1137,19 +1129,9 @@ void netxen_nic_flash_print(struct netxen_adapter *adapter)
__le32
*
ptr32
;
struct
netxen_board_info
*
board_info
=
&
(
adapter
->
ahw
.
boardcfg
);
if
(
board_info
->
magic
!=
NETXEN_BDINFO_MAGIC
)
{
printk
(
"NetXen Unknown board config, Read 0x%x expected as 0x%x
\n
"
,
board_info
->
magic
,
NETXEN_BDINFO_MAGIC
);
valid
=
0
;
}
if
(
board_info
->
header_version
!=
NETXEN_BDINFO_VERSION
)
{
printk
(
"NetXen Unknown board config version."
" Read %x, expected %x
\n
"
,
board_info
->
header_version
,
NETXEN_BDINFO_VERSION
);
valid
=
0
;
}
if
(
valid
)
{
adapter
->
driver_mismatch
=
0
;
ptr32
=
(
u32
*
)
&
serial_num
;
addr
=
NETXEN_USER_START
+
offsetof
(
struct
netxen_new_user_info
,
serial_num
);
...
...
@@ -1158,20 +1140,13 @@ void netxen_nic_flash_print(struct netxen_adapter *adapter)
printk
(
"%s: ERROR reading %s board userarea.
\n
"
,
netxen_nic_driver_name
,
netxen_nic_driver_name
);
adapter
->
driver_mismatch
=
1
;
return
;
}
ptr32
++
;
addr
+=
sizeof
(
u32
);
}
get_brd_name_by_type
(
board_info
->
board_type
,
brd_name
);
printk
(
"NetXen %s Board S/N %s Chip id 0x%x
\n
"
,
brd_name
,
serial_num
,
board_info
->
chip_id
);
printk
(
"NetXen %s Board #%d, Chip id 0x%x
\n
"
,
board_info
->
board_type
==
0x0b
?
"XGB"
:
"GBE"
,
board_info
->
board_num
,
board_info
->
chip_id
);
fw_major
=
readl
(
NETXEN_CRB_NORMALIZE
(
adapter
,
NETXEN_FW_VERSION_MAJOR
));
fw_minor
=
readl
(
NETXEN_CRB_NORMALIZE
(
adapter
,
...
...
@@ -1179,28 +1154,37 @@ void netxen_nic_flash_print(struct netxen_adapter *adapter)
fw_build
=
readl
(
NETXEN_CRB_NORMALIZE
(
adapter
,
NETXEN_FW_VERSION_SUB
));
printk
(
"NetXen Firmware version %d.%d.%d
\n
"
,
fw_major
,
fw_minor
,
fw_build
);
if
(
adapter
->
portnum
==
0
)
{
get_brd_name_by_type
(
board_info
->
board_type
,
brd_name
);
printk
(
"NetXen %s Board S/N %s Chip id 0x%x
\n
"
,
brd_name
,
serial_num
,
board_info
->
chip_id
);
printk
(
"NetXen Firmware version %d.%d.%d
\n
"
,
fw_major
,
fw_minor
,
fw_build
);
}
if
(
fw_major
!=
_NETXEN_NIC_LINUX_MAJOR
)
{
printk
(
KERN_ERR
"The mismatch in driver version and firmware "
"version major number
\n
"
"Driver version major number = %d
\t
"
"Firmware version major number = %d
\n
"
,
_NETXEN_NIC_LINUX_MAJOR
,
fw_major
);
adapter
->
driver_mismatch
=
1
;
}
if
(
fw_minor
!=
_NETXEN_NIC_LINUX_MINOR
&&
fw_minor
!=
(
_NETXEN_NIC_LINUX_MINOR
+
1
))
{
printk
(
KERN_ERR
"The mismatch in driver version and firmware "
"version minor number
\n
"
"Driver version minor number = %d
\t
"
"Firmware version minor number = %d
\n
"
,
_NETXEN_NIC_LINUX_MINOR
,
fw_minor
);
adapter
->
driver_mismatch
=
1
;
}
if
(
adapter
->
driver_mismatch
)
printk
(
KERN_INFO
"Use the driver with version no %d.%d.xxx
\n
"
,
fw_major
,
fw_minor
);
if
(
adapter
->
driver_mismatch
)
{
printk
(
KERN_ERR
"%s: driver and firmware version mismatch
\n
"
,
adapter
->
netdev
->
name
);
return
;
}
switch
(
adapter
->
ahw
.
board_type
)
{
case
NETXEN_NIC_GBE
:
dev_info
(
&
adapter
->
pdev
->
dev
,
"%s: GbE port initialized
\n
"
,
adapter
->
netdev
->
name
);
break
;
case
NETXEN_NIC_XGBE
:
dev_info
(
&
adapter
->
pdev
->
dev
,
"%s: XGbE port initialized
\n
"
,
adapter
->
netdev
->
name
);
break
;
}
}
drivers/net/netxen/netxen_nic_init.c
View file @
0344f1c6
...
...
@@ -203,21 +203,6 @@ void netxen_initialize_adapter_sw(struct netxen_adapter *adapter)
}
}
void
netxen_initialize_adapter_hw
(
struct
netxen_adapter
*
adapter
)
{
int
ports
=
0
;
struct
netxen_board_info
*
board_info
=
&
(
adapter
->
ahw
.
boardcfg
);
if
(
netxen_nic_get_board_info
(
adapter
)
!=
0
)
printk
(
"%s: Error getting board config info.
\n
"
,
netxen_nic_driver_name
);
get_brd_port_by_type
(
board_info
->
board_type
,
&
ports
);
if
(
ports
==
0
)
printk
(
KERN_ERR
"%s: Unknown board type
\n
"
,
netxen_nic_driver_name
);
adapter
->
ahw
.
max_ports
=
ports
;
}
void
netxen_initialize_adapter_ops
(
struct
netxen_adapter
*
adapter
)
{
switch
(
adapter
->
ahw
.
board_type
)
{
...
...
@@ -765,18 +750,13 @@ int netxen_flash_unlock(struct netxen_adapter *adapter)
int
netxen_pinit_from_rom
(
struct
netxen_adapter
*
adapter
,
int
verbose
)
{
int
addr
,
val
,
status
;
int
addr
,
val
;
int
n
,
i
;
int
init_delay
=
0
;
struct
crb_addr_pair
*
buf
;
u32
off
;
/* resetall */
status
=
netxen_nic_get_board_info
(
adapter
);
if
(
status
)
printk
(
"%s: netxen_pinit_from_rom: Error getting board info
\n
"
,
netxen_nic_driver_name
);
netxen_crb_writelit_adapter
(
adapter
,
NETXEN_ROMUSB_GLB_SW_RESET
,
NETXEN_ROMBUS_RESET
);
...
...
@@ -860,10 +840,10 @@ int netxen_pinit_from_rom(struct netxen_adapter *adapter, int verbose)
netxen_nic_pci_change_crbwindow
(
adapter
,
1
);
}
if
(
init_delay
==
1
)
{
msleep
(
2
000
);
msleep
(
1
000
);
init_delay
=
0
;
}
msleep
(
20
);
msleep
(
1
);
}
kfree
(
buf
);
...
...
@@ -938,12 +918,28 @@ int netxen_initialize_adapter_offload(struct netxen_adapter *adapter)
void
netxen_free_adapter_offload
(
struct
netxen_adapter
*
adapter
)
{
int
i
;
if
(
adapter
->
dummy_dma
.
addr
)
{
i
=
100
;
do
{
if
(
dma_watchdog_shutdown_request
(
adapter
)
==
1
)
break
;
msleep
(
50
);
if
(
dma_watchdog_shutdown_poll_result
(
adapter
)
==
1
)
break
;
}
while
(
--
i
);
if
(
i
)
{
pci_free_consistent
(
adapter
->
ahw
.
pdev
,
NETXEN_HOST_DUMMY_DMA_SIZE
,
adapter
->
dummy_dma
.
addr
,
adapter
->
dummy_dma
.
phys_addr
);
adapter
->
dummy_dma
.
addr
=
NULL
;
}
else
{
printk
(
KERN_ERR
"%s: dma_watchdog_shutdown failed
\n
"
,
adapter
->
netdev
->
name
);
}
}
}
...
...
drivers/net/netxen/netxen_nic_isr.c
View file @
0344f1c6
...
...
@@ -145,7 +145,7 @@ static void netxen_nic_isr_other(struct netxen_adapter *adapter)
/* verify the offset */
val
=
readl
(
NETXEN_CRB_NORMALIZE
(
adapter
,
CRB_XG_STATE
));
val
=
val
>>
physical_port
[
adapter
->
portnum
]
;
val
=
val
>>
adapter
->
physical_port
;
if
(
val
==
adapter
->
ahw
.
qg_linksup
)
return
;
...
...
@@ -199,7 +199,7 @@ void netxen_nic_xgbe_handle_phy_intr(struct netxen_adapter *adapter)
/* WINDOW = 1 */
val
=
readl
(
NETXEN_CRB_NORMALIZE
(
adapter
,
CRB_XG_STATE
));
val
>>=
(
physical_port
[
adapter
->
portnum
]
*
8
);
val
>>=
(
adapter
->
physical_port
*
8
);
val
&=
0xff
;
if
(
adapter
->
ahw
.
xg_linkup
==
1
&&
val
!=
XG_LINK_UP
)
{
...
...
drivers/net/netxen/netxen_nic_main.c
View file @
0344f1c6
...
...
@@ -70,17 +70,15 @@ static void netxen_nic_poll_controller(struct net_device *netdev);
static
irqreturn_t
netxen_intr
(
int
irq
,
void
*
data
);
static
irqreturn_t
netxen_msi_intr
(
int
irq
,
void
*
data
);
int
physical_port
[]
=
{
0
,
1
,
2
,
3
};
/* PCI Device ID Table */
static
struct
pci_device_id
netxen_pci_tbl
[]
__devinitdata
=
{
{
PCI_DEVICE
(
0x4040
,
0x0001
)},
{
PCI_DEVICE
(
0x4040
,
0x0002
)},
{
PCI_DEVICE
(
0x4040
,
0x0003
)},
{
PCI_DEVICE
(
0x4040
,
0x0004
)},
{
PCI_DEVICE
(
0x4040
,
0x0005
)},
{
PCI_DEVICE
(
0x4040
,
0x0024
)},
{
PCI_DEVICE
(
0x4040
,
0x0025
)},
{
PCI_DEVICE
(
0x4040
,
0x0001
)
,
PCI_DEVICE_CLASS
(
0x020000
,
~
0
)
},
{
PCI_DEVICE
(
0x4040
,
0x0002
)
,
PCI_DEVICE_CLASS
(
0x020000
,
~
0
)
},
{
PCI_DEVICE
(
0x4040
,
0x0003
)
,
PCI_DEVICE_CLASS
(
0x020000
,
~
0
)
},
{
PCI_DEVICE
(
0x4040
,
0x0004
)
,
PCI_DEVICE_CLASS
(
0x020000
,
~
0
)
},
{
PCI_DEVICE
(
0x4040
,
0x0005
)
,
PCI_DEVICE_CLASS
(
0x020000
,
~
0
)
},
{
PCI_DEVICE
(
0x4040
,
0x0024
)
,
PCI_DEVICE_CLASS
(
0x020000
,
~
0
)
},
{
PCI_DEVICE
(
0x4040
,
0x0025
)
,
PCI_DEVICE_CLASS
(
0x020000
,
~
0
)
},
{
0
,}
};
...
...
@@ -288,10 +286,11 @@ netxen_nic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
int
pci_func_id
=
PCI_FUNC
(
pdev
->
devfn
);
DECLARE_MAC_BUF
(
mac
);
if
(
pci_func_id
==
0
)
printk
(
KERN_INFO
"%s
\n
"
,
netxen_nic_driver_string
);
if
(
pdev
->
class
!=
0x020000
)
{
printk
(
KERN_
ERR
"NetXen function %d, class %x will not "
printk
(
KERN_
DEBUG
"NetXen function %d, class %x will not "
"be enabled.
\n
"
,
pci_func_id
,
pdev
->
class
);
return
-
ENODEV
;
}
...
...
@@ -450,8 +449,12 @@ netxen_nic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
*/
adapter
->
curr_window
=
255
;
/* initialize the adapter */
netxen_initialize_adapter_hw
(
adapter
);
if
(
netxen_nic_get_board_info
(
adapter
)
!=
0
)
{
printk
(
"%s: Error getting board config info.
\n
"
,
netxen_nic_driver_name
);
err
=
-
EIO
;
goto
err_out_iounmap
;
}
/*
* Adapter in our case is quad port so initialize it before
...
...
@@ -530,17 +533,15 @@ netxen_nic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
netxen_initialize_adapter_sw
(
adapter
);
/* initialize the buffers in adapter */
/* Mezz cards have PCI function 0,2,3 enabled */
if
((
adapter
->
ahw
.
boardcfg
.
board_type
==
NETXEN_BRDTYPE_P2_SB31_10G_IMEZ
)
&&
(
pci_func_id
>=
2
))
switch
(
adapter
->
ahw
.
boardcfg
.
board_type
)
{
case
NETXEN_BRDTYPE_P2_SB31_10G_IMEZ
:
case
NETXEN_BRDTYPE_P2_SB31_10G_HMEZ
:
if
(
pci_func_id
>=
2
)
adapter
->
portnum
=
pci_func_id
-
2
;
#ifdef CONFIG_IA64
if
(
adapter
->
portnum
==
0
)
{
netxen_pinit_from_rom
(
adapter
,
0
);
udelay
(
500
);
netxen_load_firmware
(
adapter
);
break
;
default:
break
;
}
#endif
init_timer
(
&
adapter
->
watchdog_timer
);
adapter
->
ahw
.
xg_linkup
=
0
;
...
...
@@ -613,11 +614,18 @@ netxen_nic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
err
=
-
ENODEV
;
goto
err_out_free_dev
;
}
}
else
{
writel
(
0
,
NETXEN_CRB_NORMALIZE
(
adapter
,
CRB_CMDPEG_STATE
));
netxen_pinit_from_rom
(
adapter
,
0
);
msleep
(
1
);
netxen_load_firmware
(
adapter
);
netxen_phantom_init
(
adapter
,
NETXEN_NIC_PEG_TUNE
);
}
/* clear the register for future unloads/loads */
writel
(
0
,
NETXEN_CRB_NORMALIZE
(
adapter
,
NETXEN_CAM_RAM
(
0x1fc
)));
printk
(
KERN_INFO
"S
tate: 0x%0x
\n
"
,
dev_info
(
&
pdev
->
dev
,
"cmdpeg s
tate: 0x%0x
\n
"
,
readl
(
NETXEN_CRB_NORMALIZE
(
adapter
,
CRB_CMDPEG_STATE
)));
/*
...
...
@@ -639,9 +647,10 @@ netxen_nic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
/*
* See if the firmware gave us a virtual-physical port mapping.
*/
adapter
->
physical_port
=
adapter
->
portnum
;
i
=
readl
(
NETXEN_CRB_NORMALIZE
(
adapter
,
CRB_V2P
(
adapter
->
portnum
)));
if
(
i
!=
0x55555555
)
physical_port
[
adapter
->
portnum
]
=
i
;
adapter
->
physical_port
=
i
;
netif_carrier_off
(
netdev
);
netif_stop_queue
(
netdev
);
...
...
@@ -654,22 +663,9 @@ netxen_nic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
goto
err_out_free_dev
;
}
netxen_nic_flash_print
(
adapter
);
pci_set_drvdata
(
pdev
,
adapter
);
switch
(
adapter
->
ahw
.
board_type
)
{
case
NETXEN_NIC_GBE
:
printk
(
KERN_INFO
"%s: QUAD GbE board initialized
\n
"
,
netxen_nic_driver_name
);
break
;
case
NETXEN_NIC_XGBE
:
printk
(
KERN_INFO
"%s: XGbE board initialized
\n
"
,
netxen_nic_driver_name
);
break
;
}
adapter
->
driver_mismatch
=
0
;
return
0
;
err_out_free_dev:
...
...
@@ -760,55 +756,8 @@ static void __devexit netxen_nic_remove(struct pci_dev *pdev)
vfree
(
adapter
->
cmd_buf_arr
);
if
(
adapter
->
portnum
==
0
)
{
if
(
init_firmware_done
)
{
i
=
100
;
do
{
if
(
dma_watchdog_shutdown_request
(
adapter
)
==
1
)
break
;
msleep
(
100
);
if
(
dma_watchdog_shutdown_poll_result
(
adapter
)
==
1
)
break
;
}
while
(
--
i
);
if
(
i
==
0
)
printk
(
KERN_ERR
"%s: dma_watchdog_shutdown failed
\n
"
,
netdev
->
name
);
/* clear the register for future unloads/loads */
writel
(
0
,
NETXEN_CRB_NORMALIZE
(
adapter
,
NETXEN_CAM_RAM
(
0x1fc
)));
printk
(
KERN_INFO
"State: 0x%0x
\n
"
,
readl
(
NETXEN_CRB_NORMALIZE
(
adapter
,
CRB_CMDPEG_STATE
)));
/* leave the hw in the same state as reboot */
writel
(
0
,
NETXEN_CRB_NORMALIZE
(
adapter
,
CRB_CMDPEG_STATE
));
netxen_pinit_from_rom
(
adapter
,
0
);
msleep
(
1
);
netxen_load_firmware
(
adapter
);
netxen_phantom_init
(
adapter
,
NETXEN_NIC_PEG_TUNE
);
}
/* clear the register for future unloads/loads */
writel
(
0
,
NETXEN_CRB_NORMALIZE
(
adapter
,
NETXEN_CAM_RAM
(
0x1fc
)));
printk
(
KERN_INFO
"State: 0x%0x
\n
"
,
readl
(
NETXEN_CRB_NORMALIZE
(
adapter
,
CRB_CMDPEG_STATE
)));
i
=
100
;
do
{
if
(
dma_watchdog_shutdown_request
(
adapter
)
==
1
)
break
;
msleep
(
100
);
if
(
dma_watchdog_shutdown_poll_result
(
adapter
)
==
1
)
break
;
}
while
(
--
i
);
if
(
i
)
{
if
(
adapter
->
portnum
==
0
)
netxen_free_adapter_offload
(
adapter
);
}
else
{
printk
(
KERN_ERR
"%s: dma_watchdog_shutdown failed
\n
"
,
netdev
->
name
);
}
}
if
(
adapter
->
irq
)
free_irq
(
adapter
->
irq
,
adapter
);
...
...
@@ -840,13 +789,15 @@ static int netxen_nic_open(struct net_device *netdev)
irq_handler_t
handler
;
unsigned
long
flags
=
IRQF_SAMPLE_RANDOM
;
if
(
adapter
->
driver_mismatch
)
return
-
EIO
;
if
(
adapter
->
is_up
!=
NETXEN_ADAPTER_UP_MAGIC
)
{
err
=
netxen_init_firmware
(
adapter
);
if
(
err
!=
0
)
{
printk
(
KERN_ERR
"Failed to init firmware
\n
"
);
return
-
EIO
;
}
netxen_nic_flash_print
(
adapter
);
/* setup all the resources for the Phantom... */
/* this include the descriptors for rcv, tx, and status */
...
...
@@ -895,13 +846,11 @@ static int netxen_nic_open(struct net_device *netdev)
if
(
adapter
->
set_mtu
)
adapter
->
set_mtu
(
adapter
,
netdev
->
mtu
);
if
(
!
adapter
->
driver_mismatch
)
mod_timer
(
&
adapter
->
watchdog_timer
,
jiffies
);
napi_enable
(
&
adapter
->
napi
);
netxen_nic_enable_int
(
adapter
);
if
(
!
adapter
->
driver_mismatch
)
netif_start_queue
(
netdev
);
return
0
;
...
...
drivers/net/netxen/netxen_nic_niu.c
View file @
0344f1c6
...
...
@@ -94,7 +94,7 @@ int netxen_niu_gbe_phy_read(struct netxen_adapter *adapter, long reg,
long
timeout
=
0
;
long
result
=
0
;
long
restore
=
0
;
long
phy
=
physical_port
[
adapter
->
portnum
]
;
long
phy
=
adapter
->
physical_port
;
__u32
address
;
__u32
command
;
__u32
status
;
...
...
@@ -190,7 +190,7 @@ int netxen_niu_gbe_phy_write(struct netxen_adapter *adapter, long reg,
long
timeout
=
0
;
long
result
=
0
;
long
restore
=
0
;
long
phy
=
physical_port
[
adapter
->
portnum
]
;
long
phy
=
adapter
->
physical_port
;
__u32
address
;
__u32
command
;
__u32
status
;
...
...
@@ -456,7 +456,7 @@ int netxen_niu_gbe_init_port(struct netxen_adapter *adapter, int port)
int
netxen_niu_xg_init_port
(
struct
netxen_adapter
*
adapter
,
int
port
)
{
u32
portnum
=
physical_port
[
adapter
->
portnum
]
;
u32
portnum
=
adapter
->
physical_port
;
netxen_crb_writelit_adapter
(
adapter
,
NETXEN_NIU_XGE_CONFIG_1
+
(
0x10000
*
portnum
),
0x1447
);
...
...
@@ -573,7 +573,7 @@ static int netxen_niu_macaddr_get(struct netxen_adapter *adapter,
{
u32
stationhigh
;
u32
stationlow
;
int
phy
=
physical_port
[
adapter
->
portnum
]
;
int
phy
=
adapter
->
physical_port
;
u8
val
[
8
];
if
(
addr
==
NULL
)
...
...
@@ -604,7 +604,7 @@ int netxen_niu_macaddr_set(struct netxen_adapter *adapter,
{
u8
temp
[
4
];
u32
val
;
int
phy
=
physical_port
[
adapter
->
portnum
]
;
int
phy
=
adapter
->
physical_port
;
unsigned
char
mac_addr
[
6
];
int
i
;
DECLARE_MAC_BUF
(
mac
);
...
...
@@ -724,7 +724,7 @@ int netxen_niu_enable_gbe_port(struct netxen_adapter *adapter,
int
netxen_niu_disable_gbe_port
(
struct
netxen_adapter
*
adapter
)
{
__u32
mac_cfg0
;
u32
port
=
physical_port
[
adapter
->
portnum
]
;
u32
port
=
adapter
->
physical_port
;
if
(
port
>
NETXEN_NIU_MAX_GBE_PORTS
)
return
-
EINVAL
;
...
...
@@ -740,7 +740,7 @@ int netxen_niu_disable_gbe_port(struct netxen_adapter *adapter)
int
netxen_niu_disable_xg_port
(
struct
netxen_adapter
*
adapter
)
{
__u32
mac_cfg
;
u32
port
=
physical_port
[
adapter
->
portnum
]
;
u32
port
=
adapter
->
physical_port
;
if
(
port
>
NETXEN_NIU_MAX_XG_PORTS
)
return
-
EINVAL
;
...
...
@@ -757,7 +757,7 @@ int netxen_niu_set_promiscuous_mode(struct netxen_adapter *adapter,
netxen_niu_prom_mode_t
mode
)
{
__u32
reg
;
u32
port
=
physical_port
[
adapter
->
portnum
]
;
u32
port
=
adapter
->
physical_port
;
if
(
port
>
NETXEN_NIU_MAX_GBE_PORTS
)
return
-
EINVAL
;
...
...
@@ -814,7 +814,7 @@ int netxen_niu_set_promiscuous_mode(struct netxen_adapter *adapter,
int
netxen_niu_xg_macaddr_set
(
struct
netxen_adapter
*
adapter
,
netxen_ethernet_macaddr_t
addr
)
{
int
phy
=
physical_port
[
adapter
->
portnum
]
;
int
phy
=
adapter
->
physical_port
;
u8
temp
[
4
];
u32
val
;
...
...
@@ -867,7 +867,7 @@ int netxen_niu_xg_macaddr_set(struct netxen_adapter *adapter,
int netxen_niu_xg_macaddr_get(struct netxen_adapter *adapter,
netxen_ethernet_macaddr_t * addr)
{
int phy =
physical_port[adapter->portnum]
;
int phy =
adapter->physical_port
;
u32 stationhigh;
u32 stationlow;
u8 val[8];
...
...
@@ -896,7 +896,7 @@ int netxen_niu_xg_set_promiscuous_mode(struct netxen_adapter *adapter,
netxen_niu_prom_mode_t
mode
)
{
__u32
reg
;
u32
port
=
physical_port
[
adapter
->
portnum
]
;
u32
port
=
adapter
->
physical_port
;
if
(
port
>
NETXEN_NIU_MAX_XG_PORTS
)
return
-
EINVAL
;
...
...
drivers/net/sky2.c
View file @
0344f1c6
...
...
@@ -118,6 +118,7 @@ static DEFINE_PCI_DEVICE_TABLE(sky2_id_table) = {
{
PCI_DEVICE
(
PCI_VENDOR_ID_MARVELL
,
0x4352
)
},
/* 88E8038 */
{
PCI_DEVICE
(
PCI_VENDOR_ID_MARVELL
,
0x4353
)
},
/* 88E8039 */
{
PCI_DEVICE
(
PCI_VENDOR_ID_MARVELL
,
0x4354
)
},
/* 88E8040 */
{
PCI_DEVICE
(
PCI_VENDOR_ID_MARVELL
,
0x4355
)
},
/* 88E8040T */
{
PCI_DEVICE
(
PCI_VENDOR_ID_MARVELL
,
0x4356
)
},
/* 88EC033 */
{
PCI_DEVICE
(
PCI_VENDOR_ID_MARVELL
,
0x4357
)
},
/* 88E8042 */
{
PCI_DEVICE
(
PCI_VENDOR_ID_MARVELL
,
0x435A
)
},
/* 88E8048 */
...
...
drivers/net/tun.c
View file @
0344f1c6
...
...
@@ -313,6 +313,21 @@ static __inline__ ssize_t tun_get_user(struct tun_struct *tun, struct iovec *iv,
switch
(
tun
->
flags
&
TUN_TYPE_MASK
)
{
case
TUN_TUN_DEV
:
if
(
tun
->
flags
&
TUN_NO_PI
)
{
switch
(
skb
->
data
[
0
]
&
0xf0
)
{
case
0x40
:
pi
.
proto
=
htons
(
ETH_P_IP
);
break
;
case
0x60
:
pi
.
proto
=
htons
(
ETH_P_IPV6
);
break
;
default:
tun
->
dev
->
stats
.
rx_dropped
++
;
kfree_skb
(
skb
);
return
-
EINVAL
;
}
}
skb_reset_mac_header
(
skb
);
skb
->
protocol
=
pi
.
proto
;
skb
->
dev
=
tun
->
dev
;
...
...
include/net/netfilter/nf_conntrack_extend.h
View file @
0344f1c6
...
...
@@ -15,6 +15,7 @@ enum nf_ct_ext_id
/* Extensions: optional stuff which isn't permanently in struct. */
struct
nf_ct_ext
{
struct
rcu_head
rcu
;
u8
offset
[
NF_CT_EXT_NUM
];
u8
len
;
char
data
[
0
];
...
...
net/ipv4/netfilter/nf_nat_core.c
View file @
0344f1c6
...
...
@@ -556,7 +556,6 @@ static void nf_nat_cleanup_conntrack(struct nf_conn *ct)
spin_lock_bh
(
&
nf_nat_lock
);
hlist_del_rcu
(
&
nat
->
bysource
);
nat
->
ct
=
NULL
;
spin_unlock_bh
(
&
nf_nat_lock
);
}
...
...
@@ -570,8 +569,8 @@ static void nf_nat_move_storage(void *new, void *old)
return
;
spin_lock_bh
(
&
nf_nat_lock
);
hlist_replace_rcu
(
&
old_nat
->
bysource
,
&
new_nat
->
bysource
);
new_nat
->
ct
=
ct
;
hlist_replace_rcu
(
&
old_nat
->
bysource
,
&
new_nat
->
bysource
);
spin_unlock_bh
(
&
nf_nat_lock
);
}
...
...
net/ipv4/xfrm4_mode_tunnel.c
View file @
0344f1c6
...
...
@@ -52,7 +52,7 @@ static int xfrm4_mode_tunnel_output(struct xfrm_state *x, struct sk_buff *skb)
IP_ECN_clear
(
top_iph
);
top_iph
->
frag_off
=
(
flags
&
XFRM_STATE_NOPMTUDISC
)
?
0
:
XFRM_MODE_SKB_CB
(
skb
)
->
frag_off
;
0
:
(
XFRM_MODE_SKB_CB
(
skb
)
->
frag_off
&
htons
(
IP_DF
))
;
ip_select_ident
(
top_iph
,
dst
->
child
,
NULL
);
top_iph
->
ttl
=
dst_metric
(
dst
->
child
,
RTAX_HOPLIMIT
);
...
...
net/mac80211/tx.c
View file @
0344f1c6
...
...
@@ -1567,7 +1567,7 @@ int ieee80211_subif_start_xmit(struct sk_buff *skb,
* make it big enough for everything we may ever need.
*/
if
(
head_need
>
0
||
skb_
header_
cloned
(
skb
))
{
if
(
head_need
>
0
||
skb_cloned
(
skb
))
{
head_need
+=
IEEE80211_ENCRYPT_HEADROOM
;
head_need
+=
local
->
tx_headroom
;
head_need
=
max_t
(
int
,
0
,
head_need
);
...
...
net/netfilter/nf_conntrack_extend.c
View file @
0344f1c6
...
...
@@ -59,12 +59,19 @@ nf_ct_ext_create(struct nf_ct_ext **ext, enum nf_ct_ext_id id, gfp_t gfp)
if
(
!*
ext
)
return
NULL
;
INIT_RCU_HEAD
(
&
(
*
ext
)
->
rcu
);
(
*
ext
)
->
offset
[
id
]
=
off
;
(
*
ext
)
->
len
=
len
;
return
(
void
*
)(
*
ext
)
+
off
;
}
static
void
__nf_ct_ext_free_rcu
(
struct
rcu_head
*
head
)
{
struct
nf_ct_ext
*
ext
=
container_of
(
head
,
struct
nf_ct_ext
,
rcu
);
kfree
(
ext
);
}
void
*
__nf_ct_ext_add
(
struct
nf_conn
*
ct
,
enum
nf_ct_ext_id
id
,
gfp_t
gfp
)
{
struct
nf_ct_ext
*
new
;
...
...
@@ -104,7 +111,7 @@ void *__nf_ct_ext_add(struct nf_conn *ct, enum nf_ct_ext_id id, gfp_t gfp)
(
void
*
)
ct
->
ext
+
ct
->
ext
->
offset
[
i
]);
rcu_read_unlock
();
}
kfree
(
ct
->
ext
);
call_rcu
(
&
ct
->
ext
->
rcu
,
__nf_ct_ext_free_rcu
);
ct
->
ext
=
new
;
}
...
...
net/netfilter/nf_conntrack_h323_main.c
View file @
0344f1c6
...
...
@@ -619,6 +619,7 @@ static const struct nf_conntrack_expect_policy h245_exp_policy = {
static
struct
nf_conntrack_helper
nf_conntrack_helper_h245
__read_mostly
=
{
.
name
=
"H.245"
,
.
me
=
THIS_MODULE
,
.
tuple
.
src
.
l3num
=
AF_UNSPEC
,
.
tuple
.
dst
.
protonum
=
IPPROTO_UDP
,
.
help
=
h245_help
,
.
expect_policy
=
&
h245_exp_policy
,
...
...
@@ -1765,6 +1766,7 @@ static void __exit nf_conntrack_h323_fini(void)
nf_conntrack_helper_unregister
(
&
nf_conntrack_helper_ras
[
0
]);
nf_conntrack_helper_unregister
(
&
nf_conntrack_helper_q931
[
1
]);
nf_conntrack_helper_unregister
(
&
nf_conntrack_helper_q931
[
0
]);
nf_conntrack_helper_unregister
(
&
nf_conntrack_helper_h245
);
kfree
(
h323_buffer
);
pr_debug
(
"nf_ct_h323: fini
\n
"
);
}
...
...
@@ -1777,28 +1779,34 @@ static int __init nf_conntrack_h323_init(void)
h323_buffer
=
kmalloc
(
65536
,
GFP_KERNEL
);
if
(
!
h323_buffer
)
return
-
ENOMEM
;
ret
=
nf_conntrack_helper_register
(
&
nf_conntrack_helper_
q931
[
0
]
);
ret
=
nf_conntrack_helper_register
(
&
nf_conntrack_helper_
h245
);
if
(
ret
<
0
)
goto
err1
;
ret
=
nf_conntrack_helper_register
(
&
nf_conntrack_helper_q931
[
1
]);
ret
=
nf_conntrack_helper_register
(
&
nf_conntrack_helper_q931
[
0
]);
if
(
ret
<
0
)
goto
err2
;
ret
=
nf_conntrack_helper_register
(
&
nf_conntrack_helper_
ras
[
0
]);
ret
=
nf_conntrack_helper_register
(
&
nf_conntrack_helper_
q931
[
1
]);
if
(
ret
<
0
)
goto
err3
;
ret
=
nf_conntrack_helper_register
(
&
nf_conntrack_helper_ras
[
1
]);
ret
=
nf_conntrack_helper_register
(
&
nf_conntrack_helper_ras
[
0
]);
if
(
ret
<
0
)
goto
err4
;
ret
=
nf_conntrack_helper_register
(
&
nf_conntrack_helper_ras
[
1
]);
if
(
ret
<
0
)
goto
err5
;
pr_debug
(
"nf_ct_h323: init success
\n
"
);
return
0
;
err
4
:
err
5
:
nf_conntrack_helper_unregister
(
&
nf_conntrack_helper_ras
[
0
]);
err
3
:
err
4
:
nf_conntrack_helper_unregister
(
&
nf_conntrack_helper_q931
[
1
]);
err
2
:
err
3
:
nf_conntrack_helper_unregister
(
&
nf_conntrack_helper_q931
[
0
]);
err2:
nf_conntrack_helper_unregister
(
&
nf_conntrack_helper_h245
);
err1:
kfree
(
h323_buffer
);
return
ret
;
}
...
...
net/netlink/genetlink.c
View file @
0344f1c6
...
...
@@ -444,8 +444,11 @@ static int genl_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh)
if
(
ops
->
dumpit
==
NULL
)
return
-
EOPNOTSUPP
;
return
netlink_dump_start
(
genl_sock
,
skb
,
nlh
,
genl_unlock
();
err
=
netlink_dump_start
(
genl_sock
,
skb
,
nlh
,
ops
->
dumpit
,
ops
->
done
);
genl_lock
();
return
err
;
}
if
(
ops
->
doit
==
NULL
)
...
...
@@ -603,9 +606,6 @@ static int ctrl_dumpfamily(struct sk_buff *skb, struct netlink_callback *cb)
int
chains_to_skip
=
cb
->
args
[
0
];
int
fams_to_skip
=
cb
->
args
[
1
];
if
(
chains_to_skip
!=
0
)
genl_lock
();
for
(
i
=
0
;
i
<
GENL_FAM_TAB_SIZE
;
i
++
)
{
if
(
i
<
chains_to_skip
)
continue
;
...
...
@@ -623,9 +623,6 @@ static int ctrl_dumpfamily(struct sk_buff *skb, struct netlink_callback *cb)
}
errout:
if
(
chains_to_skip
!=
0
)
genl_unlock
();
cb
->
args
[
0
]
=
i
;
cb
->
args
[
1
]
=
n
;
...
...
@@ -770,7 +767,7 @@ static int __init genl_init(void)
/* we'll bump the group number right afterwards */
genl_sock
=
netlink_kernel_create
(
&
init_net
,
NETLINK_GENERIC
,
0
,
genl_rcv
,
NULL
,
THIS_MODULE
);
genl_rcv
,
&
genl_mutex
,
THIS_MODULE
);
if
(
genl_sock
==
NULL
)
panic
(
"GENL: Cannot initialize generic netlink
\n
"
);
...
...
net/unix/af_unix.c
View file @
0344f1c6
...
...
@@ -167,6 +167,11 @@ static inline int unix_may_send(struct sock *sk, struct sock *osk)
return
(
unix_peer
(
osk
)
==
NULL
||
unix_our_peer
(
sk
,
osk
));
}
static
inline
int
unix_recvq_full
(
struct
sock
const
*
sk
)
{
return
skb_queue_len
(
&
sk
->
sk_receive_queue
)
>
sk
->
sk_max_ack_backlog
;
}
static
struct
sock
*
unix_peer_get
(
struct
sock
*
s
)
{
struct
sock
*
peer
;
...
...
@@ -480,6 +485,8 @@ static int unix_socketpair(struct socket *, struct socket *);
static
int
unix_accept
(
struct
socket
*
,
struct
socket
*
,
int
);
static
int
unix_getname
(
struct
socket
*
,
struct
sockaddr
*
,
int
*
,
int
);
static
unsigned
int
unix_poll
(
struct
file
*
,
struct
socket
*
,
poll_table
*
);
static
unsigned
int
unix_datagram_poll
(
struct
file
*
,
struct
socket
*
,
poll_table
*
);
static
int
unix_ioctl
(
struct
socket
*
,
unsigned
int
,
unsigned
long
);
static
int
unix_shutdown
(
struct
socket
*
,
int
);
static
int
unix_stream_sendmsg
(
struct
kiocb
*
,
struct
socket
*
,
...
...
@@ -525,7 +532,7 @@ static const struct proto_ops unix_dgram_ops = {
.
socketpair
=
unix_socketpair
,
.
accept
=
sock_no_accept
,
.
getname
=
unix_getname
,
.
poll
=
datagram_poll
,
.
poll
=
unix_
datagram_poll
,
.
ioctl
=
unix_ioctl
,
.
listen
=
sock_no_listen
,
.
shutdown
=
unix_shutdown
,
...
...
@@ -546,7 +553,7 @@ static const struct proto_ops unix_seqpacket_ops = {
.
socketpair
=
unix_socketpair
,
.
accept
=
unix_accept
,
.
getname
=
unix_getname
,
.
poll
=
datagram_poll
,
.
poll
=
unix_
datagram_poll
,
.
ioctl
=
unix_ioctl
,
.
listen
=
unix_listen
,
.
shutdown
=
unix_shutdown
,
...
...
@@ -981,8 +988,7 @@ static long unix_wait_for_peer(struct sock *other, long timeo)
sched
=
!
sock_flag
(
other
,
SOCK_DEAD
)
&&
!
(
other
->
sk_shutdown
&
RCV_SHUTDOWN
)
&&
(
skb_queue_len
(
&
other
->
sk_receive_queue
)
>
other
->
sk_max_ack_backlog
);
unix_recvq_full
(
other
);
unix_state_unlock
(
other
);
...
...
@@ -1056,8 +1062,7 @@ restart:
if
(
other
->
sk_state
!=
TCP_LISTEN
)
goto
out_unlock
;
if
(
skb_queue_len
(
&
other
->
sk_receive_queue
)
>
other
->
sk_max_ack_backlog
)
{
if
(
unix_recvq_full
(
other
))
{
err
=
-
EAGAIN
;
if
(
!
timeo
)
goto
out_unlock
;
...
...
@@ -1426,9 +1431,7 @@ restart:
goto
out_unlock
;
}
if
(
unix_peer
(
other
)
!=
sk
&&
(
skb_queue_len
(
&
other
->
sk_receive_queue
)
>
other
->
sk_max_ack_backlog
))
{
if
(
unix_peer
(
other
)
!=
sk
&&
unix_recvq_full
(
other
))
{
if
(
!
timeo
)
{
err
=
-
EAGAIN
;
goto
out_unlock
;
...
...
@@ -1989,6 +1992,64 @@ static unsigned int unix_poll(struct file * file, struct socket *sock, poll_tabl
return
mask
;
}
static
unsigned
int
unix_datagram_poll
(
struct
file
*
file
,
struct
socket
*
sock
,
poll_table
*
wait
)
{
struct
sock
*
sk
=
sock
->
sk
,
*
peer
;
unsigned
int
mask
;
poll_wait
(
file
,
sk
->
sk_sleep
,
wait
);
peer
=
unix_peer_get
(
sk
);
if
(
peer
)
{
if
(
peer
!=
sk
)
{
/*
* Writability of a connected socket additionally
* depends on the state of the receive queue of the
* peer.
*/
poll_wait
(
file
,
&
unix_sk
(
peer
)
->
peer_wait
,
wait
);
}
else
{
sock_put
(
peer
);
peer
=
NULL
;
}
}
mask
=
0
;
/* exceptional events? */
if
(
sk
->
sk_err
||
!
skb_queue_empty
(
&
sk
->
sk_error_queue
))
mask
|=
POLLERR
;
if
(
sk
->
sk_shutdown
&
RCV_SHUTDOWN
)
mask
|=
POLLRDHUP
;
if
(
sk
->
sk_shutdown
==
SHUTDOWN_MASK
)
mask
|=
POLLHUP
;
/* readable? */
if
(
!
skb_queue_empty
(
&
sk
->
sk_receive_queue
)
||
(
sk
->
sk_shutdown
&
RCV_SHUTDOWN
))
mask
|=
POLLIN
|
POLLRDNORM
;
/* Connection-based need to check for termination and startup */
if
(
sk
->
sk_type
==
SOCK_SEQPACKET
)
{
if
(
sk
->
sk_state
==
TCP_CLOSE
)
mask
|=
POLLHUP
;
/* connection hasn't started yet? */
if
(
sk
->
sk_state
==
TCP_SYN_SENT
)
return
mask
;
}
/* writable? */
if
(
unix_writable
(
sk
)
&&
!
(
peer
&&
unix_recvq_full
(
peer
)))
mask
|=
POLLOUT
|
POLLWRNORM
|
POLLWRBAND
;
else
set_bit
(
SOCK_ASYNC_NOSPACE
,
&
sk
->
sk_socket
->
flags
);
if
(
peer
)
sock_put
(
peer
);
return
mask
;
}
#ifdef CONFIG_PROC_FS
static
struct
sock
*
first_unix_socket
(
int
*
i
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment