Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
kernel_linux
提交
874c60ba
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看板
提交
874c60ba
编写于
1月 10, 2012
作者:
J
John W. Linville
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'master' of
git://git.kernel.org/pub/scm/linux/kernel/git/padovan/bluetooth-next
上级
a8c1f65c
c5993de8
变更
10
隐藏空白更改
内联
并排
Showing
10 changed file
with
57 addition
and
53 deletion
+57
-53
include/net/bluetooth/hci_core.h
include/net/bluetooth/hci_core.h
+2
-2
net/bluetooth/af_bluetooth.c
net/bluetooth/af_bluetooth.c
+4
-4
net/bluetooth/hci_event.c
net/bluetooth/hci_event.c
+13
-9
net/bluetooth/hci_sock.c
net/bluetooth/hci_sock.c
+0
-2
net/bluetooth/l2cap_core.c
net/bluetooth/l2cap_core.c
+13
-13
net/bluetooth/l2cap_sock.c
net/bluetooth/l2cap_sock.c
+2
-0
net/bluetooth/mgmt.c
net/bluetooth/mgmt.c
+2
-2
net/bluetooth/rfcomm/sock.c
net/bluetooth/rfcomm/sock.c
+6
-6
net/bluetooth/rfcomm/tty.c
net/bluetooth/rfcomm/tty.c
+11
-11
net/bluetooth/sco.c
net/bluetooth/sco.c
+4
-4
未找到文件。
include/net/bluetooth/hci_core.h
浏览文件 @
874c60ba
...
...
@@ -127,7 +127,7 @@ struct hci_dev {
__u8
major_class
;
__u8
minor_class
;
__u8
features
[
8
];
__u8
ext
features
[
8
];
__u8
host_
features
[
8
];
__u8
commands
[
64
];
__u8
ssp_mode
;
__u8
hci_ver
;
...
...
@@ -676,7 +676,7 @@ void hci_conn_del_sysfs(struct hci_conn *conn);
#define lmp_le_capable(dev) ((dev)->features[4] & LMP_LE)
/* ----- Extended LMP capabilities ----- */
#define lmp_host_le_capable(dev) ((dev)->
ext
features[0] & LMP_HOST_LE)
#define lmp_host_le_capable(dev) ((dev)->
host_
features[0] & LMP_HOST_LE)
/* ----- HCI protocols ----- */
static
inline
int
hci_proto_connect_ind
(
struct
hci_dev
*
hdev
,
bdaddr_t
*
bdaddr
,
...
...
net/bluetooth/af_bluetooth.c
浏览文件 @
874c60ba
...
...
@@ -156,17 +156,17 @@ static int bt_sock_create(struct net *net, struct socket *sock, int proto,
void
bt_sock_link
(
struct
bt_sock_list
*
l
,
struct
sock
*
sk
)
{
write_lock
_bh
(
&
l
->
lock
);
write_lock
(
&
l
->
lock
);
sk_add_node
(
sk
,
&
l
->
head
);
write_unlock
_bh
(
&
l
->
lock
);
write_unlock
(
&
l
->
lock
);
}
EXPORT_SYMBOL
(
bt_sock_link
);
void
bt_sock_unlink
(
struct
bt_sock_list
*
l
,
struct
sock
*
sk
)
{
write_lock
_bh
(
&
l
->
lock
);
write_lock
(
&
l
->
lock
);
sk_del_node_init
(
sk
);
write_unlock
_bh
(
&
l
->
lock
);
write_unlock
(
&
l
->
lock
);
}
EXPORT_SYMBOL
(
bt_sock_unlink
);
...
...
net/bluetooth/hci_event.c
浏览文件 @
874c60ba
...
...
@@ -711,7 +711,14 @@ static void hci_cc_read_local_ext_features(struct hci_dev *hdev,
if
(
rp
->
status
)
return
;
memcpy
(
hdev
->
extfeatures
,
rp
->
features
,
8
);
switch
(
rp
->
page
)
{
case
0
:
memcpy
(
hdev
->
features
,
rp
->
features
,
8
);
break
;
case
1
:
memcpy
(
hdev
->
host_features
,
rp
->
features
,
8
);
break
;
}
hci_req_complete
(
hdev
,
HCI_OP_READ_LOCAL_EXT_FEATURES
,
rp
->
status
);
}
...
...
@@ -1047,9 +1054,7 @@ static void hci_cc_le_set_scan_enable(struct hci_dev *hdev,
case
LE_SCANNING_DISABLED
:
clear_bit
(
HCI_LE_SCAN
,
&
hdev
->
dev_flags
);
cancel_delayed_work_sync
(
&
hdev
->
adv_work
);
queue_delayed_work
(
hdev
->
workqueue
,
&
hdev
->
adv_work
,
jiffies
+
ADV_CLEAR_TIMEOUT
);
schedule_delayed_work
(
&
hdev
->
adv_work
,
ADV_CLEAR_TIMEOUT
);
break
;
default:
...
...
@@ -2266,20 +2271,19 @@ static inline void hci_num_comp_pkts_evt(struct hci_dev *hdev, struct sk_buff *s
struct
hci_ev_num_comp_pkts
*
ev
=
(
void
*
)
skb
->
data
;
int
i
;
skb_pull
(
skb
,
sizeof
(
*
ev
));
BT_DBG
(
"%s num_hndl %d"
,
hdev
->
name
,
ev
->
num_hndl
);
if
(
hdev
->
flow_ctl_mode
!=
HCI_FLOW_CTL_MODE_PACKET_BASED
)
{
BT_ERR
(
"Wrong event for mode %d"
,
hdev
->
flow_ctl_mode
);
return
;
}
if
(
skb
->
len
<
ev
->
num_hndl
*
4
)
{
if
(
skb
->
len
<
sizeof
(
*
ev
)
||
skb
->
len
<
sizeof
(
*
ev
)
+
ev
->
num_hndl
*
sizeof
(
struct
hci_comp_pkts_info
))
{
BT_DBG
(
"%s bad parameters"
,
hdev
->
name
);
return
;
}
BT_DBG
(
"%s num_hndl %d"
,
hdev
->
name
,
ev
->
num_hndl
);
for
(
i
=
0
;
i
<
ev
->
num_hndl
;
i
++
)
{
struct
hci_comp_pkts_info
*
info
=
&
ev
->
handles
[
i
];
struct
hci_conn
*
conn
;
...
...
net/bluetooth/hci_sock.c
浏览文件 @
874c60ba
...
...
@@ -767,7 +767,6 @@ static int hci_sock_dev_event(struct notifier_block *this, unsigned long event,
/* Detach sockets from device */
read_lock
(
&
hci_sk_list
.
lock
);
sk_for_each
(
sk
,
node
,
&
hci_sk_list
.
head
)
{
local_bh_disable
();
bh_lock_sock_nested
(
sk
);
if
(
hci_pi
(
sk
)
->
hdev
==
hdev
)
{
hci_pi
(
sk
)
->
hdev
=
NULL
;
...
...
@@ -778,7 +777,6 @@ static int hci_sock_dev_event(struct notifier_block *this, unsigned long event,
hci_dev_put
(
hdev
);
}
bh_unlock_sock
(
sk
);
local_bh_enable
();
}
read_unlock
(
&
hci_sk_list
.
lock
);
}
...
...
net/bluetooth/l2cap_core.c
浏览文件 @
874c60ba
...
...
@@ -165,7 +165,7 @@ int l2cap_add_psm(struct l2cap_chan *chan, bdaddr_t *src, __le16 psm)
{
int
err
;
write_lock
_bh
(
&
chan_list_lock
);
write_lock
(
&
chan_list_lock
);
if
(
psm
&&
__l2cap_global_chan_by_addr
(
psm
,
src
))
{
err
=
-
EADDRINUSE
;
...
...
@@ -190,17 +190,17 @@ int l2cap_add_psm(struct l2cap_chan *chan, bdaddr_t *src, __le16 psm)
}
done:
write_unlock
_bh
(
&
chan_list_lock
);
write_unlock
(
&
chan_list_lock
);
return
err
;
}
int
l2cap_add_scid
(
struct
l2cap_chan
*
chan
,
__u16
scid
)
{
write_lock
_bh
(
&
chan_list_lock
);
write_lock
(
&
chan_list_lock
);
chan
->
scid
=
scid
;
write_unlock
_bh
(
&
chan_list_lock
);
write_unlock
(
&
chan_list_lock
);
return
0
;
}
...
...
@@ -289,9 +289,9 @@ struct l2cap_chan *l2cap_chan_create(struct sock *sk)
chan
->
sk
=
sk
;
write_lock
_bh
(
&
chan_list_lock
);
write_lock
(
&
chan_list_lock
);
list_add
(
&
chan
->
global_l
,
&
chan_list
);
write_unlock
_bh
(
&
chan_list_lock
);
write_unlock
(
&
chan_list_lock
);
INIT_DELAYED_WORK
(
&
chan
->
chan_timer
,
l2cap_chan_timeout
);
...
...
@@ -306,9 +306,9 @@ struct l2cap_chan *l2cap_chan_create(struct sock *sk)
void
l2cap_chan_destroy
(
struct
l2cap_chan
*
chan
)
{
write_lock
_bh
(
&
chan_list_lock
);
write_lock
(
&
chan_list_lock
);
list_del
(
&
chan
->
global_l
);
write_unlock
_bh
(
&
chan_list_lock
);
write_unlock
(
&
chan_list_lock
);
l2cap_chan_put
(
chan
);
}
...
...
@@ -543,14 +543,14 @@ static u8 l2cap_get_ident(struct l2cap_conn *conn)
* 200 - 254 are used by utilities like l2ping, etc.
*/
spin_lock
_bh
(
&
conn
->
lock
);
spin_lock
(
&
conn
->
lock
);
if
(
++
conn
->
tx_ident
>
128
)
conn
->
tx_ident
=
1
;
id
=
conn
->
tx_ident
;
spin_unlock
_bh
(
&
conn
->
lock
);
spin_unlock
(
&
conn
->
lock
);
return
id
;
}
...
...
@@ -1190,7 +1190,7 @@ inline int l2cap_chan_connect(struct l2cap_chan *chan, __le16 psm, u16 cid, bdad
}
/* Set destination address and psm */
bacpy
(
&
bt_sk
(
sk
)
->
dst
,
src
);
bacpy
(
&
bt_sk
(
sk
)
->
dst
,
dst
);
chan
->
psm
=
psm
;
chan
->
dcid
=
cid
;
...
...
@@ -4702,7 +4702,7 @@ static int l2cap_debugfs_show(struct seq_file *f, void *p)
{
struct
l2cap_chan
*
c
;
read_lock
_bh
(
&
chan_list_lock
);
read_lock
(
&
chan_list_lock
);
list_for_each_entry
(
c
,
&
chan_list
,
global_l
)
{
struct
sock
*
sk
=
c
->
sk
;
...
...
@@ -4715,7 +4715,7 @@ static int l2cap_debugfs_show(struct seq_file *f, void *p)
c
->
sec_level
,
c
->
mode
);
}
read_unlock
_bh
(
&
chan_list_lock
);
read_unlock
(
&
chan_list_lock
);
return
0
;
}
...
...
net/bluetooth/l2cap_sock.c
浏览文件 @
874c60ba
...
...
@@ -587,6 +587,7 @@ static int l2cap_sock_setsockopt(struct socket *sock, int level, int optname, ch
if
(
smp_conn_security
(
conn
,
sec
.
level
))
break
;
sk
->
sk_state
=
BT_CONFIG
;
chan
->
state
=
BT_CONFIG
;
/* or for ACL link, under defer_setup time */
}
else
if
(
sk
->
sk_state
==
BT_CONNECT2
&&
...
...
@@ -731,6 +732,7 @@ static int l2cap_sock_recvmsg(struct kiocb *iocb, struct socket *sock, struct ms
if
(
sk
->
sk_state
==
BT_CONNECT2
&&
bt_sk
(
sk
)
->
defer_setup
)
{
sk
->
sk_state
=
BT_CONFIG
;
pi
->
chan
->
state
=
BT_CONFIG
;
__l2cap_connect_rsp_defer
(
pi
->
chan
);
release_sock
(
sk
);
...
...
net/bluetooth/mgmt.c
浏览文件 @
874c60ba
...
...
@@ -291,7 +291,7 @@ static u32 get_current_settings(struct hci_dev *hdev)
if
(
!
(
hdev
->
features
[
4
]
&
LMP_NO_BREDR
))
settings
|=
MGMT_SETTING_BREDR
;
if
(
hdev
->
ext
features
[
0
]
&
LMP_HOST_LE
)
if
(
hdev
->
host_
features
[
0
]
&
LMP_HOST_LE
)
settings
|=
MGMT_SETTING_LE
;
if
(
test_bit
(
HCI_AUTH
,
&
hdev
->
flags
))
...
...
@@ -2756,7 +2756,7 @@ int mgmt_stop_discovery_failed(struct hci_dev *hdev, u8 status)
if
(
!
cmd
)
return
-
ENOENT
;
err
=
cmd_status
(
cmd
->
sk
,
hdev
->
id
,
cmd
->
opcode
,
status
);
err
=
cmd_status
(
cmd
->
sk
,
hdev
->
id
,
cmd
->
opcode
,
mgmt_status
(
status
)
);
mgmt_pending_remove
(
cmd
);
return
err
;
...
...
net/bluetooth/rfcomm/sock.c
浏览文件 @
874c60ba
...
...
@@ -370,7 +370,7 @@ static int rfcomm_sock_bind(struct socket *sock, struct sockaddr *addr, int addr
goto
done
;
}
write_lock
_bh
(
&
rfcomm_sk_list
.
lock
);
write_lock
(
&
rfcomm_sk_list
.
lock
);
if
(
sa
->
rc_channel
&&
__rfcomm_get_sock_by_addr
(
sa
->
rc_channel
,
&
sa
->
rc_bdaddr
))
{
err
=
-
EADDRINUSE
;
...
...
@@ -381,7 +381,7 @@ static int rfcomm_sock_bind(struct socket *sock, struct sockaddr *addr, int addr
sk
->
sk_state
=
BT_BOUND
;
}
write_unlock
_bh
(
&
rfcomm_sk_list
.
lock
);
write_unlock
(
&
rfcomm_sk_list
.
lock
);
done:
release_sock
(
sk
);
...
...
@@ -455,7 +455,7 @@ static int rfcomm_sock_listen(struct socket *sock, int backlog)
err
=
-
EINVAL
;
write_lock
_bh
(
&
rfcomm_sk_list
.
lock
);
write_lock
(
&
rfcomm_sk_list
.
lock
);
for
(
channel
=
1
;
channel
<
31
;
channel
++
)
if
(
!
__rfcomm_get_sock_by_addr
(
channel
,
src
))
{
...
...
@@ -464,7 +464,7 @@ static int rfcomm_sock_listen(struct socket *sock, int backlog)
break
;
}
write_unlock
_bh
(
&
rfcomm_sk_list
.
lock
);
write_unlock
(
&
rfcomm_sk_list
.
lock
);
if
(
err
<
0
)
goto
done
;
...
...
@@ -982,7 +982,7 @@ static int rfcomm_sock_debugfs_show(struct seq_file *f, void *p)
struct
sock
*
sk
;
struct
hlist_node
*
node
;
read_lock
_bh
(
&
rfcomm_sk_list
.
lock
);
read_lock
(
&
rfcomm_sk_list
.
lock
);
sk_for_each
(
sk
,
node
,
&
rfcomm_sk_list
.
head
)
{
seq_printf
(
f
,
"%s %s %d %d
\n
"
,
...
...
@@ -991,7 +991,7 @@ static int rfcomm_sock_debugfs_show(struct seq_file *f, void *p)
sk
->
sk_state
,
rfcomm_pi
(
sk
)
->
channel
);
}
read_unlock
_bh
(
&
rfcomm_sk_list
.
lock
);
read_unlock
(
&
rfcomm_sk_list
.
lock
);
return
0
;
}
...
...
net/bluetooth/rfcomm/tty.c
浏览文件 @
874c60ba
...
...
@@ -76,7 +76,7 @@ struct rfcomm_dev {
};
static
LIST_HEAD
(
rfcomm_dev_list
);
static
DEFINE_
RW
LOCK
(
rfcomm_dev_lock
);
static
DEFINE_
SPIN
LOCK
(
rfcomm_dev_lock
);
static
void
rfcomm_dev_data_ready
(
struct
rfcomm_dlc
*
dlc
,
struct
sk_buff
*
skb
);
static
void
rfcomm_dev_state_change
(
struct
rfcomm_dlc
*
dlc
,
int
err
);
...
...
@@ -146,7 +146,7 @@ static inline struct rfcomm_dev *rfcomm_dev_get(int id)
{
struct
rfcomm_dev
*
dev
;
read
_lock
(
&
rfcomm_dev_lock
);
spin
_lock
(
&
rfcomm_dev_lock
);
dev
=
__rfcomm_dev_get
(
id
);
...
...
@@ -157,7 +157,7 @@ static inline struct rfcomm_dev *rfcomm_dev_get(int id)
rfcomm_dev_hold
(
dev
);
}
read
_unlock
(
&
rfcomm_dev_lock
);
spin
_unlock
(
&
rfcomm_dev_lock
);
return
dev
;
}
...
...
@@ -205,7 +205,7 @@ static int rfcomm_dev_add(struct rfcomm_dev_req *req, struct rfcomm_dlc *dlc)
if
(
!
dev
)
return
-
ENOMEM
;
write_lock_bh
(
&
rfcomm_dev_lock
);
spin_lock
(
&
rfcomm_dev_lock
);
if
(
req
->
dev_id
<
0
)
{
dev
->
id
=
0
;
...
...
@@ -290,7 +290,7 @@ static int rfcomm_dev_add(struct rfcomm_dev_req *req, struct rfcomm_dlc *dlc)
__module_get
(
THIS_MODULE
);
out:
write_unlock_bh
(
&
rfcomm_dev_lock
);
spin_unlock
(
&
rfcomm_dev_lock
);
if
(
err
<
0
)
goto
free
;
...
...
@@ -327,9 +327,9 @@ static void rfcomm_dev_del(struct rfcomm_dev *dev)
if
(
atomic_read
(
&
dev
->
opened
)
>
0
)
return
;
write_lock_bh
(
&
rfcomm_dev_lock
);
spin_lock
(
&
rfcomm_dev_lock
);
list_del_init
(
&
dev
->
list
);
write_unlock_bh
(
&
rfcomm_dev_lock
);
spin_unlock
(
&
rfcomm_dev_lock
);
rfcomm_dev_put
(
dev
);
}
...
...
@@ -473,7 +473,7 @@ static int rfcomm_get_dev_list(void __user *arg)
di
=
dl
->
dev_info
;
read_lock_bh
(
&
rfcomm_dev_lock
);
spin_lock
(
&
rfcomm_dev_lock
);
list_for_each_entry
(
dev
,
&
rfcomm_dev_list
,
list
)
{
if
(
test_bit
(
RFCOMM_TTY_RELEASED
,
&
dev
->
flags
))
...
...
@@ -488,7 +488,7 @@ static int rfcomm_get_dev_list(void __user *arg)
break
;
}
read_unlock_bh
(
&
rfcomm_dev_lock
);
spin_unlock
(
&
rfcomm_dev_lock
);
dl
->
dev_num
=
n
;
size
=
sizeof
(
*
dl
)
+
n
*
sizeof
(
*
di
);
...
...
@@ -766,9 +766,9 @@ static void rfcomm_tty_close(struct tty_struct *tty, struct file *filp)
rfcomm_dlc_unlock
(
dev
->
dlc
);
if
(
test_bit
(
RFCOMM_TTY_RELEASED
,
&
dev
->
flags
))
{
write_lock_bh
(
&
rfcomm_dev_lock
);
spin_lock
(
&
rfcomm_dev_lock
);
list_del_init
(
&
dev
->
list
);
write_unlock_bh
(
&
rfcomm_dev_lock
);
spin_unlock
(
&
rfcomm_dev_lock
);
rfcomm_dev_put
(
dev
);
}
...
...
net/bluetooth/sco.c
浏览文件 @
874c60ba
...
...
@@ -482,7 +482,7 @@ static int sco_sock_bind(struct socket *sock, struct sockaddr *addr, int addr_le
goto
done
;
}
write_lock
_bh
(
&
sco_sk_list
.
lock
);
write_lock
(
&
sco_sk_list
.
lock
);
if
(
bacmp
(
src
,
BDADDR_ANY
)
&&
__sco_get_sock_by_addr
(
src
))
{
err
=
-
EADDRINUSE
;
...
...
@@ -492,7 +492,7 @@ static int sco_sock_bind(struct socket *sock, struct sockaddr *addr, int addr_le
sk
->
sk_state
=
BT_BOUND
;
}
write_unlock
_bh
(
&
sco_sk_list
.
lock
);
write_unlock
(
&
sco_sk_list
.
lock
);
done:
release_sock
(
sk
);
...
...
@@ -965,14 +965,14 @@ static int sco_debugfs_show(struct seq_file *f, void *p)
struct
sock
*
sk
;
struct
hlist_node
*
node
;
read_lock
_bh
(
&
sco_sk_list
.
lock
);
read_lock
(
&
sco_sk_list
.
lock
);
sk_for_each
(
sk
,
node
,
&
sco_sk_list
.
head
)
{
seq_printf
(
f
,
"%s %s %d
\n
"
,
batostr
(
&
bt_sk
(
sk
)
->
src
),
batostr
(
&
bt_sk
(
sk
)
->
dst
),
sk
->
sk_state
);
}
read_unlock
_bh
(
&
sco_sk_list
.
lock
);
read_unlock
(
&
sco_sk_list
.
lock
);
return
0
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录