lkml.org 
[lkml]   [2006]   [May]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    SubjectRe: [PATCH] Compile failure fix for ppc on 2.6.17-rc4-mm3 (2nd attempt)
    Date
    >>>  #define push_end(res, size) do { unsigned long __sz = (size) ; \
    >>> - res->end = ((res->end + __sz) / (__sz + 1)) * (__sz + 1) + __sz; \
    >>> + resource_size_t farEnd = (res->end + __sz); \
    >>> + do_div(farEnd, (__sz + 1)); \
    >>> + res->end = farEnd * (__sz + 1) + __sz; \
    >>> } while (0)
    >>
    >> Size here is a) a misnomer (size + 1 is the actual size) and b)
    >> always a power
    >> of two minus one. So instead, do
    >>
    >> #define push_end(res, mask) res->end = -(-res->end & ~(unsigned
    >> long)mask)
    >>
    >> (with a do { } while(0) armour if you prefer).
    >>
    >
    > It's not doing the same as the old code so is your suggested fix a
    > correct replacement?
    >
    > For example, given 0xfff for size the current code rounds res->end to
    > the next 0x1000 boundary and adds 0xfff. Your propose fix just rounds
    > it to the next 0x1000 if I'm reading it correctly but is what the code
    > was meant to do in the first place? Using masks, the equivilant of the
    > current code is something like;
    >
    > #define push_end(res, mask) do { \
    > res->end = -(-res->end & ~(unsigned long)mask); \
    > res->end += mask; \
    > } while (0)

    Yeah forgot a bit, this looks fine.


    Segher

    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2006-05-29 19:56    [W:0.023 / U:0.272 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site