Commit 34249d0f9243fce773c2fa352934ba108320e234

Authored by Ursula Braun
Committed by Martin Schwidefsky
1 parent 9575bf2657

[S390] runtime switch for qdio performance statistics

Remove CONFIG_QETH_PERF_STATS and use a sysfs attribute instead.
We want to have the ability to turn the statistics on/off at runtime.

Signed-off-by: Ursula Braun <braunu@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>

Showing 4 changed files with 135 additions and 128 deletions Side-by-side Diff

... ... @@ -258,14 +258,6 @@
258 258  
259 259 If unsure, say Y.
260 260  
261   -config QDIO_PERF_STATS
262   - bool "Performance statistics in /proc"
263   - depends on QDIO
264   - help
265   - Say Y here to get performance statistics in /proc/qdio_perf
266   -
267   - If unsure, say N.
268   -
269 261 config QDIO_DEBUG
270 262 bool "Extended debugging information"
271 263 depends on QDIO
... ... @@ -134,7 +134,6 @@
134 134 #
135 135 CONFIG_MACHCHK_WARNING=y
136 136 CONFIG_QDIO=y
137   -# CONFIG_QDIO_PERF_STATS is not set
138 137 # CONFIG_QDIO_DEBUG is not set
139 138  
140 139 #
drivers/s390/cio/qdio.c
... ... @@ -46,6 +46,7 @@
46 46 #include <asm/timex.h>
47 47  
48 48 #include <asm/debug.h>
  49 +#include <asm/s390_rdev.h>
49 50 #include <asm/qdio.h>
50 51  
51 52 #include "cio.h"
52 53  
53 54  
... ... @@ -65,12 +66,12 @@
65 66 /******************** HERE WE GO ***********************************/
66 67  
67 68 static const char version[] = "QDIO base support version 2";
  69 +extern struct bus_type ccw_bus_type;
68 70  
69   -#ifdef QDIO_PERFORMANCE_STATS
  71 +static int qdio_performance_stats = 0;
70 72 static int proc_perf_file_registration;
71 73 static unsigned long i_p_c, i_p_nc, o_p_c, o_p_nc, ii_p_c, ii_p_nc;
72 74 static struct qdio_perf_stats perf_stats;
73   -#endif /* QDIO_PERFORMANCE_STATS */
74 75  
75 76 static int hydra_thinints;
76 77 static int is_passthrough = 0;
... ... @@ -275,9 +276,8 @@
275 276 QDIO_DBF_TEXT4(0,trace,"sigasync");
276 277 QDIO_DBF_HEX4(0,trace,&q,sizeof(void*));
277 278  
278   -#ifdef QDIO_PERFORMANCE_STATS
279   - perf_stats.siga_syncs++;
280   -#endif /* QDIO_PERFORMANCE_STATS */
  279 + if (qdio_performance_stats)
  280 + perf_stats.siga_syncs++;
281 281  
282 282 cc = do_siga_sync(q->schid, gpr2, gpr3);
283 283 if (cc)
... ... @@ -322,9 +322,8 @@
322 322 __u32 busy_bit;
323 323 __u64 start_time=0;
324 324  
325   -#ifdef QDIO_PERFORMANCE_STATS
326   - perf_stats.siga_outs++;
327   -#endif /* QDIO_PERFORMANCE_STATS */
  325 + if (qdio_performance_stats)
  326 + perf_stats.siga_outs++;
328 327  
329 328 QDIO_DBF_TEXT4(0,trace,"sigaout");
330 329 QDIO_DBF_HEX4(0,trace,&q,sizeof(void*));
... ... @@ -358,9 +357,8 @@
358 357 QDIO_DBF_TEXT4(0,trace,"sigain");
359 358 QDIO_DBF_HEX4(0,trace,&q,sizeof(void*));
360 359  
361   -#ifdef QDIO_PERFORMANCE_STATS
362   - perf_stats.siga_ins++;
363   -#endif /* QDIO_PERFORMANCE_STATS */
  360 + if (qdio_performance_stats)
  361 + perf_stats.siga_ins++;
