Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
0519d83d
Commit
0519d83d
authored
Oct 29, 2009
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
parents
38bfd8f5
b5dd884e
Changes
25
Hide whitespace changes
Inline
Side-by-side
Showing
25 changed files
with
160 additions
and
83 deletions
+160
-83
MAINTAINERS
MAINTAINERS
+1
-1
drivers/net/bnx2.h
drivers/net/bnx2.h
+6
-3
drivers/net/bonding/bond_main.c
drivers/net/bonding/bond_main.c
+1
-1
drivers/net/cnic.c
drivers/net/cnic.c
+3
-3
drivers/net/qlge/qlge.h
drivers/net/qlge/qlge.h
+1
-0
drivers/net/qlge/qlge_main.c
drivers/net/qlge/qlge_main.c
+52
-26
drivers/net/qlge/qlge_mpi.c
drivers/net/qlge/qlge_mpi.c
+12
-11
drivers/net/sfc/rx.c
drivers/net/sfc/rx.c
+6
-3
drivers/net/usb/dm9601.c
drivers/net/usb/dm9601.c
+4
-0
drivers/net/virtio_net.c
drivers/net/virtio_net.c
+11
-3
drivers/net/wireless/airo.c
drivers/net/wireless/airo.c
+2
-3
drivers/net/wireless/b43/leds.h
drivers/net/wireless/b43/leds.h
+1
-0
drivers/net/wireless/b43/main.c
drivers/net/wireless/b43/main.c
+0
-1
drivers/net/wireless/b43/rfkill.c
drivers/net/wireless/b43/rfkill.c
+2
-1
drivers/net/wireless/libertas/if_spi.c
drivers/net/wireless/libertas/if_spi.c
+5
-5
drivers/net/wireless/rt2x00/rt2800usb.c
drivers/net/wireless/rt2x00/rt2800usb.c
+1
-1
net/ipv4/raw.c
net/ipv4/raw.c
+17
-7
net/mac80211/ibss.c
net/mac80211/ibss.c
+2
-4
net/mac80211/mesh_hwmp.c
net/mac80211/mesh_hwmp.c
+1
-1
net/mac80211/mlme.c
net/mac80211/mlme.c
+1
-2
net/mac80211/tx.c
net/mac80211/tx.c
+1
-1
net/packet/af_packet.c
net/packet/af_packet.c
+1
-4
net/wireless/core.h
net/wireless/core.h
+1
-0
net/wireless/mlme.c
net/wireless/mlme.c
+9
-0
net/wireless/sme.c
net/wireless/sme.c
+19
-2
No files found.
MAINTAINERS
View file @
0519d83d
...
...
@@ -4303,7 +4303,7 @@ F: drivers/video/aty/aty128fb.c
RALINK RT2X00 WIRELESS LAN DRIVER
P: rt2x00 project
L: linux-wireless@vger.kernel.org
L: users@rt2x00.serialmonkey.com
L: users@rt2x00.serialmonkey.com
(moderated for non-subscribers)
W: http://rt2x00.serialmonkey.com/
S: Maintained
T: git git://git.kernel.org/pub/scm/linux/kernel/git/ivd/rt2x00.git
...
...
drivers/net/bnx2.h
View file @
0519d83d
...
...
@@ -361,9 +361,12 @@ struct l2_fhdr {
#define BNX2_L2CTX_CTX_TYPE_CTX_BD_CHN_TYPE_VALUE (1<<28)
#define BNX2_L2CTX_HOST_BDIDX 0x00000004
#define BNX2_L2CTX_STATUSB_NUM_SHIFT 16
#define BNX2_L2CTX_STATUSB_NUM(sb_id) \
(((sb_id) > 0) ? (((sb_id) + 7) << BNX2_L2CTX_STATUSB_NUM_SHIFT) : 0)
#define BNX2_L2CTX_L5_STATUSB_NUM_SHIFT 16
#define BNX2_L2CTX_L2_STATUSB_NUM_SHIFT 24
#define BNX2_L2CTX_L5_STATUSB_NUM(sb_id) \
(((sb_id) > 0) ? (((sb_id) + 7) << BNX2_L2CTX_L5_STATUSB_NUM_SHIFT) : 0)
#define BNX2_L2CTX_L2_STATUSB_NUM(sb_id) \
(((sb_id) > 0) ? (((sb_id) + 7) << BNX2_L2CTX_L2_STATUSB_NUM_SHIFT) : 0)
#define BNX2_L2CTX_HOST_BSEQ 0x00000008
#define BNX2_L2CTX_NX_BSEQ 0x0000000c
#define BNX2_L2CTX_NX_BDHADDR_HI 0x00000010
...
...
drivers/net/bonding/bond_main.c
View file @
0519d83d
...
...
@@ -707,7 +707,7 @@ static int bond_check_dev_link(struct bonding *bond,
struct
net_device
*
slave_dev
,
int
reporting
)
{
const
struct
net_device_ops
*
slave_ops
=
slave_dev
->
netdev_ops
;
static
int
(
*
ioctl
)(
struct
net_device
*
,
struct
ifreq
*
,
int
);
int
(
*
ioctl
)(
struct
net_device
*
,
struct
ifreq
*
,
int
);
struct
ifreq
ifr
;
struct
mii_ioctl_data
*
mii
;
...
...
drivers/net/cnic.c
View file @
0519d83d
...
...
@@ -3560,9 +3560,9 @@ static void cnic_init_bnx2_rx_ring(struct cnic_dev *dev)
cnic_ctx_wr
(
dev
,
cid_addr
,
BNX2_L2CTX_CTX_TYPE
,
val
);
if
(
sb_id
==
0
)
val
=
2
<<
BNX2_L2CTX_STATUSB_NUM_SHIFT
;
val
=
2
<<
BNX2_L2CTX_
L2_
STATUSB_NUM_SHIFT
;
else
val
=
BNX2_L2CTX_STATUSB_NUM
(
sb_id
);
val
=
BNX2_L2CTX_
L2_
STATUSB_NUM
(
sb_id
);
cnic_ctx_wr
(
dev
,
cid_addr
,
BNX2_L2CTX_HOST_BDIDX
,
val
);
rxbd
=
(
struct
rx_bd
*
)
(
cp
->
l2_ring
+
BCM_PAGE_SIZE
);
...
...
@@ -3719,7 +3719,7 @@ static int cnic_start_bnx2_hw(struct cnic_dev *dev)
cp
->
int_num
=
0
;
if
(
ethdev
->
drv_state
&
CNIC_DRV_STATE_USING_MSIX
)
{
u32
sb_id
=
cp
->
status_blk_num
;
u32
sb
=
BNX2_L2CTX_STATUSB_NUM
(
sb_id
);
u32
sb
=
BNX2_L2CTX_
L5_
STATUSB_NUM
(
sb_id
);
cp
->
int_num
=
sb_id
<<
BNX2_PCICFG_INT_ACK_CMD_INT_NUM_SHIFT
;
cnic_ctx_wr
(
dev
,
cp
->
kwq_cid_addr
,
L5_KRNLQ_HOST_QIDX
,
sb
);
...
...
drivers/net/qlge/qlge.h
View file @
0519d83d
...
...
@@ -97,6 +97,7 @@ enum {
/* Misc. stuff */
MAILBOX_COUNT
=
16
,
MAILBOX_TIMEOUT
=
5
,
PROC_ADDR_RDY
=
(
1
<<
31
),
PROC_ADDR_R
=
(
1
<<
30
),
...
...
drivers/net/qlge/qlge_main.c
View file @
0519d83d
...
...
@@ -4101,6 +4101,7 @@ static int __devinit ql_init_device(struct pci_dev *pdev,
goto
err_out
;
}
pci_save_state
(
pdev
);
qdev
->
reg_base
=
ioremap_nocache
(
pci_resource_start
(
pdev
,
1
),
pci_resource_len
(
pdev
,
1
));
...
...
@@ -4255,6 +4256,33 @@ static void __devexit qlge_remove(struct pci_dev *pdev)
free_netdev
(
ndev
);
}
/* Clean up resources without touching hardware. */
static
void
ql_eeh_close
(
struct
net_device
*
ndev
)
{
int
i
;
struct
ql_adapter
*
qdev
=
netdev_priv
(
ndev
);
if
(
netif_carrier_ok
(
ndev
))
{
netif_carrier_off
(
ndev
);
netif_stop_queue
(
ndev
);
}
if
(
test_bit
(
QL_ADAPTER_UP
,
&
qdev
->
flags
))
cancel_delayed_work_sync
(
&
qdev
->
asic_reset_work
);
cancel_delayed_work_sync
(
&
qdev
->
mpi_reset_work
);
cancel_delayed_work_sync
(
&
qdev
->
mpi_work
);
cancel_delayed_work_sync
(
&
qdev
->
mpi_idc_work
);
cancel_delayed_work_sync
(
&
qdev
->
mpi_port_cfg_work
);
for
(
i
=
0
;
i
<
qdev
->
rss_ring_count
;
i
++
)
netif_napi_del
(
&
qdev
->
rx_ring
[
i
].
napi
);
clear_bit
(
QL_ADAPTER_UP
,
&
qdev
->
flags
);
ql_tx_ring_clean
(
qdev
);
ql_free_rx_buffers
(
qdev
);
ql_release_adapter_resources
(
qdev
);
}
/*
* This callback is called by the PCI subsystem whenever
* a PCI bus error is detected.
...
...
@@ -4263,17 +4291,21 @@ static pci_ers_result_t qlge_io_error_detected(struct pci_dev *pdev,
enum
pci_channel_state
state
)
{
struct
net_device
*
ndev
=
pci_get_drvdata
(
pdev
);
struct
ql_adapter
*
qdev
=
netdev_priv
(
ndev
);
netif_device_detach
(
ndev
);
if
(
state
==
pci_channel_io_perm_failure
)
switch
(
state
)
{
case
pci_channel_io_normal
:
return
PCI_ERS_RESULT_CAN_RECOVER
;
case
pci_channel_io_frozen
:
netif_device_detach
(
ndev
);
if
(
netif_running
(
ndev
))
ql_eeh_close
(
ndev
);
pci_disable_device
(
pdev
);
return
PCI_ERS_RESULT_NEED_RESET
;
case
pci_channel_io_perm_failure
:
dev_err
(
&
pdev
->
dev
,
"%s: pci_channel_io_perm_failure.
\n
"
,
__func__
);
return
PCI_ERS_RESULT_DISCONNECT
;
if
(
netif_running
(
ndev
))
ql_adapter_down
(
qdev
);
pci_disable_device
(
pdev
);
}
/* Request a slot reset. */
return
PCI_ERS_RESULT_NEED_RESET
;
...
...
@@ -4290,25 +4322,15 @@ static pci_ers_result_t qlge_io_slot_reset(struct pci_dev *pdev)
struct
net_device
*
ndev
=
pci_get_drvdata
(
pdev
);
struct
ql_adapter
*
qdev
=
netdev_priv
(
ndev
);
pdev
->
error_state
=
pci_channel_io_normal
;
pci_restore_state
(
pdev
);
if
(
pci_enable_device
(
pdev
))
{
QPRINTK
(
qdev
,
IFUP
,
ERR
,
"Cannot re-enable PCI device after reset.
\n
"
);
return
PCI_ERS_RESULT_DISCONNECT
;
}
pci_set_master
(
pdev
);
netif_carrier_off
(
ndev
);
ql_adapter_reset
(
qdev
);
/* Make sure the EEPROM is good */
memcpy
(
ndev
->
perm_addr
,
ndev
->
dev_addr
,
ndev
->
addr_len
);
if
(
!
is_valid_ether_addr
(
ndev
->
perm_addr
))
{
QPRINTK
(
qdev
,
IFUP
,
ERR
,
"After reset, invalid MAC address.
\n
"
);
return
PCI_ERS_RESULT_DISCONNECT
;
}
return
PCI_ERS_RESULT_RECOVERED
;
}
...
...
@@ -4316,17 +4338,21 @@ static void qlge_io_resume(struct pci_dev *pdev)
{
struct
net_device
*
ndev
=
pci_get_drvdata
(
pdev
);
struct
ql_adapter
*
qdev
=
netdev_priv
(
ndev
);
int
err
=
0
;
pci_set_master
(
pdev
);
if
(
ql_adapter_reset
(
qdev
))
QPRINTK
(
qdev
,
DRV
,
ERR
,
"reset FAILED!
\n
"
);
if
(
netif_running
(
ndev
))
{
if
(
ql_adapter_up
(
qdev
))
{
err
=
qlge_open
(
ndev
);
if
(
err
)
{
QPRINTK
(
qdev
,
IFUP
,
ERR
,
"Device initialization failed after reset.
\n
"
);
return
;
}
}
else
{
QPRINTK
(
qdev
,
IFUP
,
ERR
,
"Device was not running prior to EEH.
\n
"
);
}
netif_device_attach
(
ndev
);
}
...
...
drivers/net/qlge/qlge_mpi.c
View file @
0519d83d
...
...
@@ -454,7 +454,8 @@ static int ql_mpi_handler(struct ql_adapter *qdev, struct mbox_params *mbcp)
*/
static
int
ql_mailbox_command
(
struct
ql_adapter
*
qdev
,
struct
mbox_params
*
mbcp
)
{
int
status
,
count
;
int
status
;
unsigned
long
count
;
/* Begin polled mode for MPI */
...
...
@@ -475,9 +476,9 @@ static int ql_mailbox_command(struct ql_adapter *qdev, struct mbox_params *mbcp)
/* Wait for the command to complete. We loop
* here because some AEN might arrive while
* we're waiting for the mailbox command to
* complete. If more than 5
arrive then
we can
* complete. If more than 5
seconds expire
we can
* assume something is wrong. */
count
=
5
;
count
=
jiffies
+
HZ
*
MAILBOX_TIMEOUT
;
do
{
/* Wait for the interrupt to come in. */
status
=
ql_wait_mbx_cmd_cmplt
(
qdev
);
...
...
@@ -501,15 +502,15 @@ static int ql_mailbox_command(struct ql_adapter *qdev, struct mbox_params *mbcp)
MB_CMD_STS_GOOD
)
||
((
mbcp
->
mbox_out
[
0
]
&
0x0000f000
)
==
MB_CMD_STS_INTRMDT
))
break
;
}
while
(
--
count
);
goto
done
;
}
while
(
time_before
(
jiffies
,
count
)
);
if
(
!
count
)
{
QPRINTK
(
qdev
,
DRV
,
ERR
,
"Timed out waiting for mailbox complete.
\n
"
)
;
status
=
-
ETIMEDOUT
;
goto
end
;
}
QPRINTK
(
qdev
,
DRV
,
ERR
,
"Timed out waiting for mailbox complete.
\n
"
);
status
=
-
ETIMEDOUT
;
goto
end
;
done:
/* Now we can clear the interrupt condition
* and look at our status.
...
...
drivers/net/sfc/rx.c
View file @
0519d83d
...
...
@@ -441,7 +441,8 @@ static void efx_rx_packet__check_len(struct efx_rx_queue *rx_queue,
* the appropriate LRO method
*/
static
void
efx_rx_packet_lro
(
struct
efx_channel
*
channel
,
struct
efx_rx_buffer
*
rx_buf
)
struct
efx_rx_buffer
*
rx_buf
,
bool
checksummed
)
{
struct
napi_struct
*
napi
=
&
channel
->
napi_str
;
...
...
@@ -463,7 +464,8 @@ static void efx_rx_packet_lro(struct efx_channel *channel,
skb
->
len
=
rx_buf
->
len
;
skb
->
data_len
=
rx_buf
->
len
;
skb
->
truesize
+=
rx_buf
->
len
;
skb
->
ip_summed
=
CHECKSUM_UNNECESSARY
;
skb
->
ip_summed
=
checksummed
?
CHECKSUM_UNNECESSARY
:
CHECKSUM_NONE
;
napi_gro_frags
(
napi
);
...
...
@@ -472,6 +474,7 @@ static void efx_rx_packet_lro(struct efx_channel *channel,
rx_buf
->
page
=
NULL
;
}
else
{
EFX_BUG_ON_PARANOID
(
!
rx_buf
->
skb
);
EFX_BUG_ON_PARANOID
(
!
checksummed
);
napi_gro_receive
(
napi
,
rx_buf
->
skb
);
rx_buf
->
skb
=
NULL
;
...
...
@@ -567,7 +570,7 @@ void __efx_rx_packet(struct efx_channel *channel,
}
if
(
likely
(
checksummed
||
rx_buf
->
page
))
{
efx_rx_packet_lro
(
channel
,
rx_buf
);
efx_rx_packet_lro
(
channel
,
rx_buf
,
checksummed
);
goto
done
;
}
...
...
drivers/net/usb/dm9601.c
View file @
0519d83d
...
...
@@ -649,6 +649,10 @@ static const struct usb_device_id products[] = {
USB_DEVICE
(
0x0fe6
,
0x8101
),
/* DM9601 USB to Fast Ethernet Adapter */
.
driver_info
=
(
unsigned
long
)
&
dm9601_info
,
},
{
USB_DEVICE
(
0x0a46
,
0x9000
),
/* DM9000E */
.
driver_info
=
(
unsigned
long
)
&
dm9601_info
,
},
{},
// END
};
...
...
drivers/net/virtio_net.c
View file @
0519d83d
...
...
@@ -514,8 +514,7 @@ static netdev_tx_t start_xmit(struct sk_buff *skb, struct net_device *dev)
/* Free up any pending old buffers before queueing new ones. */
free_old_xmit_skbs
(
vi
);
/* Put new one in send queue and do transmit */
__skb_queue_head
(
&
vi
->
send
,
skb
);
/* Try to transmit */
capacity
=
xmit_skb
(
vi
,
skb
);
/* This can happen with OOM and indirect buffers. */
...
...
@@ -529,8 +528,17 @@ static netdev_tx_t start_xmit(struct sk_buff *skb, struct net_device *dev)
}
return
NETDEV_TX_BUSY
;
}
vi
->
svq
->
vq_ops
->
kick
(
vi
->
svq
);
/*
* Put new one in send queue. You'd expect we'd need this before
* xmit_skb calls add_buf(), since the callback can be triggered
* immediately after that. But since the callback just triggers
* another call back here, normal network xmit locking prevents the
* race.
*/
__skb_queue_head
(
&
vi
->
send
,
skb
);
/* Don't wait up for transmitted skbs to be freed. */
skb_orphan
(
skb
);
nf_reset
(
skb
);
...
...
drivers/net/wireless/airo.c
View file @
0519d83d
...
...
@@ -4790,9 +4790,8 @@ static int proc_stats_rid_open( struct inode *inode,
static
int
get_dec_u16
(
char
*
buffer
,
int
*
start
,
int
limit
)
{
u16
value
;
int
valid
=
0
;
for
(
value
=
0
;
buffer
[
*
start
]
>=
'0'
&&
buffer
[
*
start
]
<=
'9'
&&
*
start
<
limit
;
(
*
start
)
++
)
{
for
(
value
=
0
;
*
start
<
limit
&&
buffer
[
*
start
]
>=
'0'
&&
buffer
[
*
start
]
<=
'9'
;
(
*
start
)
++
)
{
valid
=
1
;
value
*=
10
;
value
+=
buffer
[
*
start
]
-
'0'
;
...
...
drivers/net/wireless/b43/leds.h
View file @
0519d83d
#ifndef B43_LEDS_H_
#define B43_LEDS_H_
struct
b43_wl
;
struct
b43_wldev
;
#ifdef CONFIG_B43_LEDS
...
...
drivers/net/wireless/b43/main.c
View file @
0519d83d
...
...
@@ -4501,7 +4501,6 @@ static void b43_op_stop(struct ieee80211_hw *hw)
cancel_work_sync
(
&
(
wl
->
beacon_update_trigger
));
wiphy_rfkill_stop_polling
(
hw
->
wiphy
);
mutex_lock
(
&
wl
->
mutex
);
if
(
b43_status
(
dev
)
>=
B43_STAT_STARTED
)
{
dev
=
b43_wireless_core_stop
(
dev
);
...
...
drivers/net/wireless/b43/rfkill.c
View file @
0519d83d
...
...
@@ -33,7 +33,8 @@ bool b43_is_hw_radio_enabled(struct b43_wldev *dev)
&
B43_MMIO_RADIO_HWENABLED_HI_MASK
))
return
1
;
}
else
{
if
(
b43_read16
(
dev
,
B43_MMIO_RADIO_HWENABLED_LO
)
if
(
b43_status
(
dev
)
>=
B43_STAT_STARTED
&&
b43_read16
(
dev
,
B43_MMIO_RADIO_HWENABLED_LO
)
&
B43_MMIO_RADIO_HWENABLED_LO_MASK
)
return
1
;
}
...
...
drivers/net/wireless/libertas/if_spi.c
View file @
0519d83d
...
...
@@ -134,7 +134,7 @@ static void spu_transaction_finish(struct if_spi_card *card)
static
int
spu_write
(
struct
if_spi_card
*
card
,
u16
reg
,
const
u8
*
buf
,
int
len
)
{
int
err
=
0
;
u
16
reg_out
=
cpu_to_le16
(
reg
|
IF_SPI_WRITE_OPERATION_MASK
);
__le
16
reg_out
=
cpu_to_le16
(
reg
|
IF_SPI_WRITE_OPERATION_MASK
);
struct
spi_message
m
;
struct
spi_transfer
reg_trans
;
struct
spi_transfer
data_trans
;
...
...
@@ -166,7 +166,7 @@ static int spu_write(struct if_spi_card *card, u16 reg, const u8 *buf, int len)
static
inline
int
spu_write_u16
(
struct
if_spi_card
*
card
,
u16
reg
,
u16
val
)
{
u
16
buff
;
__le
16
buff
;
buff
=
cpu_to_le16
(
val
);
return
spu_write
(
card
,
reg
,
(
u8
*
)
&
buff
,
sizeof
(
u16
));
...
...
@@ -188,7 +188,7 @@ static int spu_read(struct if_spi_card *card, u16 reg, u8 *buf, int len)
{
unsigned
int
delay
;
int
err
=
0
;
u
16
reg_out
=
cpu_to_le16
(
reg
|
IF_SPI_READ_OPERATION_MASK
);
__le
16
reg_out
=
cpu_to_le16
(
reg
|
IF_SPI_READ_OPERATION_MASK
);
struct
spi_message
m
;
struct
spi_transfer
reg_trans
;
struct
spi_transfer
dummy_trans
;
...
...
@@ -235,7 +235,7 @@ static int spu_read(struct if_spi_card *card, u16 reg, u8 *buf, int len)
/* Read 16 bits from an SPI register */
static
inline
int
spu_read_u16
(
struct
if_spi_card
*
card
,
u16
reg
,
u16
*
val
)
{
u
16
buf
;
__le
16
buf
;
int
ret
;
ret
=
spu_read
(
card
,
reg
,
(
u8
*
)
&
buf
,
sizeof
(
buf
));
...
...
@@ -248,7 +248,7 @@ static inline int spu_read_u16(struct if_spi_card *card, u16 reg, u16 *val)
* The low 16 bits are read first. */
static
int
spu_read_u32
(
struct
if_spi_card
*
card
,
u16
reg
,
u32
*
val
)
{
u
32
buf
;
__le
32
buf
;
int
err
;
err
=
spu_read
(
card
,
reg
,
(
u8
*
)
&
buf
,
sizeof
(
buf
));
...
...
drivers/net/wireless/rt2x00/rt2800usb.c
View file @
0519d83d
...
...
@@ -1994,7 +1994,7 @@ static void rt2800usb_write_tx_desc(struct rt2x00_dev *rt2x00dev,
rt2x00_set_field32
(
&
word
,
TXWI_W1_BW_WIN_SIZE
,
txdesc
->
ba_size
);
rt2x00_set_field32
(
&
word
,
TXWI_W1_WIRELESS_CLI_ID
,
test_bit
(
ENTRY_TXD_ENCRYPT
,
&
txdesc
->
flags
)
?
(
skbdesc
->
entry
->
entry_idx
+
1
)
:
0xff
);
txdesc
->
key_idx
:
0xff
);
rt2x00_set_field32
(
&
word
,
TXWI_W1_MPDU_TOTAL_BYTE_COUNT
,
skb
->
len
-
txdesc
->
l2pad
);
rt2x00_set_field32
(
&
word
,
TXWI_W1_PACKETID
,
...
...
net/ipv4/raw.c
View file @
0519d83d
...
...
@@ -351,13 +351,24 @@ static int raw_send_hdrinc(struct sock *sk, void *from, size_t length,
skb
->
ip_summed
=
CHECKSUM_NONE
;
skb
->
transport_header
=
skb
->
network_header
;
err
=
memcpy_fromiovecend
((
void
*
)
iph
,
from
,
0
,
length
)
;
if
(
err
)
goto
error_f
ault
;
err
=
-
EFAULT
;
if
(
memcpy_fromiovecend
((
void
*
)
iph
,
from
,
0
,
length
)
)
goto
error_f
ree
;
/* We don't modify invalid header */
iphlen
=
iph
->
ihl
*
4
;
if
(
iphlen
>=
sizeof
(
*
iph
)
&&
iphlen
<=
length
)
{
/*
* We don't want to modify the ip header, but we do need to
* be sure that it won't cause problems later along the network
* stack. Specifically we want to make sure that iph->ihl is a
* sane value. If ihl points beyond the length of the buffer passed
* in, reject the frame as invalid
*/
err
=
-
EINVAL
;
if
(
iphlen
>
length
)
goto
error_free
;
if
(
iphlen
>=
sizeof
(
*
iph
))
{
if
(
!
iph
->
saddr
)
iph
->
saddr
=
rt
->
rt_src
;
iph
->
check
=
0
;
...
...
@@ -380,8 +391,7 @@ static int raw_send_hdrinc(struct sock *sk, void *from, size_t length,
out:
return
0
;
error_fault:
err
=
-
EFAULT
;
error_free:
kfree_skb
(
skb
);
error:
IP_INC_STATS
(
net
,
IPSTATS_MIB_OUTDISCARDS
);
...
...
net/mac80211/ibss.c
View file @
0519d83d
...
...
@@ -538,13 +538,12 @@ static void ieee80211_sta_find_ibss(struct ieee80211_sub_if_data *sdata)
WLAN_CAPABILITY_PRIVACY
,
capability
);
if
(
bss
)
{
#ifdef CONFIG_MAC80211_IBSS_DEBUG
if
(
bss
)
printk
(
KERN_DEBUG
" sta_find_ibss: selected %pM current "
"%pM
\n
"
,
bss
->
cbss
.
bssid
,
ifibss
->
bssid
);
#endif
/* CONFIG_MAC80211_IBSS_DEBUG */
if
(
bss
&&
!
memcmp
(
ifibss
->
bssid
,
bss
->
cbss
.
bssid
,
ETH_ALEN
))
{
printk
(
KERN_DEBUG
"%s: Selected IBSS BSSID %pM"
" based on configured SSID
\n
"
,
sdata
->
dev
->
name
,
bss
->
cbss
.
bssid
);
...
...
@@ -552,8 +551,7 @@ static void ieee80211_sta_find_ibss(struct ieee80211_sub_if_data *sdata)
ieee80211_sta_join_ibss
(
sdata
,
bss
);
ieee80211_rx_bss_put
(
local
,
bss
);
return
;
}
else
if
(
bss
)
ieee80211_rx_bss_put
(
local
,
bss
);
}
#ifdef CONFIG_MAC80211_IBSS_DEBUG
printk
(
KERN_DEBUG
" did not try to join ibss
\n
"
);
...
...
net/mac80211/mesh_hwmp.c
View file @
0519d83d
...
...
@@ -259,7 +259,7 @@ static u32 airtime_link_metric_get(struct ieee80211_local *local,
* @hwmp_ie: hwmp information element (PREP or PREQ)
*
* This function updates the path routing information to the originator and the
* transmitter of a HWMP PREQ or PREP fram.
* transmitter of a HWMP PREQ or PREP fram
e
.
*
* Returns: metric to frame originator or 0 if the frame should not be further
* processed
...
...
net/mac80211/mlme.c
View file @
0519d83d
...
...
@@ -1463,8 +1463,7 @@ ieee80211_rx_mgmt_assoc_resp(struct ieee80211_sub_if_data *sdata,
if
(
status_code
!=
WLAN_STATUS_SUCCESS
)
{
printk
(
KERN_DEBUG
"%s: AP denied association (code=%d)
\n
"
,
sdata
->
dev
->
name
,
status_code
);
list_del
(
&
wk
->
list
);
kfree
(
wk
);
wk
->
state
=
IEEE80211_MGD_STATE_IDLE
;
return
RX_MGMT_CFG80211_ASSOC
;
}
...
...
net/mac80211/tx.c
View file @
0519d83d
...
...
@@ -1445,7 +1445,7 @@ static void ieee80211_xmit(struct ieee80211_sub_if_data *sdata,
if
(
tmp_sdata
->
vif
.
type
!=
NL80211_IFTYPE_AP
)
continue
;
if
(
compare_ether_addr
(
tmp_sdata
->
dev
->
dev_addr
,
hdr
->
addr2
))
{
hdr
->
addr2
)
==
0
)
{
dev_hold
(
tmp_sdata
->
dev
);
dev_put
(
sdata
->
dev
);
sdata
=
tmp_sdata
;
...
...
net/packet/af_packet.c
View file @
0519d83d
...
...
@@ -984,10 +984,7 @@ static int tpacket_snd(struct packet_sock *po, struct msghdr *msg)
goto
out_put
;
size_max
=
po
->
tx_ring
.
frame_size
-
sizeof
(
struct
skb_shared_info
)
-
po
->
tp_hdrlen
-
LL_ALLOCATED_SPACE
(
dev
)
-
sizeof
(
struct
sockaddr_ll
);
-
(
po
->
tp_hdrlen
-
sizeof
(
struct
sockaddr_ll
));
if
(
size_max
>
dev
->
mtu
+
reserve
)
size_max
=
dev
->
mtu
+
reserve
;
...
...
net/wireless/core.h
View file @
0519d83d
...
...
@@ -358,6 +358,7 @@ int cfg80211_mgd_wext_connect(struct cfg80211_registered_device *rdev,
struct
wireless_dev
*
wdev
);
void
cfg80211_conn_work
(
struct
work_struct
*
work
);
void
cfg80211_sme_failed_assoc
(
struct
wireless_dev
*
wdev
);
bool
cfg80211_sme_failed_reassoc
(
struct
wireless_dev
*
wdev
);
/* internal helpers */
...
...
net/wireless/mlme.c
View file @
0519d83d
...
...
@@ -62,6 +62,7 @@ void cfg80211_send_rx_assoc(struct net_device *dev, const u8 *buf, size_t len)
u8
*
ie
=
mgmt
->
u
.
assoc_resp
.
variable
;
int
i
,
ieoffs
=
offsetof
(
struct
ieee80211_mgmt
,
u
.
assoc_resp
.
variable
);
struct
cfg80211_internal_bss
*
bss
=
NULL
;
bool
need_connect_result
=
true
;
wdev_lock
(
wdev
);
...
...
@@ -94,6 +95,14 @@ void cfg80211_send_rx_assoc(struct net_device *dev, const u8 *buf, size_t len)
}
WARN_ON
(
!
bss
);
}
else
if
(
wdev
->
conn
)
{
cfg80211_sme_failed_assoc
(
wdev
);
need_connect_result
=
false
;
/*
* do not call connect_result() now because the
* sme will schedule work that does it later.
*/
goto
out
;
}
if
(
!
wdev
->
conn
&&
wdev
->
sme_state
==
CFG80211_SME_IDLE
)
{
...
...
net/wireless/sme.c
View file @
0519d83d
...
...
@@ -26,6 +26,7 @@ struct cfg80211_conn {
CFG80211_CONN_AUTHENTICATING
,
CFG80211_CONN_ASSOCIATE_NEXT
,
CFG80211_CONN_ASSOCIATING
,
CFG80211_CONN_DEAUTH_ASSOC_FAIL
,
}
state
;
u8
bssid
[
ETH_ALEN
],
prev_bssid
[
ETH_ALEN
];
u8
*
ie
;
...
...
@@ -148,6 +149,12 @@ static int cfg80211_conn_do_work(struct wireless_dev *wdev)
NULL
,
0
,
WLAN_REASON_DEAUTH_LEAVING
);
return
err
;
case
CFG80211_CONN_DEAUTH_ASSOC_FAIL
:
__cfg80211_mlme_deauth
(
rdev
,
wdev
->
netdev
,
params
->
bssid
,
NULL
,
0
,
WLAN_REASON_DEAUTH_LEAVING
);
/* return an error so that we call __cfg80211_connect_result() */
return
-
EINVAL
;
default:
return
0
;
}
...
...
@@ -158,6 +165,7 @@ void cfg80211_conn_work(struct work_struct *work)
struct
cfg80211_registered_device
*
rdev
=
container_of
(
work
,
struct
cfg80211_registered_device
,
conn_work
);
struct
wireless_dev
*
wdev
;
u8
bssid
[
ETH_ALEN
];
rtnl_lock
();
cfg80211_lock_rdev
(
rdev
);
...
...
@@ -173,10 +181,10 @@ void cfg80211_conn_work(struct work_struct *work)
wdev_unlock
(
wdev
);
continue
;
}
memcpy
(
bssid
,
wdev
->
conn
->
params
.
bssid
,
ETH_ALEN
);
if
(
cfg80211_conn_do_work
(
wdev
))
__cfg80211_connect_result
(
wdev
->
netdev
,
wdev
->
conn
->
params
.
bssid
,
wdev
->
netdev
,
bssid
,
NULL
,
0
,
NULL
,
0
,
WLAN_STATUS_UNSPECIFIED_FAILURE
,
false
,
NULL
);
...
...
@@ -337,6 +345,15 @@ bool cfg80211_sme_failed_reassoc(struct wireless_dev *wdev)
return
true
;
}
void
cfg80211_sme_failed_assoc
(
struct
wireless_dev
*
wdev
)
{
struct
wiphy
*
wiphy
=
wdev
->
wiphy
;
struct
cfg80211_registered_device
*
rdev
=
wiphy_to_dev
(
wiphy
);
wdev
->
conn
->
state
=
CFG80211_CONN_DEAUTH_ASSOC_FAIL
;
schedule_work
(
&
rdev
->
conn_work
);
}
void
__cfg80211_connect_result
(
struct
net_device
*
dev
,
const
u8
*
bssid
,
const
u8
*
req_ie
,
size_t
req_ie_len
,
const
u8
*
resp_ie
,
size_t
resp_ie_len
,
...
...
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