Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b3218a79 authored by Jiri Slaby's avatar Jiri Slaby Committed by Linus Torvalds
Browse files

[PATCH] char: kill unneeded memsets



char, another tmp_buf cleanup

No need to allocate one page as a side buffer.  It's no more used.  Clean this
(de)allocs of this useless memory pages in char subtree.

Signed-off-by: default avatarJiri Slaby <jirislaby@gmail.com>
Acked-by: default avatarAlan Cox <alan@lxorguk.ukuu.org.uk>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 1d2c8eea
Loading
Loading
Loading
Loading
+1 −29
Original line number Diff line number Diff line
@@ -112,17 +112,6 @@ static struct serial_state rs_table[1];

#define NR_PORTS ARRAY_SIZE(rs_table)

/*
 * tmp_buf is used as a temporary buffer by serial_write.  We need to
 * lock it in case the copy_from_user blocks while swapping in a page,
 * and some other program tries to do a serial write at the same time.
 * Since the lock will only come under contention when the system is
 * swapping and available memory is low, it makes sense to share one
 * buffer across all the serial ports, since it significantly saves
 * memory if large numbers of serial ports are open.
 */
static unsigned char *tmp_buf;

#include <asm/uaccess.h>

#define serial_isroot()	(capable(CAP_SYS_ADMIN))
@@ -912,7 +901,7 @@ static int rs_write(struct tty_struct * tty, const unsigned char *buf, int count
	if (serial_paranoia_check(info, tty->name, "rs_write"))
		return 0;

	if (!info->xmit.buf || !tmp_buf)
	if (!info->xmit.buf)
		return 0;

	local_save_flags(flags);
@@ -1778,7 +1767,6 @@ static int rs_open(struct tty_struct *tty, struct file * filp)
{
	struct async_struct	*info;
	int 			retval, line;
	unsigned long		page;

	line = tty->index;
	if ((line < 0) || (line >= NR_PORTS)) {
@@ -1798,17 +1786,6 @@ static int rs_open(struct tty_struct *tty, struct file * filp)
#endif
	info->tty->low_latency = (info->flags & ASYNC_LOW_LATENCY) ? 1 : 0;

	if (!tmp_buf) {
		page = get_zeroed_page(GFP_KERNEL);
		if (!page) {
			return -ENOMEM;
		}
		if (tmp_buf)
			free_page(page);
		else
			tmp_buf = (unsigned char *) page;
	}

	/*
	 * If the port is the middle of closing, bail out now
	 */
@@ -2090,11 +2067,6 @@ static __exit void rs_exit(void)
	  kfree(info);
	}

	if (tmp_buf) {
		free_page((unsigned long) tmp_buf);
		tmp_buf = NULL;
	}

	release_mem_region(CUSTOM_PHYSADDR+0x30, 4);
}

+1 −27
Original line number Diff line number Diff line
@@ -747,18 +747,6 @@ static struct cyclades_port cy_port[NR_PORTS];

static int cy_next_channel; /* next minor available */

/*
 * tmp_buf is used as a temporary buffer by serial_write.  We need to
 * lock it in case the copy_from_user blocks while swapping in a page,
 * and some other program tries to do a serial write at the same time.
 * Since the lock will only come under contention when the system is
 * swapping and available memory is low, it makes sense to share one
 * buffer across all the serial ports, since it significantly saves
 * memory if large numbers of serial ports are open.  This buffer is
 * allocated when the first cy_open occurs.
 */
static unsigned char *tmp_buf;

/*
 * This is used to look up the divisor speeds and the timeouts
 * We're normally limited to 15 distinct baud rates.  The extra
@@ -2466,7 +2454,6 @@ cy_open(struct tty_struct *tty, struct file * filp)
{
  struct cyclades_port  *info;
  int retval, line;
  unsigned long page;

    line = tty->index;
    if ((line < 0) || (NR_PORTS <= line)){
@@ -2545,15 +2532,6 @@ cy_open(struct tty_struct *tty, struct file * filp)
    printk("cyc:cy_open (%d): incrementing count to %d\n",
        current->pid, info->count);
#endif
    if (!tmp_buf) {
	page = get_zeroed_page(GFP_KERNEL);
	if (!page)
	    return -ENOMEM;
	if (tmp_buf)
	    free_page(page);
	else
	    tmp_buf = (unsigned char *) page;
    }

    /*
     * If the port is the middle of closing, bail out now
@@ -2832,7 +2810,7 @@ cy_write(struct tty_struct * tty, const unsigned char *buf, int count)
        return 0;
    }
        
    if (!info->xmit_buf || !tmp_buf)
    if (!info->xmit_buf)
	return 0;

    CY_LOCK(info, flags);
@@ -5490,10 +5468,6 @@ cy_cleanup_module(void)
#endif
        }
    }
    if (tmp_buf) {
	free_page((unsigned long) tmp_buf);
	tmp_buf = NULL;
    }
} /* cy_cleanup_module */

module_init(cy_init);
+2 −15
Original line number Diff line number Diff line
@@ -1113,11 +1113,8 @@ static void __exit epca_module_exit(void)
		ch = card_ptr[crd];
		for (count = 0; count < bd->numports; count++, ch++) 
		{ /* Begin for each port */
			if (ch) {
				if (ch->tty)
			if (ch && ch->tty)
				tty_hangup(ch->tty);
				kfree(ch->tmp_buf);
			}
		} /* End for each port */
	} /* End for each card */
	pci_unregister_driver (&epca_driver);
