Thread (13 messages) 13 messages, 4 authors, 2003-09-15

Re: [PATCH 1/4] Net device error logging, revised

From: Jim Keniston <hidden>
Date: 2003-08-26 23:36:35
Also in: lkml

Greg KH wrote:
On Mon, Aug 25, 2003 at 02:31:19PM -0700, Jim Keniston wrote:
quoted
+int __netdev_printk(const char *sevlevel, const struct net_device *netdev,
+     int msglevel, const char *format, ...)
+{
+     if (!netdev || !format) {
+             return -EINVAL;
+     }
+     if (msglevel == NETIF_MSG_ALL || (netdev->msg_enable & msglevel)) {
+             char msg[512];
512 bytes on the stack?  Any way to prevent this from happening?  With
the push to make the stack even smaller in 2.7, people will not like
this.

thanks,

greg k-h
The following options come to mind:
1. Keep the msg buffer, but make it smaller.  Around 120 bytes would probably be
big enough for the vast majority of messages.  (printk() uses a 1024-byte buffer,
but it's static -- see #2.)

2. Use a big, static buffer, protected by a spinlock.  printk() does this.

3. Do the whole thing in a macro, as in previous proposals.  The size of the macro
expansion could be reduced somewhat by doing the encode-prefix step in a function --
something like:

#define netdev_printk(sevlevel, netdev, msglevel, format, arg...)	\
do {									\
if (NETIF_MSG_##msglevel == NETIF_MSG_ALL || ((netdev)->msg_enable & NETIF_MSG_##msglevel)) {	\
	char pfx[40];							\
	printk(sevlevel "%s: " format , make_netdev_msg_prefix(pfx, netdev) , ## arg);	\
}} while (0)

This would make your code bigger, but not that much bigger for the common case where
the msglevel is omitted (and the 'if(...)' is optimized out).

Jim
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help