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
3a6e55cb
Commit
3a6e55cb
authored
Jul 25, 2009
by
Thomas Gleixner
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
clockevents: Convert clockevents / tick device locks to atomic_spinlock
Signed-off-by:
Thomas Gleixner
<
tglx@linutronix.de
>
parent
4b064e4f
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
39 additions
and
39 deletions
+39
-39
kernel/time/clockevents.c
kernel/time/clockevents.c
+7
-7
kernel/time/tick-broadcast.c
kernel/time/tick-broadcast.c
+21
-21
kernel/time/tick-common.c
kernel/time/tick-common.c
+10
-10
kernel/time/tick-internal.h
kernel/time/tick-internal.h
+1
-1
No files found.
kernel/time/clockevents.c
View file @
3a6e55cb
...
...
@@ -28,7 +28,7 @@ static LIST_HEAD(clockevents_released);
static
RAW_NOTIFIER_HEAD
(
clockevents_chain
);
/* Protection for the above */
static
DEFINE_SPINLOCK
(
clockevents_lock
);
static
DEFINE_
ATOMIC_
SPINLOCK
(
clockevents_lock
);
/**
* clockevents_delta2ns - Convert a latch value (device ticks) to nanoseconds
...
...
@@ -139,9 +139,9 @@ int clockevents_register_notifier(struct notifier_block *nb)
{
int
ret
;
spin_lock
(
&
clockevents_lock
);
atomic_
spin_lock
(
&
clockevents_lock
);
ret
=
raw_notifier_chain_register
(
&
clockevents_chain
,
nb
);
spin_unlock
(
&
clockevents_lock
);
atomic_
spin_unlock
(
&
clockevents_lock
);
return
ret
;
}
...
...
@@ -181,13 +181,13 @@ void clockevents_register_device(struct clock_event_device *dev)
BUG_ON
(
dev
->
mode
!=
CLOCK_EVT_MODE_UNUSED
);
BUG_ON
(
!
dev
->
cpumask
);
spin_lock
(
&
clockevents_lock
);
atomic_
spin_lock
(
&
clockevents_lock
);
list_add
(
&
dev
->
list
,
&
clockevent_devices
);
clockevents_do_notify
(
CLOCK_EVT_NOTIFY_ADD
,
dev
);
clockevents_notify_released
();
spin_unlock
(
&
clockevents_lock
);
atomic_
spin_unlock
(
&
clockevents_lock
);
}
EXPORT_SYMBOL_GPL
(
clockevents_register_device
);
...
...
@@ -236,7 +236,7 @@ void clockevents_notify(unsigned long reason, void *arg)
{
struct
list_head
*
node
,
*
tmp
;
spin_lock
(
&
clockevents_lock
);
atomic_
spin_lock
(
&
clockevents_lock
);
clockevents_do_notify
(
reason
,
arg
);
switch
(
reason
)
{
...
...
@@ -251,7 +251,7 @@ void clockevents_notify(unsigned long reason, void *arg)
default:
break
;
}
spin_unlock
(
&
clockevents_lock
);
atomic_
spin_unlock
(
&
clockevents_lock
);
}
EXPORT_SYMBOL_GPL
(
clockevents_notify
);
#endif
kernel/time/tick-broadcast.c
View file @
3a6e55cb
...
...
@@ -31,7 +31,7 @@ static struct tick_device tick_broadcast_device;
/* FIXME: Use cpumask_var_t. */
static
DECLARE_BITMAP
(
tick_broadcast_mask
,
NR_CPUS
);
static
DECLARE_BITMAP
(
tmpmask
,
NR_CPUS
);
static
DEFINE_SPINLOCK
(
tick_broadcast_lock
);
static
DEFINE_
ATOMIC_
SPINLOCK
(
tick_broadcast_lock
);
static
int
tick_broadcast_force
;
#ifdef CONFIG_TICK_ONESHOT
...
...
@@ -96,7 +96,7 @@ int tick_device_uses_broadcast(struct clock_event_device *dev, int cpu)
unsigned
long
flags
;
int
ret
=
0
;
spin_lock_irqsave
(
&
tick_broadcast_lock
,
flags
);
atomic_
spin_lock_irqsave
(
&
tick_broadcast_lock
,
flags
);
/*
* Devices might be registered with both periodic and oneshot
...
...
@@ -122,7 +122,7 @@ int tick_device_uses_broadcast(struct clock_event_device *dev, int cpu)
tick_broadcast_clear_oneshot
(
cpu
);
}
}
spin_unlock_irqrestore
(
&
tick_broadcast_lock
,
flags
);
atomic_
spin_unlock_irqrestore
(
&
tick_broadcast_lock
,
flags
);
return
ret
;
}
...
...
@@ -161,13 +161,13 @@ static void tick_do_broadcast(struct cpumask *mask)
*/
static
void
tick_do_periodic_broadcast
(
void
)
{
spin_lock
(
&
tick_broadcast_lock
);
atomic_
spin_lock
(
&
tick_broadcast_lock
);
cpumask_and
(
to_cpumask
(
tmpmask
),
cpu_online_mask
,
tick_get_broadcast_mask
());
tick_do_broadcast
(
to_cpumask
(
tmpmask
));
spin_unlock
(
&
tick_broadcast_lock
);
atomic_
spin_unlock
(
&
tick_broadcast_lock
);
}
/*
...
...
@@ -212,7 +212,7 @@ static void tick_do_broadcast_on_off(void *why)
unsigned
long
flags
,
*
reason
=
why
;
int
cpu
,
bc_stopped
;
spin_lock_irqsave
(
&
tick_broadcast_lock
,
flags
);
atomic_
spin_lock_irqsave
(
&
tick_broadcast_lock
,
flags
);
cpu
=
smp_processor_id
();
td
=
&
per_cpu
(
tick_cpu_device
,
cpu
);
...
...
@@ -263,7 +263,7 @@ static void tick_do_broadcast_on_off(void *why)
tick_broadcast_setup_oneshot
(
bc
);
}
out:
spin_unlock_irqrestore
(
&
tick_broadcast_lock
,
flags
);
atomic_
spin_unlock_irqrestore
(
&
tick_broadcast_lock
,
flags
);
}
/*
...
...
@@ -300,7 +300,7 @@ void tick_shutdown_broadcast(unsigned int *cpup)
unsigned
long
flags
;
unsigned
int
cpu
=
*
cpup
;
spin_lock_irqsave
(
&
tick_broadcast_lock
,
flags
);
atomic_
spin_lock_irqsave
(
&
tick_broadcast_lock
,
flags
);
bc
=
tick_broadcast_device
.
evtdev
;
cpumask_clear_cpu
(
cpu
,
tick_get_broadcast_mask
());
...
...
@@ -310,7 +310,7 @@ void tick_shutdown_broadcast(unsigned int *cpup)
clockevents_shutdown
(
bc
);
}
spin_unlock_irqrestore
(
&
tick_broadcast_lock
,
flags
);
atomic_
spin_unlock_irqrestore
(
&
tick_broadcast_lock
,
flags
);
}
void
tick_suspend_broadcast
(
void
)
...
...
@@ -318,13 +318,13 @@ void tick_suspend_broadcast(void)
struct
clock_event_device
*
bc
;
unsigned
long
flags
;
spin_lock_irqsave
(
&
tick_broadcast_lock
,
flags
);
atomic_
spin_lock_irqsave
(
&
tick_broadcast_lock
,
flags
);
bc
=
tick_broadcast_device
.
evtdev
;
if
(
bc
)
clockevents_shutdown
(
bc
);
spin_unlock_irqrestore
(
&
tick_broadcast_lock
,
flags
);
atomic_
spin_unlock_irqrestore
(
&
tick_broadcast_lock
,
flags
);
}
int
tick_resume_broadcast
(
void
)
...
...
@@ -333,7 +333,7 @@ int tick_resume_broadcast(void)
unsigned
long
flags
;
int
broadcast
=
0
;
spin_lock_irqsave
(
&
tick_broadcast_lock
,
flags
);
atomic_
spin_lock_irqsave
(
&
tick_broadcast_lock
,
flags
);
bc
=
tick_broadcast_device
.
evtdev
;
...
...
@@ -352,7 +352,7 @@ int tick_resume_broadcast(void)
break
;
}
}
spin_unlock_irqrestore
(
&
tick_broadcast_lock
,
flags
);
atomic_
spin_unlock_irqrestore
(
&
tick_broadcast_lock
,
flags
);
return
broadcast
;
}
...
...
@@ -406,7 +406,7 @@ static void tick_handle_oneshot_broadcast(struct clock_event_device *dev)
ktime_t
now
,
next_event
;
int
cpu
;
spin_lock
(
&
tick_broadcast_lock
);
atomic_
spin_lock
(
&
tick_broadcast_lock
);
again:
dev
->
next_event
.
tv64
=
KTIME_MAX
;
next_event
.
tv64
=
KTIME_MAX
;
...
...
@@ -444,7 +444,7 @@ again:
if
(
tick_broadcast_set_event
(
next_event
,
0
))
goto
again
;
}
spin_unlock
(
&
tick_broadcast_lock
);
atomic_
spin_unlock
(
&
tick_broadcast_lock
);
}
/*
...
...
@@ -458,7 +458,7 @@ void tick_broadcast_oneshot_control(unsigned long reason)
unsigned
long
flags
;
int
cpu
;
spin_lock_irqsave
(
&
tick_broadcast_lock
,
flags
);
atomic_
spin_lock_irqsave
(
&
tick_broadcast_lock
,
flags
);
/*
* Periodic mode does not care about the enter/exit of power
...
...
@@ -493,7 +493,7 @@ void tick_broadcast_oneshot_control(unsigned long reason)
}
out:
spin_unlock_irqrestore
(
&
tick_broadcast_lock
,
flags
);
atomic_
spin_unlock_irqrestore
(
&
tick_broadcast_lock
,
flags
);
}
/*
...
...
@@ -564,13 +564,13 @@ void tick_broadcast_switch_to_oneshot(void)
struct
clock_event_device
*
bc
;
unsigned
long
flags
;
spin_lock_irqsave
(
&
tick_broadcast_lock
,
flags
);
atomic_
spin_lock_irqsave
(
&
tick_broadcast_lock
,
flags
);
tick_broadcast_device
.
mode
=
TICKDEV_MODE_ONESHOT
;
bc
=
tick_broadcast_device
.
evtdev
;
if
(
bc
)
tick_broadcast_setup_oneshot
(
bc
);
spin_unlock_irqrestore
(
&
tick_broadcast_lock
,
flags
);
atomic_
spin_unlock_irqrestore
(
&
tick_broadcast_lock
,
flags
);
}
...
...
@@ -582,7 +582,7 @@ void tick_shutdown_broadcast_oneshot(unsigned int *cpup)
unsigned
long
flags
;
unsigned
int
cpu
=
*
cpup
;
spin_lock_irqsave
(
&
tick_broadcast_lock
,
flags
);
atomic_
spin_lock_irqsave
(
&
tick_broadcast_lock
,
flags
);
/*
* Clear the broadcast mask flag for the dead cpu, but do not
...
...
@@ -590,7 +590,7 @@ void tick_shutdown_broadcast_oneshot(unsigned int *cpup)
*/
cpumask_clear_cpu
(
cpu
,
tick_get_broadcast_oneshot_mask
());
spin_unlock_irqrestore
(
&
tick_broadcast_lock
,
flags
);
atomic_
spin_unlock_irqrestore
(
&
tick_broadcast_lock
,
flags
);
}
/*
...
...
kernel/time/tick-common.c
View file @
3a6e55cb
...
...
@@ -34,7 +34,7 @@ DEFINE_PER_CPU(struct tick_device, tick_cpu_device);
ktime_t
tick_next_period
;
ktime_t
tick_period
;
int
tick_do_timer_cpu
__read_mostly
=
TICK_DO_TIMER_BOOT
;
DEFINE_SPINLOCK
(
tick_device_lock
);
DEFINE_
ATOMIC_
SPINLOCK
(
tick_device_lock
);
/*
* Debugging: see timer_list.c
...
...
@@ -209,7 +209,7 @@ static int tick_check_new_device(struct clock_event_device *newdev)
int
cpu
,
ret
=
NOTIFY_OK
;
unsigned
long
flags
;
spin_lock_irqsave
(
&
tick_device_lock
,
flags
);
atomic_
spin_lock_irqsave
(
&
tick_device_lock
,
flags
);
cpu
=
smp_processor_id
();
if
(
!
cpumask_test_cpu
(
cpu
,
newdev
->
cpumask
))
...
...
@@ -268,7 +268,7 @@ static int tick_check_new_device(struct clock_event_device *newdev)
if
(
newdev
->
features
&
CLOCK_EVT_FEAT_ONESHOT
)
tick_oneshot_notify
();
spin_unlock_irqrestore
(
&
tick_device_lock
,
flags
);
atomic_
spin_unlock_irqrestore
(
&
tick_device_lock
,
flags
);
return
NOTIFY_STOP
;
out_bc:
...
...
@@ -278,7 +278,7 @@ out_bc:
if
(
tick_check_broadcast_device
(
newdev
))
ret
=
NOTIFY_STOP
;
spin_unlock_irqrestore
(
&
tick_device_lock
,
flags
);
atomic_
spin_unlock_irqrestore
(
&
tick_device_lock
,
flags
);
return
ret
;
}
...
...
@@ -311,7 +311,7 @@ static void tick_shutdown(unsigned int *cpup)
struct
clock_event_device
*
dev
=
td
->
evtdev
;
unsigned
long
flags
;
spin_lock_irqsave
(
&
tick_device_lock
,
flags
);
atomic_
spin_lock_irqsave
(
&
tick_device_lock
,
flags
);
td
->
mode
=
TICKDEV_MODE_PERIODIC
;
if
(
dev
)
{
/*
...
...
@@ -322,7 +322,7 @@ static void tick_shutdown(unsigned int *cpup)
clockevents_exchange_device
(
dev
,
NULL
);
td
->
evtdev
=
NULL
;
}
spin_unlock_irqrestore
(
&
tick_device_lock
,
flags
);
atomic_
spin_unlock_irqrestore
(
&
tick_device_lock
,
flags
);
}
static
void
tick_suspend
(
void
)
...
...
@@ -330,9 +330,9 @@ static void tick_suspend(void)
struct
tick_device
*
td
=
&
__get_cpu_var
(
tick_cpu_device
);
unsigned
long
flags
;
spin_lock_irqsave
(
&
tick_device_lock
,
flags
);
atomic_
spin_lock_irqsave
(
&
tick_device_lock
,
flags
);
clockevents_shutdown
(
td
->
evtdev
);
spin_unlock_irqrestore
(
&
tick_device_lock
,
flags
);
atomic_
spin_unlock_irqrestore
(
&
tick_device_lock
,
flags
);
}
static
void
tick_resume
(
void
)
...
...
@@ -341,7 +341,7 @@ static void tick_resume(void)
unsigned
long
flags
;
int
broadcast
=
tick_resume_broadcast
();
spin_lock_irqsave
(
&
tick_device_lock
,
flags
);
atomic_
spin_lock_irqsave
(
&
tick_device_lock
,
flags
);
clockevents_set_mode
(
td
->
evtdev
,
CLOCK_EVT_MODE_RESUME
);
if
(
!
broadcast
)
{
...
...
@@ -350,7 +350,7 @@ static void tick_resume(void)
else
tick_resume_oneshot
();
}
spin_unlock_irqrestore
(
&
tick_device_lock
,
flags
);
atomic_
spin_unlock_irqrestore
(
&
tick_device_lock
,
flags
);
}
/*
...
...
kernel/time/tick-internal.h
View file @
3a6e55cb
...
...
@@ -6,7 +6,7 @@
#define TICK_DO_TIMER_BOOT -2
DECLARE_PER_CPU
(
struct
tick_device
,
tick_cpu_device
);
extern
spinlock_t
tick_device_lock
;
extern
atomic_
spinlock_t
tick_device_lock
;
extern
ktime_t
tick_next_period
;
extern
ktime_t
tick_period
;
extern
int
tick_do_timer_cpu
__read_mostly
;
...
...
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