Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
linux-davinci
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
linux
linux-davinci
Commits
1bbfc20d
Commit
1bbfc20d
authored
Sep 29, 2009
by
Ralf Baechle
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
MIPS: VPE: Get rid of BKL.
Signed-off-by:
Ralf Baechle
<
ralf@linux-mips.org
>
parent
c0648e02
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
50 additions
and
42 deletions
+50
-42
arch/mips/kernel/rtlx.c
arch/mips/kernel/rtlx.c
+4
-11
arch/mips/kernel/vpe.c
arch/mips/kernel/vpe.c
+46
-31
No files found.
arch/mips/kernel/rtlx.c
View file @
1bbfc20d
...
...
@@ -72,8 +72,9 @@ static void rtlx_dispatch(void)
*/
static
irqreturn_t
rtlx_interrupt
(
int
irq
,
void
*
dev_id
)
{
unsigned
int
vpeflags
;
unsigned
long
flags
;
int
i
;
unsigned
int
flags
,
vpeflags
;
/* Ought not to be strictly necessary for SMTC builds */
local_irq_save
(
flags
);
...
...
@@ -392,20 +393,12 @@ out:
static
int
file_open
(
struct
inode
*
inode
,
struct
file
*
filp
)
{
int
minor
=
iminor
(
inode
);
int
err
;
lock_kernel
();
err
=
rtlx_open
(
minor
,
(
filp
->
f_flags
&
O_NONBLOCK
)
?
0
:
1
);
unlock_kernel
();
return
err
;
return
rtlx_open
(
iminor
(
inode
),
(
filp
->
f_flags
&
O_NONBLOCK
)
?
0
:
1
);
}
static
int
file_release
(
struct
inode
*
inode
,
struct
file
*
filp
)
{
int
minor
=
iminor
(
inode
);
return
rtlx_release
(
minor
);
return
rtlx_release
(
iminor
(
inode
));
}
static
unsigned
int
file_poll
(
struct
file
*
file
,
poll_table
*
wait
)
...
...
arch/mips/kernel/vpe.c
View file @
1bbfc20d
...
...
@@ -144,14 +144,15 @@ struct tc {
};
struct
{
/* Virtual processing elements */
struct
list_head
vpe_list
;
/* Thread contexts */
struct
list_head
tc_list
;
spinlock_t
vpe_list_lock
;
struct
list_head
vpe_list
;
/* Virtual processing elements */
spinlock_t
tc_list_lock
;
struct
list_head
tc_list
;
/* Thread contexts */
}
vpecontrol
=
{
.
vpe_list
=
LIST_HEAD_INIT
(
vpecontrol
.
vpe_list
),
.
tc_list
=
LIST_HEAD_INIT
(
vpecontrol
.
tc_list
)
.
vpe_list_lock
=
SPIN_LOCK_UNLOCKED
,
.
vpe_list
=
LIST_HEAD_INIT
(
vpecontrol
.
vpe_list
),
.
tc_list_lock
=
SPIN_LOCK_UNLOCKED
,
.
tc_list
=
LIST_HEAD_INIT
(
vpecontrol
.
tc_list
)
};
static
void
release_progmem
(
void
*
ptr
);
...
...
@@ -159,28 +160,38 @@ static void release_progmem(void *ptr);
/* get the vpe associated with this minor */
static
struct
vpe
*
get_vpe
(
int
minor
)
{
struct
vpe
*
v
;
struct
vpe
*
res
,
*
v
;
if
(
!
cpu_has_mipsmt
)
return
NULL
;
res
=
NULL
;
spin_lock
(
&
vpecontrol
.
vpe_list_lock
);
list_for_each_entry
(
v
,
&
vpecontrol
.
vpe_list
,
list
)
{
if
(
v
->
minor
==
minor
)
return
v
;
if
(
v
->
minor
==
minor
)
{
res
=
v
;
break
;
}
}
spin_unlock
(
&
vpecontrol
.
vpe_list_lock
);
return
NULL
;
return
res
;
}
/* get the vpe associated with this minor */
static
struct
tc
*
get_tc
(
int
index
)
{
struct
tc
*
t
;
struct
tc
*
res
,
*
t
;
res
=
NULL
;
spin_lock
(
&
vpecontrol
.
tc_list_lock
);
list_for_each_entry
(
t
,
&
vpecontrol
.
tc_list
,
list
)
{
if
(
t
->
index
==
index
)
return
t
;
if
(
t
->
index
==
index
)
{
res
=
t
;
break
;
}
}
spin_unlock
(
&
vpecontrol
.
tc_list_lock
);
return
NULL
;
}
...
...
@@ -190,15 +201,17 @@ static struct vpe *alloc_vpe(int minor)
{
struct
vpe
*
v
;
if
((
v
=
kzalloc
(
sizeof
(
struct
vpe
),
GFP_KERNEL
))
==
NULL
)
{
if
((
v
=
kzalloc
(
sizeof
(
struct
vpe
),
GFP_KERNEL
))
==
NULL
)
return
NULL
;
}
INIT_LIST_HEAD
(
&
v
->
tc
);
spin_lock
(
&
vpecontrol
.
vpe_list_lock
);
list_add_tail
(
&
v
->
list
,
&
vpecontrol
.
vpe_list
);
spin_unlock
(
&
vpecontrol
.
vpe_list_lock
);
INIT_LIST_HEAD
(
&
v
->
notify
);
v
->
minor
=
minor
;
return
v
;
}
...
...
@@ -212,7 +225,10 @@ static struct tc *alloc_tc(int index)
INIT_LIST_HEAD
(
&
tc
->
tc
);
tc
->
index
=
index
;
spin_lock
(
&
vpecontrol
.
tc_list_lock
);
list_add_tail
(
&
tc
->
list
,
&
vpecontrol
.
tc_list
);
spin_unlock
(
&
vpecontrol
.
tc_list_lock
);
out:
return
tc
;
...
...
@@ -227,7 +243,7 @@ static void release_vpe(struct vpe *v)
kfree
(
v
);
}
static
void
dump_mtregs
(
void
)
static
void
__maybe_unused
dump_mtregs
(
void
)
{
unsigned
long
val
;
...
...
@@ -1048,20 +1064,19 @@ static int vpe_open(struct inode *inode, struct file *filp)
enum
vpe_state
state
;
struct
vpe_notifications
*
not
;
struct
vpe
*
v
;
int
ret
,
err
=
0
;
int
ret
;
lock_kernel
();
if
(
minor
!=
iminor
(
inode
))
{
/* assume only 1 device at the moment. */
pr
intk
(
KERN_WARNING
"VPE loader: only vpe1 is supported
\n
"
);
err
=
-
ENODEV
;
goto
out
;
pr
_warning
(
"VPE loader: only vpe1 is supported
\n
"
);
return
-
ENODEV
;
}
if
((
v
=
get_vpe
(
tclimit
))
==
NULL
)
{
pr
intk
(
KERN_WARNING
"VPE loader: unable to get vpe
\n
"
);
err
=
-
ENODEV
;
goto
out
;
pr
_warning
(
"VPE loader: unable to get vpe
\n
"
);
return
-
ENODEV
;
}
state
=
xchg
(
&
v
->
state
,
VPE_STATE_INUSE
);
...
...
@@ -1101,8 +1116,8 @@ static int vpe_open(struct inode *inode, struct file *filp)
v
->
shared_ptr
=
NULL
;
v
->
__start
=
0
;
out:
unlock_kernel
();
return
0
;
}
...
...
@@ -1594,14 +1609,14 @@ static void __exit vpe_module_exit(void)
{
struct
vpe
*
v
,
*
n
;
device_del
(
&
vpe_device
);
unregister_chrdev
(
major
,
module_name
);
/* No locking needed here */
list_for_each_entry_safe
(
v
,
n
,
&
vpecontrol
.
vpe_list
,
list
)
{
if
(
v
->
state
!=
VPE_STATE_UNUSED
)
{
if
(
v
->
state
!=
VPE_STATE_UNUSED
)
release_vpe
(
v
);
}
}
device_del
(
&
vpe_device
);
unregister_chrdev
(
major
,
module_name
);
}
module_init
(
vpe_module_init
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment