aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorSteffen Maier <maier@linux.vnet.ibm.com>2011-12-27 05:27:26 -0500
committerMartin Schwidefsky <schwidefsky@de.ibm.com>2011-12-27 05:27:14 -0500
commite58b0d902f7c7c407bae9c8bc8d90fa1d06184c5 (patch)
tree44aa32d0a7273040b3358623bddc62ca102839c1 /drivers
parent913021433997936822e33a62decfb1914de9bc51 (diff)
[S390] qdio: fix kernel panic for zfcp 31-bit
The queue_start_poll function pointer field in struct qdio_initialize had to change its type and become a vector of function pointers to support asynchronous delivery of storage blocks so rename the field to make the type change explicit and ensure no other user of qdio tries to use the field the old way. During setting up the qdio queues, only dereference vector elements if the vector is actually allocated. Signed-off-by: Steffen Maier <maier@linux.vnet.ibm.com> Signed-off-by: Einar Lueck <elelueck@de.ibm.com> Signed-off-by: Jan Glauber <jang@linux.vnet.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/s390/cio/qdio_setup.c3
-rw-r--r--drivers/s390/net/qeth_core_main.c2
2 files changed, 3 insertions, 2 deletions
diff --git a/drivers/s390/cio/qdio_setup.c b/drivers/s390/cio/qdio_setup.c
index 74bb1a088261..452989a7ec13 100644
--- a/drivers/s390/cio/qdio_setup.c
+++ b/drivers/s390/cio/qdio_setup.c
@@ -177,7 +177,8 @@ static void setup_queues(struct qdio_irq *irq_ptr,
177 setup_queues_misc(q, irq_ptr, qdio_init->input_handler, i); 177 setup_queues_misc(q, irq_ptr, qdio_init->input_handler, i);
178 178
179 q->is_input_q = 1; 179 q->is_input_q = 1;
180 q->u.in.queue_start_poll = qdio_init->queue_start_poll[i]; 180 q->u.in.queue_start_poll = qdio_init->queue_start_poll_array ?
181 qdio_init->queue_start_poll_array[i] : NULL;
181 182
182 setup_storage_lists(q, irq_ptr, input_sbal_array, i); 183 setup_storage_lists(q, irq_ptr, input_sbal_array, i);
183 input_sbal_array += QDIO_MAX_BUFFERS_PER_Q; 184 input_sbal_array += QDIO_MAX_BUFFERS_PER_Q;
diff --git a/drivers/s390/net/qeth_core_main.c b/drivers/s390/net/qeth_core_main.c
index fff57de78943..459149b26e3e 100644
--- a/drivers/s390/net/qeth_core_main.c
+++ b/drivers/s390/net/qeth_core_main.c
@@ -4521,7 +4521,7 @@ static int qeth_qdio_establish(struct qeth_card *card)
4521 init_data.no_output_qs = card->qdio.no_out_queues; 4521 init_data.no_output_qs = card->qdio.no_out_queues;
4522 init_data.input_handler = card->discipline.input_handler; 4522 init_data.input_handler = card->discipline.input_handler;
4523 init_data.output_handler = card->discipline.output_handler; 4523 init_data.output_handler = card->discipline.output_handler;
4524 init_data.queue_start_poll = queue_start_poll; 4524 init_data.queue_start_poll_array = queue_start_poll;
4525 init_data.int_parm = (unsigned long) card; 4525 init_data.int_parm = (unsigned long) card;
4526 init_data.input_sbal_addr_array = (void **) in_sbal_ptrs; 4526 init_data.input_sbal_addr_array = (void **) in_sbal_ptrs;
4527 init_data.output_sbal_addr_array = (void **) out_sbal_ptrs; 4527 init_data.output_sbal_addr_array = (void **) out_sbal_ptrs;