.. | .. |
---|
1444 | 1444 | { |
---|
1445 | 1445 | struct dsi_data *dsi = s->private; |
---|
1446 | 1446 | unsigned long flags; |
---|
1447 | | - struct dsi_irq_stats stats; |
---|
| 1447 | + struct dsi_irq_stats *stats; |
---|
| 1448 | + |
---|
| 1449 | + stats = kmalloc(sizeof(*stats), GFP_KERNEL); |
---|
| 1450 | + if (!stats) |
---|
| 1451 | + return -ENOMEM; |
---|
1448 | 1452 | |
---|
1449 | 1453 | spin_lock_irqsave(&dsi->irq_stats_lock, flags); |
---|
1450 | 1454 | |
---|
1451 | | - stats = dsi->irq_stats; |
---|
| 1455 | + *stats = dsi->irq_stats; |
---|
1452 | 1456 | memset(&dsi->irq_stats, 0, sizeof(dsi->irq_stats)); |
---|
1453 | 1457 | dsi->irq_stats.last_reset = jiffies; |
---|
1454 | 1458 | |
---|
1455 | 1459 | spin_unlock_irqrestore(&dsi->irq_stats_lock, flags); |
---|
1456 | 1460 | |
---|
1457 | 1461 | seq_printf(s, "period %u ms\n", |
---|
1458 | | - jiffies_to_msecs(jiffies - stats.last_reset)); |
---|
| 1462 | + jiffies_to_msecs(jiffies - stats->last_reset)); |
---|
1459 | 1463 | |
---|
1460 | | - seq_printf(s, "irqs %d\n", stats.irq_count); |
---|
| 1464 | + seq_printf(s, "irqs %d\n", stats->irq_count); |
---|
1461 | 1465 | #define PIS(x) \ |
---|
1462 | | - seq_printf(s, "%-20s %10d\n", #x, stats.dsi_irqs[ffs(DSI_IRQ_##x)-1]); |
---|
| 1466 | + seq_printf(s, "%-20s %10d\n", #x, stats->dsi_irqs[ffs(DSI_IRQ_##x)-1]); |
---|
1463 | 1467 | |
---|
1464 | 1468 | seq_printf(s, "-- DSI%d interrupts --\n", dsi->module_id + 1); |
---|
1465 | 1469 | PIS(VC0); |
---|
.. | .. |
---|
1483 | 1487 | |
---|
1484 | 1488 | #define PIS(x) \ |
---|
1485 | 1489 | seq_printf(s, "%-20s %10d %10d %10d %10d\n", #x, \ |
---|
1486 | | - stats.vc_irqs[0][ffs(DSI_VC_IRQ_##x)-1], \ |
---|
1487 | | - stats.vc_irqs[1][ffs(DSI_VC_IRQ_##x)-1], \ |
---|
1488 | | - stats.vc_irqs[2][ffs(DSI_VC_IRQ_##x)-1], \ |
---|
1489 | | - stats.vc_irqs[3][ffs(DSI_VC_IRQ_##x)-1]); |
---|
| 1490 | + stats->vc_irqs[0][ffs(DSI_VC_IRQ_##x)-1], \ |
---|
| 1491 | + stats->vc_irqs[1][ffs(DSI_VC_IRQ_##x)-1], \ |
---|
| 1492 | + stats->vc_irqs[2][ffs(DSI_VC_IRQ_##x)-1], \ |
---|
| 1493 | + stats->vc_irqs[3][ffs(DSI_VC_IRQ_##x)-1]); |
---|
1490 | 1494 | |
---|
1491 | 1495 | seq_printf(s, "-- VC interrupts --\n"); |
---|
1492 | 1496 | PIS(CS); |
---|
.. | .. |
---|
1502 | 1506 | |
---|
1503 | 1507 | #define PIS(x) \ |
---|
1504 | 1508 | seq_printf(s, "%-20s %10d\n", #x, \ |
---|
1505 | | - stats.cio_irqs[ffs(DSI_CIO_IRQ_##x)-1]); |
---|
| 1509 | + stats->cio_irqs[ffs(DSI_CIO_IRQ_##x)-1]); |
---|
1506 | 1510 | |
---|
1507 | 1511 | seq_printf(s, "-- CIO interrupts --\n"); |
---|
1508 | 1512 | PIS(ERRSYNCESC1); |
---|
.. | .. |
---|
1527 | 1531 | PIS(ULPSACTIVENOT_ALL1); |
---|
1528 | 1532 | #undef PIS |
---|
1529 | 1533 | |
---|
| 1534 | + kfree(stats); |
---|
| 1535 | + |
---|
1530 | 1536 | return 0; |
---|
1531 | 1537 | } |
---|
1532 | 1538 | #endif |
---|