Commit b18a2db4 authored by Heiko Carstens's avatar Heiko Carstens Committed by Martin Schwidefsky

[S390] qdio: dont cast function pointers and use them to call functions.

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: default avatarHeiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
parent 5a291321
...@@ -1024,9 +1024,9 @@ __qdio_outbound_processing(struct qdio_q *q) ...@@ -1024,9 +1024,9 @@ __qdio_outbound_processing(struct qdio_q *q)
} }
static void 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 *******************************/ /************************* INBOUND ROUTINES *******************************/
...@@ -1449,9 +1449,10 @@ __tiqdio_inbound_processing(struct qdio_q *q, int spare_ind_was_set) ...@@ -1449,9 +1449,10 @@ __tiqdio_inbound_processing(struct qdio_q *q, int spare_ind_was_set)
} }
static void 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 static void
...@@ -1494,9 +1495,9 @@ __qdio_inbound_processing(struct qdio_q *q) ...@@ -1494,9 +1495,9 @@ __qdio_inbound_processing(struct qdio_q *q)
} }
static void 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 *******************************/ /************************* MAIN ROUTINES *******************************/
...@@ -1760,12 +1761,15 @@ qdio_fill_qs(struct qdio_irq *irq_ptr, struct ccw_device *cdev, ...@@ -1760,12 +1761,15 @@ qdio_fill_qs(struct qdio_irq *irq_ptr, struct ccw_device *cdev,
q->handler=input_handler; q->handler=input_handler;
q->dev_st_chg_ind=irq_ptr->dev_st_chg_ind; 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 /* q->is_thinint_q isn't valid at this time, but
* irq_ptr->is_thinint_irq is */ * irq_ptr->is_thinint_irq is
q->tasklet.func=(void(*)(unsigned long)) */
((irq_ptr->is_thinint_irq)?&tiqdio_inbound_processing: if (irq_ptr->is_thinint_irq)
&qdio_inbound_processing); 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. */ /* actually this is not used for inbound queues. yet. */
atomic_set(&q->busy_siga_counter,0); atomic_set(&q->busy_siga_counter,0);
...@@ -1836,13 +1840,10 @@ qdio_fill_qs(struct qdio_irq *irq_ptr, struct ccw_device *cdev, ...@@ -1836,13 +1840,10 @@ qdio_fill_qs(struct qdio_irq *irq_ptr, struct ccw_device *cdev,
q->last_move_ftc=0; q->last_move_ftc=0;
q->handler=output_handler; q->handler=output_handler;
q->tasklet.data=(unsigned long)q; tasklet_init(&q->tasklet, qdio_outbound_processing,
q->tasklet.func=(void(*)(unsigned long)) (unsigned long) q);
&qdio_outbound_processing; setup_timer(&q->timer, qdio_outbound_processing,
q->timer.function=(void(*)(unsigned long)) (unsigned long) q);
&qdio_outbound_processing;
q->timer.data = (long)q;
init_timer(&q->timer);
atomic_set(&q->busy_siga_counter,0); atomic_set(&q->busy_siga_counter,0);
q->timing.busy_start=0; q->timing.busy_start=0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment