lkml.org 
[lkml]   [2006]   [Dec]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    SubjectRe: [RFC] timers, pointers to functions and type safety
    Date
    On Friday 01 December 2006 18:21, Al Viro wrote:
    >  There is a tempting
    > possibility to do that gradually, with all intermediates still in working
    > state, provided that on all platforms currently supported by the kernel
    > unsigned long and void * are indeed passed the same way (again, only for
    > current kernel targets and existing gcc versions).  Namely, we could
    >         * introduce SETUP_TIMER variant with cast to void (*)(unsigned long)
    >         * switch to its use, converting callback instances to take pointers
    > at the same time.  That would be done in reasonably sized groups.
    >         * once it's over, flip ->function to void (*)(void *), ->data to
    > void * and update SETUP_TIMER accordingly; deal with remaining few instances
    > of ->function.

    Another alternative might be to define an intermediate version of
    timer_list that avoids adding new macros, like

    struct timer_list {
    struct list_head entry;
    ­ unsigned long expires;

    ­ void (*function)(union { unsigned long l; void *p; }
    __attribute__((transparent_union)));
    ­ union {
    unsigned long data __deprecated;
    void *obj;
    };

    ­ struct tvec_t_base_s *base;
    };

    Unfortunately, this relies more on gcc specific behavior than we
    may want, and it makes it possible to abuse in new ways, like defining
    a function to take an unsigned long argument, but passing the data
    as void *obj.

    Arnd <><
    -
    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-12-02 11:51    [W:2.383 / U:0.196 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site