On Mar 31, 2006, at 7:46 AM, Keir Fraser wrote:
On 30 Mar 2006, at 20:13, Hollis Blanchard wrote:
evtchn_upcall_pending is another variable that bitops are used on,
wants it to be a long. Unfortunately, it's also part of the guest/
interface, so we can't change it for architectures with existing
Compile-tested on x86(-32). Please apply.
Before going down this route, what about just casting the field to
long, since it is actually aligned on a suitable boundary, as it
We tried that, but to get the right bit we would have to use 56 not 0.
So this brings me to a possible solution:
Since both evtchn_upcall_pending and mask are paired and aligned and
padded to long we could group them together, like:
unsigned long evtchn_upcall_bits;
#define EVTCHN_UPCALL_PENDING 0
#define EVTCHN_UPCALL_MASK 8
use the macros to define the bit arg of the bitop_*().
I chose these values because they would be completely compatible with
any assembler that exist for the itty bitty byte arches. :) As for
PPC the values don't matter to us, at this early stage.
We could also get into magical union/structs with more abstracted
interfaces, but the above is rather simple.
yeah, grant_entry.flags will be a pain because it is 16 bit and you
also use cmpxchg() on it.
I suppose we could abstract those bit changes, but yeah, this one is
gonna hurt :(
And what will your solution be for fields in grant_entry structure?
That's another one where the fields to be atomically updated are at
least 8-byte aligned, and where using longer types will bloat a
structure that we'd prefer to pack nicely.
The I'd rather bloat (for PPC only) then come up with some nasty read/
If this is the best way for ppc then I think atomic_bit_t would be
a nicer typedef.
I think a context specific typedef would be better, in most cases.
- I'd like to see more use of DECLARE_BITMAP() for stuff like
- more use of BITS_PER_LONG instead of (sizeof(long)*8) that
occurs in many places like evtchn_pending
Xen-devel mailing list