static int     stli_clrportstats(stliport_t *portp, comstats_t __user *cp);
 static int     stli_getportstruct(stliport_t __user *arg);
 static int     stli_getbrdstruct(stlibrd_t __user *arg);
-static void    *stli_memalloc(int len);
 static stlibrd_t *stli_allocbrd(void);
 
 static void    stli_ecpinit(stlibrd_t *brdp);
 
 /*****************************************************************************/
 
-/*
- *     Local driver kernel malloc routine.
- */
-
-static void *stli_memalloc(int len)
-{
-       return((void *) kmalloc(len, GFP_KERNEL));
-}
-
-/*****************************************************************************/
-
 static int stli_open(struct tty_struct *tty, struct file *filp)
 {
        stlibrd_t       *brdp;
 #endif
 
        for (i = 0, panelnr = 0, panelport = 0; (i < brdp->nrports); i++) {
-               portp = (stliport_t *) stli_memalloc(sizeof(stliport_t));
-               if (portp == (stliport_t *) NULL) {
+               portp = kzalloc(sizeof(stliport_t), GFP_KERNEL);
+               if (!portp) {
                        printk("STALLION: failed to allocate port structure\n");
                        continue;
                }
 
-               memset(portp, 0, sizeof(stliport_t));
                portp->magic = STLI_PORTMAGIC;
                portp->portnr = i;
                portp->brdnr = brdp->brdnr;
 {
        stlibrd_t       *brdp;
 
-       brdp = (stlibrd_t *) stli_memalloc(sizeof(stlibrd_t));
-       if (brdp == (stlibrd_t *) NULL) {
+       brdp = kzalloc(sizeof(stlibrd_t), GFP_KERNEL);
+       if (!brdp) {
                printk(KERN_ERR "STALLION: failed to allocate memory "
                                "(size=%d)\n", sizeof(stlibrd_t));
-               return((stlibrd_t *) NULL);
+               return NULL;
        }
 
-       memset(brdp, 0, sizeof(stlibrd_t));
        brdp->magic = STLI_BOARDMAGIC;
        return(brdp);
 }
 /*
  *     Allocate a temporary write buffer.
  */
-       stli_tmpwritebuf = (char *) stli_memalloc(STLI_TXBUFSIZE);
-       if (stli_tmpwritebuf == (char *) NULL)
+       stli_tmpwritebuf = kmalloc(STLI_TXBUFSIZE, GFP_KERNEL);
+       if (!stli_tmpwritebuf)
                printk(KERN_ERR "STALLION: failed to allocate memory "
                                "(size=%d)\n", STLI_TXBUFSIZE);
-       stli_txcookbuf = stli_memalloc(STLI_TXBUFSIZE);
-       if (stli_txcookbuf == (char *) NULL)
+       stli_txcookbuf = kmalloc(STLI_TXBUFSIZE, GFP_KERNEL);
+       if (!stli_txcookbuf)
                printk(KERN_ERR "STALLION: failed to allocate memory "
                                "(size=%d)\n", STLI_TXBUFSIZE);
 
 
 static int     stl_echpciintr(stlbrd_t *brdp);
 static int     stl_echpci64intr(stlbrd_t *brdp);
 static void    stl_offintr(void *private);
-static void    *stl_memalloc(int len);
 static stlbrd_t *stl_allocbrd(void);
 static stlport_t *stl_getport(int brdnr, int panelnr, int portnr);
 
 
 /*****************************************************************************/
 
-/*
- *     Local driver kernel memory allocation routine.
- */
-
-static void *stl_memalloc(int len)
-{
-       return (void *) kmalloc(len, GFP_KERNEL);
-}
-
-/*****************************************************************************/
-
 /*
  *     Allocate a new board structure. Fill out the basic info in it.
  */
 {
        stlbrd_t        *brdp;
 
-       brdp = (stlbrd_t *) stl_memalloc(sizeof(stlbrd_t));
-       if (brdp == (stlbrd_t *) NULL) {
+       brdp = kzalloc(sizeof(stlbrd_t), GFP_KERNEL);
+       if (!brdp) {
                printk("STALLION: failed to allocate memory (size=%d)\n",
                        sizeof(stlbrd_t));
-               return (stlbrd_t *) NULL;
+               return NULL;
        }
 
-       memset(brdp, 0, sizeof(stlbrd_t));
        brdp->magic = STL_BOARDMAGIC;
        return brdp;
 }
        portp->refcount++;
 
        if ((portp->flags & ASYNC_INITIALIZED) == 0) {
-               if (portp->tx.buf == (char *) NULL) {
-                       portp->tx.buf = (char *) stl_memalloc(STL_TXBUFSIZE);
-                       if (portp->tx.buf == (char *) NULL)
+               if (!portp->tx.buf) {
+                       portp->tx.buf = kmalloc(STL_TXBUFSIZE, GFP_KERNEL);
+                       if (!portp->tx.buf)
                                return -ENOMEM;
                        portp->tx.head = portp->tx.buf;
                        portp->tx.tail = portp->tx.buf;
  *     each ports data structures.
  */
        for (i = 0; (i < panelp->nrports); i++) {
-               portp = (stlport_t *) stl_memalloc(sizeof(stlport_t));
-               if (portp == (stlport_t *) NULL) {
+               portp = kzalloc(sizeof(stlport_t), GFP_KERNEL);
+               if (!portp) {
                        printk("STALLION: failed to allocate memory "
                                "(size=%d)\n", sizeof(stlport_t));
                        break;
                }
-               memset(portp, 0, sizeof(stlport_t));
 
                portp->magic = STL_PORTMAGIC;
                portp->portnr = i;
  *     can complete the setup.
  */
 
-       panelp = (stlpanel_t *) stl_memalloc(sizeof(stlpanel_t));
-       if (panelp == (stlpanel_t *) NULL) {
+       panelp = kzalloc(sizeof(stlpanel_t), GFP_KERNEL);
+       if (!panelp) {
                printk(KERN_WARNING "STALLION: failed to allocate memory "
                        "(size=%d)\n", sizeof(stlpanel_t));
-               return(-ENOMEM);
+               return -ENOMEM;
        }
-       memset(panelp, 0, sizeof(stlpanel_t));
 
        panelp->magic = STL_PANELMAGIC;
        panelp->brdnr = brdp->brdnr;
                status = inb(ioaddr + ECH_PNLSTATUS);
                if ((status & ECH_PNLIDMASK) != nxtid)
                        break;
-               panelp = (stlpanel_t *) stl_memalloc(sizeof(stlpanel_t));
-               if (panelp == (stlpanel_t *) NULL) {
+               panelp = kzalloc(sizeof(stlpanel_t), GFP_KERNEL);
+               if (!panelp) {
                        printk("STALLION: failed to allocate memory "
                                "(size=%d)\n", sizeof(stlpanel_t));
                        break;
                }
-               memset(panelp, 0, sizeof(stlpanel_t));
                panelp->magic = STL_PANELMAGIC;
                panelp->brdnr = brdp->brdnr;
                panelp->panelnr = panelnr;
 /*
  *     Allocate a temporary write buffer.
  */
-       stl_tmpwritebuf = (char *) stl_memalloc(STL_TXBUFSIZE);
-       if (stl_tmpwritebuf == (char *) NULL)
+       stl_tmpwritebuf = kmalloc(STL_TXBUFSIZE, GFP_KERNEL);
+       if (!stl_tmpwritebuf)
                printk("STALLION: failed to allocate memory (size=%d)\n",
                        STL_TXBUFSIZE);