From: Corey Minyard <minyard@acm.org>
To: Frank Seidel <fseidel@suse.de>
Cc: linux kernel <linux-kernel@vger.kernel.org>,
akpm@linux-foundation.org,
openipmi-developer@lists.sourceforge.net, kernalert.de@gmail.com,
djwong@us.ibm.com, Adrian Bunk <bunk@kernel.org>,
Alexey Dobriyan <adobriyan@gmail.com>,
cminyard@mvista.com, kbaidarov@ru.mvista.com, crquan@gmail.com
Subject: Re: [PATCH] ipmi: reduce stack size of msghandler
Date: Wed, 04 Mar 2009 08:59:13 -0600 [thread overview]
Message-ID: <49AE9741.9030109@acm.org> (raw)
In-Reply-To: <49AE7274.2080206@suse.de>
Frank Seidel wrote:
> From: Frank Seidel <frank@f-seidel.de>
>
> Reduce stack memory footprint in ipmi_msghandler
> for send_panic_events. (From 992 bytes on i386
> down to below 100)
>
I'm not sure this is a good idea. This only occurs in a panic
situation, so it may be best to not dynamically allocate memory.
However, 992 bytes is a big chunk of data to swallow on the stack, even
on a panic. What may be best here is to use static data for this
operation, then use an atomic to control access to the static data. I
believe an atomic is better than a lock because it avoids problems with
possible re-entrancy with another panic on the same CPU.
Thanks,
-corey
> Signed-off-by: Frank Seidel <frank@f-seidel.de>
> ---
> drivers/char/ipmi/ipmi_msghandler.c | 39 ++++++++++++++++++++++++------------
> 1 file changed, 27 insertions(+), 12 deletions(-)
>
> --- a/drivers/char/ipmi/ipmi_msghandler.c
> +++ b/drivers/char/ipmi/ipmi_msghandler.c
> @@ -4001,8 +4001,20 @@ static void send_panic_events(char *str)
> unsigned char data[16];
> struct ipmi_system_interface_addr *si;
> struct ipmi_addr addr;
> - struct ipmi_smi_msg smi_msg;
> - struct ipmi_recv_msg recv_msg;
> + struct ipmi_smi_msg *smi_msg;
> + struct ipmi_recv_msg *recv_msg;
> +
> + smi_msg = kmalloc(sizeof(*smi_msg), GFP_KERNEL);
> + recv_msg = kmalloc(sizeof(*recv_msg), GFP_KERNEL);
> +
> + if (!smi_msg || !recv_msg) {
> + printk(KERN_ERR PFX "Could not allocate memory\n");
> + if (smi_msg)
> + kfree(smi_msg);
> + else if (recv_msg)
> + kfree(recv_msg);
> + return;
> + }
>
> si = (struct ipmi_system_interface_addr *) &addr;
> si->addr_type = IPMI_SYSTEM_INTERFACE_ADDR_TYPE;
> @@ -4030,8 +4042,8 @@ static void send_panic_events(char *str)
> data[7] = str[2];
> }
>
> - smi_msg.done = dummy_smi_done_handler;
> - recv_msg.done = dummy_recv_done_handler;
> + smi_msg->done = dummy_smi_done_handler;
> + recv_msg->done = dummy_recv_done_handler;
>
> /* For every registered interface, send the event. */
> list_for_each_entry_rcu(intf, &ipmi_interfaces, link) {
> @@ -4048,8 +4060,8 @@ static void send_panic_events(char *str)
> 0,
> &msg,
> intf,
> - &smi_msg,
> - &recv_msg,
> + smi_msg,
> + recv_msg,
> 0,
> intf->channels[0].address,
> intf->channels[0].lun,
> @@ -4107,8 +4119,8 @@ static void send_panic_events(char *str)
> 0,
> &msg,
> intf,
> - &smi_msg,
> - &recv_msg,
> + smi_msg,
> + recv_msg,
> 0,
> intf->channels[0].address,
> intf->channels[0].lun,
> @@ -4127,8 +4139,8 @@ static void send_panic_events(char *str)
> 0,
> &msg,
> intf,
> - &smi_msg,
> - &recv_msg,
> + smi_msg,
> + recv_msg,
> 0,
> intf->channels[0].address,
> intf->channels[0].lun,
> @@ -4195,8 +4207,8 @@ static void send_panic_events(char *str)
> 0,
> &msg,
> intf,
> - &smi_msg,
> - &recv_msg,
> + smi_msg,
> + recv_msg,
> 0,
> intf->channels[0].address,
> intf->channels[0].lun,
> @@ -4204,6 +4216,9 @@ static void send_panic_events(char *str)
> }
> }
> #endif /* CONFIG_IPMI_PANIC_STRING */
> +
> + kfree(smi_msg);
> + kfree(recv_msg);
> }
> #endif /* CONFIG_IPMI_PANIC_EVENT */
>
>
>
prev parent reply other threads:[~2009-03-04 14:59 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-03-04 12:22 [PATCH] ipmi: reduce stack size of msghandler Frank Seidel
2009-03-04 14:59 ` Corey Minyard [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=49AE9741.9030109@acm.org \
--to=minyard@acm.org \
--cc=adobriyan@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=bunk@kernel.org \
--cc=cminyard@mvista.com \
--cc=crquan@gmail.com \
--cc=djwong@us.ibm.com \
--cc=fseidel@suse.de \
--cc=kbaidarov@ru.mvista.com \
--cc=kernalert.de@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=openipmi-developer@lists.sourceforge.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox