diff options
| author | jdolecek <jdolecek@NetBSD.org> | 2020-05-30 14:15:43 +0000 |
|---|---|---|
| committer | jdolecek <jdolecek@NetBSD.org> | 2020-05-30 14:15:43 +0000 |
| commit | d55d7363d157579703f596ebb980cb1529c19609 (patch) | |
| tree | 11fce37717d89fc87e38c3c7585c24315aa2ac66 /sys/dev | |
| parent | dcb15819e35e48009ca0cf1ab6c9e97121a6d9c3 (diff) | |
reduce stack usage in genfb_calc_hsize()
Diffstat (limited to 'sys/dev')
| -rw-r--r-- | sys/dev/wsfb/genfb.c | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/sys/dev/wsfb/genfb.c b/sys/dev/wsfb/genfb.c index 3f03706f075..58187eaaab6 100644 --- a/sys/dev/wsfb/genfb.c +++ b/sys/dev/wsfb/genfb.c @@ -1,4 +1,4 @@ -/* $NetBSD: genfb.c,v 1.72 2020/04/13 15:26:57 msaitoh Exp $ */ +/* $NetBSD: genfb.c,v 1.73 2020/05/30 14:15:43 jdolecek Exp $ */ /*- * Copyright (c) 2007 Michael Lorenz @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: genfb.c,v 1.72 2020/04/13 15:26:57 msaitoh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: genfb.c,v 1.73 2020/05/30 14:15:43 jdolecek Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -632,18 +632,25 @@ genfb_calc_hsize(struct genfb_softc *sc) device_t dev = sc->sc_dev; prop_dictionary_t dict = device_properties(dev); prop_data_t edid_data; - struct edid_info edid; + struct edid_info *edid; const char *edid_ptr; + int hsize; edid_data = prop_dictionary_get(dict, "EDID"); if (edid_data == NULL || prop_data_size(edid_data) < 128) return 0; + edid = kmem_alloc(sizeof(*edid), KM_SLEEP); + edid_ptr = prop_data_data_nocopy(edid_data); - if (edid_parse(__UNCONST(edid_ptr), &edid) != 0) - return 0; + if (edid_parse(__UNCONST(edid_ptr), edid) == 0) + hsize = (int)edid->edid_max_hsize * 10; + else + hsize = 0; + + kmem_free(edid, sizeof(*edid)); - return (int)edid.edid_max_hsize * 10; + return hsize; } /* Return the minimum number of character columns based on DPI */ |
