Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 107172
b: refs/heads/master
c: 934b285
h: refs/heads/master
v: v3
  • Loading branch information
Heiko Carstens authored and Martin Schwidefsky committed Aug 1, 2008
1 parent 5134bbf commit c277def
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 5 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: 3a95e8eb34f595a0144adb6e5513d456319bd8a5
refs/heads/master: 934b2857cc576ae53c92a66e63fce7ddcfa74691
4 changes: 2 additions & 2 deletions trunk/arch/s390/lib/delay.c
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ void __udelay(unsigned long usecs)
local_bh_disable();
local_irq_save(flags);
if (raw_irqs_disabled_flags(flags)) {
old_cc = S390_lowcore.clock_comparator;
old_cc = local_tick_disable();
S390_lowcore.clock_comparator = -1ULL;
__ctl_store(cr0, 0, 0);
dummy = (cr0 & 0xffff00e0) | 0x00000800;
Expand All @@ -65,7 +65,7 @@ void __udelay(unsigned long usecs)

if (raw_irqs_disabled_flags(flags)) {
__ctl_load(cr0, 0, 0);
S390_lowcore.clock_comparator = old_cc;
local_tick_enable(old_cc);
}
if (!irq_context)
_local_bh_enable();
Expand Down
6 changes: 4 additions & 2 deletions trunk/drivers/s390/char/sclp.c
Original file line number Diff line number Diff line change
Expand Up @@ -399,6 +399,7 @@ sclp_tod_from_jiffies(unsigned long jiffies)
void
sclp_sync_wait(void)
{
unsigned long long old_tick;
unsigned long flags;
unsigned long cr0, cr0_sync;
u64 timeout;
Expand All @@ -419,11 +420,12 @@ sclp_sync_wait(void)
if (!irq_context)
local_bh_disable();
/* Enable service-signal interruption, disable timer interrupts */
old_tick = local_tick_disable();
trace_hardirqs_on();
__ctl_store(cr0, 0, 0);
cr0_sync = cr0;
cr0_sync &= 0xffff00a0;
cr0_sync |= 0x00000200;
cr0_sync &= 0xFFFFF3AC;
__ctl_load(cr0_sync, 0, 0);
__raw_local_irq_stosm(0x01);
/* Loop until driver state indicates finished request */
Expand All @@ -439,9 +441,9 @@ sclp_sync_wait(void)
__ctl_load(cr0, 0, 0);
if (!irq_context)
_local_bh_enable();
local_tick_enable(old_tick);
local_irq_restore(flags);
}

EXPORT_SYMBOL(sclp_sync_wait);

/* Dispatch changes in send and receive mask to registered listeners. */
Expand Down
14 changes: 14 additions & 0 deletions trunk/include/asm-s390/hardirq.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,4 +34,18 @@ typedef struct {

void clock_comparator_work(void);

static inline unsigned long long local_tick_disable(void)
{
unsigned long long old;

old = S390_lowcore.clock_comparator;
S390_lowcore.clock_comparator = -1ULL;
return old;
}

static inline void local_tick_enable(unsigned long long comp)
{
S390_lowcore.clock_comparator = comp;
}

#endif /* __ASM_HARDIRQ_H */

0 comments on commit c277def

Please sign in to comment.