364 362  
365 363 cc = do_siga_input(q->schid, q->mask);
366 364  
... ... @@ -954,9 +952,8 @@
954 952  
955 953 if (unlikely(qdio_reserve_q(q))) {
956 954 qdio_release_q(q);
957   -#ifdef QDIO_PERFORMANCE_STATS
958   - o_p_c++;
959   -#endif /* QDIO_PERFORMANCE_STATS */
  955 + if (qdio_performance_stats)
  956 + o_p_c++;
960 957 /* as we're sissies, we'll check next time */
961 958 if (likely(!atomic_read(&q->is_in_shutdown))) {
962 959 qdio_mark_q(q);
... ... @@ -964,10 +961,10 @@
964 961 }
965 962 return;
966 963 }
967   -#ifdef QDIO_PERFORMANCE_STATS
968   - o_p_nc++;
969   - perf_stats.tl_runs++;
970   -#endif /* QDIO_PERFORMANCE_STATS */
  964 + if (qdio_performance_stats) {
  965 + o_p_nc++;
  966 + perf_stats.tl_runs++;
  967 + }
971 968  
972 969 /* see comment in qdio_kick_outbound_q */
973 970 siga_attempts=atomic_read(&q->busy_siga_counter);
974 971  
... ... @@ -1142,15 +1139,16 @@
1142 1139 {
1143 1140 int i;
1144 1141  
1145   -#ifdef QDIO_PERFORMANCE_STATS
1146 1142 static int old_pcis=0;
1147 1143 static int old_thinints=0;
1148 1144  
1149   - if ((old_pcis==perf_stats.pcis)&&(old_thinints==perf_stats.thinints))
1150   - perf_stats.start_time_inbound=NOW;
1151   - else
1152   - old_pcis=perf_stats.pcis;
1153   -#endif /* QDIO_PERFORMANCE_STATS */
  1145 + if (qdio_performance_stats) {
  1146 + if ((old_pcis==perf_stats.pcis)&&
  1147 + (old_thinints==perf_stats.thinints))
  1148 + perf_stats.start_time_inbound=NOW;
  1149 + else
  1150 + old_pcis=perf_stats.pcis;
  1151 + }
1154 1152  
1155 1153 i=qdio_get_inbound_buffer_frontier(q);
1156 1154 if ( (i!=GET_SAVED_FRONTIER(q)) ||
... ... @@ -1340,10 +1338,10 @@
1340 1338 q->siga_error=0;
1341 1339 q->error_status_flags=0;
1342 1340  
1343   -#ifdef QDIO_PERFORMANCE_STATS
1344   - perf_stats.inbound_time+=NOW-perf_stats.start_time_inbound;
1345   - perf_stats.inbound_cnt++;
1346   -#endif /* QDIO_PERFORMANCE_STATS */
  1341 + if (qdio_performance_stats) {
  1342 + perf_stats.inbound_time+=NOW-perf_stats.start_time_inbound;
  1343 + perf_stats.inbound_cnt++;
  1344 + }
1347 1345 }
1348 1346  
1349 1347 static inline void
... ... @@ -1363,9 +1361,8 @@
1363 1361 */
1364 1362 if (unlikely(qdio_reserve_q(q))) {
1365 1363 qdio_release_q(q);
1366   -#ifdef QDIO_PERFORMANCE_STATS
1367   - ii_p_c++;
1368   -#endif /* QDIO_PERFORMANCE_STATS */
  1364 + if (qdio_performance_stats)
  1365 + ii_p_c++;
1369 1366 /*
1370 1367 * as we might just be about to stop polling, we make
1371 1368 * sure that we check again at least once more
... ... @@ -1373,9 +1370,8 @@
1373 1370 tiqdio_sched_tl();
1374 1371 return;
1375 1372 }
1376   -#ifdef QDIO_PERFORMANCE_STATS
1377   - ii_p_nc++;
1378   -#endif /* QDIO_PERFORMANCE_STATS */
  1373 + if (qdio_performance_stats)
  1374 + ii_p_nc++;
1379 1375 if (unlikely(atomic_read(&q->is_in_shutdown))) {
1380 1376 qdio_unmark_q(q);
1381 1377 goto out;
1382 1378  
... ... @@ -1416,11 +1412,11 @@
1416 1412 irq_ptr = (struct qdio_irq*)q->irq_ptr;
1417 1413 for (i=0;i<irq_ptr->no_output_qs;i++) {
1418 1414 oq = irq_ptr->output_qs[i];
1419   -#ifdef QDIO_PERFORMANCE_STATS
1420   - perf_stats.tl_runs--;
1421   -#endif /* QDIO_PERFORMANCE_STATS */
1422   - if (!qdio_is_outbound_q_done(oq))
  1415 + if (!qdio_is_outbound_q_done(oq)) {
  1416 + if (qdio_performance_stats)
  1417 + perf_stats.tl_runs--;
1423 1418 __qdio_outbound_processing(oq);
  1419 + }
1424 1420 }
1425 1421 }
1426 1422  
... ... @@ -1457,9 +1453,8 @@
1457 1453  
1458 1454 if (unlikely(qdio_reserve_q(q))) {
1459 1455 qdio_release_q(q);
1460   -#ifdef QDIO_PERFORMANCE_STATS
1461   - i_p_c++;
1462   -#endif /* QDIO_PERFORMANCE_STATS */
  1456 + if (qdio_performance_stats)
  1457 + i_p_c++;
1463 1458 /* as we're sissies, we'll check next time */
1464 1459 if (likely(!atomic_read(&q->is_in_shutdown))) {
1465 1460 qdio_mark_q(q);
... ... @@ -1467,10 +1462,10 @@
1467 1462 }
1468 1463 return;
1469 1464 }
1470   -#ifdef QDIO_PERFORMANCE_STATS
1471   - i_p_nc++;
1472   - perf_stats.tl_runs++;
1473   -#endif /* QDIO_PERFORMANCE_STATS */
  1465 + if (qdio_performance_stats) {
  1466 + i_p_nc++;
  1467 + perf_stats.tl_runs++;
  1468 + }
1474 1469  
1475 1470 again:
1476 1471 if (qdio_has_inbound_q_moved(q)) {
... ... @@ -1516,9 +1511,8 @@
1516 1511  
1517 1512 if (unlikely(qdio_reserve_q(q))) {
1518 1513 qdio_release_q(q);
1519   -#ifdef QDIO_PERFORMANCE_STATS
1520   - ii_p_c++;
1521   -#endif /* QDIO_PERFORMANCE_STATS */
  1514 + if (qdio_performance_stats)
  1515 + ii_p_c++;
1522 1516 /*
1523 1517 * as we might just be about to stop polling, we make
1524 1518 * sure that we check again at least once more
... ... @@ -1609,9 +1603,8 @@
1609 1603 {
1610 1604 QDIO_DBF_TEXT4(0,trace,"iqdio_tl");
1611 1605  
1612   -#ifdef QDIO_PERFORMANCE_STATS
1613   - perf_stats.tl_runs++;
1614   -#endif /* QDIO_PERFORMANCE_STATS */
  1606 + if (qdio_performance_stats)
  1607 + perf_stats.tl_runs++;
1615 1608  
1616 1609 tiqdio_inbound_checks();
1617 1610 }
... ... @@ -1918,10 +1911,10 @@
1918 1911 {
1919 1912 QDIO_DBF_TEXT4(0,trace,"thin_int");
1920 1913  
1921   -#ifdef QDIO_PERFORMANCE_STATS
1922   - perf_stats.thinints++;
1923   - perf_stats.start_time_inbound=NOW;
1924   -#endif /* QDIO_PERFORMANCE_STATS */
  1914 + if (qdio_performance_stats) {
  1915 + perf_stats.thinints++;
  1916 + perf_stats.start_time_inbound=NOW;
  1917 + }
1925 1918  
1926 1919 /* SVS only when needed:
1927 1920 * issue SVS to benefit from iqdio interrupt avoidance
1928 1921  
... ... @@ -1976,18 +1969,17 @@
1976 1969 int i;
1977 1970 struct qdio_q *q;
1978 1971  
1979   -#ifdef QDIO_PERFORMANCE_STATS
1980   - perf_stats.pcis++;
1981   - perf_stats.start_time_inbound=NOW;
1982   -#endif /* QDIO_PERFORMANCE_STATS */
  1972 + if (qdio_performance_stats) {
  1973 + perf_stats.pcis++;
  1974 + perf_stats.start_time_inbound=NOW;
  1975 + }
1983 1976 for (i=0;i<irq_ptr->no_input_qs;i++) {
1984 1977 q=irq_ptr->input_qs[i];
1985 1978 if (q->is_input_q&QDIO_FLAG_NO_INPUT_INTERRUPT_CONTEXT)
1986 1979 qdio_mark_q(q);
1987 1980 else {
1988   -#ifdef QDIO_PERFORMANCE_STATS
1989   - perf_stats.tl_runs--;
1990   -#endif /* QDIO_PERFORMANCE_STATS */
  1981 + if (qdio_performance_stats)
  1982 + perf_stats.tl_runs--;
1991 1983 __qdio_inbound_processing(q);
1992 1984 }
1993 1985 }
1994 1986  
... ... @@ -1995,11 +1987,10 @@
1995 1987 return;
1996 1988 for (i=0;i<irq_ptr->no_output_qs;i++) {
1997 1989 q=irq_ptr->output_qs[i];
1998   -#ifdef QDIO_PERFORMANCE_STATS
1999   - perf_stats.tl_runs--;
2000   -#endif /* QDIO_PERFORMANCE_STATS */
2001 1990 if (qdio_is_outbound_q_done(q))
2002 1991 continue;
  1992 + if (qdio_performance_stats)
  1993 + perf_stats.tl_runs--;
2003 1994 if (!irq_ptr->sync_done_on_outb_pcis)
2004 1995 SYNC_MEMORY;
2005 1996 __qdio_outbound_processing(q);
2006 1997  
... ... @@ -3460,19 +3451,18 @@
3460 3451 struct qdio_irq *irq = (struct qdio_irq *) q->irq_ptr;
3461 3452  
3462 3453 /* This is the outbound handling of queues */
3463   -#ifdef QDIO_PERFORMANCE_STATS
3464   - perf_stats.start_time_outbound=NOW;
3465   -#endif /* QDIO_PERFORMANCE_STATS */
  3454 + if (qdio_performance_stats)
  3455 + perf_stats.start_time_outbound=NOW;
3466 3456  
3467 3457 qdio_do_qdio_fill_output(q,qidx,count,buffers);
3468 3458  
3469 3459 used_elements=atomic_add_return(count, &q->number_of_buffers_used) - count;
3470 3460  
3471 3461 if (callflags&QDIO_FLAG_DONT_SIGA) {
3472   -#ifdef QDIO_PERFORMANCE_STATS
3473   - perf_stats.outbound_time+=NOW-perf_stats.start_time_outbound;
3474   - perf_stats.outbound_cnt++;
3475   -#endif /* QDIO_PERFORMANCE_STATS */
  3462 + if (qdio_performance_stats) {
  3463 + perf_stats.outbound_time+=NOW-perf_stats.start_time_outbound;
  3464 + perf_stats.outbound_cnt++;
  3465 + }
3476 3466 return;
3477 3467 }
3478 3468 if (q->is_iqdio_q) {
... ... @@ -3502,9 +3492,8 @@
3502 3492 qdio_kick_outbound_q(q);
3503 3493 } else {
3504 3494 QDIO_DBF_TEXT3(0,trace, "fast-req");
3505   -#ifdef QDIO_PERFORMANCE_STATS
3506   - perf_stats.fast_reqs++;
3507   -#endif /* QDIO_PERFORMANCE_STATS */
  3495 + if (qdio_performance_stats)
  3496 + perf_stats.fast_reqs++;
3508 3497 }
3509 3498 }
3510 3499 /*
... ... @@ -3515,10 +3504,10 @@
3515 3504 __qdio_outbound_processing(q);
3516 3505 }
3517 3506  
3518   -#ifdef QDIO_PERFORMANCE_STATS
3519   - perf_stats.outbound_time+=NOW-perf_stats.start_time_outbound;
3520   - perf_stats.outbound_cnt++;
3521   -#endif /* QDIO_PERFORMANCE_STATS */
  3507 + if (qdio_performance_stats) {
  3508 + perf_stats.outbound_time+=NOW-perf_stats.start_time_outbound;
  3509 + perf_stats.outbound_cnt++;
  3510 + }
3522 3511 }
3523 3512  
3524 3513 /* count must be 1 in iqdio */
... ... @@ -3576,7 +3565,6 @@
3576 3565 return 0;
3577 3566 }
3578 3567  
3579   -#ifdef QDIO_PERFORMANCE_STATS
3580 3568 static int
3581 3569 qdio_perf_procfile_read(char *buffer, char **buffer_location, off_t offset,
3582 3570 int buffer_length, int *eof, void *data)
3583 3571  
3584 3572  
3585 3573  
3586 3574  
3587 3575  
3588 3576  
3589 3577  
3590 3578  
3591 3579  
3592 3580  
... ... @@ -3592,29 +3580,29 @@
3592 3580 _OUTP_IT("i_p_nc/c=%lu/%lu\n",i_p_nc,i_p_c);
3593 3581 _OUTP_IT("ii_p_nc/c=%lu/%lu\n",ii_p_nc,ii_p_c);
3594 3582 _OUTP_IT("o_p_nc/c=%lu/%lu\n",o_p_nc,o_p_c);
3595   - _OUTP_IT("Number of tasklet runs (total) : %u\n",
  3583 + _OUTP_IT("Number of tasklet runs (total) : %lu\n",
3596 3584 perf_stats.tl_runs);
3597 3585 _OUTP_IT("\n");
3598   - _OUTP_IT("Number of SIGA sync's issued : %u\n",
  3586 + _OUTP_IT("Number of SIGA sync's issued : %lu\n",
3599 3587 perf_stats.siga_syncs);
3600   - _OUTP_IT("Number of SIGA in's issued : %u\n",
  3588 + _OUTP_IT("Number of SIGA in's issued : %lu\n",
3601 3589 perf_stats.siga_ins);
3602   - _OUTP_IT("Number of SIGA out's issued : %u\n",
  3590 + _OUTP_IT("Number of SIGA out's issued : %lu\n",
3603 3591 perf_stats.siga_outs);
3604   - _OUTP_IT("Number of PCIs caught : %u\n",
  3592 + _OUTP_IT("Number of PCIs caught : %lu\n",
3605 3593 perf_stats.pcis);
3606   - _OUTP_IT("Number of adapter interrupts caught : %u\n",
  3594 + _OUTP_IT("Number of adapter interrupts caught : %lu\n",
3607 3595 perf_stats.thinints);
3608   - _OUTP_IT("Number of fast requeues (outg. SBALs w/o SIGA) : %u\n",
  3596 + _OUTP_IT("Number of fast requeues (outg. SBALs w/o SIGA) : %lu\n",
3609 3597 perf_stats.fast_reqs);
3610 3598 _OUTP_IT("\n");
3611   - _OUTP_IT("Total time of all inbound actions (us) incl. UL : %u\n",
  3599 + _OUTP_IT("Total time of all inbound actions (us) incl. UL : %lu\n",
3612 3600 perf_stats.inbound_time);
3613   - _OUTP_IT("Number of inbound transfers : %u\n",
  3601 + _OUTP_IT("Number of inbound transfers : %lu\n",
3614 3602 perf_stats.inbound_cnt);
3615   - _OUTP_IT("Total time of all outbound do_QDIOs (us) : %u\n",
  3603 + _OUTP_IT("Total time of all outbound do_QDIOs (us) : %lu\n",
3616 3604 perf_stats.outbound_time);
3617   - _OUTP_IT("Number of do_QDIOs outbound : %u\n",
  3605 + _OUTP_IT("Number of do_QDIOs outbound : %lu\n",
3618 3606 perf_stats.outbound_cnt);
3619 3607 _OUTP_IT("\n");
3620 3608  
3621 3609  
... ... @@ -3622,12 +3610,10 @@
3622 3610 }
3623 3611  
3624 3612 static struct proc_dir_entry *qdio_perf_proc_file;
3625   -#endif /* QDIO_PERFORMANCE_STATS */
3626 3613  
3627 3614 static void
3628 3615 qdio_add_procfs_entry(void)
3629 3616 {
3630   -#ifdef QDIO_PERFORMANCE_STATS
3631 3617 proc_perf_file_registration=0;
3632 3618 qdio_perf_proc_file=create_proc_entry(QDIO_PERF,
3633 3619 S_IFREG|0444,&proc_root);
3634 3620  
3635 3621  
3636 3622  
... ... @@ -3639,20 +3625,58 @@
3639 3625 QDIO_PRINT_WARN("was not able to register perf. " \
3640 3626 "proc-file (%i).\n",
3641 3627 proc_perf_file_registration);
3642   -#endif /* QDIO_PERFORMANCE_STATS */
3643 3628 }
3644 3629  
3645 3630 static void
3646 3631 qdio_remove_procfs_entry(void)
3647 3632 {
3648   -#ifdef QDIO_PERFORMANCE_STATS
3649 3633 perf_stats.tl_runs=0;
3650 3634  
3651 3635 if (!proc_perf_file_registration) /* means if it went ok earlier */
3652 3636 remove_proc_entry(QDIO_PERF,&proc_root);
3653   -#endif /* QDIO_PERFORMANCE_STATS */
3654 3637 }
3655 3638  
  3639 +/**
  3640 + * attributes in sysfs
  3641 + *****************************************************************************/
  3642 +
  3643 +static ssize_t
  3644 +qdio_performance_stats_show(struct bus_type *bus, char *buf)
  3645 +{
  3646 + return sprintf(buf, "%i\n", qdio_performance_stats ? 1 : 0);
  3647 +}
  3648 +
  3649 +static ssize_t
  3650 +qdio_performance_stats_store(struct bus_type *bus, const char *buf, size_t count)
  3651 +{
  3652 + char *tmp;
  3653 + int i;
  3654 +
  3655 + i = simple_strtoul(buf, &tmp, 16);
  3656 + if ((i == 0) || (i == 1)) {
  3657 + if (i == qdio_performance_stats)
  3658 + return count;
  3659 + qdio_performance_stats = i;
  3660 + if (i==0) {
  3661 + /* reset perf. stat. info */
  3662 + i_p_nc = 0;
  3663 + i_p_c = 0;
  3664 + ii_p_nc = 0;
  3665 + ii_p_c = 0;
  3666 + o_p_nc = 0;
  3667 + o_p_c = 0;
  3668 + memset(&perf_stats, 0, sizeof(struct qdio_perf_stats));
  3669 + }
  3670 + } else {
  3671 + QDIO_PRINT_WARN("QDIO performance_stats: write 0 or 1 to this file!\n");
  3672 + return -EINVAL;
  3673 + }
  3674 + return count;
  3675 +}
  3676 +
  3677 +static BUS_ATTR(qdio_performance_stats, 0644, qdio_performance_stats_show,
  3678 + qdio_performance_stats_store);
  3679 +
3656 3680 static void
3657 3681 tiqdio_register_thinints(void)
3658 3682 {
... ... @@ -3697,6 +3721,7 @@
3697 3721 kfree(indicators);
3698 3722 }
3699 3723  
  3724 +
3700 3725 static void
3701 3726 qdio_unregister_dbf_views(void)
3702 3727 {
3703 3728  
... ... @@ -3798,9 +3823,7 @@
3798 3823 init_QDIO(void)
3799 3824 {
3800 3825 int res;
3801   -#ifdef QDIO_PERFORMANCE_STATS
3802 3826 void *ptr;
3803   -#endif /* QDIO_PERFORMANCE_STATS */
3804 3827  
3805 3828 printk("qdio: loading %s\n",version);
3806 3829  
3807 3830  
3808 3831  
... ... @@ -3813,13 +3836,12 @@
3813 3836 return res;
3814 3837  
3815 3838 QDIO_DBF_TEXT0(0,setup,"initQDIO");
  3839 + res = bus_create_file(&ccw_bus_type, &bus_attr_qdio_performance_stats);
3816 3840  
3817   -#ifdef QDIO_PERFORMANCE_STATS
3818   - memset((void*)&perf_stats,0,sizeof(perf_stats));
  3841 + memset((void*)&perf_stats,0,sizeof(perf_stats));
3819 3842 QDIO_DBF_TEXT0(0,setup,"perfstat");
3820 3843 ptr=&perf_stats;
3821 3844 QDIO_DBF_HEX0(0,setup,&ptr,sizeof(void*));
3822   -#endif /* QDIO_PERFORMANCE_STATS */
3823 3845  
3824 3846 qdio_add_procfs_entry();
3825 3847  
... ... @@ -3843,7 +3865,7 @@
3843 3865 qdio_release_qdio_memory();
3844 3866 qdio_unregister_dbf_views();
3845 3867 mempool_destroy(qdio_mempool_scssc);
3846   -
  3868 + bus_remove_file(&ccw_bus_type, &bus_attr_qdio_performance_stats);
3847 3869 printk("qdio: %s: module removed\n",version);
3848 3870 }
3849 3871  
drivers/s390/cio/qdio.h
... ... @@ -12,10 +12,6 @@
12 12 #endif /* CONFIG_QDIO_DEBUG */
13 13 #define QDIO_USE_PROCESSING_STATE
14 14  
15   -#ifdef CONFIG_QDIO_PERF_STATS
16   -#define QDIO_PERFORMANCE_STATS
17   -#endif /* CONFIG_QDIO_PERF_STATS */
18   -
19 15 #define QDIO_MINIMAL_BH_RELIEF_TIME 16
20 16 #define QDIO_TIMER_POLL_VALUE 1
21 17 #define IQDIO_TIMER_POLL_VALUE 1
22 18  
23 19  
24 20  
25 21  
26 22  
... ... @@ -409,25 +405,23 @@
409 405 #define CHSC_FLAG_SIGA_SYNC_DONE_ON_THININTS 0x08
410 406 #define CHSC_FLAG_SIGA_SYNC_DONE_ON_OUTB_PCIS 0x04
411 407  
412   -#ifdef QDIO_PERFORMANCE_STATS
413 408 struct qdio_perf_stats {
414   - unsigned int tl_runs;
  409 + unsigned long tl_runs;
415 410  
416   - unsigned int siga_outs;
417   - unsigned int siga_ins;
418   - unsigned int siga_syncs;
419   - unsigned int pcis;
420   - unsigned int thinints;
421   - unsigned int fast_reqs;
  411 + unsigned long siga_outs;
  412 + unsigned long siga_ins;
  413 + unsigned long siga_syncs;
  414 + unsigned long pcis;
  415 + unsigned long thinints;
  416 + unsigned long fast_reqs;
422 417  
423 418 __u64 start_time_outbound;
424   - unsigned int outbound_cnt;
425   - unsigned int outbound_time;
  419 + unsigned long outbound_cnt;
  420 + unsigned long outbound_time;
426 421 __u64 start_time_inbound;
427   - unsigned int inbound_cnt;
428   - unsigned int inbound_time;
  422 + unsigned long inbound_cnt;
  423 + unsigned long inbound_time;
429 424 };
430   -#endif /* QDIO_PERFORMANCE_STATS */
431 425  
432 426 /* unlikely as the later the better */
433 427 #define SYNC_MEMORY if (unlikely(q->siga_sync)) qdio_siga_sync_q(q)