[lkml]   [2010]   [Jun]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
SubjectRe: [PATCH 12/35] workqueue: update cwq alignement

On 06/29/2010 12:47 AM, Frederic Weisbecker wrote:
>> void __init init_workqueues(void)
>> {
>> + /*
>> + * cwqs are forced aligned according to WORK_STRUCT_FLAG_BITS.
>> + * Make sure that the alignment isn't lower than that of
>> + * unsigned long long.
>> + */
>> + BUILD_BUG_ON(__alignof__(struct cpu_workqueue_struct) <
>> + __alignof__(unsigned long long));
>> +
> But they are not allocated contiguously as we use the per cpu offsets.
> So why does the struct itself need to be aligned? Only the base pointer
> of its dynamic allocation needs to be aligned. Or am I missing something?

work->data doesn't store the percpu pointer but the address of cwq of
that specific cpu as returned by per_cpu_ptr(), so each element needs
to be aligned. Besides, if the percpu ptr is aligned the elements are
aligned so they aren't different things.

> This is crashing my build in x86-32, unless I force an alignment to 8, or
> I just remove this build check.

Heh, how did that happen? I'll investigate. Can you please attach
your .config?



 \ /
  Last update: 2010-06-29 09:43    [W:0.095 / U:8.136 seconds]
©2003-2018 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site