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    [W:0.022 / U:31.956 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site