[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2] xen: fix alignment for bitops
On Thu, Apr 17, 2014 at 11:22 AM, David Vrabel <david.vrabel@xxxxxxxxxx> wrote: > On 16/04/14 08:55, Vladimir Murzin wrote: >> Bitops operations like set/clear/change mandate world aligned pointer, mainly >> because architectures specific implementation. >> >> Looks that DEFINE_PER_CPU does required alignment for cpu_control_block; >> however, local copy used for bitops might not be world aligned. >> >> For arm64 it ends up with unaligned access trap... > > Thanks. Does this version work for you? > > David > > 8<---------------------- > xen/events/fifo: fix alignment for bitops on local ready word > > Bitops operations like set_bit(), clear_bit(), and test_bit() require > word aligned pointers, because of architectures specific > implementations. > > Looks that DEFINE_PER_CPU does required alignment for > cpu_control_block; however, local copy of the ready word might not be > word aligned. > > For arm64 it ends up with unaligned access trap at: > > if (head == 0) > clear_bit(priority, BM(ready)); > > Use unsigned long for "ready" to make sure it is word aligned. > > Signed-off-by: Vladimir Murzin <murzin.v@xxxxxxxxx> > Signed-off-by: David Vrabel <david.vrabel@xxxxxxxxxx > --- > drivers/xen/events/events_fifo.c | 6 +++--- > 1 files changed, 3 insertions(+), 3 deletions(-) > > diff --git a/drivers/xen/events/events_fifo.c > b/drivers/xen/events/events_fifo.c > index 96109a9..475d967 100644 > --- a/drivers/xen/events/events_fifo.c > +++ b/drivers/xen/events/events_fifo.c > @@ -243,7 +243,7 @@ static void handle_irq_for_port(unsigned port) > > static void consume_one_event(unsigned cpu, > struct evtchn_fifo_control_block *control_block, > - unsigned priority, uint32_t *ready) > + unsigned priority, unsigned long *ready) > { > struct evtchn_fifo_queue *q = &per_cpu(cpu_queue, cpu); > uint32_t head; > @@ -273,7 +273,7 @@ static void consume_one_event(unsigned cpu, > * copy of the ready word. > */ > if (head == 0) > - clear_bit(priority, BM(ready)); > + clear_bit(priority, ready); > > if (sync_test_bit(EVTCHN_FIFO_PENDING, BM(word)) > && !sync_test_bit(EVTCHN_FIFO_MASKED, BM(word))) > @@ -285,7 +285,7 @@ static void consume_one_event(unsigned cpu, > static void evtchn_fifo_handle_events(unsigned cpu) > { > struct evtchn_fifo_control_block *control_block; > - uint32_t ready; > + unsigned long ready; > unsigned q; > > control_block = per_cpu(cpu_control_block, cpu); Yes. It fixes warning and I'm able to boot Dom0. Vladimir _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |