fbdev: omapfb: avoid stack overflow warning
[ Upstream commit 634cf6ead93988b0da9ac054521ab63a3ba189db ] The dsi_irq_stats structure is a little too big to fit on the stack of a 32-bit task, depending on the specific gcc options: fbdev/omap2/omapfb/dss/dsi.c: In function 'dsi_dump_dsidev_irqs': fbdev/omap2/omapfb/dss/dsi.c:1621:1: error: the frame size of 1064 bytes is larger than 1024 bytes [-Werror=frame-larger-than=] Since this is only a debugfs file, performance is not critical, so just dynamically allocate it, and print an error message in there in place of a failure code when the allocation fails. Signed-off-by: Arnd Bergmann <arnd@arndb.de> Signed-off-by: Helge Deller <deller@gmx.de> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
e1df7f0b27
commit
7530fbc05f
@@ -1538,22 +1538,28 @@ static void dsi_dump_dsidev_irqs(struct platform_device *dsidev,
|
|||||||
{
|
{
|
||||||
struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev);
|
struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev);
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
struct dsi_irq_stats stats;
|
struct dsi_irq_stats *stats;
|
||||||
|
|
||||||
|
stats = kzalloc(sizeof(*stats), GFP_KERNEL);
|
||||||
|
if (!stats) {
|
||||||
|
seq_printf(s, "out of memory\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
spin_lock_irqsave(&dsi->irq_stats_lock, flags);
|
spin_lock_irqsave(&dsi->irq_stats_lock, flags);
|
||||||
|
|
||||||
stats = dsi->irq_stats;
|
*stats = dsi->irq_stats;
|
||||||
memset(&dsi->irq_stats, 0, sizeof(dsi->irq_stats));
|
memset(&dsi->irq_stats, 0, sizeof(dsi->irq_stats));
|
||||||
dsi->irq_stats.last_reset = jiffies;
|
dsi->irq_stats.last_reset = jiffies;
|
||||||
|
|
||||||
spin_unlock_irqrestore(&dsi->irq_stats_lock, flags);
|
spin_unlock_irqrestore(&dsi->irq_stats_lock, flags);
|
||||||
|
|
||||||
seq_printf(s, "period %u ms\n",
|
seq_printf(s, "period %u ms\n",
|
||||||
jiffies_to_msecs(jiffies - stats.last_reset));
|
jiffies_to_msecs(jiffies - stats->last_reset));
|
||||||
|
|
||||||
seq_printf(s, "irqs %d\n", stats.irq_count);
|
seq_printf(s, "irqs %d\n", stats->irq_count);
|
||||||
#define PIS(x) \
|
#define PIS(x) \
|
||||||
seq_printf(s, "%-20s %10d\n", #x, stats.dsi_irqs[ffs(DSI_IRQ_##x)-1])
|
seq_printf(s, "%-20s %10d\n", #x, stats->dsi_irqs[ffs(DSI_IRQ_##x)-1])
|
||||||
|
|
||||||
seq_printf(s, "-- DSI%d interrupts --\n", dsi->module_id + 1);
|
seq_printf(s, "-- DSI%d interrupts --\n", dsi->module_id + 1);
|
||||||
PIS(VC0);
|
PIS(VC0);
|
||||||
@@ -1577,10 +1583,10 @@ static void dsi_dump_dsidev_irqs(struct platform_device *dsidev,
|
|||||||
|
|
||||||
#define PIS(x) \
|
#define PIS(x) \
|
||||||
seq_printf(s, "%-20s %10d %10d %10d %10d\n", #x, \
|
seq_printf(s, "%-20s %10d %10d %10d %10d\n", #x, \
|
||||||
stats.vc_irqs[0][ffs(DSI_VC_IRQ_##x)-1], \
|
stats->vc_irqs[0][ffs(DSI_VC_IRQ_##x)-1], \
|
||||||
stats.vc_irqs[1][ffs(DSI_VC_IRQ_##x)-1], \
|
stats->vc_irqs[1][ffs(DSI_VC_IRQ_##x)-1], \
|
||||||
stats.vc_irqs[2][ffs(DSI_VC_IRQ_##x)-1], \
|
stats->vc_irqs[2][ffs(DSI_VC_IRQ_##x)-1], \
|
||||||
stats.vc_irqs[3][ffs(DSI_VC_IRQ_##x)-1]);
|
stats->vc_irqs[3][ffs(DSI_VC_IRQ_##x)-1]);
|
||||||
|
|
||||||
seq_printf(s, "-- VC interrupts --\n");
|
seq_printf(s, "-- VC interrupts --\n");
|
||||||
PIS(CS);
|
PIS(CS);
|
||||||
@@ -1596,7 +1602,7 @@ static void dsi_dump_dsidev_irqs(struct platform_device *dsidev,
|
|||||||
|
|
||||||
#define PIS(x) \
|
#define PIS(x) \
|
||||||
seq_printf(s, "%-20s %10d\n", #x, \
|
seq_printf(s, "%-20s %10d\n", #x, \
|
||||||
stats.cio_irqs[ffs(DSI_CIO_IRQ_##x)-1]);
|
stats->cio_irqs[ffs(DSI_CIO_IRQ_##x)-1]);
|
||||||
|
|
||||||
seq_printf(s, "-- CIO interrupts --\n");
|
seq_printf(s, "-- CIO interrupts --\n");
|
||||||
PIS(ERRSYNCESC1);
|
PIS(ERRSYNCESC1);
|
||||||
@@ -1620,6 +1626,8 @@ static void dsi_dump_dsidev_irqs(struct platform_device *dsidev,
|
|||||||
PIS(ULPSACTIVENOT_ALL0);
|
PIS(ULPSACTIVENOT_ALL0);
|
||||||
PIS(ULPSACTIVENOT_ALL1);
|
PIS(ULPSACTIVENOT_ALL1);
|
||||||
#undef PIS
|
#undef PIS
|
||||||
|
|
||||||
|
kfree(stats);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void dsi1_dump_irqs(struct seq_file *s)
|
static void dsi1_dump_irqs(struct seq_file *s)
|
||||||
|
|||||||
Reference in New Issue
Block a user