lkml.org 
[lkml]   [2009]   [Oct]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
From
SubjectRe: [PATCH 10/19] workqueue: update cwq alignement and make one more flag bit available
Date
David Howells <dhowells@redhat.com> writes:

> Tejun Heo <tj@kernel.org> wrote:
>
>> +enum {
>> + WORK_STRUCT_PENDING = 0, /* work item is pending execution */
>> +
>> + /*
>> + * Reserve 3bits off of cwq pointer. This is enough and
>> + * provides acceptable alignment on both 32 and 64bit
>> + * machines.
>> + */
>> + WORK_STRUCT_FLAG_BITS = 3,
>> +
>> + WORK_STRUCT_FLAG_MASK = (1UL << WORK_STRUCT_FLAG_BITS) - 1,
>> + WORK_STRUCT_WQ_DATA_MASK = ~WORK_STRUCT_FLAG_MASK,
>> +};
>
> There's some great enum abuse going on here:-)

The "1UL" part is a bit worrisome. Enumeration constants always
have type "int"[*], so if code that uses WORK_STRUCT_WQ_DATA_MASK
actually depends on getting a full "long" worth of bits, it is
not going to work on 64-bit systems.

[*] See C99:

6.4.4.3 Enumeration constants
Syntax
1 enumeration-constant:
identifier
Semantics
2 An identifier declared as an enumeration constant has type int.

--
Ben Pfaff
http://benpfaff.org



\
 
 \ /
  Last update: 2009-10-01 20:47    [from the cache]
©2003-2014 Jasper Spaans. Advertise on this site