[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2] xen: fix alignment for bitops
On Wed, Apr 16, 2014 at 8:55 AM, Vladimir Murzin <murzin.v@xxxxxxxxx> 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: > > Unhandled fault: alignment fault (0x96000021) at 0xffffffc01cf07d64 > Internal error: : 96000021 [#1] PREEMPT SMP > Modules linked in: > CPU: 0 PID: 563 Comm: udevd Not tainted 3.14.0+ #1 > task: ffffffc01de95c40 ti: ffffffc01cf04000 task.ti: ffffffc01cf04000 > PC is at clear_bit+0x14/0x30 > LR is at evtchn_fifo_handle_events+0x168/0x184 > pc : [<ffffffc00027b6c4>] lr : [<ffffffc0002b17d8>] pstate: 600001c5 > sp : ffffffc01cf07d00 > x29: ffffffc01cf07d00 x28: ffffffc01dce5000 > x27: 0000000000000008 x26: 0000000000000002 > x25: 00000000dffe0000 x24: 0000000000000000 > x23: 0000000000000007 x22: ffffffc000660000 > x21: ffffffc00060d900 x20: ffffffc01efdd900 > x19: ffffffc01dc26000 x18: 0000007ff1d5a570 > x17: 0000007faf848824 x16: 000000000044bf10 > x15: 0000007faf8ed598 x14: ffffffffffffffff > x13: 0000000000000028 x12: 0101010101010101 > x11: 7f7f7f7f7f7f7f7f x10: 622e607360632e75 > x9 : 7f7f7f7f7f7f7f7f x8 : 000000001e9d0000 > x7 : ffffffc01d800120 x6 : 00000000a0000000 > x5 : 00000000a0000000 x4 : 0000000000000000 > x3 : 0000000000000080 x2 : 0000000000000001 > x1 : ffffffc01cf07d64 x0 : 0000000000000000 > > Process udevd (pid: 563, stack limit = 0xffffffc01cf04058) > Stack: (0xffffffc01cf07d00 to 0xffffffc01cf08000) > 7d00: 1cf07d80 ffffffc0 002aeb7c ffffffc0 0060d6ec ffffffc0 1efe1c90 ffffffc0 > 7d20: 0056e418 ffffffc0 0066c000 ffffffc0 00000000 00000000 005659a0 ffffffc0 > 7d40: 00565998 ffffffc0 004053b0 00000000 00423bb0 00000000 00423000 00000000 > 7d60: a0000000 00000080 002aeb1c ffffffc0 00000000 00000000 002aeb4c ffffffc0 > 7d80: 1cf07dd0 ffffffc0 002aec2c ffffffc0 1dc09f00 ffffffc0 00630360 ffffffc0 > 7da0: 1dc23400 ffffffc0 00567c08 ffffffc0 0000001f 00000000 1efdc400 ffffffc0 > 7dc0: 000001ed 00000000 004053b0 00000000 1cf07de0 ffffffc0 00092eec ffffffc0 > 7de0: 1cf07df0 ffffffc0 000d79bc ffffffc0 1cf07e30 ffffffc0 000d3cf0 ffffffc0 > 7e00: 0000001f 00000000 0060d000 ffffffc0 00565000 ffffffc0 00565000 ffffffc0 > 7e20: 0000001f 00000000 00000000 00000000 1cf07e50 ffffffc0 000848bc ffffffc0 > 7e40: 0060d5a0 ffffffc0 000848a4 ffffffc0 1cf07ea0 ffffffc0 0008128c ffffffc0 > 7e60: 00667000 ffffffc0 0000400c ffffff80 1cf07ed0 ffffffc0 00004010 ffffff80 > 7e80: 80000000 00000000 2dca8010 00000000 1cf07ed0 ffffffc0 00000012 00000000 > 7ea0: f1d5b710 0000007f 000841bc ffffffc0 2dca8170 00000000 f1d5b870 0000007f > 7ec0: ffffffff ffffffff af848838 0000007f 00000000 00000000 f1d5b7a0 0000007f > 7ee0: f1d5b720 0000007f 00000000 00000000 61642f76 632f6174 2e353a34 00706d74 > 7f00: f1d5b7ae 0000007f 00000000 00000000 0000004f 00000000 7f7f7f7f 7f7f7f7f > 7f20: 60632e75 622e6073 7f7f7f7f 7f7f7f7f 01010101 01010101 00000028 00000000 > 7f40: ffffffff ffffffff af8ed598 0000007f 0044bf10 00000000 af848824 0000007f > 7f60: f1d5a570 0000007f 2dca8170 00000000 f1d5b870 0000007f 2dcc6ca0 00000000 > 7f80: f1d5bc70 0000007f 00000000 00000000 2dca8010 00000000 000001ed 00000000 > 7fa0: 004053b0 00000000 00423bb0 00000000 00423000 00000000 f1d5b710 0000007f > 7fc0: 0041f460 00000000 f1d5b710 0000007f af848838 0000007f 80000000 00000000 > 7fe0: ffffff9c ffffffff ffffffff ffffffff dfdfdfcf cfdfdfdf dfdfdfcf cfdfdfdf > Call trace: > [<ffffffc00027b6c4>] clear_bit+0x14/0x30 > [<ffffffc0002aeb78>] __xen_evtchn_do_upcall+0x9c/0x144 > [<ffffffc0002aec28>] xen_hvm_evtchn_do_upcall+0x8/0x14 > [<ffffffc000092ee8>] xen_arm_callback+0x8/0x18 > [<ffffffc0000d79b8>] handle_percpu_devid_irq+0x90/0xb8 > [<ffffffc0000d3cec>] generic_handle_irq+0x24/0x40 > [<ffffffc0000848b8>] handle_IRQ+0x68/0xe0 > [<ffffffc000081288>] gic_handle_irq+0x38/0x80 > Exception stack(0xffffffc01cf07eb0 to 0xffffffc01cf07fd0) > 7ea0: 2dca8170 00000000 f1d5b870 0000007f > 7ec0: ffffffff ffffffff af848838 0000007f 00000000 00000000 f1d5b7a0 0000007f > 7ee0: f1d5b720 0000007f 00000000 00000000 61642f76 632f6174 2e353a34 00706d74 > 7f00: f1d5b7ae 0000007f 00000000 00000000 0000004f 00000000 7f7f7f7f 7f7f7f7f > 7f20: 60632e75 622e6073 7f7f7f7f 7f7f7f7f 01010101 01010101 00000028 00000000 > 7f40: ffffffff ffffffff af8ed598 0000007f 0044bf10 00000000 af848824 0000007f > 7f60: f1d5a570 0000007f 2dca8170 00000000 f1d5b870 0000007f 2dcc6ca0 00000000 > 7f80: f1d5bc70 0000007f 00000000 00000000 2dca8010 00000000 000001ed 00000000 > 7fa0: 004053b0 00000000 00423bb0 00000000 00423000 00000000 f1d5b710 0000007f > 7fc0: 0041f460 00000000 f1d5b710 0000007f > Code: 4a030000 d2800022 8b400c21 9ac32043 (c85f7c22) > > Use unsigned long for "ready" to make sure it is world aligned. > > Signed-off-by: Vladimir Murzin <murzin.v@xxxxxxxxx> > --- > Changes: > v1->v2 > use unsigned long instead of align attribute > > drivers/xen/events/events_fifo.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/xen/events/events_fifo.c > b/drivers/xen/events/events_fifo.c > index 96109a9..291c4a8 100644 > --- a/drivers/xen/events/events_fifo.c > +++ b/drivers/xen/events/events_fifo.c > @@ -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); > -- > 1.8.3.2 > My bad :( It triggers a warning... _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |