Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 68759
b: refs/heads/master
c: 1595f45
h: refs/heads/master
i:
  68757: 25f8a70
  68755: e82f6d1
  68751: 4d868d8
v: v3
  • Loading branch information
Thomas Gleixner authored and Thomas Gleixner committed Oct 14, 2007
1 parent 6a7f270 commit be00c1b
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 7 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: b097976e8d6f6e6220161fa6b72b0798ce9f4f4c
refs/heads/master: 1595f452f3d8daa066bfd3ba4120754bed3329e1
1 change: 1 addition & 0 deletions trunk/include/linux/clockchips.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ enum clock_event_nofitiers {
CLOCK_EVT_NOTIFY_ADD,
CLOCK_EVT_NOTIFY_BROADCAST_ON,
CLOCK_EVT_NOTIFY_BROADCAST_OFF,
CLOCK_EVT_NOTIFY_BROADCAST_FORCE,
CLOCK_EVT_NOTIFY_BROADCAST_ENTER,
CLOCK_EVT_NOTIFY_BROADCAST_EXIT,
CLOCK_EVT_NOTIFY_SUSPEND,
Expand Down
29 changes: 23 additions & 6 deletions trunk/kernel/time/tick-broadcast.c
Original file line number Diff line number Diff line change
Expand Up @@ -217,26 +217,43 @@ static void tick_do_broadcast_on_off(void *why)
bc = tick_broadcast_device.evtdev;

/*
* Is the device in broadcast mode forever or is it not
* affected by the powerstate ?
* Is the device not affected by the powerstate ?
*/
if (!dev || !tick_device_is_functional(dev) ||
!(dev->features & CLOCK_EVT_FEAT_C3STOP))
if (!dev || !(dev->features & CLOCK_EVT_FEAT_C3STOP))
goto out;

if (*reason == CLOCK_EVT_NOTIFY_BROADCAST_ON) {
/*
* Defect device ?
*/
if (!tick_device_is_functional(dev)) {
/*
* AMD C1E wreckage fixup:
*
* Device was registered functional in the first
* place. Now the secondary CPU detected the C1E
* misfeature and notifies us to fix it up
*/
if (*reason != CLOCK_EVT_NOTIFY_BROADCAST_FORCE)
goto out;
}

switch (*reason) {
case CLOCK_EVT_NOTIFY_BROADCAST_ON:
case CLOCK_EVT_NOTIFY_BROADCAST_FORCE:
if (!cpu_isset(cpu, tick_broadcast_mask)) {
cpu_set(cpu, tick_broadcast_mask);
if (td->mode == TICKDEV_MODE_PERIODIC)
clockevents_set_mode(dev,
CLOCK_EVT_MODE_SHUTDOWN);
}
} else {
break;
case CLOCK_EVT_NOTIFY_BROADCAST_OFF:
if (cpu_isset(cpu, tick_broadcast_mask)) {
cpu_clear(cpu, tick_broadcast_mask);
if (td->mode == TICKDEV_MODE_PERIODIC)
tick_setup_periodic(dev, 0);
}
break;
}

if (cpus_empty(tick_broadcast_mask))
Expand Down
1 change: 1 addition & 0 deletions trunk/kernel/time/tick-common.c
Original file line number Diff line number Diff line change
Expand Up @@ -345,6 +345,7 @@ static int tick_notify(struct notifier_block *nb, unsigned long reason,

case CLOCK_EVT_NOTIFY_BROADCAST_ON:
case CLOCK_EVT_NOTIFY_BROADCAST_OFF:
case CLOCK_EVT_NOTIFY_BROADCAST_FORCE:
tick_broadcast_on_off(reason, dev);
break;

Expand Down

0 comments on commit be00c1b

Please sign in to comment.