@@ -1635,16 +1632,6 @@ static void post_fep_init(unsigned int crd)
		init_waitqueue_head(&ch->close_wait);

		spin_unlock_irqrestore(&epca_lock, flags);

		ch->tmp_buf = kmalloc(ch->txbufsize,GFP_KERNEL);
		if (!ch->tmp_buf) {
			printk(KERN_ERR "POST FEP INIT : kmalloc failed for port 0x%x\n",i);
			release_region((int)bd->port, 4);
			while(i-- > 0)
				kfree((ch--)->tmp_buf);
			return;
		} else
			memset((void *)ch->tmp_buf,0,ch->txbufsize);
	} /* End for each port */

	printk(KERN_INFO 
+0 −1
Original line number Diff line number Diff line
@@ -130,7 +130,6 @@ struct channel
	unsigned long  c_oflag;
	unsigned char __iomem *txptr;
	unsigned char __iomem *rxptr;
	unsigned char *tmp_buf;
	struct board_info           *board;
	struct board_chan	    __iomem *brdchan;
	struct digi_struct          digiext;
+1 −18
Original line number Diff line number Diff line
@@ -33,8 +33,6 @@

#define DEBUG 

static char *                  tmp_buf; 

static int gs_debug;

#ifdef DEBUG
@@ -205,7 +203,7 @@ int gs_write(struct tty_struct * tty,
	if (!tty) return -EIO;

	port = tty->driver_data;
	if (!port || !port->xmit_buf || !tmp_buf)
	if (!port || !port->xmit_buf)
		return -EIO;

	local_save_flags(flags);
@@ -837,24 +835,9 @@ void gs_set_termios (struct tty_struct * tty,
int gs_init_port(struct gs_port *port)
{
	unsigned long flags;
	unsigned long page;

	func_enter ();

        if (!tmp_buf) {
		page = get_zeroed_page(GFP_KERNEL);
		spin_lock_irqsave (&port->driver_lock, flags); /* Don't expect this to make a difference. */
		if (tmp_buf)
			free_page(page);
		else
			tmp_buf = (unsigned char *) page;
		spin_unlock_irqrestore (&port->driver_lock, flags);
		if (!tmp_buf) {
			func_exit ();
			return -ENOMEM;
		}
	}

	if (port->flags & ASYNC_INITIALIZED) {
		func_exit ();
		return 0;
Loading