diff options
-rw-r--r-- | arch/s390/include/asm/qdio.h | 3 | ||||
-rw-r--r-- | drivers/s390/cio/qdio.h | 9 | ||||
-rw-r--r-- | drivers/s390/cio/qdio_setup.c | 10 |
3 files changed, 14 insertions, 8 deletions
diff --git a/arch/s390/include/asm/qdio.h b/arch/s390/include/asm/qdio.h index 79d849f014f0..c666bfe5e984 100644 --- a/arch/s390/include/asm/qdio.h +++ b/arch/s390/include/asm/qdio.h | |||
@@ -13,7 +13,8 @@ | |||
13 | #include <asm/cio.h> | 13 | #include <asm/cio.h> |
14 | #include <asm/ccwdev.h> | 14 | #include <asm/ccwdev.h> |
15 | 15 | ||
16 | #define QDIO_MAX_QUEUES_PER_IRQ 32 | 16 | /* only use 4 queues to save some cachelines */ |
17 | #define QDIO_MAX_QUEUES_PER_IRQ 4 | ||
17 | #define QDIO_MAX_BUFFERS_PER_Q 128 | 18 | #define QDIO_MAX_BUFFERS_PER_Q 128 |
18 | #define QDIO_MAX_BUFFERS_MASK (QDIO_MAX_BUFFERS_PER_Q - 1) | 19 | #define QDIO_MAX_BUFFERS_MASK (QDIO_MAX_BUFFERS_PER_Q - 1) |
19 | #define QDIO_MAX_ELEMENTS_PER_BUFFER 16 | 20 | #define QDIO_MAX_ELEMENTS_PER_BUFFER 16 |
diff --git a/drivers/s390/cio/qdio.h b/drivers/s390/cio/qdio.h index 9a5283e16e38..48aa0647432b 100644 --- a/drivers/s390/cio/qdio.h +++ b/drivers/s390/cio/qdio.h | |||
@@ -208,7 +208,7 @@ struct qdio_dev_perf_stat { | |||
208 | unsigned int eqbs_partial; | 208 | unsigned int eqbs_partial; |
209 | unsigned int sqbs; | 209 | unsigned int sqbs; |
210 | unsigned int sqbs_partial; | 210 | unsigned int sqbs_partial; |
211 | }; | 211 | } ____cacheline_aligned; |
212 | 212 | ||
213 | struct qdio_queue_perf_stat { | 213 | struct qdio_queue_perf_stat { |
214 | /* | 214 | /* |
@@ -329,12 +329,8 @@ struct qdio_irq { | |||
329 | struct qdio_ssqd_desc ssqd_desc; | 329 | struct qdio_ssqd_desc ssqd_desc; |
330 | void (*orig_handler) (struct ccw_device *, unsigned long, struct irb *); | 330 | void (*orig_handler) (struct ccw_device *, unsigned long, struct irb *); |
331 | 331 | ||
332 | struct qdio_dev_perf_stat perf_stat; | ||
333 | int perf_stat_enabled; | 332 | int perf_stat_enabled; |
334 | /* | 333 | |
335 | * Warning: Leave these members together at the end so they won't be | ||
336 | * cleared in qdio_setup_irq. | ||
337 | */ | ||
338 | struct qdr *qdr; | 334 | struct qdr *qdr; |
339 | unsigned long chsc_page; | 335 | unsigned long chsc_page; |
340 | 336 | ||
@@ -343,6 +339,7 @@ struct qdio_irq { | |||
343 | 339 | ||
344 | debug_info_t *debug_area; | 340 | debug_info_t *debug_area; |
345 | struct mutex setup_mutex; | 341 | struct mutex setup_mutex; |
342 | struct qdio_dev_perf_stat perf_stat; | ||
346 | }; | 343 | }; |
347 | 344 | ||
348 | /* helper functions */ | 345 | /* helper functions */ |
diff --git a/drivers/s390/cio/qdio_setup.c b/drivers/s390/cio/qdio_setup.c index 4464907715a4..7f4a75465140 100644 --- a/drivers/s390/cio/qdio_setup.c +++ b/drivers/s390/cio/qdio_setup.c | |||
@@ -382,7 +382,15 @@ int qdio_setup_irq(struct qdio_initialize *init_data) | |||
382 | struct qdio_irq *irq_ptr = init_data->cdev->private->qdio_data; | 382 | struct qdio_irq *irq_ptr = init_data->cdev->private->qdio_data; |
383 | int rc; | 383 | int rc; |
384 | 384 | ||
385 | memset(irq_ptr, 0, ((char *)&irq_ptr->qdr) - ((char *)irq_ptr)); | 385 | memset(&irq_ptr->qib, 0, sizeof(irq_ptr->qib)); |
386 | memset(&irq_ptr->siga_flag, 0, sizeof(irq_ptr->siga_flag)); | ||
387 | memset(&irq_ptr->ccw, 0, sizeof(irq_ptr->ccw)); | ||
388 | memset(&irq_ptr->ssqd_desc, 0, sizeof(irq_ptr->ssqd_desc)); | ||
389 | memset(&irq_ptr->perf_stat, 0, sizeof(irq_ptr->perf_stat)); | ||
390 | |||
391 | irq_ptr->debugfs_dev = irq_ptr->debugfs_perf = NULL; | ||
392 | irq_ptr->sch_token = irq_ptr->state = irq_ptr->perf_stat_enabled = 0; | ||
393 | |||
386 | /* wipes qib.ac, required by ar7063 */ | 394 | /* wipes qib.ac, required by ar7063 */ |
387 | memset(irq_ptr->qdr, 0, sizeof(struct qdr)); | 395 | memset(irq_ptr->qdr, 0, sizeof(struct qdr)); |
388 | 396 | ||