Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/dev/ic - malloc(9) -> kmem(9)



details:   https://anonhg.NetBSD.org/src/rev/d56eea40fa35
branches:  trunk
changeset: 957556:d56eea40fa35
user:      thorpej <thorpej%NetBSD.org@localhost>
date:      Fri Dec 04 00:38:08 2020 +0000

description:
- malloc(9) -> kmem(9)
- In ibm561_set_cmap(), allocating 3K on the stack is not polite; allocate
  a temporary buffer for the cmap data using kmem_alloc().

diffstat:

 sys/dev/ic/ibm561.c |  29 ++++++++++++++++++-----------
 1 files changed, 18 insertions(+), 11 deletions(-)

diffs (84 lines):

diff -r ad9939d4a7c8 -r d56eea40fa35 sys/dev/ic/ibm561.c
--- a/sys/dev/ic/ibm561.c       Fri Dec 04 00:26:16 2020 +0000
+++ b/sys/dev/ic/ibm561.c       Fri Dec 04 00:38:08 2020 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: ibm561.c,v 1.13 2020/06/24 20:17:55 jdolecek Exp $ */
+/* $NetBSD: ibm561.c,v 1.14 2020/12/04 00:38:08 thorpej Exp $ */
 
 /*-
  * Copyright (c) 2001 The NetBSD Foundation, Inc.
@@ -30,14 +30,14 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ibm561.c,v 1.13 2020/06/24 20:17:55 jdolecek Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ibm561.c,v 1.14 2020/12/04 00:38:08 thorpej Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/device.h>
 #include <sys/buf.h>
 #include <sys/kernel.h>
-#include <sys/malloc.h>
+#include <sys/kmem.h>
 
 #include <dev/pci/pcivar.h>
 #include <dev/ic/ibm561reg.h>
@@ -141,7 +141,7 @@
 {
        struct ibm561data *data;
 
-       data = malloc(sizeof *data, M_DEVBUF, M_WAITOK|M_ZERO);
+       data = kmem_zalloc(sizeof *data, KM_SLEEP);
        data->cookie = v;
        data->ramdac_sched_update = sched_update;
        data->ramdac_wr = wr;
@@ -255,26 +255,30 @@
 {
        struct ibm561data *data = (struct ibm561data *)rc;
        u_int count, index;
-       uint8_t r[IBM561_NCMAP_ENTRIES];
-       uint8_t g[IBM561_NCMAP_ENTRIES];
-       uint8_t b[IBM561_NCMAP_ENTRIES];
+       uint8_t *cmap_entries, *r, *g, *b;
        int s, error;
 
        if (cmapp->index >= IBM561_NCMAP_ENTRIES ||
            cmapp->count > IBM561_NCMAP_ENTRIES - cmapp->index)
                return (EINVAL);
 
+       cmap_entries = kmem_alloc(IBM561_NCMAP_ENTRIES * 3, KM_SLEEP);
+       r = &cmap_entries[0 * IBM561_NCMAP_ENTRIES];
+       g = &cmap_entries[1 * IBM561_NCMAP_ENTRIES];
+       b = &cmap_entries[2 * IBM561_NCMAP_ENTRIES];
+
        index = cmapp->index;
        count = cmapp->count;
        error = copyin(cmapp->red, &r[index], count);
        if (error)
-               return error;
+               goto out;
        error = copyin(cmapp->green, &g[index], count);
        if (error)
-               return error;
+               goto out;
        error = copyin(cmapp->blue, &b[index], count);
        if (error)
-               return error;
+               goto out;
+
        s = spltty();
        memcpy(&data->cmap_r[index], &r[index], count);
        memcpy(&data->cmap_g[index], &g[index], count);
@@ -282,7 +286,10 @@
        data->changed |= CHANGED_CMAP;
        data->ramdac_sched_update(data->cookie, ibm561_update);
        splx(s);
-       return (0);
+
+ out:
+       kmem_free(cmap_entries, IBM561_NCMAP_ENTRIES * 3);
+       return (error);
 }
 
 int



Home | Main Index | Thread Index | Old Index