Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
bug2833
cloud-kernel
提交
d252a5e7
cloud-kernel
项目概览
bug2833
/
cloud-kernel
与 Fork 源项目一致
Fork自
openanolis / cloud-kernel
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
cloud-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
d252a5e7
编写于
5月 03, 2009
作者:
D
David S. Miller
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
上级
f0a3a153
1824a989
变更
11
隐藏空白更改
内联
并排
Showing
11 changed file
with
79 addition
and
54 deletion
+79
-54
drivers/net/bonding/bond_main.c
drivers/net/bonding/bond_main.c
+13
-23
drivers/net/cxgb3/t3_hw.c
drivers/net/cxgb3/t3_hw.c
+1
-1
drivers/net/netconsole.c
drivers/net/netconsole.c
+10
-1
drivers/net/usb/smsc95xx.c
drivers/net/usb/smsc95xx.c
+15
-0
drivers/net/usb/smsc95xx.h
drivers/net/usb/smsc95xx.h
+3
-0
drivers/net/virtio_net.c
drivers/net/virtio_net.c
+14
-10
include/linux/netfilter/x_tables.h
include/linux/netfilter/x_tables.h
+2
-2
include/linux/virtio_net.h
include/linux/virtio_net.h
+1
-0
net/core/dev.c
net/core/dev.c
+5
-4
net/core/skbuff.c
net/core/skbuff.c
+14
-13
net/netfilter/Kconfig
net/netfilter/Kconfig
+1
-0
未找到文件。
drivers/net/bonding/bond_main.c
浏览文件 @
d252a5e7
...
...
@@ -2211,33 +2211,24 @@ static int bond_slave_info_query(struct net_device *bond_dev, struct ifslave *in
{
struct
bonding
*
bond
=
netdev_priv
(
bond_dev
);
struct
slave
*
slave
;
int
i
,
found
=
0
;
if
(
info
->
slave_id
<
0
)
{
return
-
ENODEV
;
}
int
i
,
res
=
-
ENODEV
;
read_lock
(
&
bond
->
lock
);
bond_for_each_slave
(
bond
,
slave
,
i
)
{
if
(
i
==
(
int
)
info
->
slave_id
)
{
found
=
1
;
res
=
0
;
strcpy
(
info
->
slave_name
,
slave
->
dev
->
name
);
info
->
link
=
slave
->
link
;
info
->
state
=
slave
->
state
;
info
->
link_failure_count
=
slave
->
link_failure_count
;
break
;
}
}
read_unlock
(
&
bond
->
lock
);
if
(
found
)
{
strcpy
(
info
->
slave_name
,
slave
->
dev
->
name
);
info
->
link
=
slave
->
link
;
info
->
state
=
slave
->
state
;
info
->
link_failure_count
=
slave
->
link_failure_count
;
}
else
{
return
-
ENODEV
;
}
return
0
;
return
res
;
}
/*-------------------------------- Monitoring -------------------------------*/
...
...
@@ -5173,16 +5164,15 @@ int bond_create(char *name, struct bond_params *params)
up_write
(
&
bonding_rwsem
);
rtnl_unlock
();
/* allows sysfs registration of net device */
res
=
bond_create_sysfs_entry
(
netdev_priv
(
bond_dev
));
if
(
res
<
0
)
{
rtnl_lock
();
down_write
(
&
bonding_rwsem
);
bond_deinit
(
bond_dev
);
unregister_netdevice
(
bond_dev
);
goto
out_rtnl
;
}
if
(
res
<
0
)
goto
out_unreg
;
return
0
;
out_unreg:
rtnl_lock
();
down_write
(
&
bonding_rwsem
);
unregister_netdevice
(
bond_dev
);
out_bond:
bond_deinit
(
bond_dev
);
out_netdev:
...
...
drivers/net/cxgb3/t3_hw.c
浏览文件 @
d252a5e7
...
...
@@ -3784,7 +3784,7 @@ int t3_prep_adapter(struct adapter *adapter, const struct adapter_info *ai,
adapter
->
params
.
info
=
ai
;
adapter
->
params
.
nports
=
ai
->
nports0
+
ai
->
nports1
;
adapter
->
params
.
chan_map
=
!!
ai
->
nports0
|
(
!!
ai
->
nports1
<<
1
);
adapter
->
params
.
chan_map
=
(
!!
ai
->
nports0
)
|
(
!!
ai
->
nports1
<<
1
);
adapter
->
params
.
rev
=
t3_read_reg
(
adapter
,
A_PL_REV
);
/*
* We used to only run the "adapter check task" once a second if
...
...
drivers/net/netconsole.c
浏览文件 @
d252a5e7
...
...
@@ -664,7 +664,7 @@ static int netconsole_netdev_event(struct notifier_block *this,
struct
netconsole_target
*
nt
;
struct
net_device
*
dev
=
ptr
;
if
(
!
(
event
==
NETDEV_CHANGENAME
))
if
(
!
(
event
==
NETDEV_CHANGENAME
||
event
==
NETDEV_UNREGISTER
))
goto
done
;
spin_lock_irqsave
(
&
target_list_lock
,
flags
);
...
...
@@ -675,6 +675,15 @@ static int netconsole_netdev_event(struct notifier_block *this,
case
NETDEV_CHANGENAME
:
strlcpy
(
nt
->
np
.
dev_name
,
dev
->
name
,
IFNAMSIZ
);
break
;
case
NETDEV_UNREGISTER
:
if
(
!
nt
->
enabled
)
break
;
netpoll_cleanup
(
&
nt
->
np
);
nt
->
enabled
=
0
;
printk
(
KERN_INFO
"netconsole: network logging stopped"
", interface %s unregistered
\n
"
,
dev
->
name
);
break
;
}
}
netconsole_target_put
(
nt
);
...
...
drivers/net/usb/smsc95xx.c
浏览文件 @
d252a5e7
...
...
@@ -941,6 +941,16 @@ static int smsc95xx_reset(struct usbnet *dev)
if
(
netif_msg_ifup
(
dev
))
devdbg
(
dev
,
"ID_REV = 0x%08x"
,
read_buf
);
/* Configure GPIO pins as LED outputs */
write_buf
=
LED_GPIO_CFG_SPD_LED
|
LED_GPIO_CFG_LNK_LED
|
LED_GPIO_CFG_FDX_LED
;
ret
=
smsc95xx_write_reg
(
dev
,
LED_GPIO_CFG
,
write_buf
);
if
(
ret
<
0
)
{
devwarn
(
dev
,
"Failed to write LED_GPIO_CFG register, ret=%d"
,
ret
);
return
ret
;
}
/* Init Tx */
write_buf
=
0
;
ret
=
smsc95xx_write_reg
(
dev
,
FLOW
,
write_buf
);
...
...
@@ -1231,6 +1241,11 @@ static const struct usb_device_id products[] = {
USB_DEVICE
(
0x0424
,
0x9500
),
.
driver_info
=
(
unsigned
long
)
&
smsc95xx_info
,
},
{
/* SMSC9512/9514 USB Hub & Ethernet Device */
USB_DEVICE
(
0x0424
,
0xec00
),
.
driver_info
=
(
unsigned
long
)
&
smsc95xx_info
,
},
{
},
/* END */
};
MODULE_DEVICE_TABLE
(
usb
,
products
);
...
...
drivers/net/usb/smsc95xx.h
浏览文件 @
d252a5e7
...
...
@@ -99,6 +99,9 @@
#define PM_CTL_WUPS_MULTI_ (0x00000003)
#define LED_GPIO_CFG (0x24)
#define LED_GPIO_CFG_SPD_LED (0x01000000)
#define LED_GPIO_CFG_LNK_LED (0x00100000)
#define LED_GPIO_CFG_FDX_LED (0x00010000)
#define GPIO_CFG (0x28)
...
...
drivers/net/virtio_net.c
浏览文件 @
d252a5e7
...
...
@@ -616,10 +616,11 @@ static int virtnet_open(struct net_device *dev)
static
bool
virtnet_send_command
(
struct
virtnet_info
*
vi
,
u8
class
,
u8
cmd
,
struct
scatterlist
*
data
,
int
out
,
int
in
)
{
struct
scatterlist
sg
[
VIRTNET_SEND_COMMAND_SG_MAX
+
2
];
struct
scatterlist
*
s
,
sg
[
VIRTNET_SEND_COMMAND_SG_MAX
+
2
];
struct
virtio_net_ctrl_hdr
ctrl
;
virtio_net_ctrl_ack
status
=
~
0
;
unsigned
int
tmp
;
int
i
;
/* Caller should know better */
BUG_ON
(
!
virtio_has_feature
(
vi
->
vdev
,
VIRTIO_NET_F_CTRL_VQ
)
||
...
...
@@ -634,7 +635,8 @@ static bool virtnet_send_command(struct virtnet_info *vi, u8 class, u8 cmd,
sg_init_table
(
sg
,
out
+
in
);
sg_set_buf
(
&
sg
[
0
],
&
ctrl
,
sizeof
(
ctrl
));
memcpy
(
&
sg
[
1
],
data
,
sizeof
(
struct
scatterlist
)
*
(
out
+
in
-
2
));
for_each_sg
(
data
,
s
,
out
+
in
-
2
,
i
)
sg_set_buf
(
&
sg
[
i
+
1
],
sg_virt
(
s
),
s
->
length
);
sg_set_buf
(
&
sg
[
out
+
in
-
1
],
&
status
,
sizeof
(
status
));
BUG_ON
(
vi
->
cvq
->
vq_ops
->
add_buf
(
vi
->
cvq
,
sg
,
out
,
in
,
vi
));
...
...
@@ -688,7 +690,7 @@ static void virtnet_set_rx_mode(struct net_device *dev)
promisc
=
((
dev
->
flags
&
IFF_PROMISC
)
!=
0
);
allmulti
=
((
dev
->
flags
&
IFF_ALLMULTI
)
!=
0
);
sg_
set_buf
(
sg
,
&
promisc
,
sizeof
(
promisc
));
sg_
init_one
(
sg
,
&
promisc
,
sizeof
(
promisc
));
if
(
!
virtnet_send_command
(
vi
,
VIRTIO_NET_CTRL_RX
,
VIRTIO_NET_CTRL_RX_PROMISC
,
...
...
@@ -696,7 +698,7 @@ static void virtnet_set_rx_mode(struct net_device *dev)
dev_warn
(
&
dev
->
dev
,
"Failed to %sable promisc mode.
\n
"
,
promisc
?
"en"
:
"dis"
);
sg_
set_buf
(
sg
,
&
allmulti
,
sizeof
(
allmulti
));
sg_
init_one
(
sg
,
&
allmulti
,
sizeof
(
allmulti
));
if
(
!
virtnet_send_command
(
vi
,
VIRTIO_NET_CTRL_RX
,
VIRTIO_NET_CTRL_RX_ALLMULTI
,
...
...
@@ -712,6 +714,8 @@ static void virtnet_set_rx_mode(struct net_device *dev)
return
;
}
sg_init_table
(
sg
,
2
);
/* Store the unicast list and count in the front of the buffer */
mac_data
->
entries
=
dev
->
uc_count
;
addr
=
dev
->
uc_list
;
...
...
@@ -740,24 +744,24 @@ static void virtnet_set_rx_mode(struct net_device *dev)
kfree
(
buf
);
}
static
void
virnet_vlan_rx_add_vid
(
struct
net_device
*
dev
,
u16
vid
)
static
void
vir
t
net_vlan_rx_add_vid
(
struct
net_device
*
dev
,
u16
vid
)
{
struct
virtnet_info
*
vi
=
netdev_priv
(
dev
);
struct
scatterlist
sg
;
sg_
set_buf
(
&
sg
,
&
vid
,
sizeof
(
vid
));
sg_
init_one
(
&
sg
,
&
vid
,
sizeof
(
vid
));
if
(
!
virtnet_send_command
(
vi
,
VIRTIO_NET_CTRL_VLAN
,
VIRTIO_NET_CTRL_VLAN_ADD
,
&
sg
,
1
,
0
))
dev_warn
(
&
dev
->
dev
,
"Failed to add VLAN ID %d.
\n
"
,
vid
);
}
static
void
virnet_vlan_rx_kill_vid
(
struct
net_device
*
dev
,
u16
vid
)
static
void
vir
t
net_vlan_rx_kill_vid
(
struct
net_device
*
dev
,
u16
vid
)
{
struct
virtnet_info
*
vi
=
netdev_priv
(
dev
);
struct
scatterlist
sg
;
sg_
set_buf
(
&
sg
,
&
vid
,
sizeof
(
vid
));
sg_
init_one
(
&
sg
,
&
vid
,
sizeof
(
vid
));
if
(
!
virtnet_send_command
(
vi
,
VIRTIO_NET_CTRL_VLAN
,
VIRTIO_NET_CTRL_VLAN_DEL
,
&
sg
,
1
,
0
))
...
...
@@ -790,8 +794,8 @@ static const struct net_device_ops virtnet_netdev = {
.
ndo_set_mac_address
=
virtnet_set_mac_address
,
.
ndo_set_rx_mode
=
virtnet_set_rx_mode
,
.
ndo_change_mtu
=
virtnet_change_mtu
,
.
ndo_vlan_rx_add_vid
=
virnet_vlan_rx_add_vid
,
.
ndo_vlan_rx_kill_vid
=
virnet_vlan_rx_kill_vid
,
.
ndo_vlan_rx_add_vid
=
vir
t
net_vlan_rx_add_vid
,
.
ndo_vlan_rx_kill_vid
=
vir
t
net_vlan_rx_kill_vid
,
#ifdef CONFIG_NET_POLL_CONTROLLER
.
ndo_poll_controller
=
virtnet_netpoll
,
#endif
...
...
include/linux/netfilter/x_tables.h
浏览文件 @
d252a5e7
...
...
@@ -472,7 +472,7 @@ static inline void xt_info_rdlock_bh(void)
local_bh_disable
();
lock
=
&
__get_cpu_var
(
xt_info_locks
);
if
(
!
lock
->
readers
++
)
if
(
likely
(
!
lock
->
readers
++
)
)
spin_lock
(
&
lock
->
lock
);
}
...
...
@@ -480,7 +480,7 @@ static inline void xt_info_rdunlock_bh(void)
{
struct
xt_info_lock
*
lock
=
&
__get_cpu_var
(
xt_info_locks
);
if
(
!--
lock
->
readers
)
if
(
likely
(
!--
lock
->
readers
)
)
spin_unlock
(
&
lock
->
lock
);
local_bh_enable
();
}
...
...
include/linux/virtio_net.h
浏览文件 @
d252a5e7
...
...
@@ -4,6 +4,7 @@
* compatible drivers/servers. */
#include <linux/types.h>
#include <linux/virtio_config.h>
#include <linux/if_ether.h>
/* The ID for virtio_net */
#define VIRTIO_ID_NET 1
...
...
net/core/dev.c
浏览文件 @
d252a5e7
...
...
@@ -1735,11 +1735,12 @@ u16 skb_tx_hash(const struct net_device *dev, const struct sk_buff *skb)
{
u32
hash
;
if
(
skb_rx_queue_recorded
(
skb
))
{
hash
=
skb_get_rx_queue
(
skb
);
}
else
if
(
skb
->
sk
&&
skb
->
sk
->
sk_hash
)
{
if
(
skb_rx_queue_recorded
(
skb
))
return
skb_get_rx_queue
(
skb
)
%
dev
->
real_num_tx_queues
;
if
(
skb
->
sk
&&
skb
->
sk
->
sk_hash
)
hash
=
skb
->
sk
->
sk_hash
;
}
else
else
hash
=
skb
->
protocol
;
hash
=
jhash_1word
(
hash
,
skb_tx_hashrnd
);
...
...
net/core/skbuff.c
浏览文件 @
d252a5e7
...
...
@@ -1365,9 +1365,8 @@ static void sock_spd_release(struct splice_pipe_desc *spd, unsigned int i)
static
inline
struct
page
*
linear_to_page
(
struct
page
*
page
,
unsigned
int
*
len
,
unsigned
int
*
offset
,
struct
sk_buff
*
skb
)
struct
sk_buff
*
skb
,
struct
sock
*
sk
)
{
struct
sock
*
sk
=
skb
->
sk
;
struct
page
*
p
=
sk
->
sk_sndmsg_page
;
unsigned
int
off
;
...
...
@@ -1405,13 +1404,14 @@ static inline struct page *linear_to_page(struct page *page, unsigned int *len,
*/
static
inline
int
spd_fill_page
(
struct
splice_pipe_desc
*
spd
,
struct
page
*
page
,
unsigned
int
*
len
,
unsigned
int
offset
,
struct
sk_buff
*
skb
,
int
linear
)
struct
sk_buff
*
skb
,
int
linear
,
struct
sock
*
sk
)
{
if
(
unlikely
(
spd
->
nr_pages
==
PIPE_BUFFERS
))
return
1
;
if
(
linear
)
{
page
=
linear_to_page
(
page
,
len
,
&
offset
,
skb
);
page
=
linear_to_page
(
page
,
len
,
&
offset
,
skb
,
sk
);
if
(
!
page
)
return
1
;
}
else
...
...
@@ -1442,7 +1442,8 @@ static inline void __segment_seek(struct page **page, unsigned int *poff,
static
inline
int
__splice_segment
(
struct
page
*
page
,
unsigned
int
poff
,
unsigned
int
plen
,
unsigned
int
*
off
,
unsigned
int
*
len
,
struct
sk_buff
*
skb
,
struct
splice_pipe_desc
*
spd
,
int
linear
)
struct
splice_pipe_desc
*
spd
,
int
linear
,
struct
sock
*
sk
)
{
if
(
!*
len
)
return
1
;
...
...
@@ -1465,7 +1466,7 @@ static inline int __splice_segment(struct page *page, unsigned int poff,
/* the linear region may spread across several pages */
flen
=
min_t
(
unsigned
int
,
flen
,
PAGE_SIZE
-
poff
);
if
(
spd_fill_page
(
spd
,
page
,
&
flen
,
poff
,
skb
,
linear
))
if
(
spd_fill_page
(
spd
,
page
,
&
flen
,
poff
,
skb
,
linear
,
sk
))
return
1
;
__segment_seek
(
&
page
,
&
poff
,
&
plen
,
flen
);
...
...
@@ -1481,8 +1482,8 @@ static inline int __splice_segment(struct page *page, unsigned int poff,
* pipe is full or if we already spliced the requested length.
*/
static
int
__skb_splice_bits
(
struct
sk_buff
*
skb
,
unsigned
int
*
offset
,
unsigned
int
*
len
,
struct
splice_pipe_desc
*
spd
)
unsigned
int
*
len
,
struct
splice_pipe_desc
*
spd
,
struct
sock
*
sk
)
{
int
seg
;
...
...
@@ -1492,7 +1493,7 @@ static int __skb_splice_bits(struct sk_buff *skb, unsigned int *offset,
if
(
__splice_segment
(
virt_to_page
(
skb
->
data
),
(
unsigned
long
)
skb
->
data
&
(
PAGE_SIZE
-
1
),
skb_headlen
(
skb
),
offset
,
len
,
skb
,
spd
,
1
))
offset
,
len
,
skb
,
spd
,
1
,
sk
))
return
1
;
/*
...
...
@@ -1502,7 +1503,7 @@ static int __skb_splice_bits(struct sk_buff *skb, unsigned int *offset,
const
skb_frag_t
*
f
=
&
skb_shinfo
(
skb
)
->
frags
[
seg
];
if
(
__splice_segment
(
f
->
page
,
f
->
page_offset
,
f
->
size
,
offset
,
len
,
skb
,
spd
,
0
))
offset
,
len
,
skb
,
spd
,
0
,
sk
))
return
1
;
}
...
...
@@ -1528,12 +1529,13 @@ int skb_splice_bits(struct sk_buff *skb, unsigned int offset,
.
ops
=
&
sock_pipe_buf_ops
,
.
spd_release
=
sock_spd_release
,
};
struct
sock
*
sk
=
skb
->
sk
;
/*
* __skb_splice_bits() only fails if the output has no room left,
* so no point in going over the frag_list for the error case.
*/
if
(
__skb_splice_bits
(
skb
,
&
offset
,
&
tlen
,
&
spd
))
if
(
__skb_splice_bits
(
skb
,
&
offset
,
&
tlen
,
&
spd
,
sk
))
goto
done
;
else
if
(
!
tlen
)
goto
done
;
...
...
@@ -1545,14 +1547,13 @@ int skb_splice_bits(struct sk_buff *skb, unsigned int offset,
struct
sk_buff
*
list
=
skb_shinfo
(
skb
)
->
frag_list
;
for
(;
list
&&
tlen
;
list
=
list
->
next
)
{
if
(
__skb_splice_bits
(
list
,
&
offset
,
&
tlen
,
&
spd
))
if
(
__skb_splice_bits
(
list
,
&
offset
,
&
tlen
,
&
spd
,
sk
))
break
;
}
}
done:
if
(
spd
.
nr_pages
)
{
struct
sock
*
sk
=
skb
->
sk
;
int
ret
;
/*
...
...
net/netfilter/Kconfig
浏览文件 @
d252a5e7
...
...
@@ -837,6 +837,7 @@ config NETFILTER_XT_MATCH_SOCKET
depends on NETFILTER_TPROXY
depends on NETFILTER_XTABLES
depends on NETFILTER_ADVANCED
depends on !NF_CONNTRACK || NF_CONNTRACK
select NF_DEFRAG_IPV4
help
This option adds a `socket' match, which can be used to match
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录