[prev in list] [next in list] [prev in thread] [next in thread]
List: linux-fbdev-devel
Subject: [Linux-fbdev-devel] [PATCH] intelfb: reduce stack usage
From: "Randy.Dunlap" <randy.dunlap () verizon ! net>
Date: 2004-12-20 6:42:39
Message-ID: 20041219224239.5cc1c227.randy.dunlap () verizon ! net
[Download RAW message or body]
Antonino A. Daplas a écrit:
> Using kmalloc() should be acceptable. I'll CC the author.
---
Reduce stack usage in intelfb_set_par() from 2404 bytes
(on x86-32) to 12 bytes.
Signed-off-by: Randy Dunlap <rddunlap@osdl.org>
diffstat:=
drivers/video/intelfb/intelfbdrv.c | 25 ++++++++++++++++---------
1 files changed, 16 insertions(+), 9 deletions(-)
diff -Naurp ./drivers/video/intelfb/intelfbdrv.c~intelfb_stack ./drivers/video/intelfb/intelfbdrv.c
--- ./drivers/video/intelfb/intelfbdrv.c~intelfb_stack 2004-12-19 15:19:41.277527280 -0800
+++ ./drivers/video/intelfb/intelfbdrv.c 2004-12-19 20:58:17.018065272 -0800
@@ -1234,8 +1234,7 @@ intelfb_check_var(struct fb_var_screenin
static int
intelfb_set_par(struct fb_info *info)
{
- struct intelfb_hwstate hw;
-
+ struct intelfb_hwstate *hw;
struct intelfb_info *dinfo = GET_DINFO(info);
if (FIXED_MODE(dinfo)) {
@@ -1243,6 +1242,10 @@ intelfb_set_par(struct fb_info *info)
return -EINVAL;
}
+ hw = kmalloc(sizeof(*hw), GFP_ATOMIC);
+ if (!hw)
+ return -ENOMEM;
+
DBG_MSG("intelfb_set_par (%dx%d-%d)\n", info->var.xres,
info->var.yres, info->var.bits_per_pixel);
@@ -1251,15 +1254,15 @@ intelfb_set_par(struct fb_info *info)
if (dinfo->accel)
intelfbhw_2d_stop(dinfo);
- hw = dinfo->save_state;
- if (intelfbhw_mode_to_hw(dinfo, &hw, &info->var))
- return -EINVAL;
- if (intelfbhw_program_mode(dinfo, &hw, 0))
- return -EINVAL;
+ memcpy(hw, &dinfo->save_state, sizeof(*hw));
+ if (intelfbhw_mode_to_hw(dinfo, hw, &info->var))
+ goto invalid_mode;
+ if (intelfbhw_program_mode(dinfo, hw, 0))
+ goto invalid_mode;
#if REGDUMP > 0
- intelfbhw_read_hw_state(dinfo, &hw, 0);
- intelfbhw_print_hw_state(dinfo, &hw);
+ intelfbhw_read_hw_state(dinfo, hw, 0);
+ intelfbhw_print_hw_state(dinfo, hw);
#endif
update_dinfo(dinfo, &info->var);
@@ -1278,7 +1281,11 @@ intelfb_set_par(struct fb_info *info)
} else {
info->flags = FBINFO_DEFAULT | FBINFO_HWACCEL_YPAN;
}
+ kfree(hw);
return 0;
+invalid_mode:
+ kfree(hw);
+ return -EINVAL;
}
static int
---
-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users.
Discover which products truly live up to the hype. Start reading now.
http://productguide.itmanagersjournal.com/
_______________________________________________
Linux-fbdev-devel mailing list
Linux-fbdev-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-fbdev-devel
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic