diff options
author | Steffen Maier <maier@linux.vnet.ibm.com> | 2011-12-27 05:27:26 -0500 |
---|---|---|
committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2011-12-27 05:27:14 -0500 |
commit | e58b0d902f7c7c407bae9c8bc8d90fa1d06184c5 (patch) | |
tree | 44aa32d0a7273040b3358623bddc62ca102839c1 /drivers/s390 | |
parent | 913021433997936822e33a62decfb1914de9bc51 (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/s390')
-rw-r--r-- | drivers/s390/cio/qdio_setup.c | 3 | ||||
-rw-r--r-- | drivers/s390/net/qeth_core_main.c | 2 |
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; |