Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
kernel_linux
提交
9c119ba5
K
kernel_linux
项目概览
OpenHarmony
/
kernel_linux
上一次同步 3 年多
通知
13
Star
8
Fork
2
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
kernel_linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
9c119ba5
编写于
2月 03, 2010
作者:
D
David S. Miller
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
上级
a4b97f20
fdd3d631
变更
23
隐藏空白更改
内联
并排
Showing
23 changed file
with
292 addition
and
280 deletion
+292
-280
drivers/bluetooth/Kconfig
drivers/bluetooth/Kconfig
+12
-1
drivers/bluetooth/Makefile
drivers/bluetooth/Makefile
+1
-0
drivers/bluetooth/ath3k.c
drivers/bluetooth/ath3k.c
+187
-0
drivers/bluetooth/bluecard_cs.c
drivers/bluetooth/bluecard_cs.c
+3
-1
drivers/bluetooth/bt3c_cs.c
drivers/bluetooth/bt3c_cs.c
+3
-1
drivers/bluetooth/btuart_cs.c
drivers/bluetooth/btuart_cs.c
+3
-1
drivers/bluetooth/dtl1_cs.c
drivers/bluetooth/dtl1_cs.c
+3
-1
drivers/connector/connector.c
drivers/connector/connector.c
+0
-175
drivers/net/benet/be_main.c
drivers/net/benet/be_main.c
+2
-2
drivers/net/ixgbe/ixgbe_main.c
drivers/net/ixgbe/ixgbe_main.c
+5
-2
drivers/net/netxen/netxen_nic_main.c
drivers/net/netxen/netxen_nic_main.c
+3
-1
drivers/net/sky2.c
drivers/net/sky2.c
+3
-5
drivers/net/usb/cdc_ether.c
drivers/net/usb/cdc_ether.c
+1
-1
include/linux/connector.h
include/linux/connector.h
+0
-32
net/bluetooth/hidp/core.c
net/bluetooth/hidp/core.c
+36
-34
net/bluetooth/l2cap.c
net/bluetooth/l2cap.c
+6
-8
net/dccp/ccid.c
net/dccp/ccid.c
+1
-1
net/dccp/ccid.h
net/dccp/ccid.h
+5
-3
net/dccp/probe.c
net/dccp/probe.c
+2
-2
net/key/af_key.c
net/key/af_key.c
+8
-7
net/netfilter/nf_conntrack_netlink.c
net/netfilter/nf_conntrack_netlink.c
+2
-1
net/netfilter/nf_conntrack_sip.c
net/netfilter/nf_conntrack_sip.c
+1
-1
net/netlink/af_netlink.c
net/netlink/af_netlink.c
+5
-0
未找到文件。
drivers/bluetooth/Kconfig
浏览文件 @
9c119ba5
...
...
@@ -195,5 +195,16 @@ config BT_MRVL_SDIO
Say Y here to compile support for Marvell BT-over-SDIO driver
into the kernel or say M to compile it as module.
endmenu
config BT_ATH3K
tristate "Atheros firmware download driver"
depends on BT_HCIBTUSB
select FW_LOADER
help
Bluetooth firmware download driver.
This driver loads the firmware into the Atheros Bluetooth
chipset.
Say Y here to compile support for "Atheros firmware download driver"
into the kernel or say M to compile it as module (ath3k).
endmenu
drivers/bluetooth/Makefile
浏览文件 @
9c119ba5
...
...
@@ -15,6 +15,7 @@ obj-$(CONFIG_BT_HCIBTUART) += btuart_cs.o
obj-$(CONFIG_BT_HCIBTUSB)
+=
btusb.o
obj-$(CONFIG_BT_HCIBTSDIO)
+=
btsdio.o
obj-$(CONFIG_BT_ATH3K)
+=
ath3k.o
obj-$(CONFIG_BT_MRVL)
+=
btmrvl.o
obj-$(CONFIG_BT_MRVL_SDIO)
+=
btmrvl_sdio.o
...
...
drivers/bluetooth/ath3k.c
0 → 100644
浏览文件 @
9c119ba5
/*
* Copyright (c) 2008-2009 Atheros Communications Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/slab.h>
#include <linux/types.h>
#include <linux/errno.h>
#include <linux/device.h>
#include <linux/firmware.h>
#include <linux/usb.h>
#include <net/bluetooth/bluetooth.h>
#define VERSION "1.0"
static
struct
usb_device_id
ath3k_table
[]
=
{
/* Atheros AR3011 */
{
USB_DEVICE
(
0x0CF3
,
0x3000
)
},
{
}
/* Terminating entry */
};
MODULE_DEVICE_TABLE
(
usb
,
ath3k_table
);
#define USB_REQ_DFU_DNLOAD 1
#define BULK_SIZE 4096
struct
ath3k_data
{
struct
usb_device
*
udev
;
u8
*
fw_data
;
u32
fw_size
;
u32
fw_sent
;
};
static
int
ath3k_load_firmware
(
struct
ath3k_data
*
data
,
unsigned
char
*
firmware
,
int
count
)
{
u8
*
send_buf
;
int
err
,
pipe
,
len
,
size
,
sent
=
0
;
BT_DBG
(
"ath3k %p udev %p"
,
data
,
data
->
udev
);
pipe
=
usb_sndctrlpipe
(
data
->
udev
,
0
);
if
((
usb_control_msg
(
data
->
udev
,
pipe
,
USB_REQ_DFU_DNLOAD
,
USB_TYPE_VENDOR
,
0
,
0
,
firmware
,
20
,
USB_CTRL_SET_TIMEOUT
))
<
0
)
{
BT_ERR
(
"Can't change to loading configuration err"
);
return
-
EBUSY
;
}
sent
+=
20
;
count
-=
20
;
send_buf
=
kmalloc
(
BULK_SIZE
,
GFP_ATOMIC
);
if
(
!
send_buf
)
{
BT_ERR
(
"Can't allocate memory chunk for firmware"
);
return
-
ENOMEM
;
}
while
(
count
)
{
size
=
min_t
(
uint
,
count
,
BULK_SIZE
);
pipe
=
usb_sndbulkpipe
(
data
->
udev
,
0x02
);
memcpy
(
send_buf
,
firmware
+
sent
,
size
);
err
=
usb_bulk_msg
(
data
->
udev
,
pipe
,
send_buf
,
size
,
&
len
,
3000
);
if
(
err
||
(
len
!=
size
))
{
BT_ERR
(
"Error in firmware loading err = %d,"
"len = %d, size = %d"
,
err
,
len
,
size
);
goto
error
;
}
sent
+=
size
;
count
-=
size
;
}
kfree
(
send_buf
);
return
0
;
error:
kfree
(
send_buf
);
return
err
;
}
static
int
ath3k_probe
(
struct
usb_interface
*
intf
,
const
struct
usb_device_id
*
id
)
{
const
struct
firmware
*
firmware
;
struct
usb_device
*
udev
=
interface_to_usbdev
(
intf
);
struct
ath3k_data
*
data
;
int
size
;
BT_DBG
(
"intf %p id %p"
,
intf
,
id
);
if
(
intf
->
cur_altsetting
->
desc
.
bInterfaceNumber
!=
0
)
return
-
ENODEV
;
data
=
kzalloc
(
sizeof
(
*
data
),
GFP_KERNEL
);
if
(
!
data
)
return
-
ENOMEM
;
data
->
udev
=
udev
;
if
(
request_firmware
(
&
firmware
,
"ath3k-1.fw"
,
&
udev
->
dev
)
<
0
)
{
kfree
(
data
);
return
-
EIO
;
}
size
=
max_t
(
uint
,
firmware
->
size
,
4096
);
data
->
fw_data
=
kmalloc
(
size
,
GFP_KERNEL
);
if
(
!
data
->
fw_data
)
{
release_firmware
(
firmware
);
kfree
(
data
);
return
-
ENOMEM
;
}
memcpy
(
data
->
fw_data
,
firmware
->
data
,
firmware
->
size
);
data
->
fw_size
=
firmware
->
size
;
data
->
fw_sent
=
0
;
release_firmware
(
firmware
);
usb_set_intfdata
(
intf
,
data
);
if
(
ath3k_load_firmware
(
data
,
data
->
fw_data
,
data
->
fw_size
))
{
usb_set_intfdata
(
intf
,
NULL
);
return
-
EIO
;
}
return
0
;
}
static
void
ath3k_disconnect
(
struct
usb_interface
*
intf
)
{
struct
ath3k_data
*
data
=
usb_get_intfdata
(
intf
);
BT_DBG
(
"ath3k_disconnect intf %p"
,
intf
);
kfree
(
data
->
fw_data
);
kfree
(
data
);
}
static
struct
usb_driver
ath3k_driver
=
{
.
name
=
"ath3k"
,
.
probe
=
ath3k_probe
,
.
disconnect
=
ath3k_disconnect
,
.
id_table
=
ath3k_table
,
};
static
int
__init
ath3k_init
(
void
)
{
BT_INFO
(
"Atheros AR30xx firmware driver ver %s"
,
VERSION
);
return
usb_register
(
&
ath3k_driver
);
}
static
void
__exit
ath3k_exit
(
void
)
{
usb_deregister
(
&
ath3k_driver
);
}
module_init
(
ath3k_init
);
module_exit
(
ath3k_exit
);
MODULE_AUTHOR
(
"Atheros Communications"
);
MODULE_DESCRIPTION
(
"Atheros AR30xx firmware driver"
);
MODULE_VERSION
(
VERSION
);
MODULE_LICENSE
(
"GPL"
);
MODULE_FIRMWARE
(
"ath3k-1.fw"
);
drivers/bluetooth/bluecard_cs.c
浏览文件 @
9c119ba5
...
...
@@ -503,7 +503,9 @@ static irqreturn_t bluecard_interrupt(int irq, void *dev_inst)
unsigned
int
iobase
;
unsigned
char
reg
;
BUG_ON
(
!
info
->
hdev
);
if
(
!
info
||
!
info
->
hdev
)
/* our irq handler is shared */
return
IRQ_NONE
;
if
(
!
test_bit
(
CARD_READY
,
&
(
info
->
hw_state
)))
return
IRQ_HANDLED
;
...
...
drivers/bluetooth/bt3c_cs.c
浏览文件 @
9c119ba5
...
...
@@ -345,7 +345,9 @@ static irqreturn_t bt3c_interrupt(int irq, void *dev_inst)
int
iir
;
irqreturn_t
r
=
IRQ_NONE
;
BUG_ON
(
!
info
->
hdev
);
if
(
!
info
||
!
info
->
hdev
)
/* our irq handler is shared */
return
IRQ_NONE
;
iobase
=
info
->
p_dev
->
io
.
BasePort1
;
...
...
drivers/bluetooth/btuart_cs.c
浏览文件 @
9c119ba5
...
...
@@ -295,7 +295,9 @@ static irqreturn_t btuart_interrupt(int irq, void *dev_inst)
int
iir
,
lsr
;
irqreturn_t
r
=
IRQ_NONE
;
BUG_ON
(
!
info
->
hdev
);
if
(
!
info
||
!
info
->
hdev
)
/* our irq handler is shared */
return
IRQ_NONE
;
iobase
=
info
->
p_dev
->
io
.
BasePort1
;
...
...
drivers/bluetooth/dtl1_cs.c
浏览文件 @
9c119ba5
...
...
@@ -299,7 +299,9 @@ static irqreturn_t dtl1_interrupt(int irq, void *dev_inst)
int
iir
,
lsr
;
irqreturn_t
r
=
IRQ_NONE
;
BUG_ON
(
!
info
->
hdev
);
if
(
!
info
||
!
info
->
hdev
)
/* our irq handler is shared */
return
IRQ_NONE
;
iobase
=
info
->
p_dev
->
io
.
BasePort1
;
...
...
drivers/connector/connector.c
浏览文件 @
9c119ba5
...
...
@@ -36,17 +36,6 @@ MODULE_LICENSE("GPL");
MODULE_AUTHOR
(
"Evgeniy Polyakov <zbr@ioremap.net>"
);
MODULE_DESCRIPTION
(
"Generic userspace <-> kernelspace connector."
);
static
u32
cn_idx
=
CN_IDX_CONNECTOR
;
static
u32
cn_val
=
CN_VAL_CONNECTOR
;
module_param
(
cn_idx
,
uint
,
0
);
module_param
(
cn_val
,
uint
,
0
);
MODULE_PARM_DESC
(
cn_idx
,
"Connector's main device idx."
);
MODULE_PARM_DESC
(
cn_val
,
"Connector's main device val."
);
static
DEFINE_MUTEX
(
notify_lock
);
static
LIST_HEAD
(
notify_list
);
static
struct
cn_dev
cdev
;
static
int
cn_already_initialized
;
...
...
@@ -209,54 +198,6 @@ static void cn_rx_skb(struct sk_buff *__skb)
}
}
/*
* Notification routing.
*
* Gets id and checks if there are notification request for it's idx
* and val. If there are such requests notify the listeners with the
* given notify event.
*
*/
static
void
cn_notify
(
struct
cb_id
*
id
,
u32
notify_event
)
{
struct
cn_ctl_entry
*
ent
;
mutex_lock
(
&
notify_lock
);
list_for_each_entry
(
ent
,
&
notify_list
,
notify_entry
)
{
int
i
;
struct
cn_notify_req
*
req
;
struct
cn_ctl_msg
*
ctl
=
ent
->
msg
;
int
idx_found
,
val_found
;
idx_found
=
val_found
=
0
;
req
=
(
struct
cn_notify_req
*
)
ctl
->
data
;
for
(
i
=
0
;
i
<
ctl
->
idx_notify_num
;
++
i
,
++
req
)
{
if
(
id
->
idx
>=
req
->
first
&&
id
->
idx
<
req
->
first
+
req
->
range
)
{
idx_found
=
1
;
break
;
}
}
for
(
i
=
0
;
i
<
ctl
->
val_notify_num
;
++
i
,
++
req
)
{
if
(
id
->
val
>=
req
->
first
&&
id
->
val
<
req
->
first
+
req
->
range
)
{
val_found
=
1
;
break
;
}
}
if
(
idx_found
&&
val_found
)
{
struct
cn_msg
m
=
{
.
ack
=
notify_event
,
};
memcpy
(
&
m
.
id
,
id
,
sizeof
(
m
.
id
));
cn_netlink_send
(
&
m
,
ctl
->
group
,
GFP_KERNEL
);
}
}
mutex_unlock
(
&
notify_lock
);
}
/*
* Callback add routing - adds callback with given ID and name.
* If there is registered callback with the same ID it will not be added.
...
...
@@ -276,8 +217,6 @@ int cn_add_callback(struct cb_id *id, char *name,
if
(
err
)
return
err
;
cn_notify
(
id
,
0
);
return
0
;
}
EXPORT_SYMBOL_GPL
(
cn_add_callback
);
...
...
@@ -295,111 +234,9 @@ void cn_del_callback(struct cb_id *id)
struct
cn_dev
*
dev
=
&
cdev
;
cn_queue_del_callback
(
dev
->
cbdev
,
id
);
cn_notify
(
id
,
1
);
}
EXPORT_SYMBOL_GPL
(
cn_del_callback
);
/*
* Checks two connector's control messages to be the same.
* Returns 1 if they are the same or if the first one is corrupted.
*/
static
int
cn_ctl_msg_equals
(
struct
cn_ctl_msg
*
m1
,
struct
cn_ctl_msg
*
m2
)
{
int
i
;
struct
cn_notify_req
*
req1
,
*
req2
;
if
(
m1
->
idx_notify_num
!=
m2
->
idx_notify_num
)
return
0
;
if
(
m1
->
val_notify_num
!=
m2
->
val_notify_num
)
return
0
;
if
(
m1
->
len
!=
m2
->
len
)
return
0
;
if
((
m1
->
idx_notify_num
+
m1
->
val_notify_num
)
*
sizeof
(
*
req1
)
!=
m1
->
len
)
return
1
;
req1
=
(
struct
cn_notify_req
*
)
m1
->
data
;
req2
=
(
struct
cn_notify_req
*
)
m2
->
data
;
for
(
i
=
0
;
i
<
m1
->
idx_notify_num
;
++
i
)
{
if
(
req1
->
first
!=
req2
->
first
||
req1
->
range
!=
req2
->
range
)
return
0
;
req1
++
;
req2
++
;
}
for
(
i
=
0
;
i
<
m1
->
val_notify_num
;
++
i
)
{
if
(
req1
->
first
!=
req2
->
first
||
req1
->
range
!=
req2
->
range
)
return
0
;
req1
++
;
req2
++
;
}
return
1
;
}
/*
* Main connector device's callback.
*
* Used for notification of a request's processing.
*/
static
void
cn_callback
(
struct
cn_msg
*
msg
,
struct
netlink_skb_parms
*
nsp
)
{
struct
cn_ctl_msg
*
ctl
;
struct
cn_ctl_entry
*
ent
;
u32
size
;
if
(
msg
->
len
<
sizeof
(
*
ctl
))
return
;
ctl
=
(
struct
cn_ctl_msg
*
)
msg
->
data
;
size
=
(
sizeof
(
*
ctl
)
+
((
ctl
->
idx_notify_num
+
ctl
->
val_notify_num
)
*
sizeof
(
struct
cn_notify_req
)));
if
(
msg
->
len
!=
size
)
return
;
if
(
ctl
->
len
+
sizeof
(
*
ctl
)
!=
msg
->
len
)
return
;
/*
* Remove notification.
*/
if
(
ctl
->
group
==
0
)
{
struct
cn_ctl_entry
*
n
;
mutex_lock
(
&
notify_lock
);
list_for_each_entry_safe
(
ent
,
n
,
&
notify_list
,
notify_entry
)
{
if
(
cn_ctl_msg_equals
(
ent
->
msg
,
ctl
))
{
list_del
(
&
ent
->
notify_entry
);
kfree
(
ent
);
}
}
mutex_unlock
(
&
notify_lock
);
return
;
}
size
+=
sizeof
(
*
ent
);
ent
=
kzalloc
(
size
,
GFP_KERNEL
);
if
(
!
ent
)
return
;
ent
->
msg
=
(
struct
cn_ctl_msg
*
)(
ent
+
1
);
memcpy
(
ent
->
msg
,
ctl
,
size
-
sizeof
(
*
ent
));
mutex_lock
(
&
notify_lock
);
list_add
(
&
ent
->
notify_entry
,
&
notify_list
);
mutex_unlock
(
&
notify_lock
);
}
static
int
cn_proc_show
(
struct
seq_file
*
m
,
void
*
v
)
{
struct
cn_queue_dev
*
dev
=
cdev
.
cbdev
;
...
...
@@ -437,11 +274,8 @@ static const struct file_operations cn_file_ops = {
static
int
__devinit
cn_init
(
void
)
{
struct
cn_dev
*
dev
=
&
cdev
;
int
err
;
dev
->
input
=
cn_rx_skb
;
dev
->
id
.
idx
=
cn_idx
;
dev
->
id
.
val
=
cn_val
;
dev
->
nls
=
netlink_kernel_create
(
&
init_net
,
NETLINK_CONNECTOR
,
CN_NETLINK_USERS
+
0xf
,
...
...
@@ -457,14 +291,6 @@ static int __devinit cn_init(void)
cn_already_initialized
=
1
;
err
=
cn_add_callback
(
&
dev
->
id
,
"connector"
,
&
cn_callback
);
if
(
err
)
{
cn_already_initialized
=
0
;
cn_queue_free_dev
(
dev
->
cbdev
);
netlink_kernel_release
(
dev
->
nls
);
return
-
EINVAL
;
}
proc_net_fops_create
(
&
init_net
,
"connector"
,
S_IRUGO
,
&
cn_file_ops
);
return
0
;
...
...
@@ -478,7 +304,6 @@ static void __devexit cn_fini(void)
proc_net_remove
(
&
init_net
,
"connector"
);
cn_del_callback
(
&
dev
->
id
);
cn_queue_free_dev
(
dev
->
cbdev
);
netlink_kernel_release
(
dev
->
nls
);
}
...
...
drivers/net/benet/be_main.c
浏览文件 @
9c119ba5
...
...
@@ -1350,7 +1350,7 @@ static irqreturn_t be_intx(int irq, void *dev)
int
isr
;
isr
=
ioread32
(
adapter
->
csr
+
CEV_ISR0_OFFSET
+
be_pci_func
(
adapter
)
*
CEV_ISR_SIZE
);
(
adapter
->
tx_eq
.
q
.
id
/
8
)
*
CEV_ISR_SIZE
);
if
(
!
isr
)
return
IRQ_NONE
;
...
...
@@ -2168,7 +2168,7 @@ static int be_stats_init(struct be_adapter *adapter)
cmd
->
va
=
pci_alloc_consistent
(
adapter
->
pdev
,
cmd
->
size
,
&
cmd
->
dma
);
if
(
cmd
->
va
==
NULL
)
return
-
1
;
memset
(
cmd
->
va
,
cmd
->
size
,
0
);
memset
(
cmd
->
va
,
0
,
cmd
->
size
);
return
0
;
}
...
...
drivers/net/ixgbe/ixgbe_main.c
浏览文件 @
9c119ba5
...
...
@@ -5384,7 +5384,7 @@ static int ixgbe_tx_map(struct ixgbe_adapter *adapter,
ixgbe_unmap_and_free_tx_resource
(
adapter
,
tx_buffer_info
);
}
return
count
;
return
0
;
}
static
void
ixgbe_tx_queue
(
struct
ixgbe_adapter
*
adapter
,
...
...
@@ -5534,8 +5534,11 @@ static u16 ixgbe_select_queue(struct net_device *dev, struct sk_buff *skb)
struct
ixgbe_adapter
*
adapter
=
netdev_priv
(
dev
);
int
txq
=
smp_processor_id
();
if
(
adapter
->
flags
&
IXGBE_FLAG_FDIR_HASH_CAPABLE
)
if
(
adapter
->
flags
&
IXGBE_FLAG_FDIR_HASH_CAPABLE
)
{
while
(
unlikely
(
txq
>=
dev
->
real_num_tx_queues
))
txq
-=
dev
->
real_num_tx_queues
;
return
txq
;
}
#ifdef IXGBE_FCOE
if
((
adapter
->
flags
&
IXGBE_FLAG_FCOE_ENABLED
)
&&
...
...
drivers/net/netxen/netxen_nic_main.c
浏览文件 @
9c119ba5
...
...
@@ -1995,7 +1995,7 @@ static void netxen_tx_timeout_task(struct work_struct *work)
netif_wake_queue
(
adapter
->
netdev
);
clear_bit
(
__NX_RESETTING
,
&
adapter
->
state
);
return
;
}
else
{
clear_bit
(
__NX_RESETTING
,
&
adapter
->
state
);
if
(
!
netxen_nic_reset_context
(
adapter
))
{
...
...
@@ -2323,7 +2323,9 @@ netxen_detach_work(struct work_struct *work)
netxen_nic_down
(
adapter
,
netdev
);
rtnl_lock
();
netxen_nic_detach
(
adapter
);
rtnl_unlock
();
status
=
NXRD32
(
adapter
,
NETXEN_PEG_HALT_STATUS1
);
...
...
drivers/net/sky2.c
浏览文件 @
9c119ba5
...
...
@@ -1025,11 +1025,8 @@ static void sky2_prefetch_init(struct sky2_hw *hw, u32 qaddr,
static
inline
struct
sky2_tx_le
*
get_tx_le
(
struct
sky2_port
*
sky2
,
u16
*
slot
)
{
struct
sky2_tx_le
*
le
=
sky2
->
tx_le
+
*
slot
;
struct
tx_ring_info
*
re
=
sky2
->
tx_ring
+
*
slot
;
*
slot
=
RING_NEXT
(
*
slot
,
sky2
->
tx_ring_size
);
re
->
flags
=
0
;
re
->
skb
=
NULL
;
le
->
ctrl
=
0
;
return
le
;
}
...
...
@@ -1622,8 +1619,7 @@ static unsigned tx_le_req(const struct sk_buff *skb)
return
count
;
}
static
void
sky2_tx_unmap
(
struct
pci_dev
*
pdev
,
const
struct
tx_ring_info
*
re
)
static
void
sky2_tx_unmap
(
struct
pci_dev
*
pdev
,
struct
tx_ring_info
*
re
)
{
if
(
re
->
flags
&
TX_MAP_SINGLE
)
pci_unmap_single
(
pdev
,
pci_unmap_addr
(
re
,
mapaddr
),
...
...
@@ -1633,6 +1629,7 @@ static void sky2_tx_unmap(struct pci_dev *pdev,
pci_unmap_page
(
pdev
,
pci_unmap_addr
(
re
,
mapaddr
),
pci_unmap_len
(
re
,
maplen
),
PCI_DMA_TODEVICE
);
re
->
flags
=
0
;
}
/*
...
...
@@ -1839,6 +1836,7 @@ static void sky2_tx_complete(struct sky2_port *sky2, u16 done)
dev
->
stats
.
tx_packets
++
;
dev
->
stats
.
tx_bytes
+=
skb
->
len
;
re
->
skb
=
NULL
;
dev_kfree_skb_any
(
skb
);
sky2
->
tx_next
=
RING_NEXT
(
idx
,
sky2
->
tx_ring_size
);
...
...
drivers/net/usb/cdc_ether.c
浏览文件 @
9c119ba5
...
...
@@ -419,7 +419,7 @@ static int cdc_manage_power(struct usbnet *dev, int on)
static
const
struct
driver_info
cdc_info
=
{
.
description
=
"CDC Ethernet Device"
,
.
flags
=
FLAG_ETHER
|
FLAG_LINK_INTR
,
.
flags
=
FLAG_ETHER
,
// .check_connect = cdc_check_connect,
.
bind
=
cdc_bind
,
.
unbind
=
usbnet_cdc_unbind
,
...
...
include/linux/connector.h
浏览文件 @
9c119ba5
...
...
@@ -24,9 +24,6 @@
#include <linux/types.h>
#define CN_IDX_CONNECTOR 0xffffffff
#define CN_VAL_CONNECTOR 0xffffffff
/*
* Process Events connector unique ids -- used for message routing
*/
...
...
@@ -75,30 +72,6 @@ struct cn_msg {
__u8
data
[
0
];
};
/*
* Notify structure - requests notification about
* registering/unregistering idx/val in range [first, first+range].
*/
struct
cn_notify_req
{
__u32
first
;
__u32
range
;
};
/*
* Main notification control message
* *_notify_num - number of appropriate cn_notify_req structures after
* this struct.
* group - notification receiver's idx.
* len - total length of the attached data.
*/
struct
cn_ctl_msg
{
__u32
idx_notify_num
;
__u32
val_notify_num
;
__u32
group
;
__u32
len
;
__u8
data
[
0
];
};
#ifdef __KERNEL__
#include <asm/atomic.h>
...
...
@@ -151,11 +124,6 @@ struct cn_callback_entry {
u32
seq
,
group
;
};
struct
cn_ctl_entry
{
struct
list_head
notify_entry
;
struct
cn_ctl_msg
*
msg
;
};
struct
cn_dev
{
struct
cb_id
id
;
...
...
net/bluetooth/hidp/core.c
浏览文件 @
9c119ba5
...
...
@@ -243,6 +243,39 @@ static void hidp_input_report(struct hidp_session *session, struct sk_buff *skb)
input_sync
(
dev
);
}
static
int
__hidp_send_ctrl_message
(
struct
hidp_session
*
session
,
unsigned
char
hdr
,
unsigned
char
*
data
,
int
size
)
{
struct
sk_buff
*
skb
;
BT_DBG
(
"session %p data %p size %d"
,
session
,
data
,
size
);
if
(
!
(
skb
=
alloc_skb
(
size
+
1
,
GFP_ATOMIC
)))
{
BT_ERR
(
"Can't allocate memory for new frame"
);
return
-
ENOMEM
;
}
*
skb_put
(
skb
,
1
)
=
hdr
;
if
(
data
&&
size
>
0
)
memcpy
(
skb_put
(
skb
,
size
),
data
,
size
);
skb_queue_tail
(
&
session
->
ctrl_transmit
,
skb
);
return
0
;
}
static
inline
int
hidp_send_ctrl_message
(
struct
hidp_session
*
session
,
unsigned
char
hdr
,
unsigned
char
*
data
,
int
size
)
{
int
err
;
err
=
__hidp_send_ctrl_message
(
session
,
hdr
,
data
,
size
);
hidp_schedule
(
session
);
return
err
;
}
static
int
hidp_queue_report
(
struct
hidp_session
*
session
,
unsigned
char
*
data
,
int
size
)
{
...
...
@@ -282,7 +315,9 @@ static int hidp_send_report(struct hidp_session *session, struct hid_report *rep
static
int
hidp_output_raw_report
(
struct
hid_device
*
hid
,
unsigned
char
*
data
,
size_t
count
)
{
if
(
hidp_queue_report
(
hid
->
driver_data
,
data
,
count
))
if
(
hidp_send_ctrl_message
(
hid
->
driver_data
,
HIDP_TRANS_SET_REPORT
|
HIDP_DATA_RTYPE_FEATURE
,
data
,
count
))
return
-
ENOMEM
;
return
count
;
}
...
...
@@ -307,39 +342,6 @@ static inline void hidp_del_timer(struct hidp_session *session)
del_timer
(
&
session
->
timer
);
}
static
int
__hidp_send_ctrl_message
(
struct
hidp_session
*
session
,
unsigned
char
hdr
,
unsigned
char
*
data
,
int
size
)
{
struct
sk_buff
*
skb
;
BT_DBG
(
"session %p data %p size %d"
,
session
,
data
,
size
);
if
(
!
(
skb
=
alloc_skb
(
size
+
1
,
GFP_ATOMIC
)))
{
BT_ERR
(
"Can't allocate memory for new frame"
);
return
-
ENOMEM
;
}
*
skb_put
(
skb
,
1
)
=
hdr
;
if
(
data
&&
size
>
0
)
memcpy
(
skb_put
(
skb
,
size
),
data
,
size
);
skb_queue_tail
(
&
session
->
ctrl_transmit
,
skb
);
return
0
;
}
static
inline
int
hidp_send_ctrl_message
(
struct
hidp_session
*
session
,
unsigned
char
hdr
,
unsigned
char
*
data
,
int
size
)
{
int
err
;
err
=
__hidp_send_ctrl_message
(
session
,
hdr
,
data
,
size
);
hidp_schedule
(
session
);
return
err
;
}
static
void
hidp_process_handshake
(
struct
hidp_session
*
session
,
unsigned
char
param
)
{
...
...
net/bluetooth/l2cap.c
浏览文件 @
9c119ba5
...
...
@@ -1368,7 +1368,6 @@ static int l2cap_ertm_send(struct sock *sk)
while
((
skb
=
sk
->
sk_send_head
)
&&
(
!
l2cap_tx_window_full
(
sk
))
&&
!
(
pi
->
conn_state
&
L2CAP_CONN_REMOTE_BUSY
))
{
tx_skb
=
skb_clone
(
skb
,
GFP_ATOMIC
);
if
(
pi
->
remote_max_tx
&&
bt_cb
(
skb
)
->
retries
==
pi
->
remote_max_tx
)
{
...
...
@@ -1376,6 +1375,8 @@ static int l2cap_ertm_send(struct sock *sk)
break
;
}
tx_skb
=
skb_clone
(
skb
,
GFP_ATOMIC
);
bt_cb
(
skb
)
->
retries
++
;
control
=
get_unaligned_le16
(
tx_skb
->
data
+
L2CAP_HDR_SIZE
);
...
...
@@ -3518,7 +3519,6 @@ static inline int l2cap_data_channel(struct l2cap_conn *conn, u16 cid, struct sk
struct
l2cap_pinfo
*
pi
;
u16
control
,
len
;
u8
tx_seq
;
int
err
;
sk
=
l2cap_get_chan_by_scid
(
&
conn
->
chan_list
,
cid
);
if
(
!
sk
)
{
...
...
@@ -3570,13 +3570,11 @@ static inline int l2cap_data_channel(struct l2cap_conn *conn, u16 cid, struct sk
goto
drop
;
if
(
__is_iframe
(
control
))
err
=
l2cap_data_channel_iframe
(
sk
,
control
,
skb
);
l2cap_data_channel_iframe
(
sk
,
control
,
skb
);
else
err
=
l2cap_data_channel_sframe
(
sk
,
control
,
skb
);
l2cap_data_channel_sframe
(
sk
,
control
,
skb
);
if
(
!
err
)
goto
done
;
break
;
goto
done
;
case
L2CAP_MODE_STREAMING
:
control
=
get_unaligned_le16
(
skb
->
data
);
...
...
@@ -3602,7 +3600,7 @@ static inline int l2cap_data_channel(struct l2cap_conn *conn, u16 cid, struct sk
else
pi
->
expected_tx_seq
=
tx_seq
+
1
;
err
=
l2cap_sar_reassembly_sdu
(
sk
,
skb
,
control
);
l2cap_sar_reassembly_sdu
(
sk
,
skb
,
control
);
goto
done
;
...
...
net/dccp/ccid.c
浏览文件 @
9c119ba5
...
...
@@ -83,7 +83,7 @@ static struct kmem_cache *ccid_kmem_cache_create(int obj_size, char *slab_name_f
va_list
args
;
va_start
(
args
,
fmt
);
vsnprintf
(
slab_name_fmt
,
sizeof
(
slab_name_fmt
)
,
fmt
,
args
);
vsnprintf
(
slab_name_fmt
,
CCID_SLAB_NAME_LENGTH
,
fmt
,
args
);
va_end
(
args
);
slab
=
kmem_cache_create
(
slab_name_fmt
,
sizeof
(
struct
ccid
)
+
obj_size
,
0
,
...
...
net/dccp/ccid.h
浏览文件 @
9c119ba5
...
...
@@ -19,7 +19,9 @@
#include <linux/list.h>
#include <linux/module.h>
#define CCID_MAX 255
/* maximum value for a CCID (RFC 4340, 19.5) */
#define CCID_MAX 255
#define CCID_SLAB_NAME_LENGTH 32
struct
tcp_info
;
...
...
@@ -49,8 +51,8 @@ struct ccid_operations {
const
char
*
ccid_name
;
struct
kmem_cache
*
ccid_hc_rx_slab
,
*
ccid_hc_tx_slab
;
char
ccid_hc_rx_slab_name
[
32
];
char
ccid_hc_tx_slab_name
[
32
];
char
ccid_hc_rx_slab_name
[
CCID_SLAB_NAME_LENGTH
];
char
ccid_hc_tx_slab_name
[
CCID_SLAB_NAME_LENGTH
];
__u32
ccid_hc_rx_obj_size
,
ccid_hc_tx_obj_size
;
/* Interface Routines */
...
...
net/dccp/probe.c
浏览文件 @
9c119ba5
...
...
@@ -161,8 +161,8 @@ static __init int dccpprobe_init(void)
if
(
!
proc_net_fops_create
(
&
init_net
,
procname
,
S_IRUSR
,
&
dccpprobe_fops
))
goto
err0
;
ret
=
try_then_request_module
((
register_jprobe
(
&
dccp_send_probe
)
==
0
)
,
"dccp"
);
try_then_request_module
((
ret
=
register_jprobe
(
&
dccp_send_probe
))
==
0
,
"dccp"
);
if
(
ret
)
goto
err1
;
...
...
net/key/af_key.c
浏览文件 @
9c119ba5
...
...
@@ -3793,9 +3793,9 @@ static struct pernet_operations pfkey_net_ops = {
static
void
__exit
ipsec_pfkey_exit
(
void
)
{
unregister_pernet_subsys
(
&
pfkey_net_ops
);
xfrm_unregister_km
(
&
pfkeyv2_mgr
);
sock_unregister
(
PF_KEY
);
unregister_pernet_subsys
(
&
pfkey_net_ops
);
proto_unregister
(
&
key_proto
);
}
...
...
@@ -3806,21 +3806,22 @@ static int __init ipsec_pfkey_init(void)
if
(
err
!=
0
)
goto
out
;
err
=
sock_register
(
&
pfkey_family
_ops
);
err
=
register_pernet_subsys
(
&
pfkey_net
_ops
);
if
(
err
!=
0
)
goto
out_unregister_key_proto
;
err
=
sock_register
(
&
pfkey_family_ops
);
if
(
err
!=
0
)
goto
out_unregister_pernet
;
err
=
xfrm_register_km
(
&
pfkeyv2_mgr
);
if
(
err
!=
0
)
goto
out_sock_unregister
;
err
=
register_pernet_subsys
(
&
pfkey_net_ops
);
if
(
err
!=
0
)
goto
out_xfrm_unregister_km
;
out:
return
err
;
out_xfrm_unregister_km:
xfrm_unregister_km
(
&
pfkeyv2_mgr
);
out_sock_unregister:
sock_unregister
(
PF_KEY
);
out_unregister_pernet:
unregister_pernet_subsys
(
&
pfkey_net_ops
);
out_unregister_key_proto:
proto_unregister
(
&
key_proto
);
goto
out
;
...
...
net/netfilter/nf_conntrack_netlink.c
浏览文件 @
9c119ba5
...
...
@@ -1437,8 +1437,9 @@ ctnetlink_exp_dump_mask(struct sk_buff *skb,
struct
nlattr
*
nest_parms
;
memset
(
&
m
,
0xFF
,
sizeof
(
m
));
m
.
src
.
u
.
all
=
mask
->
src
.
u
.
all
;
memcpy
(
&
m
.
src
.
u3
,
&
mask
->
src
.
u3
,
sizeof
(
m
.
src
.
u3
));
m
.
src
.
u
.
all
=
mask
->
src
.
u
.
all
;
m
.
dst
.
protonum
=
tuple
->
dst
.
protonum
;
nest_parms
=
nla_nest_start
(
skb
,
CTA_EXPECT_MASK
|
NLA_F_NESTED
);
if
(
!
nest_parms
)
...
...
net/netfilter/nf_conntrack_sip.c
浏览文件 @
9c119ba5
...
...
@@ -376,7 +376,7 @@ int ct_sip_get_header(const struct nf_conn *ct, const char *dptr,
dptr
+=
hdr
->
len
;
else
if
(
hdr
->
cname
&&
limit
-
dptr
>=
hdr
->
clen
+
1
&&
strnicmp
(
dptr
,
hdr
->
cname
,
hdr
->
clen
)
==
0
&&
!
isalpha
(
*
(
dptr
+
hdr
->
clen
+
1
)))
!
isalpha
(
*
(
dptr
+
hdr
->
clen
)))
dptr
+=
hdr
->
clen
;
else
continue
;
...
...
net/netlink/af_netlink.c
浏览文件 @
9c119ba5
...
...
@@ -455,9 +455,14 @@ static int netlink_create(struct net *net, struct socket *sock, int protocol,
if
(
nl_table
[
protocol
].
registered
&&
try_module_get
(
nl_table
[
protocol
].
module
))
module
=
nl_table
[
protocol
].
module
;
else
err
=
-
EPROTONOSUPPORT
;
cb_mutex
=
nl_table
[
protocol
].
cb_mutex
;
netlink_unlock_table
();
if
(
err
<
0
)
goto
out
;
err
=
__netlink_create
(
net
,
sock
,
cb_mutex
,
protocol
);
if
(
err
<
0
)
goto
out_module
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录