[S390] qdio: remove memset hack
authorJan Glauber <jang@linux.vnet.ibm.com>
Mon, 17 May 2010 08:00:16 +0000 (10:00 +0200)
committerMartin Schwidefsky <sky@mschwide.boeblingen.de.ibm.com>
Mon, 17 May 2010 08:00:17 +0000 (10:00 +0200)
Remove memset hack that relied on the layout of struct qdio_q
to avoid deletion of the slib pointer.

Signed-off-by: Jan Glauber <jang@linux.vnet.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
drivers/s390/cio/qdio.h
drivers/s390/cio/qdio_setup.c

index 48aa064..da80e9b 100644 (file)
@@ -296,10 +296,8 @@ struct qdio_q {
        struct qdio_irq *irq_ptr;
        struct sl *sl;
        /*
-        * Warning: Leave this member at the end so it won't be cleared in
-        * qdio_fill_qs. A page is allocated under this pointer and used for
-        * slib and sl. slib is 2048 bytes big and sl points to offset
-        * PAGE_SIZE / 2.
+        * A page is allocated under this pointer and used for slib and sl.
+        * slib is 2048 bytes big and sl points to offset PAGE_SIZE / 2.
         */
        struct slib *slib;
 } __attribute__ ((aligned(256)));
index 7f4a754..6326b67 100644 (file)
@@ -106,10 +106,12 @@ int qdio_allocate_qs(struct qdio_irq *irq_ptr, int nr_input_qs, int nr_output_qs
 static void setup_queues_misc(struct qdio_q *q, struct qdio_irq *irq_ptr,
                              qdio_handler_t *handler, int i)
 {
-       /* must be cleared by every qdio_establish */
-       memset(q, 0, ((char *)&q->slib) - ((char *)q));
-       memset(q->slib, 0, PAGE_SIZE);
+       struct slib *slib = q->slib;
 
+       /* queue must be cleared for qdio_establish */
+       memset(q, 0, sizeof(*q));
+       memset(slib, 0, PAGE_SIZE);
+       q->slib = slib;
        q->irq_ptr = irq_ptr;
        q->mask = 1 << (31 - i);
        q->nr = i;