Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
0519d83d
cloud-kernel
项目概览
openanolis
/
cloud-kernel
大约 1 年 前同步成功
通知
152
Star
36
Fork
7
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
10
列表
看板
标记
里程碑
合并请求
2
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
cloud-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
10
Issue
10
列表
看板
标记
里程碑
合并请求
2
合并请求
2
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
0519d83d
编写于
10月 29, 2009
作者:
D
David S. Miller
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
上级
38bfd8f5
b5dd884e
变更
25
隐藏空白更改
内联
并排
Showing
25 changed file
with
160 addition
and
83 deletion
+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
未找到文件。
MAINTAINERS
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录