powerpc/pseries: Track previous CPPR values to correctly EOI interrupts
authorMark Nelson <markn@au1.ibm.com>
Mon, 7 Dec 2009 20:32:17 +0000 (20:32 +0000)
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>
Wed, 9 Dec 2009 06:10:38 +0000 (17:10 +1100)
commit49bd3647134ea47420067aea8d1401e722bf2aac
tree329b14bdf4944d4f8e9ad32900f7157ccafc1c8b
parent275a64f6040073254fa15eaf6e4e720f77d531d6
powerpc/pseries: Track previous CPPR values to correctly EOI interrupts

At the moment when we EOI an interrupt we set the CPPR back to 0xFF
regardless of its previous value. This could lead to problems if we
take an interrupt with a priority of 5, but before EOIing it we get
an IPI which has a priority of 4. The problem is that at the moment
when we EOI the IPI we will set the CPPR to 0xFF, but it should
really be set back to 5 (the previous priority).

To keep track of the previous CPPR values we create the xics_cppr
structure that has an array for CPPR values and an index pointing
to the current priority. This can easily grow if new priorities get
added in the future.

This will also be useful because the partition adjunct option of
upcoming machines will update the H_XIRR hcall to accept the CPPR
as a parameter.

Signed-off-by: Mark Nelson <markn@au1.ibm.com>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
arch/powerpc/platforms/pseries/xics.c