Module Name: src
Committed By: jdolecek
Date: Mon Sep 17 20:54:41 UTC 2018
Modified Files:
src/sys/dev/ata [jdolecek-ncqfixes]: TODO.ncq ata.c ata_raid.c
ata_raid_adaptec.c ata_raid_intel.c ata_raid_jmicron.c
ata_raid_nvidia.c ata_raid_promise.c ata_raid_via.c ata_subr.c
ata_wdc.c ld_ataraid.c wd.c
Log Message:
convert from malloc()/free() to kmem_zalloc()/kmem_free()
To generate a diff of this commit:
cvs rdiff -u -r1.4.2.2 -r1.4.2.3 src/sys/dev/ata/TODO.ncq
cvs rdiff -u -r1.141.6.4 -r1.141.6.5 src/sys/dev/ata/ata.c
cvs rdiff -u -r1.40 -r1.40.4.1 src/sys/dev/ata/ata_raid.c
cvs rdiff -u -r1.10 -r1.10.6.1 src/sys/dev/ata/ata_raid_adaptec.c
cvs rdiff -u -r1.8 -r1.8.6.1 src/sys/dev/ata/ata_raid_intel.c \
src/sys/dev/ata/ata_raid_via.c
cvs rdiff -u -r1.6 -r1.6.6.1 src/sys/dev/ata/ata_raid_jmicron.c
cvs rdiff -u -r1.3 -r1.3.6.1 src/sys/dev/ata/ata_raid_nvidia.c
cvs rdiff -u -r1.12 -r1.12.6.1 src/sys/dev/ata/ata_raid_promise.c
cvs rdiff -u -r1.6.2.3 -r1.6.2.4 src/sys/dev/ata/ata_subr.c
cvs rdiff -u -r1.110.4.2 -r1.110.4.3 src/sys/dev/ata/ata_wdc.c
cvs rdiff -u -r1.45 -r1.45.4.1 src/sys/dev/ata/ld_ataraid.c
cvs rdiff -u -r1.441.2.2 -r1.441.2.3 src/sys/dev/ata/wd.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/dev/ata/TODO.ncq
diff -u src/sys/dev/ata/TODO.ncq:1.4.2.2 src/sys/dev/ata/TODO.ncq:1.4.2.3
--- src/sys/dev/ata/TODO.ncq:1.4.2.2 Fri Aug 31 19:23:54 2018
+++ src/sys/dev/ata/TODO.ncq Mon Sep 17 20:54:41 2018
@@ -1,6 +1,7 @@
jdolecek-ncqfixes goals:
- make ata_xfer dynamically allocated using a pool
- - fixes: queue is allocated regardless if there are any drives, fix?
+ - will fix: queue is allocated regardless if there are any drives, fix?
+ - malloc() -> kmem_zalloc() in ata_queue_alloc() once this is done
- remove limit of queued ata_xfers, allow any number of pending xfers;
this should fix kern/52614 AKA wdc-attached ATAPI cd(4)
- remove the wd(4) flush condition, just allocate a dynamic ata_xfer
Index: src/sys/dev/ata/ata.c
diff -u src/sys/dev/ata/ata.c:1.141.6.4 src/sys/dev/ata/ata.c:1.141.6.5
--- src/sys/dev/ata/ata.c:1.141.6.4 Mon Sep 17 19:00:43 2018
+++ src/sys/dev/ata/ata.c Mon Sep 17 20:54:41 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: ata.c,v 1.141.6.4 2018/09/17 19:00:43 jdolecek Exp $ */
+/* $NetBSD: ata.c,v 1.141.6.5 2018/09/17 20:54:41 jdolecek Exp $ */
/*
* Copyright (c) 1998, 2001 Manuel Bouyer. All rights reserved.
@@ -25,14 +25,13 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ata.c,v 1.141.6.4 2018/09/17 19:00:43 jdolecek Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ata.c,v 1.141.6.5 2018/09/17 20:54:41 jdolecek Exp $");
#include "opt_ata.h"
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/kernel.h>
-#include <sys/malloc.h>
#include <sys/device.h>
#include <sys/conf.h>
#include <sys/fcntl.h>
@@ -292,7 +291,7 @@ atabusconfig(struct atabus_softc *atabus
cv_broadcast(&atabus_qcv);
mutex_exit(&atabus_qlock);
- free(atabus_initq, M_DEVBUF);
+ kmem_free(atabus_initq, sizeof(*atabus_initq));
ata_delref(chp);
@@ -418,7 +417,7 @@ atabusconfig_thread(void *arg)
cv_broadcast(&atabus_qcv);
mutex_exit(&atabus_qlock);
- free(atabus_initq, M_DEVBUF);
+ kmem_free(atabus_initq, sizeof(*atabus_initq));
ata_delref(chp);
@@ -569,7 +568,7 @@ atabus_attach(device_t parent, device_t
RUN_ONCE(&ata_init_ctrl, atabus_init);
- initq = malloc(sizeof(*initq), M_DEVBUF, M_WAITOK);
+ initq = kmem_zalloc(sizeof(*initq), KM_SLEEP);
initq->atabus_sc = sc;
mutex_enter(&atabus_qlock);
TAILQ_INSERT_TAIL(&atabus_initq_head, initq, atabus_initq);
@@ -716,9 +715,8 @@ atabus_alloc_drives(struct ata_channel *
if (chp->ch_ndrives != ndrives)
atabus_free_drives(chp);
if (chp->ch_drive == NULL) {
- chp->ch_drive = malloc(
- sizeof(struct ata_drive_datas) * ndrives,
- M_DEVBUF, M_NOWAIT | M_ZERO);
+ chp->ch_drive = kmem_zalloc(
+ sizeof(struct ata_drive_datas) * ndrives, KM_NOSLEEP);
}
if (chp->ch_drive == NULL) {
aprint_error_dev(chp->ch_atac->atac_dev,
@@ -761,8 +759,9 @@ atabus_free_drives(struct ata_channel *c
if (chp->ch_drive == NULL)
return;
+ kmem_free(chp->ch_drive,
+ sizeof(struct ata_drive_datas) * chp->ch_ndrives);
chp->ch_ndrives = 0;
- free(chp->ch_drive, M_DEVBUF);
chp->ch_drive = NULL;
}
@@ -2218,7 +2217,7 @@ atabus_rescan(device_t self, const char
}
}
- initq = malloc(sizeof(*initq), M_DEVBUF, M_WAITOK);
+ initq = kmem_zalloc(sizeof(*initq), KM_SLEEP);
initq->atabus_sc = sc;
mutex_enter(&atabus_qlock);
TAILQ_INSERT_TAIL(&atabus_initq_head, initq, atabus_initq);
Index: src/sys/dev/ata/ata_raid.c
diff -u src/sys/dev/ata/ata_raid.c:1.40 src/sys/dev/ata/ata_raid.c:1.40.4.1
--- src/sys/dev/ata/ata_raid.c:1.40 Fri Jun 22 09:06:04 2018
+++ src/sys/dev/ata/ata_raid.c Mon Sep 17 20:54:41 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: ata_raid.c,v 1.40 2018/06/22 09:06:04 pgoyette Exp $ */
+/* $NetBSD: ata_raid.c,v 1.40.4.1 2018/09/17 20:54:41 jdolecek Exp $ */
/*
* Copyright (c) 2003 Wasabi Systems, Inc.
@@ -40,7 +40,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ata_raid.c,v 1.40 2018/06/22 09:06:04 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ata_raid.c,v 1.40.4.1 2018/09/17 20:54:41 jdolecek Exp $");
#include <sys/param.h>
#include <sys/buf.h>
@@ -50,7 +50,6 @@ __KERNEL_RCSID(0, "$NetBSD: ata_raid.c,v
#include <sys/disk.h>
#include <sys/disklabel.h>
#include <sys/fcntl.h>
-#include <sys/malloc.h>
#include <sys/vnode.h>
#include <sys/proc.h>
#include <sys/module.h>
@@ -274,7 +273,7 @@ ata_raid_get_array_info(u_int type, u_in
}
/* Need to allocate a new one. */
- aai = malloc(sizeof(*aai), M_DEVBUF, M_WAITOK | M_ZERO);
+ aai = kmem_zalloc(sizeof(*aai), KM_SLEEP);
aai->aai_type = type;
aai->aai_arrayno = arrayno;
aai->aai_curdisk = 0;
Index: src/sys/dev/ata/ata_raid_adaptec.c
diff -u src/sys/dev/ata/ata_raid_adaptec.c:1.10 src/sys/dev/ata/ata_raid_adaptec.c:1.10.6.1
--- src/sys/dev/ata/ata_raid_adaptec.c:1.10 Wed Nov 1 19:34:46 2017
+++ src/sys/dev/ata/ata_raid_adaptec.c Mon Sep 17 20:54:41 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: ata_raid_adaptec.c,v 1.10 2017/11/01 19:34:46 mlelstv Exp $ */
+/* $NetBSD: ata_raid_adaptec.c,v 1.10.6.1 2018/09/17 20:54:41 jdolecek Exp $ */
/*-
* Copyright (c) 2000,2001,2002 S�ren Schmidt <[email protected]>
@@ -35,7 +35,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ata_raid_adaptec.c,v 1.10 2017/11/01 19:34:46 mlelstv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ata_raid_adaptec.c,v 1.10.6.1 2018/09/17 20:54:41 jdolecek Exp $");
#include <sys/param.h>
#include <sys/buf.h>
@@ -45,7 +45,6 @@ __KERNEL_RCSID(0, "$NetBSD: ata_raid_ada
#include <sys/disk.h>
#include <sys/disklabel.h>
#include <sys/fcntl.h>
-#include <sys/malloc.h>
#include <sys/vnode.h>
#include <sys/kauth.h>
@@ -77,7 +76,7 @@ ata_raid_read_config_adaptec(struct wd_s
struct ataraid_array_info *aai;
struct ataraid_disk_info *adi;
- info = malloc(sizeof(*info), M_DEVBUF, M_WAITOK);
+ info = kmem_zalloc(sizeof(*info), KM_SLEEP);
bmajor = devsw_name2blk(dksc->sc_xname, NULL, 0);
@@ -189,6 +188,6 @@ ata_raid_read_config_adaptec(struct wd_s
error = 0;
out:
- free(info, M_DEVBUF);
+ kmem_free(info, sizeof(*info));
return (error);
}
Index: src/sys/dev/ata/ata_raid_intel.c
diff -u src/sys/dev/ata/ata_raid_intel.c:1.8 src/sys/dev/ata/ata_raid_intel.c:1.8.6.1
--- src/sys/dev/ata/ata_raid_intel.c:1.8 Wed Nov 1 19:34:46 2017
+++ src/sys/dev/ata/ata_raid_intel.c Mon Sep 17 20:54:41 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: ata_raid_intel.c,v 1.8 2017/11/01 19:34:46 mlelstv Exp $ */
+/* $NetBSD: ata_raid_intel.c,v 1.8.6.1 2018/09/17 20:54:41 jdolecek Exp $ */
/*-
* Copyright (c) 2000-2008 S�ren Schmidt <[email protected]>
@@ -33,7 +33,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ata_raid_intel.c,v 1.8 2017/11/01 19:34:46 mlelstv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ata_raid_intel.c,v 1.8.6.1 2018/09/17 20:54:41 jdolecek Exp $");
#include <sys/param.h>
#include <sys/buf.h>
@@ -43,7 +43,6 @@ __KERNEL_RCSID(0, "$NetBSD: ata_raid_int
#include <sys/disk.h>
#include <sys/disklabel.h>
#include <sys/fcntl.h>
-#include <sys/malloc.h>
#include <sys/vnode.h>
#include <sys/kauth.h>
@@ -138,6 +137,7 @@ ata_raid_read_config_intel(struct wd_sof
{
struct dk_softc *dksc = &sc->sc_dksc;
struct intel_raid_conf *info;
+ const size_t infosz = 1536;
struct intel_raid_mapping *map;
struct ataraid_array_info *aai;
struct ataraid_disk_info *adi;
@@ -148,7 +148,7 @@ ata_raid_read_config_intel(struct wd_sof
dev_t dev;
int volumeid, diskidx;
- info = malloc(1536, M_DEVBUF, M_WAITOK|M_ZERO);
+ info = kmem_zalloc(infosz, KM_SLEEP);
bmajor = devsw_name2blk(dksc->sc_xname, NULL, 0);
@@ -298,7 +298,7 @@ findvol:
}
out:
- free(info, M_DEVBUF);
+ kmem_free(info, infosz);
return error;
}
Index: src/sys/dev/ata/ata_raid_via.c
diff -u src/sys/dev/ata/ata_raid_via.c:1.8 src/sys/dev/ata/ata_raid_via.c:1.8.6.1
--- src/sys/dev/ata/ata_raid_via.c:1.8 Wed Nov 1 19:34:46 2017
+++ src/sys/dev/ata/ata_raid_via.c Mon Sep 17 20:54:41 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: ata_raid_via.c,v 1.8 2017/11/01 19:34:46 mlelstv Exp $ */
+/* $NetBSD: ata_raid_via.c,v 1.8.6.1 2018/09/17 20:54:41 jdolecek Exp $ */
/*-
* Copyright (c) 2000,2001,2002 S�ren Schmidt <[email protected]>
@@ -35,7 +35,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ata_raid_via.c,v 1.8 2017/11/01 19:34:46 mlelstv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ata_raid_via.c,v 1.8.6.1 2018/09/17 20:54:41 jdolecek Exp $");
#include <sys/param.h>
#include <sys/buf.h>
@@ -45,7 +45,6 @@ __KERNEL_RCSID(0, "$NetBSD: ata_raid_via
#include <sys/disk.h>
#include <sys/disklabel.h>
#include <sys/fcntl.h>
-#include <sys/malloc.h>
#include <sys/vnode.h>
#include <sys/kauth.h>
@@ -126,7 +125,7 @@ ata_raid_read_config_via(struct wd_softc
struct ataraid_array_info *aai;
struct ataraid_disk_info *adi;
- info = malloc(sizeof(*info), M_DEVBUF, M_WAITOK);
+ info = kmem_zalloc(sizeof(*info), KM_SLEEP);
bmajor = devsw_name2blk(dksc->sc_xname, NULL, 0);
@@ -258,6 +257,6 @@ ata_raid_read_config_via(struct wd_softc
error = 0;
out:
- free(info, M_DEVBUF);
+ kmem_free(info, sizeof(*info));
return (error);
}
Index: src/sys/dev/ata/ata_raid_jmicron.c
diff -u src/sys/dev/ata/ata_raid_jmicron.c:1.6 src/sys/dev/ata/ata_raid_jmicron.c:1.6.6.1
--- src/sys/dev/ata/ata_raid_jmicron.c:1.6 Wed Nov 1 19:34:46 2017
+++ src/sys/dev/ata/ata_raid_jmicron.c Mon Sep 17 20:54:41 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: ata_raid_jmicron.c,v 1.6 2017/11/01 19:34:46 mlelstv Exp $ */
+/* $NetBSD: ata_raid_jmicron.c,v 1.6.6.1 2018/09/17 20:54:41 jdolecek Exp $ */
/*-
* Copyright (c) 2000-2008 S�ren Schmidt <[email protected]>
@@ -35,7 +35,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ata_raid_jmicron.c,v 1.6 2017/11/01 19:34:46 mlelstv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ata_raid_jmicron.c,v 1.6.6.1 2018/09/17 20:54:41 jdolecek Exp $");
#include <sys/param.h>
#include <sys/buf.h>
@@ -45,7 +45,6 @@ __KERNEL_RCSID(0, "$NetBSD: ata_raid_jmi
#include <sys/disk.h>
#include <sys/disklabel.h>
#include <sys/fcntl.h>
-#include <sys/malloc.h>
#include <sys/vnode.h>
#include <sys/kauth.h>
@@ -130,7 +129,7 @@ ata_raid_read_config_jmicron(struct wd_s
int bmajor, error, count, disk, total_disks;
dev_t dev;
- info = malloc(sizeof(*info), M_DEVBUF, M_WAITOK|M_ZERO);
+ info = kmem_zalloc(sizeof(*info), KM_SLEEP);
bmajor = devsw_name2blk(dksc->sc_xname, NULL, 0);
@@ -265,6 +264,6 @@ ata_raid_read_config_jmicron(struct wd_s
error = 0;
out:
- free(info, M_DEVBUF);
+ kmem_free(info, sizeof(*info));
return error;
}
Index: src/sys/dev/ata/ata_raid_nvidia.c
diff -u src/sys/dev/ata/ata_raid_nvidia.c:1.3 src/sys/dev/ata/ata_raid_nvidia.c:1.3.6.1
--- src/sys/dev/ata/ata_raid_nvidia.c:1.3 Wed Nov 1 19:34:46 2017
+++ src/sys/dev/ata/ata_raid_nvidia.c Mon Sep 17 20:54:41 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: ata_raid_nvidia.c,v 1.3 2017/11/01 19:34:46 mlelstv Exp $ */
+/* $NetBSD: ata_raid_nvidia.c,v 1.3.6.1 2018/09/17 20:54:41 jdolecek Exp $ */
/*-
* Copyright (c) 2000 - 2008 S�ren Schmidt <[email protected]>
@@ -33,7 +33,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ata_raid_nvidia.c,v 1.3 2017/11/01 19:34:46 mlelstv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ata_raid_nvidia.c,v 1.3.6.1 2018/09/17 20:54:41 jdolecek Exp $");
#include <sys/param.h>
#include <sys/buf.h>
@@ -43,7 +43,6 @@ __KERNEL_RCSID(0, "$NetBSD: ata_raid_nvi
#include <sys/disk.h>
#include <sys/disklabel.h>
#include <sys/fcntl.h>
-#include <sys/malloc.h>
#include <sys/vnode.h>
#include <sys/kauth.h>
@@ -136,7 +135,7 @@ ata_raid_read_config_nvidia(struct wd_so
struct _arrayno *next;
} arrayno = { 0, 0, NULL}, *anptr;
- info = malloc(sizeof(*info), M_DEVBUF, M_WAITOK);
+ info = kmem_zalloc(sizeof(*info), KM_SLEEP);
bmajor = devsw_name2blk(dksc->sc_xname, NULL, 0);
@@ -200,7 +199,7 @@ ata_raid_read_config_nvidia(struct wd_so
/* new array */
anptr->magic1 = info->magic_1;
anptr->magic2 = info->magic_2;
- anptr->next = malloc(sizeof(arrayno), M_DEVBUF, M_WAITOK);
+ anptr->next = kmem_zalloc(sizeof(arrayno), KM_SLEEP);
}
aai = ata_raid_get_array_info(ATA_RAID_TYPE_NVIDIA, count);
@@ -257,6 +256,6 @@ ata_raid_read_config_nvidia(struct wd_so
error = 0;
out:
- free(info, M_DEVBUF);
+ kmem_free(info, sizeof(*info));
return (error);
}
Index: src/sys/dev/ata/ata_raid_promise.c
diff -u src/sys/dev/ata/ata_raid_promise.c:1.12 src/sys/dev/ata/ata_raid_promise.c:1.12.6.1
--- src/sys/dev/ata/ata_raid_promise.c:1.12 Wed Nov 1 19:34:46 2017
+++ src/sys/dev/ata/ata_raid_promise.c Mon Sep 17 20:54:41 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: ata_raid_promise.c,v 1.12 2017/11/01 19:34:46 mlelstv Exp $ */
+/* $NetBSD: ata_raid_promise.c,v 1.12.6.1 2018/09/17 20:54:41 jdolecek Exp $ */
/*-
* Copyright (c) 2000,2001,2002 S�ren Schmidt <[email protected]>
@@ -35,7 +35,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ata_raid_promise.c,v 1.12 2017/11/01 19:34:46 mlelstv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ata_raid_promise.c,v 1.12.6.1 2018/09/17 20:54:41 jdolecek Exp $");
#include <sys/param.h>
#include <sys/buf.h>
@@ -45,7 +45,6 @@ __KERNEL_RCSID(0, "$NetBSD: ata_raid_pro
#include <sys/disk.h>
#include <sys/disklabel.h>
#include <sys/fcntl.h>
-#include <sys/malloc.h>
#include <sys/vnode.h>
#include <sys/kauth.h>
@@ -77,7 +76,7 @@ ata_raid_read_config_promise(struct wd_s
struct ataraid_array_info *aai;
struct ataraid_disk_info *adi;
- info = malloc(sizeof(*info), M_DEVBUF, M_WAITOK);
+ info = kmem_zalloc(sizeof(*info), KM_SLEEP);
bmajor = devsw_name2blk(dksc->sc_xname, NULL, 0);
@@ -208,6 +207,6 @@ ata_raid_read_config_promise(struct wd_s
error = 0;
out:
- free(info, M_DEVBUF);
+ kmem_free(info, sizeof(*info));
return (error);
}
Index: src/sys/dev/ata/ata_subr.c
diff -u src/sys/dev/ata/ata_subr.c:1.6.2.3 src/sys/dev/ata/ata_subr.c:1.6.2.4
--- src/sys/dev/ata/ata_subr.c:1.6.2.3 Mon Sep 17 19:00:43 2018
+++ src/sys/dev/ata/ata_subr.c Mon Sep 17 20:54:41 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: ata_subr.c,v 1.6.2.3 2018/09/17 19:00:43 jdolecek Exp $ */
+/* $NetBSD: ata_subr.c,v 1.6.2.4 2018/09/17 20:54:41 jdolecek Exp $ */
/*
* Copyright (c) 1998, 2001 Manuel Bouyer. All rights reserved.
@@ -25,7 +25,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ata_subr.c,v 1.6.2.3 2018/09/17 19:00:43 jdolecek Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ata_subr.c,v 1.6.2.4 2018/09/17 20:54:41 jdolecek Exp $");
#include "opt_ata.h"
@@ -167,6 +167,7 @@ ata_queue_alloc(uint8_t openings)
if (openings > ATA_MAX_OPENINGS)
openings = ATA_MAX_OPENINGS;
+ /* XXX convert to kmem_zalloc() once ata_xfer is moved to pool */
struct ata_queue *chq = malloc(offsetof(struct ata_queue, queue_xfers[openings]),
M_DEVBUF, M_WAITOK | M_ZERO);
Index: src/sys/dev/ata/ata_wdc.c
diff -u src/sys/dev/ata/ata_wdc.c:1.110.4.2 src/sys/dev/ata/ata_wdc.c:1.110.4.3
--- src/sys/dev/ata/ata_wdc.c:1.110.4.2 Mon Sep 17 18:36:13 2018
+++ src/sys/dev/ata/ata_wdc.c Mon Sep 17 20:54:41 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: ata_wdc.c,v 1.110.4.2 2018/09/17 18:36:13 jdolecek Exp $ */
+/* $NetBSD: ata_wdc.c,v 1.110.4.3 2018/09/17 20:54:41 jdolecek Exp $ */
/*
* Copyright (c) 1998, 2001, 2003 Manuel Bouyer.
@@ -54,7 +54,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ata_wdc.c,v 1.110.4.2 2018/09/17 18:36:13 jdolecek Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ata_wdc.c,v 1.110.4.3 2018/09/17 20:54:41 jdolecek Exp $");
#include "opt_ata.h"
#include "opt_wdc.h"
@@ -66,7 +66,6 @@ __KERNEL_RCSID(0, "$NetBSD: ata_wdc.c,v
#include <sys/stat.h>
#include <sys/buf.h>
#include <sys/bufq.h>
-#include <sys/malloc.h>
#include <sys/device.h>
#include <sys/disklabel.h>
#include <sys/syslog.h>
Index: src/sys/dev/ata/ld_ataraid.c
diff -u src/sys/dev/ata/ld_ataraid.c:1.45 src/sys/dev/ata/ld_ataraid.c:1.45.4.1
--- src/sys/dev/ata/ld_ataraid.c:1.45 Sun Jun 3 10:20:54 2018
+++ src/sys/dev/ata/ld_ataraid.c Mon Sep 17 20:54:41 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: ld_ataraid.c,v 1.45 2018/06/03 10:20:54 martin Exp $ */
+/* $NetBSD: ld_ataraid.c,v 1.45.4.1 2018/09/17 20:54:41 jdolecek Exp $ */
/*
* Copyright (c) 2003 Wasabi Systems, Inc.
@@ -47,7 +47,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ld_ataraid.c,v 1.45 2018/06/03 10:20:54 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ld_ataraid.c,v 1.45.4.1 2018/09/17 20:54:41 jdolecek Exp $");
#if defined(_KERNEL_OPT)
#include "bio.h"
@@ -64,7 +64,6 @@ __KERNEL_RCSID(0, "$NetBSD: ld_ataraid.c
#include <sys/disk.h>
#include <sys/disklabel.h>
#include <sys/fcntl.h>
-#include <sys/malloc.h>
#include <sys/vnode.h>
#include <sys/kauth.h>
#include <sys/module.h>
Index: src/sys/dev/ata/wd.c
diff -u src/sys/dev/ata/wd.c:1.441.2.2 src/sys/dev/ata/wd.c:1.441.2.3
--- src/sys/dev/ata/wd.c:1.441.2.2 Sat Sep 1 09:48:32 2018
+++ src/sys/dev/ata/wd.c Mon Sep 17 20:54:41 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: wd.c,v 1.441.2.2 2018/09/01 09:48:32 jdolecek Exp $ */
+/* $NetBSD: wd.c,v 1.441.2.3 2018/09/17 20:54:41 jdolecek Exp $ */
/*
* Copyright (c) 1998, 2001 Manuel Bouyer. All rights reserved.
@@ -54,7 +54,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: wd.c,v 1.441.2.2 2018/09/01 09:48:32 jdolecek Exp $");
+__KERNEL_RCSID(0, "$NetBSD: wd.c,v 1.441.2.3 2018/09/17 20:54:41 jdolecek Exp $");
#include "opt_ata.h"
#include "opt_wd.h"
@@ -69,7 +69,6 @@ __KERNEL_RCSID(0, "$NetBSD: wd.c,v 1.441
#include <sys/buf.h>
#include <sys/bufq.h>
#include <sys/uio.h>
-#include <sys/malloc.h>
#include <sys/device.h>
#include <sys/disklabel.h>
#include <sys/disk.h>
@@ -548,9 +547,9 @@ wddetach(device_t self, int flags)
#ifdef WD_SOFTBADSECT
/* Clean out the bad sector list */
while (!SLIST_EMPTY(&wd->sc_bslist)) {
- void *head = SLIST_FIRST(&wd->sc_bslist);
+ struct disk_badsectors *dbs = SLIST_FIRST(&wd->sc_bslist);
SLIST_REMOVE_HEAD(&wd->sc_bslist, dbs_next);
- free(head, M_TEMP);
+ kmem_free(dbs, sizeof(*dbs));
}
wd->sc_bscount = 0;
#endif
@@ -892,7 +891,7 @@ retry2:
(wd->drvp->ata_vers < 4 && xfer->c_bio.r_error & 192))) {
struct disk_badsectors *dbs;
- dbs = malloc(sizeof *dbs, M_TEMP, M_NOWAIT);
+ dbs = kmem_zalloc(sizeof *dbs, KM_NOSLEEP);
if (dbs == NULL) {
aprint_error_dev(dksc->sc_dev,
"failed to add bad block to list\n");
@@ -1219,6 +1218,7 @@ wdioctl(dev_t dev, u_long cmd, void *add
* back to user space whilst the summary is returned via
* the struct passed in via the ioctl.
*/
+ mutex_enter(&wd->sc_lock);
SLIST_FOREACH(dbs, &wd->sc_bslist, dbs_next) {
if (skip > 0) {
missing--;
@@ -1233,6 +1233,7 @@ wdioctl(dev_t dev, u_long cmd, void *add
missing--;
count++;
}
+ mutex_exit(&wd->sc_lock);
dbsi.dbsi_left = missing;
dbsi.dbsi_copied = count;
*(struct disk_badsecinfo *)addr = dbsi;
@@ -1241,11 +1242,14 @@ wdioctl(dev_t dev, u_long cmd, void *add
case DIOCBSFLUSH :
/* Clean out the bad sector list */
+ mutex_enter(&wd->sc_lock);
while (!SLIST_EMPTY(&wd->sc_bslist)) {
- void *head = SLIST_FIRST(&wd->sc_bslist);
+ struct disk_badsectors *dbs =
+ SLIST_FIRST(&wd->sc_bslist);
SLIST_REMOVE_HEAD(&wd->sc_bslist, dbs_next);
- free(head, M_TEMP);
+ kmem_free(dbs, sizeof(*dbs));
}
+ mutex_exit(&wd->sc_lock);
wd->sc_bscount = 0;
return 0;
#endif
@@ -1306,7 +1310,7 @@ wdioctl(dev_t dev, u_long cmd, void *add
void *tbuf;
if (atareq->datalen < DEV_BSIZE
&& atareq->command == WDCC_IDENTIFY) {
- tbuf = malloc(DEV_BSIZE, M_TEMP, M_WAITOK);
+ tbuf = kmem_zalloc(DEV_BSIZE, KM_SLEEP);
wi->wi_iov.iov_base = tbuf;
wi->wi_iov.iov_len = DEV_BSIZE;
UIO_SETUP_SYSSPACE(&wi->wi_uio);
@@ -1328,7 +1332,7 @@ wdioctl(dev_t dev, u_long cmd, void *add
if (tbuf != NULL && error1 == 0) {
error1 = copyout(tbuf, atareq->databuf,
atareq->datalen);
- free(tbuf, M_TEMP);
+ kmem_free(tbuf, DEV_BSIZE);
}
} else {
/* No need to call physio if we don't have any
@@ -1919,7 +1923,7 @@ wi_get(struct wd_softc *wd)
{
struct wd_ioctl *wi;
- wi = malloc(sizeof(struct wd_ioctl), M_TEMP, M_WAITOK|M_ZERO);
+ wi = kmem_zalloc(sizeof(struct wd_ioctl), KM_SLEEP);
wi->wi_softc = wd;
buf_init(&wi->wi_bp);
@@ -1934,7 +1938,7 @@ void
wi_free(struct wd_ioctl *wi)
{
buf_destroy(&wi->wi_bp);
- free(wi, M_TEMP);
+ kmem_free(wi, sizeof(*wi));
}
/*