Messages in this thread | | | Date | Tue, 29 Jun 2010 18:17:38 +0200 | From | Frederic Weisbecker <> | Subject | Re: [PATCH 12/35] workqueue: update cwq alignement |
| |
On Tue, Jun 29, 2010 at 06:09:35PM +0200, Tejun Heo wrote: > Hello, > > On 06/29/2010 06:01 PM, Frederic Weisbecker wrote: > > So, imagine you allocate your struct with alloc_percpu(align). > > > > The per cpu pointer is 0x400 (purely imagination). > > > > Now you have two cpus and they have the following base offsets for > > per cpu allocations: > > > > CPU 0 = 0xf1000000 > > CPU 1 = 0xf2000000 > > > > So, the true pointers for your cpu workqueue structs will be: > > > > CPU 0 = 0xf1000400 > > CPU 1 = 0xf2000400 > > > > These addresses are aligned like you wanted to, and it seems it is what > > matters, to store these addresses in the work flags. > > Yes. > > > So why does the size of the struct need to be aligned too? > > Where am I doing that?
Ah well, yesterday there was a BUILD_BUG_ON on init_workqueues that checked this structure size was well aligned. Now that I check again, it seems to have disappeared after you updated the patch.
> > > All you want is that the two above addresses are aligned. Now why > > the size of the struct itself needs this alignment too. That's the > > obscure point for me. If it's useless, this could avoid all this > > alignment maintainance, except during the allocation itself. > > What alignment maintenance? Are you talking about the UP code? If > you're talking about the UP code, the ugliness there is because the > current UP __alloc_percpu() can't honor the alignment parameter.
Heh no, it's about a leftover in your patchset that you have fixed now.
> Heh, it seems I'm still lost. Care to give one more shot at it? :-)
My bad, I haven't looked your updated patch in detail... :)
| |