Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 4032
b: refs/heads/master
c: 719d1cd
h: refs/heads/master
v: v3
  • Loading branch information
Michael Ellerman authored and Paul Mackerras committed Jun 30, 2005
1 parent 072f9b8 commit 889980b
Show file tree
Hide file tree
Showing 3 changed files with 4 additions and 38 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: ffe1b7e14e6b606bd84cab564aa2f481dbd4e418
refs/heads/master: 719d1cd86780c156f954fc34f34481adac197aec
38 changes: 2 additions & 36 deletions trunk/arch/ppc64/kernel/ItLpQueue.c
Original file line number Diff line number Diff line change
Expand Up @@ -42,35 +42,8 @@ static char *event_types[HvLpEvent_Type_NumTypes] = {
"Virtual I/O"
};

static __inline__ int set_inUse(void)
{
int t;
u32 * inUseP = &hvlpevent_queue.xInUseWord;

__asm__ __volatile__("\n\
1: lwarx %0,0,%2 \n\
cmpwi 0,%0,0 \n\
li %0,0 \n\
bne- 2f \n\
addi %0,%0,1 \n\
stwcx. %0,0,%2 \n\
bne- 1b \n\
2: eieio"
: "=&r" (t), "=m" (hvlpevent_queue.xInUseWord)
: "r" (inUseP), "m" (hvlpevent_queue.xInUseWord)
: "cc");

return t;
}

static __inline__ void clear_inUse(void)
{
hvlpevent_queue.xInUseWord = 0;
}

/* Array of LpEvent handler functions */
extern LpEventHandler lpEventHandler[HvLpEvent_Type_NumTypes];
unsigned long ItLpQueueInProcess = 0;

static struct HvLpEvent * get_next_hvlpevent(void)
{
Expand Down Expand Up @@ -144,14 +117,9 @@ void process_hvlpevents(struct pt_regs *regs)
struct HvLpEvent * event;

/* If we have recursed, just return */
if ( !set_inUse() )
if (!spin_trylock(&hvlpevent_queue.lock))
return;

if (ItLpQueueInProcess == 0)
ItLpQueueInProcess = 1;
else
BUG();

for (;;) {
event = get_next_hvlpevent();
if (event) {
Expand Down Expand Up @@ -187,9 +155,7 @@ void process_hvlpevents(struct pt_regs *regs)
break;
}

ItLpQueueInProcess = 0;
mb();
clear_inUse();
spin_unlock(&hvlpevent_queue.lock);
}

static int set_spread_lpevents(char *str)
Expand Down
2 changes: 1 addition & 1 deletion trunk/include/asm-ppc64/iSeries/ItLpQueue.h
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ struct hvlpevent_queue {
char *xSlicEventStackPtr; // 0x20
u8 xIndex; // 0x28 unique sequential index.
u8 xSlicRsvd[3]; // 0x29-2b
u32 xInUseWord; // 0x2C
spinlock_t lock;
};

extern struct hvlpevent_queue hvlpevent_queue;
Expand Down

0 comments on commit 889980b

Please sign in to comment.