Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
e1ec1b8c
cloud-kernel
项目概览
openanolis
/
cloud-kernel
接近 2 年 前同步成功
通知
170
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看板
提交
e1ec1b8c
编写于
4月 02, 2008
作者:
D
David S. Miller
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'master' of
git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6
Conflicts: drivers/net/s2io.c
上级
c0f39322
802fb176
变更
55
展开全部
隐藏空白更改
内联
并排
Showing
55 changed file
with
286 addition
and
687 deletion
+286
-687
Documentation/networking/00-INDEX
Documentation/networking/00-INDEX
+0
-3
Documentation/networking/sk98lin.txt
Documentation/networking/sk98lin.txt
+0
-568
drivers/atm/firestream.c
drivers/atm/firestream.c
+1
-0
drivers/atm/he.c
drivers/atm/he.c
+1
-2
drivers/atm/idt77252.c
drivers/atm/idt77252.c
+2
-4
drivers/atm/iphase.c
drivers/atm/iphase.c
+2
-0
drivers/net/Kconfig
drivers/net/Kconfig
+1
-1
drivers/net/bfin_mac.c
drivers/net/bfin_mac.c
+0
-2
drivers/net/bonding/bond_sysfs.c
drivers/net/bonding/bond_sysfs.c
+1
-0
drivers/net/forcedeth.c
drivers/net/forcedeth.c
+10
-8
drivers/net/ibm_newemac/core.c
drivers/net/ibm_newemac/core.c
+2
-2
drivers/net/s2io.c
drivers/net/s2io.c
+1
-1
drivers/net/tulip/eeprom.c
drivers/net/tulip/eeprom.c
+6
-0
drivers/net/tulip/tulip_core.c
drivers/net/tulip/tulip_core.c
+6
-1
drivers/net/usb/Kconfig
drivers/net/usb/Kconfig
+1
-1
drivers/net/usb/dm9601.c
drivers/net/usb/dm9601.c
+1
-1
drivers/net/usb/pegasus.c
drivers/net/usb/pegasus.c
+0
-4
drivers/net/wan/lapbether.c
drivers/net/wan/lapbether.c
+1
-1
drivers/net/wireless/b43/dma.c
drivers/net/wireless/b43/dma.c
+6
-1
drivers/net/wireless/b43/pcmcia.c
drivers/net/wireless/b43/pcmcia.c
+4
-2
drivers/net/wireless/libertas/if_cs.c
drivers/net/wireless/libertas/if_cs.c
+0
-2
drivers/net/wireless/rt2x00/rt2x00dev.c
drivers/net/wireless/rt2x00/rt2x00dev.c
+11
-2
include/linux/netdevice.h
include/linux/netdevice.h
+4
-2
include/net/llc.h
include/net/llc.h
+0
-1
include/net/llc_pdu.h
include/net/llc_pdu.h
+2
-2
include/net/llc_sap.h
include/net/llc_sap.h
+5
-2
net/8021q/vlan.c
net/8021q/vlan.c
+19
-1
net/8021q/vlan.h
net/8021q/vlan.h
+5
-0
net/8021q/vlanproc.c
net/8021q/vlanproc.c
+0
-5
net/bluetooth/af_bluetooth.c
net/bluetooth/af_bluetooth.c
+40
-0
net/bluetooth/hci_sock.c
net/bluetooth/hci_sock.c
+1
-1
net/bluetooth/l2cap.c
net/bluetooth/l2cap.c
+1
-1
net/bluetooth/rfcomm/core.c
net/bluetooth/rfcomm/core.c
+1
-1
net/bluetooth/rfcomm/sock.c
net/bluetooth/rfcomm/sock.c
+1
-1
net/bluetooth/rfcomm/tty.c
net/bluetooth/rfcomm/tty.c
+0
-5
net/bluetooth/sco.c
net/bluetooth/sco.c
+1
-1
net/ipv4/inet_fragment.c
net/ipv4/inet_fragment.c
+3
-0
net/ipv4/ip_forward.c
net/ipv4/ip_forward.c
+1
-1
net/ipv4/udp.c
net/ipv4/udp.c
+2
-2
net/ipv6/addrconf.c
net/ipv6/addrconf.c
+19
-0
net/ipv6/icmp.c
net/ipv6/icmp.c
+2
-2
net/ipv6/ip6_input.c
net/ipv6/ip6_input.c
+1
-2
net/ipv6/netfilter/nf_conntrack_reasm.c
net/ipv6/netfilter/nf_conntrack_reasm.c
+2
-0
net/llc/af_llc.c
net/llc/af_llc.c
+3
-0
net/llc/llc_c_ac.c
net/llc/llc_c_ac.c
+25
-22
net/llc/llc_core.c
net/llc/llc_core.c
+1
-8
net/llc/llc_input.c
net/llc/llc_input.c
+5
-1
net/llc/llc_pdu.c
net/llc/llc_pdu.c
+1
-1
net/llc/llc_s_ac.c
net/llc/llc_s_ac.c
+7
-2
net/llc/llc_sap.c
net/llc/llc_sap.c
+24
-3
net/llc/llc_station.c
net/llc/llc_station.c
+13
-6
net/mac80211/ieee80211.c
net/mac80211/ieee80211.c
+12
-0
net/mac80211/ieee80211_sta.c
net/mac80211/ieee80211_sta.c
+4
-5
net/rose/af_rose.c
net/rose/af_rose.c
+9
-0
net/sched/sch_generic.c
net/sched/sch_generic.c
+15
-3
未找到文件。
Documentation/networking/00-INDEX
浏览文件 @
e1ec1b8c
...
...
@@ -84,9 +84,6 @@ policy-routing.txt
- IP policy-based routing
ray_cs.txt
- Raylink Wireless LAN card driver info.
sk98lin.txt
- Marvell Yukon Chipset / SysKonnect SK-98xx compliant Gigabit
Ethernet Adapter family driver info
skfp.txt
- SysKonnect FDDI (SK-5xxx, Compaq Netelligent) driver info.
smc9.txt
...
...
Documentation/networking/sk98lin.txt
已删除
100644 → 0
浏览文件 @
c0f39322
此差异已折叠。
点击以展开。
drivers/atm/firestream.c
浏览文件 @
e1ec1b8c
...
...
@@ -978,6 +978,7 @@ static int fs_open(struct atm_vcc *atm_vcc)
/* Docs are vague about this atm_hdr field. By the way, the FS
* chip makes odd errors if lower bits are set.... -- REW */
tc
->
atm_hdr
=
(
vpi
<<
20
)
|
(
vci
<<
4
);
tmc0
=
0
;
{
int
pcr
=
atm_pcr_goal
(
txtp
);
...
...
drivers/atm/he.c
浏览文件 @
e1ec1b8c
...
...
@@ -3000,8 +3000,7 @@ he_proc_read(struct atm_dev *dev, loff_t *pos, char *page)
/* eeprom routines -- see 4.7 */
u8
read_prom_byte
(
struct
he_dev
*
he_dev
,
int
addr
)
static
u8
read_prom_byte
(
struct
he_dev
*
he_dev
,
int
addr
)
{
u32
val
=
0
,
tmp_read
=
0
;
int
i
,
j
=
0
;
...
...
drivers/atm/idt77252.c
浏览文件 @
e1ec1b8c
...
...
@@ -2016,8 +2016,7 @@ idt77252_send_skb(struct atm_vcc *vcc, struct sk_buff *skb, int oam)
return
0
;
}
int
idt77252_send
(
struct
atm_vcc
*
vcc
,
struct
sk_buff
*
skb
)
static
int
idt77252_send
(
struct
atm_vcc
*
vcc
,
struct
sk_buff
*
skb
)
{
return
idt77252_send_skb
(
vcc
,
skb
,
0
);
}
...
...
@@ -3072,8 +3071,7 @@ idt77252_dev_open(struct idt77252_dev *card)
return
0
;
}
void
idt77252_dev_close
(
struct
atm_dev
*
dev
)
static
void
idt77252_dev_close
(
struct
atm_dev
*
dev
)
{
struct
idt77252_dev
*
card
=
dev
->
dev_data
;
u32
conf
;
...
...
drivers/atm/iphase.c
浏览文件 @
e1ec1b8c
...
...
@@ -958,6 +958,7 @@ static void ia_suni_pm7345_init (IADEV *iadev)
/***************************** IA_LIB END *****************************/
#ifdef CONFIG_ATM_IA_DEBUG
static
int
tcnter
=
0
;
static
void
xdump
(
u_char
*
cp
,
int
length
,
char
*
prefix
)
{
...
...
@@ -992,6 +993,7 @@ static void xdump( u_char* cp, int length, char* prefix )
}
}
/* close xdump(... */
#endif
/* CONFIG_ATM_IA_DEBUG */
static
struct
atm_dev
*
ia_boards
=
NULL
;
...
...
drivers/net/Kconfig
浏览文件 @
e1ec1b8c
...
...
@@ -2555,7 +2555,7 @@ config NIU
config PASEMI_MAC
tristate "PA Semi 1/10Gbit MAC"
depends on PPC
64
&& PCI
depends on PPC
_PASEMI
&& PCI
select PHYLIB
select INET_LRO
help
...
...
drivers/net/bfin_mac.c
浏览文件 @
e1ec1b8c
...
...
@@ -575,7 +575,6 @@ static void adjust_tx_list(void)
static
int
bf537mac_hard_start_xmit
(
struct
sk_buff
*
skb
,
struct
net_device
*
dev
)
{
struct
bf537mac_local
*
lp
=
netdev_priv
(
dev
);
unsigned
int
data
;
current_tx_ptr
->
skb
=
skb
;
...
...
@@ -634,7 +633,6 @@ static int bf537mac_hard_start_xmit(struct sk_buff *skb,
static
void
bf537mac_rx
(
struct
net_device
*
dev
)
{
struct
sk_buff
*
skb
,
*
new_skb
;
struct
bf537mac_local
*
lp
=
netdev_priv
(
dev
);
unsigned
short
len
;
/* allocate a new skb for next time receive */
...
...
drivers/net/bonding/bond_sysfs.c
浏览文件 @
e1ec1b8c
...
...
@@ -341,6 +341,7 @@ static ssize_t bonding_store_slaves(struct device *d,
if
(
command
[
0
]
==
'-'
)
{
dev
=
NULL
;
original_mtu
=
0
;
bond_for_each_slave
(
bond
,
slave
,
i
)
if
(
strnicmp
(
slave
->
dev
->
name
,
ifname
,
IFNAMSIZ
)
==
0
)
{
dev
=
slave
->
dev
;
...
...
drivers/net/forcedeth.c
浏览文件 @
e1ec1b8c
...
...
@@ -1854,6 +1854,7 @@ static int nv_start_xmit(struct sk_buff *skb, struct net_device *dev)
struct
ring_desc
*
start_tx
;
struct
ring_desc
*
prev_tx
;
struct
nv_skb_map
*
prev_tx_ctx
;
unsigned
long
flags
;
/* add fragments to entries count */
for
(
i
=
0
;
i
<
fragments
;
i
++
)
{
...
...
@@ -1863,10 +1864,10 @@ static int nv_start_xmit(struct sk_buff *skb, struct net_device *dev)
empty_slots
=
nv_get_empty_tx_slots
(
np
);
if
(
unlikely
(
empty_slots
<=
entries
))
{
spin_lock_irq
(
&
np
->
lock
);
spin_lock_irq
save
(
&
np
->
lock
,
flags
);
netif_stop_queue
(
dev
);
np
->
tx_stop
=
1
;
spin_unlock_irq
(
&
np
->
lock
);
spin_unlock_irq
restore
(
&
np
->
lock
,
flags
);
return
NETDEV_TX_BUSY
;
}
...
...
@@ -1929,13 +1930,13 @@ static int nv_start_xmit(struct sk_buff *skb, struct net_device *dev)
tx_flags_extra
=
skb
->
ip_summed
==
CHECKSUM_PARTIAL
?
NV_TX2_CHECKSUM_L3
|
NV_TX2_CHECKSUM_L4
:
0
;
spin_lock_irq
(
&
np
->
lock
);
spin_lock_irq
save
(
&
np
->
lock
,
flags
);
/* set tx flags */
start_tx
->
flaglen
|=
cpu_to_le32
(
tx_flags
|
tx_flags_extra
);
np
->
put_tx
.
orig
=
put_tx
;
spin_unlock_irq
(
&
np
->
lock
);
spin_unlock_irq
restore
(
&
np
->
lock
,
flags
);
dprintk
(
KERN_DEBUG
"%s: nv_start_xmit: entries %d queued for transmission. tx_flags_extra: %x
\n
"
,
dev
->
name
,
entries
,
tx_flags_extra
);
...
...
@@ -1971,6 +1972,7 @@ static int nv_start_xmit_optimized(struct sk_buff *skb, struct net_device *dev)
struct
ring_desc_ex
*
prev_tx
;
struct
nv_skb_map
*
prev_tx_ctx
;
struct
nv_skb_map
*
start_tx_ctx
;
unsigned
long
flags
;
/* add fragments to entries count */
for
(
i
=
0
;
i
<
fragments
;
i
++
)
{
...
...
@@ -1980,10 +1982,10 @@ static int nv_start_xmit_optimized(struct sk_buff *skb, struct net_device *dev)
empty_slots
=
nv_get_empty_tx_slots
(
np
);
if
(
unlikely
(
empty_slots
<=
entries
))
{
spin_lock_irq
(
&
np
->
lock
);
spin_lock_irq
save
(
&
np
->
lock
,
flags
);
netif_stop_queue
(
dev
);
np
->
tx_stop
=
1
;
spin_unlock_irq
(
&
np
->
lock
);
spin_unlock_irq
restore
(
&
np
->
lock
,
flags
);
return
NETDEV_TX_BUSY
;
}
...
...
@@ -2059,7 +2061,7 @@ static int nv_start_xmit_optimized(struct sk_buff *skb, struct net_device *dev)
start_tx
->
txvlan
=
0
;
}
spin_lock_irq
(
&
np
->
lock
);
spin_lock_irq
save
(
&
np
->
lock
,
flags
);
if
(
np
->
tx_limit
)
{
/* Limit the number of outstanding tx. Setup all fragments, but
...
...
@@ -2085,7 +2087,7 @@ static int nv_start_xmit_optimized(struct sk_buff *skb, struct net_device *dev)
start_tx
->
flaglen
|=
cpu_to_le32
(
tx_flags
|
tx_flags_extra
);
np
->
put_tx
.
ex
=
put_tx
;
spin_unlock_irq
(
&
np
->
lock
);
spin_unlock_irq
restore
(
&
np
->
lock
,
flags
);
dprintk
(
KERN_DEBUG
"%s: nv_start_xmit_optimized: entries %d queued for transmission. tx_flags_extra: %x
\n
"
,
dev
->
name
,
entries
,
tx_flags_extra
);
...
...
drivers/net/ibm_newemac/core.c
浏览文件 @
e1ec1b8c
...
...
@@ -1242,8 +1242,8 @@ static int emac_close(struct net_device *ndev)
static
inline
u16
emac_tx_csum
(
struct
emac_instance
*
dev
,
struct
sk_buff
*
skb
)
{
if
(
emac_has_feature
(
dev
,
EMAC_FTR_HAS_TAH
&&
skb
->
ip_summed
==
CHECKSUM_PARTIAL
))
{
if
(
emac_has_feature
(
dev
,
EMAC_FTR_HAS_TAH
)
&&
(
skb
->
ip_summed
==
CHECKSUM_PARTIAL
))
{
++
dev
->
stats
.
tx_packets_csum
;
return
EMAC_TX_CTRL_TAH_CSUM
;
}
...
...
drivers/net/s2io.c
浏览文件 @
e1ec1b8c
...
...
@@ -86,7 +86,7 @@
#include "s2io.h"
#include "s2io-regs.h"
#define DRV_VERSION "2.0.26.
19
"
#define DRV_VERSION "2.0.26.
20
"
/* S2io Driver name & version. */
static
char
s2io_driver_name
[]
=
"Neterion"
;
...
...
drivers/net/tulip/eeprom.c
浏览文件 @
e1ec1b8c
...
...
@@ -343,6 +343,12 @@ int __devinit tulip_read_eeprom(struct net_device *dev, int location, int addr_l
void
__iomem
*
ee_addr
=
tp
->
base_addr
+
CSR9
;
int
read_cmd
=
location
|
(
EE_READ_CMD
<<
addr_len
);
/* If location is past the end of what we can address, don't
* read some other location (ie truncate). Just return zero.
*/
if
(
location
>
(
1
<<
addr_len
)
-
1
)
return
0
;
iowrite32
(
EE_ENB
&
~
EE_CS
,
ee_addr
);
iowrite32
(
EE_ENB
,
ee_addr
);
...
...
drivers/net/tulip/tulip_core.c
浏览文件 @
e1ec1b8c
...
...
@@ -1437,6 +1437,7 @@ static int __devinit tulip_init_one (struct pci_dev *pdev,
EEPROM.
*/
ee_data
=
tp
->
eeprom
;
memset
(
ee_data
,
0
,
sizeof
(
tp
->
eeprom
));
sum
=
0
;
if
(
chip_idx
==
LC82C168
)
{
for
(
i
=
0
;
i
<
3
;
i
++
)
{
...
...
@@ -1458,8 +1459,12 @@ static int __devinit tulip_init_one (struct pci_dev *pdev,
/* A serial EEPROM interface, we read now and sort it out later. */
int
sa_offset
=
0
;
int
ee_addr_size
=
tulip_read_eeprom
(
dev
,
0xff
,
8
)
&
0x40000
?
8
:
6
;
int
ee_max_addr
=
((
1
<<
ee_addr_size
)
-
1
)
*
sizeof
(
u16
);
for
(
i
=
0
;
i
<
sizeof
(
tp
->
eeprom
);
i
+=
2
)
{
if
(
ee_max_addr
>
sizeof
(
tp
->
eeprom
))
ee_max_addr
=
sizeof
(
tp
->
eeprom
);
for
(
i
=
0
;
i
<
ee_max_addr
;
i
+=
sizeof
(
u16
))
{
u16
data
=
tulip_read_eeprom
(
dev
,
i
/
2
,
ee_addr_size
);
ee_data
[
i
]
=
data
&
0xff
;
ee_data
[
i
+
1
]
=
data
>>
8
;
...
...
drivers/net/usb/Kconfig
浏览文件 @
e1ec1b8c
...
...
@@ -129,7 +129,7 @@ config USB_USBNET
config USB_NET_AX8817X
tristate "ASIX AX88xxx Based USB 2.0 Ethernet Adapters"
depends on USB_USBNET
&& NET_ETHERNET
depends on USB_USBNET
select CRC32
default y
help
...
...
drivers/net/usb/dm9601.c
浏览文件 @
e1ec1b8c
...
...
@@ -354,7 +354,7 @@ static void dm9601_set_multicast(struct net_device *net)
struct
dev_mc_list
*
mc_list
=
net
->
mc_list
;
int
i
;
for
(
i
=
0
;
i
<
net
->
mc_count
;
i
++
)
{
for
(
i
=
0
;
i
<
net
->
mc_count
;
i
++
,
mc_list
=
mc_list
->
next
)
{
u32
crc
=
ether_crc
(
ETH_ALEN
,
mc_list
->
dmi_addr
)
>>
26
;
hashes
[
crc
>>
3
]
|=
1
<<
(
crc
&
0x7
);
}
...
...
drivers/net/usb/pegasus.c
浏览文件 @
e1ec1b8c
...
...
@@ -1128,12 +1128,8 @@ pegasus_get_settings(struct net_device *dev, struct ethtool_cmd *ecmd)
{
pegasus_t
*
pegasus
;
if
(
in_atomic
())
return
0
;
pegasus
=
netdev_priv
(
dev
);
mii_ethtool_gset
(
&
pegasus
->
mii
,
ecmd
);
return
0
;
}
...
...
drivers/net/wan/lapbether.c
浏览文件 @
e1ec1b8c
...
...
@@ -58,7 +58,7 @@ struct lapbethdev {
struct
net_device_stats
stats
;
/* some statistics */
};
static
struct
list_head
lapbeth_devices
=
LIST_HEAD_INIT
(
lapbeth_devices
);
static
LIST_HEAD
(
lapbeth_devices
);
/* ------------------------------------------------------------------------ */
...
...
drivers/net/wireless/b43/dma.c
浏览文件 @
e1ec1b8c
...
...
@@ -574,6 +574,7 @@ static int setup_rx_descbuffer(struct b43_dmaring *ring,
}
if
(
b43_dma_mapping_error
(
ring
,
dmaaddr
,
ring
->
rx_buffersize
,
0
))
{
b43err
(
ring
->
dev
->
wl
,
"RX DMA buffer allocation failed
\n
"
);
dev_kfree_skb_any
(
skb
);
return
-
EIO
;
}
...
...
@@ -829,8 +830,12 @@ struct b43_dmaring *b43_setup_dmaring(struct b43_wldev *dev,
DMA_TO_DEVICE
);
if
(
b43_dma_mapping_error
(
ring
,
dma_test
,
b43_txhdr_size
(
dev
),
1
))
b43_txhdr_size
(
dev
),
1
))
{
b43err
(
dev
->
wl
,
"TXHDR DMA allocation failed
\n
"
);
goto
err_kfree_txhdr_cache
;
}
}
dma_unmap_single
(
dev
->
dev
->
dev
,
...
...
drivers/net/wireless/b43/pcmcia.c
浏览文件 @
e1ec1b8c
...
...
@@ -91,6 +91,8 @@ static int __devinit b43_pcmcia_probe(struct pcmcia_device *dev)
dev
->
conf
.
ConfigBase
=
parse
.
config
.
base
;
dev
->
conf
.
Present
=
parse
.
config
.
rmask
[
0
];
dev
->
conf
.
Attributes
=
CONF_ENABLE_IRQ
;
dev
->
conf
.
IntType
=
INT_MEMORY_AND_IO
;
dev
->
io
.
BasePort2
=
0
;
dev
->
io
.
NumPorts2
=
0
;
...
...
@@ -112,8 +114,8 @@ static int __devinit b43_pcmcia_probe(struct pcmcia_device *dev)
if
(
res
!=
CS_SUCCESS
)
goto
err_disable
;
dev
->
irq
.
Attributes
=
IRQ_TYPE_DYNAMIC_SHARING
|
IRQ_FIRST_SHARED
;
dev
->
irq
.
IRQInfo1
=
IRQ_LEVEL_ID
|
IRQ_SHARE_ID
;
dev
->
irq
.
Attributes
=
IRQ_TYPE_DYNAMIC_SHARING
;
dev
->
irq
.
IRQInfo1
=
IRQ_LEVEL_ID
;
dev
->
irq
.
Handler
=
NULL
;
/* The handler is registered later. */
dev
->
irq
.
Instance
=
NULL
;
res
=
pcmcia_request_irq
(
dev
,
&
dev
->
irq
);
...
...
drivers/net/wireless/libertas/if_cs.c
浏览文件 @
e1ec1b8c
...
...
@@ -677,9 +677,7 @@ static int if_cs_get_int_status(struct lbs_private *priv, u8 *ireg)
/* Card has a command result for us */
if
(
*
ireg
&
IF_CS_C_S_CMD_UPLD_RDY
)
{
spin_lock
(
&
priv
->
driver_lock
);
ret
=
if_cs_receive_cmdres
(
priv
,
priv
->
upld_buf
,
&
priv
->
upld_len
);
spin_unlock
(
&
priv
->
driver_lock
);
if
(
ret
<
0
)
lbs_pr_err
(
"could not receive cmd from card
\n
"
);
}
...
...
drivers/net/wireless/rt2x00/rt2x00dev.c
浏览文件 @
e1ec1b8c
...
...
@@ -1252,11 +1252,20 @@ int rt2x00lib_suspend(struct rt2x00_dev *rt2x00dev, pm_message_t state)
exit:
/*
* Set device mode to sleep for power management.
* Set device mode to sleep for power management,
* on some hardware this call seems to consistently fail.
* From the specifications it is hard to tell why it fails,
* and if this is a "bad thing".
* Overall it is safe to just ignore the failure and
* continue suspending. The only downside is that the
* device will not be in optimal power save mode, but with
* the radio and the other components already disabled the
* device is as good as disabled.
*/
retval
=
rt2x00dev
->
ops
->
lib
->
set_device_state
(
rt2x00dev
,
STATE_SLEEP
);
if
(
retval
)
return
retval
;
WARNING
(
rt2x00dev
,
"Device failed to enter sleep state, "
"continue suspending.
\n
"
);
return
0
;
}
...
...
include/linux/netdevice.h
浏览文件 @
e1ec1b8c
...
...
@@ -1105,12 +1105,14 @@ static inline int netif_is_multiqueue(const struct net_device *dev)
}
/* Use this variant when it is known for sure that it
* is executing from interrupt context.
* is executing from hardware interrupt context or with hardware interrupts
* disabled.
*/
extern
void
dev_kfree_skb_irq
(
struct
sk_buff
*
skb
);
/* Use this variant in places where it could be invoked
* either from interrupt or non-interrupt context.
* from either hardware interrupt or other context, with hardware interrupts
* either disabled or enabled.
*/
extern
void
dev_kfree_skb_any
(
struct
sk_buff
*
skb
);
...
...
include/net/llc.h
浏览文件 @
e1ec1b8c
...
...
@@ -65,7 +65,6 @@ struct llc_sap {
extern
struct
list_head
llc_sap_list
;
extern
rwlock_t
llc_sap_list_lock
;
extern
unsigned
char
llc_station_mac_sa
[
ETH_ALEN
];
extern
int
llc_rcv
(
struct
sk_buff
*
skb
,
struct
net_device
*
dev
,
struct
packet_type
*
pt
,
struct
net_device
*
orig_dev
);
...
...
include/net/llc_pdu.h
浏览文件 @
e1ec1b8c
...
...
@@ -381,7 +381,7 @@ static inline void llc_pdu_init_as_xid_cmd(struct sk_buff *skb,
xid_info
->
fmt_id
=
LLC_XID_FMT_ID
;
/* 0x81 */
xid_info
->
type
=
svcs_supported
;
xid_info
->
rw
=
rx_window
<<
1
;
/* size of receive window */
skb_put
(
skb
,
3
);
skb_put
(
skb
,
sizeof
(
struct
llc_xid_info
)
);
}
/**
...
...
@@ -406,7 +406,7 @@ static inline void llc_pdu_init_as_xid_rsp(struct sk_buff *skb,
xid_info
->
fmt_id
=
LLC_XID_FMT_ID
;
xid_info
->
type
=
svcs_supported
;
xid_info
->
rw
=
rx_window
<<
1
;
skb_put
(
skb
,
3
);
skb_put
(
skb
,
sizeof
(
struct
llc_xid_info
)
);
}
/* LLC Type 2 FRMR response information field format */
...
...
include/net/llc_sap.h
浏览文件 @
e1ec1b8c
#ifndef LLC_SAP_H
#define LLC_SAP_H
#include <asm/types.h>
/*
* Copyright (c) 1997 by Procom Technology,Inc.
* 2001-2003 by Arnaldo Carvalho de Melo <acme@conectiva.com.br>
...
...
@@ -19,8 +22,8 @@ struct sock;
extern
void
llc_sap_rtn_pdu
(
struct
llc_sap
*
sap
,
struct
sk_buff
*
skb
);
extern
void
llc_save_primitive
(
struct
sock
*
sk
,
struct
sk_buff
*
skb
,
unsigned
char
prim
);
extern
struct
sk_buff
*
llc_alloc_frame
(
struct
sock
*
sk
,
struct
net_device
*
dev
);
extern
struct
sk_buff
*
llc_alloc_frame
(
struct
sock
*
sk
,
struct
net_device
*
dev
,
u8
type
,
u32
data_size
);
extern
void
llc_build_and_send_test_pkt
(
struct
llc_sap
*
sap
,
struct
sk_buff
*
skb
,
...
...
net/8021q/vlan.c
浏览文件 @
e1ec1b8c
...
...
@@ -384,17 +384,35 @@ static void vlan_sync_address(struct net_device *dev,
memcpy
(
vlan
->
real_dev_addr
,
dev
->
dev_addr
,
ETH_ALEN
);
}
static
void
__vlan_device_event
(
struct
net_device
*
dev
,
unsigned
long
event
)
{
switch
(
event
)
{
case
NETDEV_CHANGENAME
:
vlan_proc_rem_dev
(
dev
);
if
(
vlan_proc_add_dev
(
dev
)
<
0
)
pr_warning
(
"8021q: failed to change proc name for %s
\n
"
,
dev
->
name
);
break
;
}
}
static
int
vlan_device_event
(
struct
notifier_block
*
unused
,
unsigned
long
event
,
void
*
ptr
)
{
struct
net_device
*
dev
=
ptr
;
struct
vlan_group
*
grp
=
__vlan_find_group
(
dev
->
ifindex
)
;
struct
vlan_group
*
grp
;
int
i
,
flgs
;
struct
net_device
*
vlandev
;
if
(
dev_net
(
dev
)
!=
&
init_net
)
return
NOTIFY_DONE
;
if
(
is_vlan_dev
(
dev
))
{
__vlan_device_event
(
dev
,
event
);
goto
out
;
}
grp
=
__vlan_find_group
(
dev
->
ifindex
);
if
(
!
grp
)
goto
out
;
...
...
net/8021q/vlan.h
浏览文件 @
e1ec1b8c
...
...
@@ -45,4 +45,9 @@ void vlan_netlink_fini(void);
extern
struct
rtnl_link_ops
vlan_link_ops
;
static
inline
int
is_vlan_dev
(
struct
net_device
*
dev
)
{
return
dev
->
priv_flags
&
IFF_802_1Q_VLAN
;
}
#endif
/* !(__BEN_VLAN_802_1Q_INC__) */
net/8021q/vlanproc.c
浏览文件 @
e1ec1b8c
...
...
@@ -210,11 +210,6 @@ int vlan_proc_rem_dev(struct net_device *vlandev)
* The following few functions build the content of /proc/net/vlan/config
*/
static
inline
int
is_vlan_dev
(
struct
net_device
*
dev
)
{
return
dev
->
priv_flags
&
IFF_802_1Q_VLAN
;
}
/* start read of /proc/net/vlan/config */
static
void
*
vlan_seq_start
(
struct
seq_file
*
seq
,
loff_t
*
pos
)
__acquires
(
dev_base_lock
)
...
...
net/bluetooth/af_bluetooth.c
浏览文件 @
e1ec1b8c
...
...
@@ -53,6 +53,30 @@
/* Bluetooth sockets */
#define BT_MAX_PROTO 8
static
struct
net_proto_family
*
bt_proto
[
BT_MAX_PROTO
];
static
struct
lock_class_key
bt_slock_key
[
BT_MAX_PROTO
];
static
struct
lock_class_key
bt_lock_key
[
BT_MAX_PROTO
];
static
const
char
*
bt_key_strings
[
BT_MAX_PROTO
]
=
{
"sk_lock-AF_BLUETOOTH-BTPROTO_L2CAP"
,
"sk_lock-AF_BLUETOOTH-BTPROTO_HCI"
,
"sk_lock-AF_BLUETOOTH-BTPROTO_SCO"
,
"sk_lock-AF_BLUETOOTH-BTPROTO_RFCOMM"
,
"sk_lock-AF_BLUETOOTH-BTPROTO_BNEP"
,
"sk_lock-AF_BLUETOOTH-BTPROTO_CMTP"
,
"sk_lock-AF_BLUETOOTH-BTPROTO_HIDP"
,
"sk_lock-AF_BLUETOOTH-BTPROTO_AVDTP"
,
};
static
const
char
*
bt_slock_key_strings
[
BT_MAX_PROTO
]
=
{
"slock-AF_BLUETOOTH-BTPROTO_L2CAP"
,
"slock-AF_BLUETOOTH-BTPROTO_HCI"
,
"slock-AF_BLUETOOTH-BTPROTO_SCO"
,
"slock-AF_BLUETOOTH-BTPROTO_RFCOMM"
,
"slock-AF_BLUETOOTH-BTPROTO_BNEP"
,
"slock-AF_BLUETOOTH-BTPROTO_CMTP"
,
"slock-AF_BLUETOOTH-BTPROTO_HIDP"
,
"slock-AF_BLUETOOTH-BTPROTO_AVDTP"
,
};
static
DEFINE_RWLOCK
(
bt_proto_lock
);
int
bt_sock_register
(
int
proto
,
struct
net_proto_family
*
ops
)
...
...
@@ -95,6 +119,21 @@ int bt_sock_unregister(int proto)
}
EXPORT_SYMBOL
(
bt_sock_unregister
);
static
void
bt_reclassify_sock_lock
(
struct
socket
*
sock
,
int
proto
)
{
struct
sock
*
sk
=
sock
->
sk
;
if
(
!
sk
)
return
;
BUG_ON
(
sock_owned_by_user
(
sk
));
sock_lock_init_class_and_name
(
sk
,
bt_slock_key_strings
[
proto
],
&
bt_slock_key
[
proto
],
bt_key_strings
[
proto
],
&
bt_lock_key
[
proto
]);
}
static
int
bt_sock_create
(
struct
net
*
net
,
struct
socket
*
sock
,
int
proto
)
{
int
err
;
...
...
@@ -117,6 +156,7 @@ static int bt_sock_create(struct net *net, struct socket *sock, int proto)
if
(
bt_proto
[
proto
]
&&
try_module_get
(
bt_proto
[
proto
]
->
owner
))
{
err
=
bt_proto
[
proto
]
->
create
(
net
,
sock
,
proto
);
bt_reclassify_sock_lock
(
sock
,
proto
);
module_put
(
bt_proto
[
proto
]
->
owner
);
}
...
...
net/bluetooth/hci_sock.c
浏览文件 @
e1ec1b8c
...
...
@@ -84,7 +84,7 @@ static struct hci_sec_filter hci_sec_filter = {
};
static
struct
bt_sock_list
hci_sk_list
=
{
.
lock
=
RW_LOCK_UNLOCKED
.
lock
=
__RW_LOCK_UNLOCKED
(
hci_sk_list
.
lock
)
};
/* Send frame to RAW socket */
...
...
net/bluetooth/l2cap.c
浏览文件 @
e1ec1b8c
...
...
@@ -62,7 +62,7 @@ static u32 l2cap_feat_mask = 0x0000;
static
const
struct
proto_ops
l2cap_sock_ops
;
static
struct
bt_sock_list
l2cap_sk_list
=
{
.
lock
=
RW_LOCK_UNLOCKED
.
lock
=
__RW_LOCK_UNLOCKED
(
l2cap_sk_list
.
lock
)
};
static
void
__l2cap_sock_close
(
struct
sock
*
sk
,
int
reason
);
...
...
net/bluetooth/rfcomm/core.c
浏览文件 @
e1ec1b8c
...
...
@@ -423,8 +423,8 @@ static int __rfcomm_dlc_close(struct rfcomm_dlc *d, int err)
rfcomm_dlc_lock
(
d
);
d
->
state
=
BT_CLOSED
;
d
->
state_change
(
d
,
err
);
rfcomm_dlc_unlock
(
d
);
d
->
state_change
(
d
,
err
);
skb_queue_purge
(
&
d
->
tx_queue
);
rfcomm_dlc_unlink
(
d
);
...
...
net/bluetooth/rfcomm/sock.c
浏览文件 @
e1ec1b8c
...
...
@@ -60,7 +60,7 @@
static
const
struct
proto_ops
rfcomm_sock_ops
;
static
struct
bt_sock_list
rfcomm_sk_list
=
{
.
lock
=
RW_LOCK_UNLOCKED
.
lock
=
__RW_LOCK_UNLOCKED
(
rfcomm_sk_list
.
lock
)
};
static
void
rfcomm_sock_close
(
struct
sock
*
sk
);
...
...
net/bluetooth/rfcomm/tty.c
浏览文件 @
e1ec1b8c
...
...
@@ -570,12 +570,7 @@ static void rfcomm_dev_state_change(struct rfcomm_dlc *dlc, int err)
return
;
rfcomm_dev_del
(
dev
);
/* We have to drop DLC lock here, otherwise
rfcomm_dev_put() will dead lock if it's
the last reference. */
rfcomm_dlc_unlock
(
dlc
);
rfcomm_dev_put
(
dev
);
rfcomm_dlc_lock
(
dlc
);
}
}
else
tty_hangup
(
dev
->
tty
);
...
...
net/bluetooth/sco.c
浏览文件 @
e1ec1b8c
...
...
@@ -58,7 +58,7 @@
static
const
struct
proto_ops
sco_sock_ops
;
static
struct
bt_sock_list
sco_sk_list
=
{
.
lock
=
RW_LOCK_UNLOCKED
.
lock
=
__RW_LOCK_UNLOCKED
(
sco_sk_list
.
lock
)
};
static
void
__sco_chan_add
(
struct
sco_conn
*
conn
,
struct
sock
*
sk
,
struct
sock
*
parent
);
...
...
net/ipv4/inet_fragment.c
浏览文件 @
e1ec1b8c
...
...
@@ -86,7 +86,10 @@ EXPORT_SYMBOL(inet_frags_fini);
void
inet_frags_exit_net
(
struct
netns_frags
*
nf
,
struct
inet_frags
*
f
)
{
nf
->
low_thresh
=
0
;
local_bh_disable
();
inet_frag_evictor
(
nf
,
f
);
local_bh_enable
();
}
EXPORT_SYMBOL
(
inet_frags_exit_net
);
...
...
net/ipv4/ip_forward.c
浏览文件 @
e1ec1b8c
...
...
@@ -85,7 +85,7 @@ int ip_forward(struct sk_buff *skb)
if
(
opt
->
is_strictroute
&&
rt
->
rt_dst
!=
rt
->
rt_gateway
)
goto
sr_failed
;
if
(
unlikely
(
skb
->
len
>
dst_mtu
(
&
rt
->
u
.
dst
)
&&
if
(
unlikely
(
skb
->
len
>
dst_mtu
(
&
rt
->
u
.
dst
)
&&
!
skb_is_gso
(
skb
)
&&
(
ip_hdr
(
skb
)
->
frag_off
&
htons
(
IP_DF
)))
&&
!
skb
->
local_df
)
{
IP_INC_STATS
(
IPSTATS_MIB_FRAGFAILS
);
icmp_send
(
skb
,
ICMP_DEST_UNREACH
,
ICMP_FRAG_NEEDED
,
...
...
net/ipv4/udp.c
浏览文件 @
e1ec1b8c
...
...
@@ -1551,14 +1551,14 @@ static void *udp_seq_start(struct seq_file *seq, loff_t *pos)
__acquires
(
udp_hash_lock
)
{
read_lock
(
&
udp_hash_lock
);
return
*
pos
?
udp_get_idx
(
seq
,
*
pos
-
1
)
:
(
void
*
)
1
;
return
*
pos
?
udp_get_idx
(
seq
,
*
pos
-
1
)
:
SEQ_START_TOKEN
;
}
static
void
*
udp_seq_next
(
struct
seq_file
*
seq
,
void
*
v
,
loff_t
*
pos
)
{
struct
sock
*
sk
;
if
(
v
==
(
void
*
)
1
)
if
(
v
==
SEQ_START_TOKEN
)
sk
=
udp_get_idx
(
seq
,
0
);
else
sk
=
udp_get_next
(
seq
,
v
);
...
...
net/ipv6/addrconf.c
浏览文件 @
e1ec1b8c
...
...
@@ -776,6 +776,7 @@ static int ipv6_create_tempaddr(struct inet6_ifaddr *ifp, struct inet6_ifaddr *i
struct
inet6_dev
*
idev
=
ifp
->
idev
;
struct
in6_addr
addr
,
*
tmpaddr
;
unsigned
long
tmp_prefered_lft
,
tmp_valid_lft
,
tmp_cstamp
,
tmp_tstamp
;
unsigned
long
regen_advance
;
int
tmp_plen
;
int
ret
=
0
;
int
max_addresses
;
...
...
@@ -836,8 +837,23 @@ static int ipv6_create_tempaddr(struct inet6_ifaddr *ifp, struct inet6_ifaddr *i
tmp_tstamp
=
ifp
->
tstamp
;
spin_unlock_bh
(
&
ifp
->
lock
);
regen_advance
=
idev
->
cnf
.
regen_max_retry
*
idev
->
cnf
.
dad_transmits
*
idev
->
nd_parms
->
retrans_time
/
HZ
;
write_unlock
(
&
idev
->
lock
);
/* A temporary address is created only if this calculated Preferred
* Lifetime is greater than REGEN_ADVANCE time units. In particular,
* an implementation must not create a temporary address with a zero
* Preferred Lifetime.
*/
if
(
tmp_prefered_lft
<=
regen_advance
)
{
in6_ifa_put
(
ifp
);
in6_dev_put
(
idev
);
ret
=
-
1
;
goto
out
;
}
addr_flags
=
IFA_F_TEMPORARY
;
/* set in addrconf_prefix_rcv() */
if
(
ifp
->
flags
&
IFA_F_OPTIMISTIC
)
...
...
@@ -1834,6 +1850,9 @@ void addrconf_prefix_rcv(struct net_device *dev, u8 *opt, int len)
* lifetimes of an existing temporary address
* when processing a Prefix Information Option.
*/
if
(
ifp
!=
ift
->
ifpub
)
continue
;
spin_lock
(
&
ift
->
lock
);
flags
=
ift
->
flags
;
if
(
ift
->
valid_lft
>
valid_lft
&&
...
...
net/ipv6/icmp.c
浏览文件 @
e1ec1b8c
...
...
@@ -440,10 +440,10 @@ void icmpv6_send(struct sk_buff *skb, int type, int code, __u32 info,
}
if
(
xfrm_decode_session_reverse
(
skb
,
&
fl2
,
AF_INET6
))
goto
out
;
goto
out
_dst_release
;
if
(
ip6_dst_lookup
(
sk
,
&
dst2
,
&
fl
))
goto
out
;
goto
out
_dst_release
;
err
=
xfrm_lookup
(
&
dst2
,
&
fl
,
sk
,
XFRM_LOOKUP_ICMP
);
if
(
err
==
-
ENOENT
)
{
...
...
net/ipv6/ip6_input.c
浏览文件 @
e1ec1b8c
...
...
@@ -234,8 +234,7 @@ int ip6_mc_input(struct sk_buff *skb)
IP6_INC_STATS_BH
(
ip6_dst_idev
(
skb
->
dst
),
IPSTATS_MIB_INMCASTPKTS
);
hdr
=
ipv6_hdr
(
skb
);
deliver
=
unlikely
(
skb
->
dev
->
flags
&
(
IFF_PROMISC
|
IFF_ALLMULTI
))
||
ipv6_chk_mcast_addr
(
skb
->
dev
,
&
hdr
->
daddr
,
NULL
);
deliver
=
ipv6_chk_mcast_addr
(
skb
->
dev
,
&
hdr
->
daddr
,
NULL
);
/*
* IPv6 multicast router mode isnt currently supported.
...
...
net/ipv6/netfilter/nf_conntrack_reasm.c
浏览文件 @
e1ec1b8c
...
...
@@ -171,7 +171,9 @@ static __inline__ void fq_kill(struct nf_ct_frag6_queue *fq)
static
void
nf_ct_frag6_evictor
(
void
)
{
local_bh_disable
();
inet_frag_evictor
(
&
nf_init_frags
,
&
nf_frags
);
local_bh_enable
();
}
static
void
nf_ct_frag6_expire
(
unsigned
long
data
)
...
...
net/llc/af_llc.c
浏览文件 @
e1ec1b8c
...
...
@@ -155,6 +155,9 @@ static int llc_ui_create(struct net *net, struct socket *sock, int protocol)
struct
sock
*
sk
;
int
rc
=
-
ESOCKTNOSUPPORT
;
if
(
!
capable
(
CAP_NET_RAW
))
return
-
EPERM
;
if
(
net
!=
&
init_net
)
return
-
EAFNOSUPPORT
;
...
...
net/llc/llc_c_ac.c
浏览文件 @
e1ec1b8c
...
...
@@ -198,7 +198,7 @@ int llc_conn_ac_send_disc_cmd_p_set_x(struct sock *sk, struct sk_buff *skb)
{
int
rc
=
-
ENOBUFS
;
struct
llc_sock
*
llc
=
llc_sk
(
sk
);
struct
sk_buff
*
nskb
=
llc_alloc_frame
(
sk
,
llc
->
dev
);
struct
sk_buff
*
nskb
=
llc_alloc_frame
(
sk
,
llc
->
dev
,
LLC_PDU_TYPE_U
,
0
);
if
(
nskb
)
{
struct
llc_sap
*
sap
=
llc
->
sap
;
...
...
@@ -223,7 +223,7 @@ int llc_conn_ac_send_dm_rsp_f_set_p(struct sock *sk, struct sk_buff *skb)
{
int
rc
=
-
ENOBUFS
;
struct
llc_sock
*
llc
=
llc_sk
(
sk
);
struct
sk_buff
*
nskb
=
llc_alloc_frame
(
sk
,
llc
->
dev
);
struct
sk_buff
*
nskb
=
llc_alloc_frame
(
sk
,
llc
->
dev
,
LLC_PDU_TYPE_U
,
0
);
if
(
nskb
)
{
struct
llc_sap
*
sap
=
llc
->
sap
;
...
...
@@ -249,7 +249,7 @@ int llc_conn_ac_send_dm_rsp_f_set_1(struct sock *sk, struct sk_buff *skb)
{
int
rc
=
-
ENOBUFS
;
struct
llc_sock
*
llc
=
llc_sk
(
sk
);
struct
sk_buff
*
nskb
=
llc_alloc_frame
(
sk
,
llc
->
dev
);
struct
sk_buff
*
nskb
=
llc_alloc_frame
(
sk
,
llc
->
dev
,
LLC_PDU_TYPE_U
,
0
);
if
(
nskb
)
{
struct
llc_sap
*
sap
=
llc
->
sap
;
...
...
@@ -282,7 +282,8 @@ int llc_conn_ac_send_frmr_rsp_f_set_x(struct sock *sk, struct sk_buff *skb)
llc_pdu_decode_pf_bit
(
skb
,
&
f_bit
);
else
f_bit
=
0
;
nskb
=
llc_alloc_frame
(
sk
,
llc
->
dev
);
nskb
=
llc_alloc_frame
(
sk
,
llc
->
dev
,
LLC_PDU_TYPE_U
,
sizeof
(
struct
llc_frmr_info
));
if
(
nskb
)
{
struct
llc_sap
*
sap
=
llc
->
sap
;
...
...
@@ -306,7 +307,8 @@ int llc_conn_ac_resend_frmr_rsp_f_set_0(struct sock *sk, struct sk_buff *skb)
{
int
rc
=
-
ENOBUFS
;
struct
llc_sock
*
llc
=
llc_sk
(
sk
);
struct
sk_buff
*
nskb
=
llc_alloc_frame
(
sk
,
llc
->
dev
);
struct
sk_buff
*
nskb
=
llc_alloc_frame
(
sk
,
llc
->
dev
,
LLC_PDU_TYPE_U
,
sizeof
(
struct
llc_frmr_info
));
if
(
nskb
)
{
struct
llc_sap
*
sap
=
llc
->
sap
;
...
...
@@ -336,7 +338,8 @@ int llc_conn_ac_resend_frmr_rsp_f_set_p(struct sock *sk, struct sk_buff *skb)
struct
llc_sock
*
llc
=
llc_sk
(
sk
);
llc_pdu_decode_pf_bit
(
skb
,
&
f_bit
);
nskb
=
llc_alloc_frame
(
sk
,
llc
->
dev
);
nskb
=
llc_alloc_frame
(
sk
,
llc
->
dev
,
LLC_PDU_TYPE_U
,
sizeof
(
struct
llc_frmr_info
));
if
(
nskb
)
{
struct
llc_sap
*
sap
=
llc
->
sap
;
struct
llc_pdu_sn
*
pdu
=
llc_pdu_sn_hdr
(
skb
);
...
...
@@ -424,7 +427,7 @@ int llc_conn_ac_resend_i_xxx_x_set_0_or_send_rr(struct sock *sk,
struct
llc_pdu_sn
*
pdu
=
llc_pdu_sn_hdr
(
skb
);
int
rc
=
-
ENOBUFS
;
struct
llc_sock
*
llc
=
llc_sk
(
sk
);
struct
sk_buff
*
nskb
=
llc_alloc_frame
(
sk
,
llc
->
dev
);
struct
sk_buff
*
nskb
=
llc_alloc_frame
(
sk
,
llc
->
dev
,
LLC_PDU_TYPE_U
,
0
);
if
(
nskb
)
{
struct
llc_sap
*
sap
=
llc
->
sap
;
...
...
@@ -459,7 +462,7 @@ int llc_conn_ac_send_rej_cmd_p_set_1(struct sock *sk, struct sk_buff *skb)
{
int
rc
=
-
ENOBUFS
;
struct
llc_sock
*
llc
=
llc_sk
(
sk
);
struct
sk_buff
*
nskb
=
llc_alloc_frame
(
sk
,
llc
->
dev
);
struct
sk_buff
*
nskb
=
llc_alloc_frame
(
sk
,
llc
->
dev
,
LLC_PDU_TYPE_S
,
0
);
if
(
nskb
)
{
struct
llc_sap
*
sap
=
llc
->
sap
;
...
...
@@ -483,7 +486,7 @@ int llc_conn_ac_send_rej_rsp_f_set_1(struct sock *sk, struct sk_buff *skb)
{
int
rc
=
-
ENOBUFS
;
struct
llc_sock
*
llc
=
llc_sk
(
sk
);
struct
sk_buff
*
nskb
=
llc_alloc_frame
(
sk
,
llc
->
dev
);
struct
sk_buff
*
nskb
=
llc_alloc_frame
(
sk
,
llc
->
dev
,
LLC_PDU_TYPE_S
,
0
);
if
(
nskb
)
{
struct
llc_sap
*
sap
=
llc
->
sap
;
...
...
@@ -507,7 +510,7 @@ int llc_conn_ac_send_rej_xxx_x_set_0(struct sock *sk, struct sk_buff *skb)
{
int
rc
=
-
ENOBUFS
;
struct
llc_sock
*
llc
=
llc_sk
(
sk
);
struct
sk_buff
*
nskb
=
llc_alloc_frame
(
sk
,
llc
->
dev
);
struct
sk_buff
*
nskb
=
llc_alloc_frame
(
sk
,
llc
->
dev
,
LLC_PDU_TYPE_S
,
0
);
if
(
nskb
)
{
struct
llc_sap
*
sap
=
llc
->
sap
;
...
...
@@ -531,7 +534,7 @@ int llc_conn_ac_send_rnr_cmd_p_set_1(struct sock *sk, struct sk_buff *skb)
{
int
rc
=
-
ENOBUFS
;
struct
llc_sock
*
llc
=
llc_sk
(
sk
);
struct
sk_buff
*
nskb
=
llc_alloc_frame
(
sk
,
llc
->
dev
);
struct
sk_buff
*
nskb
=
llc_alloc_frame
(
sk
,
llc
->
dev
,
LLC_PDU_TYPE_S
,
0
);
if
(
nskb
)
{
struct
llc_sap
*
sap
=
llc
->
sap
;
...
...
@@ -555,7 +558,7 @@ int llc_conn_ac_send_rnr_rsp_f_set_1(struct sock *sk, struct sk_buff *skb)
{
int
rc
=
-
ENOBUFS
;
struct
llc_sock
*
llc
=
llc_sk
(
sk
);
struct
sk_buff
*
nskb
=
llc_alloc_frame
(
sk
,
llc
->
dev
);
struct
sk_buff
*
nskb
=
llc_alloc_frame
(
sk
,
llc
->
dev
,
LLC_PDU_TYPE_S
,
0
);
if
(
nskb
)
{
struct
llc_sap
*
sap
=
llc
->
sap
;
...
...
@@ -579,7 +582,7 @@ int llc_conn_ac_send_rnr_xxx_x_set_0(struct sock *sk, struct sk_buff *skb)
{
int
rc
=
-
ENOBUFS
;
struct
llc_sock
*
llc
=
llc_sk
(
sk
);
struct
sk_buff
*
nskb
=
llc_alloc_frame
(
sk
,
llc
->
dev
);
struct
sk_buff
*
nskb
=
llc_alloc_frame
(
sk
,
llc
->
dev
,
LLC_PDU_TYPE_S
,
0
);
if
(
nskb
)
{
struct
llc_sap
*
sap
=
llc
->
sap
;
...
...
@@ -615,7 +618,7 @@ int llc_conn_ac_opt_send_rnr_xxx_x_set_0(struct sock *sk, struct sk_buff *skb)
{
int
rc
=
-
ENOBUFS
;
struct
llc_sock
*
llc
=
llc_sk
(
sk
);
struct
sk_buff
*
nskb
=
llc_alloc_frame
(
sk
,
llc
->
dev
);
struct
sk_buff
*
nskb
=
llc_alloc_frame
(
sk
,
llc
->
dev
,
LLC_PDU_TYPE_S
,
0
);
if
(
nskb
)
{
struct
llc_sap
*
sap
=
llc
->
sap
;
...
...
@@ -639,7 +642,7 @@ int llc_conn_ac_send_rr_cmd_p_set_1(struct sock *sk, struct sk_buff *skb)
{
int
rc
=
-
ENOBUFS
;
struct
llc_sock
*
llc
=
llc_sk
(
sk
);
struct
sk_buff
*
nskb
=
llc_alloc_frame
(
sk
,
llc
->
dev
);
struct
sk_buff
*
nskb
=
llc_alloc_frame
(
sk
,
llc
->
dev
,
LLC_PDU_TYPE_S
,
0
);
if
(
nskb
)
{
struct
llc_sap
*
sap
=
llc
->
sap
;
...
...
@@ -663,7 +666,7 @@ int llc_conn_ac_send_rr_rsp_f_set_1(struct sock *sk, struct sk_buff *skb)
{
int
rc
=
-
ENOBUFS
;
struct
llc_sock
*
llc
=
llc_sk
(
sk
);
struct
sk_buff
*
nskb
=
llc_alloc_frame
(
sk
,
llc
->
dev
);
struct
sk_buff
*
nskb
=
llc_alloc_frame
(
sk
,
llc
->
dev
,
LLC_PDU_TYPE_S
,
0
);
if
(
nskb
)
{
struct
llc_sap
*
sap
=
llc
->
sap
;
...
...
@@ -688,7 +691,7 @@ int llc_conn_ac_send_ack_rsp_f_set_1(struct sock *sk, struct sk_buff *skb)
{
int
rc
=
-
ENOBUFS
;
struct
llc_sock
*
llc
=
llc_sk
(
sk
);
struct
sk_buff
*
nskb
=
llc_alloc_frame
(
sk
,
llc
->
dev
);
struct
sk_buff
*
nskb
=
llc_alloc_frame
(
sk
,
llc
->
dev
,
LLC_PDU_TYPE_S
,
0
);
if
(
nskb
)
{
struct
llc_sap
*
sap
=
llc
->
sap
;
...
...
@@ -712,7 +715,7 @@ int llc_conn_ac_send_rr_xxx_x_set_0(struct sock *sk, struct sk_buff *skb)
{
int
rc
=
-
ENOBUFS
;
struct
llc_sock
*
llc
=
llc_sk
(
sk
);
struct
sk_buff
*
nskb
=
llc_alloc_frame
(
sk
,
llc
->
dev
);
struct
sk_buff
*
nskb
=
llc_alloc_frame
(
sk
,
llc
->
dev
,
LLC_PDU_TYPE_S
,
0
);
if
(
nskb
)
{
struct
llc_sap
*
sap
=
llc
->
sap
;
...
...
@@ -736,7 +739,7 @@ int llc_conn_ac_send_ack_xxx_x_set_0(struct sock *sk, struct sk_buff *skb)
{
int
rc
=
-
ENOBUFS
;
struct
llc_sock
*
llc
=
llc_sk
(
sk
);
struct
sk_buff
*
nskb
=
llc_alloc_frame
(
sk
,
llc
->
dev
);
struct
sk_buff
*
nskb
=
llc_alloc_frame
(
sk
,
llc
->
dev
,
LLC_PDU_TYPE_S
,
0
);
if
(
nskb
)
{
struct
llc_sap
*
sap
=
llc
->
sap
;
...
...
@@ -770,7 +773,7 @@ int llc_conn_ac_send_sabme_cmd_p_set_x(struct sock *sk, struct sk_buff *skb)
{
int
rc
=
-
ENOBUFS
;
struct
llc_sock
*
llc
=
llc_sk
(
sk
);
struct
sk_buff
*
nskb
=
llc_alloc_frame
(
sk
,
llc
->
dev
);
struct
sk_buff
*
nskb
=
llc_alloc_frame
(
sk
,
llc
->
dev
,
LLC_PDU_TYPE_U
,
0
);
if
(
nskb
)
{
struct
llc_sap
*
sap
=
llc
->
sap
;
...
...
@@ -799,7 +802,7 @@ int llc_conn_ac_send_ua_rsp_f_set_p(struct sock *sk, struct sk_buff *skb)
u8
f_bit
;
int
rc
=
-
ENOBUFS
;
struct
llc_sock
*
llc
=
llc_sk
(
sk
);
struct
sk_buff
*
nskb
=
llc_alloc_frame
(
sk
,
llc
->
dev
);
struct
sk_buff
*
nskb
=
llc_alloc_frame
(
sk
,
llc
->
dev
,
LLC_PDU_TYPE_U
,
0
);
llc_pdu_decode_pf_bit
(
skb
,
&
f_bit
);
if
(
nskb
)
{
...
...
@@ -956,7 +959,7 @@ static int llc_conn_ac_send_rr_rsp_f_set_ackpf(struct sock *sk,
{
int
rc
=
-
ENOBUFS
;
struct
llc_sock
*
llc
=
llc_sk
(
sk
);
struct
sk_buff
*
nskb
=
llc_alloc_frame
(
sk
,
llc
->
dev
);
struct
sk_buff
*
nskb
=
llc_alloc_frame
(
sk
,
llc
->
dev
,
LLC_PDU_TYPE_S
,
0
);
if
(
nskb
)
{
struct
llc_sap
*
sap
=
llc
->
sap
;
...
...
net/llc/llc_core.c
浏览文件 @
e1ec1b8c
...
...
@@ -25,8 +25,6 @@
LIST_HEAD
(
llc_sap_list
);
DEFINE_RWLOCK
(
llc_sap_list_lock
);
unsigned
char
llc_station_mac_sa
[
ETH_ALEN
];
/**
* llc_sap_alloc - allocates and initializes sap.
*
...
...
@@ -37,8 +35,8 @@ static struct llc_sap *llc_sap_alloc(void)
struct
llc_sap
*
sap
=
kzalloc
(
sizeof
(
*
sap
),
GFP_ATOMIC
);
if
(
sap
)
{
/* sap->laddr.mac - leave as a null, it's filled by bind */
sap
->
state
=
LLC_SAP_STATE_ACTIVE
;
memcpy
(
sap
->
laddr
.
mac
,
llc_station_mac_sa
,
ETH_ALEN
);
rwlock_init
(
&
sap
->
sk_list
.
lock
);
atomic_set
(
&
sap
->
refcnt
,
1
);
}
...
...
@@ -167,10 +165,6 @@ static int __init llc_init(void)
if
(
dev
!=
NULL
)
dev
=
next_net_device
(
dev
);
if
(
dev
!=
NULL
)
memcpy
(
llc_station_mac_sa
,
dev
->
dev_addr
,
ETH_ALEN
);
else
memset
(
llc_station_mac_sa
,
0
,
ETH_ALEN
);
dev_add_pack
(
&
llc_packet_type
);
dev_add_pack
(
&
llc_tr_packet_type
);
return
0
;
...
...
@@ -185,7 +179,6 @@ static void __exit llc_exit(void)
module_init
(
llc_init
);
module_exit
(
llc_exit
);
EXPORT_SYMBOL
(
llc_station_mac_sa
);
EXPORT_SYMBOL
(
llc_sap_list
);
EXPORT_SYMBOL
(
llc_sap_list_lock
);
EXPORT_SYMBOL
(
llc_sap_find
);
...
...
net/llc/llc_input.c
浏览文件 @
e1ec1b8c
...
...
@@ -117,8 +117,12 @@ static inline int llc_fixup_skb(struct sk_buff *skb)
skb_pull
(
skb
,
llc_len
);
if
(
skb
->
protocol
==
htons
(
ETH_P_802_2
))
{
__be16
pdulen
=
eth_hdr
(
skb
)
->
h_proto
;
u16
data_size
=
ntohs
(
pdulen
)
-
llc_len
;
s32
data_size
=
ntohs
(
pdulen
)
-
llc_len
;
if
(
data_size
<
0
||
((
skb_tail_pointer
(
skb
)
-
(
u8
*
)
pdu
)
-
llc_len
)
<
data_size
)
return
0
;
if
(
unlikely
(
pskb_trim_rcsum
(
skb
,
data_size
)))
return
0
;
}
...
...
net/llc/llc_pdu.c
浏览文件 @
e1ec1b8c
...
...
@@ -241,7 +241,7 @@ void llc_pdu_init_as_frmr_rsp(struct sk_buff *skb, struct llc_pdu_sn *prev_pdu,
FRMR_INFO_SET_PDU_INFO_2LONG_IND
(
frmr_info
,
vzyxw
);
FRMR_INFO_SET_PDU_INVALID_Nr_IND
(
frmr_info
,
vzyxw
);
FRMR_INFO_SET_PDU_INVALID_Ns_IND
(
frmr_info
,
vzyxw
);
skb_put
(
skb
,
5
);
skb_put
(
skb
,
sizeof
(
struct
llc_frmr_info
)
);
}
/**
...
...
net/llc/llc_s_ac.c
浏览文件 @
e1ec1b8c
...
...
@@ -103,7 +103,8 @@ int llc_sap_action_send_xid_r(struct llc_sap *sap, struct sk_buff *skb)
llc_pdu_decode_sa
(
skb
,
mac_da
);
llc_pdu_decode_da
(
skb
,
mac_sa
);
llc_pdu_decode_ssap
(
skb
,
&
dsap
);
nskb
=
llc_alloc_frame
(
NULL
,
skb
->
dev
);
nskb
=
llc_alloc_frame
(
NULL
,
skb
->
dev
,
LLC_PDU_TYPE_U
,
sizeof
(
struct
llc_xid_info
));
if
(
!
nskb
)
goto
out
;
llc_pdu_header_init
(
nskb
,
LLC_PDU_TYPE_U
,
sap
->
laddr
.
lsap
,
dsap
,
...
...
@@ -144,11 +145,15 @@ int llc_sap_action_send_test_r(struct llc_sap *sap, struct sk_buff *skb)
u8
mac_da
[
ETH_ALEN
],
mac_sa
[
ETH_ALEN
],
dsap
;
struct
sk_buff
*
nskb
;
int
rc
=
1
;
u32
data_size
;
llc_pdu_decode_sa
(
skb
,
mac_da
);
llc_pdu_decode_da
(
skb
,
mac_sa
);
llc_pdu_decode_ssap
(
skb
,
&
dsap
);
nskb
=
llc_alloc_frame
(
NULL
,
skb
->
dev
);
/* The test request command is type U (llc_len = 3) */
data_size
=
ntohs
(
eth_hdr
(
skb
)
->
h_proto
)
-
3
;
nskb
=
llc_alloc_frame
(
NULL
,
skb
->
dev
,
LLC_PDU_TYPE_U
,
data_size
);
if
(
!
nskb
)
goto
out
;
llc_pdu_header_init
(
nskb
,
LLC_PDU_TYPE_U
,
sap
->
laddr
.
lsap
,
dsap
,
...
...
net/llc/llc_sap.c
浏览文件 @
e1ec1b8c
...
...
@@ -24,20 +24,41 @@
#include <net/tcp_states.h>
#include <linux/llc.h>
static
int
llc_mac_header_len
(
unsigned
short
devtype
)
{
switch
(
devtype
)
{
case
ARPHRD_ETHER
:
case
ARPHRD_LOOPBACK
:
return
sizeof
(
struct
ethhdr
);
#ifdef CONFIG_TR
case
ARPHRD_IEEE802_TR
:
return
sizeof
(
struct
trh_hdr
);
#endif
}
return
0
;
}
/**
* llc_alloc_frame - allocates sk_buff for frame
* @dev: network device this skb will be sent over
* @type: pdu type to allocate
* @data_size: data size to allocate
*
* Allocates an sk_buff for frame and initializes sk_buff fields.
* Returns allocated skb or %NULL when out of memory.
*/
struct
sk_buff
*
llc_alloc_frame
(
struct
sock
*
sk
,
struct
net_device
*
dev
)
struct
sk_buff
*
llc_alloc_frame
(
struct
sock
*
sk
,
struct
net_device
*
dev
,
u8
type
,
u32
data_size
)
{
struct
sk_buff
*
skb
=
alloc_skb
(
128
,
GFP_ATOMIC
);
int
hlen
=
type
==
LLC_PDU_TYPE_U
?
3
:
4
;
struct
sk_buff
*
skb
;
hlen
+=
llc_mac_header_len
(
dev
->
type
);
skb
=
alloc_skb
(
hlen
+
data_size
,
GFP_ATOMIC
);
if
(
skb
)
{
skb_reset_mac_header
(
skb
);
skb_reserve
(
skb
,
50
);
skb_reserve
(
skb
,
hlen
);
skb_reset_network_header
(
skb
);
skb_reset_transport_header
(
skb
);
skb
->
protocol
=
htons
(
ETH_P_802_2
);
...
...
net/llc/llc_station.c
浏览文件 @
e1ec1b8c
...
...
@@ -253,13 +253,14 @@ static int llc_station_ac_inc_xid_r_cnt_by_1(struct sk_buff *skb)
static
int
llc_station_ac_send_null_dsap_xid_c
(
struct
sk_buff
*
skb
)
{
int
rc
=
1
;
struct
sk_buff
*
nskb
=
llc_alloc_frame
(
NULL
,
skb
->
dev
);
struct
sk_buff
*
nskb
=
llc_alloc_frame
(
NULL
,
skb
->
dev
,
LLC_PDU_TYPE_U
,
sizeof
(
struct
llc_xid_info
));
if
(
!
nskb
)
goto
out
;
llc_pdu_header_init
(
nskb
,
LLC_PDU_TYPE_U
,
0
,
0
,
LLC_PDU_CMD
);
llc_pdu_init_as_xid_cmd
(
nskb
,
LLC_XID_NULL_CLASS_2
,
127
);
rc
=
llc_mac_hdr_init
(
nskb
,
llc_station_mac_sa
,
llc_station_mac_sa
);
rc
=
llc_mac_hdr_init
(
nskb
,
skb
->
dev
->
dev_addr
,
skb
->
dev
->
dev_addr
);
if
(
unlikely
(
rc
))
goto
free
;
llc_station_send_pdu
(
nskb
);
...
...
@@ -274,7 +275,8 @@ static int llc_station_ac_send_xid_r(struct sk_buff *skb)
{
u8
mac_da
[
ETH_ALEN
],
dsap
;
int
rc
=
1
;
struct
sk_buff
*
nskb
=
llc_alloc_frame
(
NULL
,
skb
->
dev
);
struct
sk_buff
*
nskb
=
llc_alloc_frame
(
NULL
,
skb
->
dev
,
LLC_PDU_TYPE_U
,
sizeof
(
struct
llc_xid_info
));
if
(
!
nskb
)
goto
out
;
...
...
@@ -283,7 +285,7 @@ static int llc_station_ac_send_xid_r(struct sk_buff *skb)
llc_pdu_decode_ssap
(
skb
,
&
dsap
);
llc_pdu_header_init
(
nskb
,
LLC_PDU_TYPE_U
,
0
,
dsap
,
LLC_PDU_RSP
);
llc_pdu_init_as_xid_rsp
(
nskb
,
LLC_XID_NULL_CLASS_2
,
127
);
rc
=
llc_mac_hdr_init
(
nskb
,
llc_station_mac_sa
,
mac_da
);
rc
=
llc_mac_hdr_init
(
nskb
,
skb
->
dev
->
dev_addr
,
mac_da
);
if
(
unlikely
(
rc
))
goto
free
;
llc_station_send_pdu
(
nskb
);
...
...
@@ -298,7 +300,12 @@ static int llc_station_ac_send_test_r(struct sk_buff *skb)
{
u8
mac_da
[
ETH_ALEN
],
dsap
;
int
rc
=
1
;
struct
sk_buff
*
nskb
=
llc_alloc_frame
(
NULL
,
skb
->
dev
);
u32
data_size
;
struct
sk_buff
*
nskb
;
/* The test request command is type U (llc_len = 3) */
data_size
=
ntohs
(
eth_hdr
(
skb
)
->
h_proto
)
-
3
;
nskb
=
llc_alloc_frame
(
NULL
,
skb
->
dev
,
LLC_PDU_TYPE_U
,
data_size
);
if
(
!
nskb
)
goto
out
;
...
...
@@ -307,7 +314,7 @@ static int llc_station_ac_send_test_r(struct sk_buff *skb)
llc_pdu_decode_ssap
(
skb
,
&
dsap
);
llc_pdu_header_init
(
nskb
,
LLC_PDU_TYPE_U
,
0
,
dsap
,
LLC_PDU_RSP
);
llc_pdu_init_as_test_rsp
(
nskb
,
skb
);
rc
=
llc_mac_hdr_init
(
nskb
,
llc_station_mac_sa
,
mac_da
);
rc
=
llc_mac_hdr_init
(
nskb
,
skb
->
dev
->
dev_addr
,
mac_da
);
if
(
unlikely
(
rc
))
goto
free
;
llc_station_send_pdu
(
nskb
);
...
...
net/mac80211/ieee80211.c
浏览文件 @
e1ec1b8c
...
...
@@ -375,6 +375,18 @@ static int ieee80211_open(struct net_device *dev)
if
(
need_hw_reconfig
)
ieee80211_hw_config
(
local
);
/*
* ieee80211_sta_work is disabled while network interface
* is down. Therefore, some configuration changes may not
* yet be effective. Trigger execution of ieee80211_sta_work
* to fix this.
*/
if
(
sdata
->
vif
.
type
==
IEEE80211_IF_TYPE_STA
||
sdata
->
vif
.
type
==
IEEE80211_IF_TYPE_IBSS
)
{
struct
ieee80211_if_sta
*
ifsta
=
&
sdata
->
u
.
sta
;
queue_work
(
local
->
hw
.
workqueue
,
&
ifsta
->
work
);
}
netif_start_queue
(
dev
);
return
0
;
...
...
net/mac80211/ieee80211_sta.c
浏览文件 @
e1ec1b8c
...
...
@@ -360,7 +360,7 @@ static u32 ieee80211_handle_erp_ie(struct ieee80211_sub_if_data *sdata,
struct
ieee80211_bss_conf
*
bss_conf
=
&
sdata
->
bss_conf
;
struct
ieee80211_if_sta
*
ifsta
=
&
sdata
->
u
.
sta
;
bool
use_protection
=
(
erp_value
&
WLAN_ERP_USE_PROTECTION
)
!=
0
;
bool
preamble_mode
=
(
erp_value
&
WLAN_ERP_BARKER_PREAMBLE
)
!
=
0
;
bool
use_short_preamble
=
(
erp_value
&
WLAN_ERP_BARKER_PREAMBLE
)
=
=
0
;
DECLARE_MAC_BUF
(
mac
);
u32
changed
=
0
;
...
...
@@ -376,16 +376,15 @@ static u32 ieee80211_handle_erp_ie(struct ieee80211_sub_if_data *sdata,
changed
|=
BSS_CHANGED_ERP_CTS_PROT
;
}
if
(
preamble_mod
e
!=
bss_conf
->
use_short_preamble
)
{
if
(
use_short_preambl
e
!=
bss_conf
->
use_short_preamble
)
{
if
(
net_ratelimit
())
{
printk
(
KERN_DEBUG
"%s: switched to %s barker preamble"
" (BSSID=%s)
\n
"
,
sdata
->
dev
->
name
,
(
preamble_mode
==
WLAN_ERP_PREAMBLE_SHORT
)
?
"short"
:
"long"
,
use_short_preamble
?
"short"
:
"long"
,
print_mac
(
mac
,
ifsta
->
bssid
));
}
bss_conf
->
use_short_preamble
=
preamble_mod
e
;
bss_conf
->
use_short_preamble
=
use_short_preambl
e
;
changed
|=
BSS_CHANGED_ERP_PREAMBLE
;
}
...
...
net/rose/af_rose.c
浏览文件 @
e1ec1b8c
...
...
@@ -598,17 +598,24 @@ static int rose_release(struct socket *sock)
if
(
sk
==
NULL
)
return
0
;
sock_hold
(
sk
);
sock_orphan
(
sk
);
lock_sock
(
sk
);
rose
=
rose_sk
(
sk
);
switch
(
rose
->
state
)
{
case
ROSE_STATE_0
:
release_sock
(
sk
);
rose_disconnect
(
sk
,
0
,
-
1
,
-
1
);
lock_sock
(
sk
);
rose_destroy_socket
(
sk
);
break
;
case
ROSE_STATE_2
:
rose
->
neighbour
->
use
--
;
release_sock
(
sk
);
rose_disconnect
(
sk
,
0
,
-
1
,
-
1
);
lock_sock
(
sk
);
rose_destroy_socket
(
sk
);
break
;
...
...
@@ -633,6 +640,8 @@ static int rose_release(struct socket *sock)
}
sock
->
sk
=
NULL
;
release_sock
(
sk
);
sock_put
(
sk
);
return
0
;
}
...
...
net/sched/sch_generic.c
浏览文件 @
e1ec1b8c
...
...
@@ -184,10 +184,22 @@ static inline int qdisc_restart(struct net_device *dev)
void
__qdisc_run
(
struct
net_device
*
dev
)
{
do
{
if
(
!
qdisc_restart
(
dev
))
unsigned
long
start_time
=
jiffies
;
while
(
qdisc_restart
(
dev
))
{
if
(
netif_queue_stopped
(
dev
))
break
;
/*
* Postpone processing if
* 1. another process needs the CPU;
* 2. we've been doing it for too long.
*/
if
(
need_resched
()
||
jiffies
!=
start_time
)
{
netif_schedule
(
dev
);
break
;
}
while
(
!
netif_queue_stopped
(
dev
));
}
}
clear_bit
(
__LINK_STATE_QDISC_RUNNING
,
&
dev
->
state
);
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录