lkml.org 
[lkml]   [2007]   [Oct]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[patch 24/34] qdio: dont cast function pointers and use them to call functions.
    From: Heiko Carstens <heiko.carstens@de.ibm.com>

    According to C99 6.3.2.3 it's undefined what happens if a converted
    pointer is used to call a function whose type is not compatible with
    the pointed-to type.
    That's what the qdio code is doing, so fix it.

    Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
    Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
    ---

    drivers/s390/cio/qdio.c | 37 +++++++++++++++++++------------------
    1 file changed, 19 insertions(+), 18 deletions(-)

    Index: quilt-2.6/drivers/s390/cio/qdio.c
    ===================================================================
    --- quilt-2.6.orig/drivers/s390/cio/qdio.c
    +++ quilt-2.6/drivers/s390/cio/qdio.c
    @@ -1024,9 +1024,9 @@ __qdio_outbound_processing(struct qdio_q
    }

    static void
    -qdio_outbound_processing(struct qdio_q *q)
    +qdio_outbound_processing(unsigned long q)
    {
    - __qdio_outbound_processing(q);
    + __qdio_outbound_processing((struct qdio_q *) q);
    }

    /************************* INBOUND ROUTINES *******************************/
    @@ -1449,9 +1449,10 @@ out:
    }

    static void
    -tiqdio_inbound_processing(struct qdio_q *q)
    +tiqdio_inbound_processing(unsigned long q)
    {
    - __tiqdio_inbound_processing(q, atomic_read(&spare_indicator_usecount));
    + __tiqdio_inbound_processing((struct qdio_q *) q,
    + atomic_read(&spare_indicator_usecount));
    }

    static void
    @@ -1494,9 +1495,9 @@ again:
    }

    static void
    -qdio_inbound_processing(struct qdio_q *q)
    +qdio_inbound_processing(unsigned long q)
    {
    - __qdio_inbound_processing(q);
    + __qdio_inbound_processing((struct qdio_q *) q);
    }

    /************************* MAIN ROUTINES *******************************/
    @@ -1760,12 +1761,15 @@ qdio_fill_qs(struct qdio_irq *irq_ptr, s
    q->handler=input_handler;
    q->dev_st_chg_ind=irq_ptr->dev_st_chg_ind;

    - q->tasklet.data=(unsigned long)q;
    /* q->is_thinint_q isn't valid at this time, but
    - * irq_ptr->is_thinint_irq is */
    - q->tasklet.func=(void(*)(unsigned long))
    - ((irq_ptr->is_thinint_irq)?&tiqdio_inbound_processing:
    - &qdio_inbound_processing);
    + * irq_ptr->is_thinint_irq is
    + */
    + if (irq_ptr->is_thinint_irq)
    + tasklet_init(&q->tasklet, tiqdio_inbound_processing,
    + (unsigned long) q);
    + else
    + tasklet_init(&q->tasklet, qdio_inbound_processing,
    + (unsigned long) q);

    /* actually this is not used for inbound queues. yet. */
    atomic_set(&q->busy_siga_counter,0);
    @@ -1836,13 +1840,10 @@ qdio_fill_qs(struct qdio_irq *irq_ptr, s
    q->last_move_ftc=0;
    q->handler=output_handler;

    - q->tasklet.data=(unsigned long)q;
    - q->tasklet.func=(void(*)(unsigned long))
    - &qdio_outbound_processing;
    - q->timer.function=(void(*)(unsigned long))
    - &qdio_outbound_processing;
    - q->timer.data = (long)q;
    - init_timer(&q->timer);
    + tasklet_init(&q->tasklet, qdio_outbound_processing,
    + (unsigned long) q);
    + setup_timer(&q->timer, qdio_outbound_processing,
    + (unsigned long) q);

    atomic_set(&q->busy_siga_counter,0);
    q->timing.busy_start=0;
    --
    blue skies,
    Martin.

    "Reality continues to ruin my life." - Calvin.

    -
    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: 2007-10-04 13:43    [W:0.027 / U:37.052 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site