Subject: Re: [PATCH REPOST] IB/ehca: In case of lost interrupts, trigger EOI to reenable interrupts

From: Roland Dreier <[email-masked]>
Date: Tue, 10 Jun 2008 09:18:50 -0700

> > So just to be clear: this is a workaround for a hardware/firmware bug?

 > Yes it is.

OK, so paulus et al... does it seem like a good approach to call H_EOI
from driver code (given that this driver makes tons of other hcalls)?

How critical is this?  Since you said "corner case testing" I suspect we
can defer this to 2.6.27 and maybe get it into -stable later?

Also, out of curiousity:

 > +u64 hipz_h_eoi(int irq)
 > +{
 > +	int value;
 > +	unsigned long xirr;
 > +
 > +	iosync();

what is the iosync() required for here?

 > +	value = (0xff << 24) | irq;
 > +	xirr = value & 0xffffffff;

given that irq and value are ints, is there any possible way value could
have bits outside of the low 32 set?  If you're worried about sign
extension isn't it simpler to just make value unsigned?

 > +	return plpar_hcall_norets(H_EOI, xirr);
 > +}

ie why not:

u64 hipz_h_eoi(int irq)
{
	unsigned xirr;

	iosync();
	xirr = (0xff << 24) | irq;
	return plpar_hcall_norets(H_EOI, xirr);
}