Download raw body.
dt(4) memory tweaks
On Sat, Nov 02, 2024 at 06:18:32PM +0100 Martin Pieuchot wrote:
> softintr_establish() allocates memory, even if doesn't sleep I'd like to
> keep all allocations in the same place.
>
> Use M_DEVBUF consistently for all memory chunks in the softc.
>
> No need to check for NULL before calling free(9).
>
> Make spacing coherent with the rest of the file when arguments passed to
> a function do not fit in a line.
Looks good. Ok from me, FWIW.
> Index: dev/dt/dt_dev.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/dt/dt_dev.c,v
> diff -u -p -r1.39 dt_dev.c
> --- dev/dt/dt_dev.c 2 Nov 2024 17:03:12 -0000 1.39
> +++ dev/dt/dt_dev.c 2 Nov 2024 17:09:42 -0000
> @@ -206,11 +206,6 @@ dtopen(dev_t dev, int flags, int mode, s
> TAILQ_INIT(&sc->ds_pcbs);
> sc->ds_lastcpu = 0;
> sc->ds_evtcnt = 0;
> - sc->ds_si = softintr_establish(IPL_SOFTCLOCK, dt_deferred_wakeup, sc);
> - if (sc->ds_si == NULL) {
> - dtfree(sc);
> - return ENOMEM;
> - }
>
> SLIST_INSERT_HEAD(&dtdev_list, sc, ds_next);
>
> @@ -233,7 +228,6 @@ dtclose(dev_t dev, int flags, int mode,
> SLIST_REMOVE(&dtdev_list, sc, dt_softc, ds_next);
> dt_ioctl_record_stop(sc);
> dt_pcb_purge(&sc->ds_pcbs);
> - softintr_disestablish(sc->ds_si);
> dtfree(sc);
>
> return 0;
> @@ -364,8 +358,8 @@ dtalloc(void)
> return NULL;
>
> for (i = 0; i < ncpusfound; i++) {
> - dtev = mallocarray(DT_EVTRING_SIZE, sizeof(*dtev), M_DT,
> - M_WAITOK|M_CANFAIL|M_ZERO);
> + dtev = mallocarray(DT_EVTRING_SIZE, sizeof(*dtev), M_DEVBUF,
> + M_WAITOK|M_CANFAIL|M_ZERO);
> if (dtev == NULL)
> break;
> sc->ds_cpu[i].dc_ring = dtev;
> @@ -375,6 +369,12 @@ dtalloc(void)
> return NULL;
> }
>
> + sc->ds_si = softintr_establish(IPL_SOFTCLOCK, dt_deferred_wakeup, sc);
> + if (sc->ds_si == NULL) {
> + dtfree(sc);
> + return NULL;
> + }
> +
> return sc;
> }
>
> @@ -384,10 +384,12 @@ dtfree(struct dt_softc *sc)
> struct dt_evt *dtev;
> int i;
>
> + if (sc->ds_si != NULL)
> + softintr_disestablish(sc->ds_si);
> +
> for (i = 0; i < ncpusfound; i++) {
> dtev = sc->ds_cpu[i].dc_ring;
> - if (dtev != NULL)
> - free(dtev, M_DT, DT_EVTRING_SIZE * sizeof(*dtev));
> + free(dtev, M_DEVBUF, DT_EVTRING_SIZE * sizeof(*dtev));
> }
> free(sc, M_DEVBUF, sizeof(*sc));
> }
dt(4) memory tweaks