Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
raspberrypi-kernel
提交
95bc6b84
R
raspberrypi-kernel
项目概览
openeuler
/
raspberrypi-kernel
通知
13
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
raspberrypi-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
95bc6b84
编写于
4月 01, 2013
作者:
J
John W. Linville
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'for-john' of
git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211
上级
2e1253d6
382a103b
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
39 addition
and
13 deletion
+39
-13
net/mac80211/cfg.c
net/mac80211/cfg.c
+4
-2
net/mac80211/chan.c
net/mac80211/chan.c
+14
-3
net/mac80211/ieee80211_i.h
net/mac80211/ieee80211_i.h
+3
-1
net/mac80211/iface.c
net/mac80211/iface.c
+1
-1
net/mac80211/offchannel.c
net/mac80211/offchannel.c
+17
-6
未找到文件。
net/mac80211/cfg.c
浏览文件 @
95bc6b84
...
...
@@ -2582,7 +2582,7 @@ static int ieee80211_cancel_roc(struct ieee80211_local *local,
list_del
(
&
dep
->
list
);
mutex_unlock
(
&
local
->
mtx
);
ieee80211_roc_notify_destroy
(
dep
);
ieee80211_roc_notify_destroy
(
dep
,
true
);
return
0
;
}
...
...
@@ -2622,7 +2622,7 @@ static int ieee80211_cancel_roc(struct ieee80211_local *local,
ieee80211_start_next_roc
(
local
);
mutex_unlock
(
&
local
->
mtx
);
ieee80211_roc_notify_destroy
(
found
);
ieee80211_roc_notify_destroy
(
found
,
true
);
}
else
{
/* work may be pending so use it all the time */
found
->
abort
=
true
;
...
...
@@ -2632,6 +2632,8 @@ static int ieee80211_cancel_roc(struct ieee80211_local *local,
/* work will clean up etc */
flush_delayed_work
(
&
found
->
work
);
WARN_ON
(
!
found
->
to_be_freed
);
kfree
(
found
);
}
return
0
;
...
...
net/mac80211/chan.c
浏览文件 @
95bc6b84
...
...
@@ -63,6 +63,7 @@ ieee80211_new_chanctx(struct ieee80211_local *local,
enum
ieee80211_chanctx_mode
mode
)
{
struct
ieee80211_chanctx
*
ctx
;
u32
changed
;
int
err
;
lockdep_assert_held
(
&
local
->
chanctx_mtx
);
...
...
@@ -76,6 +77,13 @@ ieee80211_new_chanctx(struct ieee80211_local *local,
ctx
->
conf
.
rx_chains_dynamic
=
1
;
ctx
->
mode
=
mode
;
/* acquire mutex to prevent idle from changing */
mutex_lock
(
&
local
->
mtx
);
/* turn idle off *before* setting channel -- some drivers need that */
changed
=
ieee80211_idle_off
(
local
);
if
(
changed
)
ieee80211_hw_config
(
local
,
changed
);
if
(
!
local
->
use_chanctx
)
{
local
->
_oper_channel_type
=
cfg80211_get_chandef_type
(
chandef
);
...
...
@@ -85,14 +93,17 @@ ieee80211_new_chanctx(struct ieee80211_local *local,
err
=
drv_add_chanctx
(
local
,
ctx
);
if
(
err
)
{
kfree
(
ctx
);
return
ERR_PTR
(
err
);
ctx
=
ERR_PTR
(
err
);
ieee80211_recalc_idle
(
local
);
goto
out
;
}
}
/* and keep the mutex held until the new chanctx is on the list */
list_add_rcu
(
&
ctx
->
list
,
&
local
->
chanctx_list
);
mutex_lock
(
&
local
->
mtx
);
ieee80211_recalc_idle
(
local
);
out:
mutex_unlock
(
&
local
->
mtx
);
return
ctx
;
...
...
net/mac80211/ieee80211_i.h
浏览文件 @
95bc6b84
...
...
@@ -309,6 +309,7 @@ struct ieee80211_roc_work {
struct
ieee80211_channel
*
chan
;
bool
started
,
abort
,
hw_begun
,
notified
;
bool
to_be_freed
;
unsigned
long
hw_start_time
;
...
...
@@ -1347,7 +1348,7 @@ void ieee80211_offchannel_return(struct ieee80211_local *local);
void
ieee80211_roc_setup
(
struct
ieee80211_local
*
local
);
void
ieee80211_start_next_roc
(
struct
ieee80211_local
*
local
);
void
ieee80211_roc_purge
(
struct
ieee80211_sub_if_data
*
sdata
);
void
ieee80211_roc_notify_destroy
(
struct
ieee80211_roc_work
*
roc
);
void
ieee80211_roc_notify_destroy
(
struct
ieee80211_roc_work
*
roc
,
bool
free
);
void
ieee80211_sw_roc_work
(
struct
work_struct
*
work
);
void
ieee80211_handle_roc_started
(
struct
ieee80211_roc_work
*
roc
);
...
...
@@ -1361,6 +1362,7 @@ int ieee80211_if_change_type(struct ieee80211_sub_if_data *sdata,
enum
nl80211_iftype
type
);
void
ieee80211_if_remove
(
struct
ieee80211_sub_if_data
*
sdata
);
void
ieee80211_remove_interfaces
(
struct
ieee80211_local
*
local
);
u32
ieee80211_idle_off
(
struct
ieee80211_local
*
local
);
void
ieee80211_recalc_idle
(
struct
ieee80211_local
*
local
);
void
ieee80211_adjust_monitor_flags
(
struct
ieee80211_sub_if_data
*
sdata
,
const
int
offset
);
...
...
net/mac80211/iface.c
浏览文件 @
95bc6b84
...
...
@@ -78,7 +78,7 @@ void ieee80211_recalc_txpower(struct ieee80211_sub_if_data *sdata)
ieee80211_bss_info_change_notify
(
sdata
,
BSS_CHANGED_TXPOWER
);
}
static
u32
ieee80211_idle_off
(
struct
ieee80211_local
*
local
)
u32
ieee80211_idle_off
(
struct
ieee80211_local
*
local
)
{
if
(
!
(
local
->
hw
.
conf
.
flags
&
IEEE80211_CONF_IDLE
))
return
0
;
...
...
net/mac80211/offchannel.c
浏览文件 @
95bc6b84
...
...
@@ -297,10 +297,13 @@ void ieee80211_start_next_roc(struct ieee80211_local *local)
}
}
void
ieee80211_roc_notify_destroy
(
struct
ieee80211_roc_work
*
roc
)
void
ieee80211_roc_notify_destroy
(
struct
ieee80211_roc_work
*
roc
,
bool
free
)
{
struct
ieee80211_roc_work
*
dep
,
*
tmp
;
if
(
WARN_ON
(
roc
->
to_be_freed
))
return
;
/* was never transmitted */
if
(
roc
->
frame
)
{
cfg80211_mgmt_tx_status
(
&
roc
->
sdata
->
wdev
,
...
...
@@ -316,9 +319,12 @@ void ieee80211_roc_notify_destroy(struct ieee80211_roc_work *roc)
GFP_KERNEL
);
list_for_each_entry_safe
(
dep
,
tmp
,
&
roc
->
dependents
,
list
)
ieee80211_roc_notify_destroy
(
dep
);
ieee80211_roc_notify_destroy
(
dep
,
true
);
kfree
(
roc
);
if
(
free
)
kfree
(
roc
);
else
roc
->
to_be_freed
=
true
;
}
void
ieee80211_sw_roc_work
(
struct
work_struct
*
work
)
...
...
@@ -331,6 +337,9 @@ void ieee80211_sw_roc_work(struct work_struct *work)
mutex_lock
(
&
local
->
mtx
);
if
(
roc
->
to_be_freed
)
goto
out_unlock
;
if
(
roc
->
abort
)
goto
finish
;
...
...
@@ -370,7 +379,7 @@ void ieee80211_sw_roc_work(struct work_struct *work)
finish:
list_del
(
&
roc
->
list
);
started
=
roc
->
started
;
ieee80211_roc_notify_destroy
(
roc
);
ieee80211_roc_notify_destroy
(
roc
,
!
roc
->
abort
);
if
(
started
)
{
drv_flush
(
local
,
false
);
...
...
@@ -410,7 +419,7 @@ static void ieee80211_hw_roc_done(struct work_struct *work)
list_del
(
&
roc
->
list
);
ieee80211_roc_notify_destroy
(
roc
);
ieee80211_roc_notify_destroy
(
roc
,
true
);
/* if there's another roc, start it now */
ieee80211_start_next_roc
(
local
);
...
...
@@ -460,12 +469,14 @@ void ieee80211_roc_purge(struct ieee80211_sub_if_data *sdata)
list_for_each_entry_safe
(
roc
,
tmp
,
&
tmp_list
,
list
)
{
if
(
local
->
ops
->
remain_on_channel
)
{
list_del
(
&
roc
->
list
);
ieee80211_roc_notify_destroy
(
roc
);
ieee80211_roc_notify_destroy
(
roc
,
true
);
}
else
{
ieee80211_queue_delayed_work
(
&
local
->
hw
,
&
roc
->
work
,
0
);
/* work will clean up etc */
flush_delayed_work
(
&
roc
->
work
);
WARN_ON
(
!
roc
->
to_be_freed
);
kfree
(
roc
);
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录