netdev
[Top] [All Lists]

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

To: Greg KH <greg@xxxxxxxxx>
Subject: Re: [PATCH 1/4] Net device error logging, revised
From: Jim Keniston <jkenisto@xxxxxxxxxx>
Date: Tue, 26 Aug 2003 16:34:00 -0700
Cc: LKML <linux-kernel@xxxxxxxxxxxxxxx>, netdev <netdev@xxxxxxxxxxx>, Jeff Garzik <jgarzik@xxxxxxxxx>, "Feldman, Scott" <scott.feldman@xxxxxxxxx>, Larry Kessler <kessler@xxxxxxxxxx>, Randy Dunlap <rddunlap@xxxxxxxx>, Alan Cox <alan@xxxxxxxxxxxxxxxxxxx>, Andrew Morton <akpm@xxxxxxxx>
References: <3F4A8027.6FE3F594@xxxxxxxxxx> <20030826183221.GB3167@xxxxxxxxx>
Sender: netdev-bounce@xxxxxxxxxxx
Greg KH wrote:
> 
> On Mon, Aug 25, 2003 at 02:31:19PM -0700, Jim Keniston wrote:
> > +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

<Prev in Thread] Current Thread [Next in Thread>