Date: Sun, 29 Nov 2015 13:18:26 GMT From: def@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r294532 - in soc2013/def/crashdump-head: sbin/dumpon sys/dev/null sys/geom sys/sys Message-ID: <201511291318.tATDIQSB079034@socsvn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: def Date: Sun Nov 29 13:18:25 2015 New Revision: 294532 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=294532 Log: Implement separate I/O control for EKCD. Modified: soc2013/def/crashdump-head/sbin/dumpon/dumpon.c soc2013/def/crashdump-head/sys/dev/null/null.c soc2013/def/crashdump-head/sys/geom/geom_dev.c soc2013/def/crashdump-head/sys/sys/disk.h Modified: soc2013/def/crashdump-head/sbin/dumpon/dumpon.c ============================================================================== --- soc2013/def/crashdump-head/sbin/dumpon/dumpon.c Sun Nov 29 12:33:56 2015 (r294531) +++ soc2013/def/crashdump-head/sbin/dumpon/dumpon.c Sun Nov 29 13:18:25 2015 (r294532) @@ -235,11 +235,11 @@ err(EX_OSFILE, "%s", argv[0]); check_size(fd, argv[0]); kda.kda_enable = 0; - i = ioctl(fd, DIOCSKERNELDUMP, &kda); + i = ioctl(fd, DIOCSEKCD, &kda); if (pubkeyfile != NULL) genkey(pubkeyfile, &kda); kda.kda_enable = 1; - i = ioctl(fd, DIOCSKERNELDUMP, &kda); + i = ioctl(fd, DIOCSEKCD, &kda); free(kda.kda_encryptedkey); bzero(&kda, sizeof(kda)); if (i == 0 && verbose) @@ -249,12 +249,12 @@ if (fd < 0) err(EX_OSFILE, "%s", _PATH_DEVNULL); kda.kda_enable = 0; - i = ioctl(fd, DIOCSKERNELDUMP, &kda); + i = ioctl(fd, DIOCSEKCD, &kda); if (i == 0 && verbose) printf("kernel dumps disabled\n"); } if (i < 0) - err(EX_OSERR, "ioctl(DIOCSKERNELDUMP)"); + err(EX_OSERR, "ioctl(DIOCSEKCD)"); exit (0); } Modified: soc2013/def/crashdump-head/sys/dev/null/null.c ============================================================================== --- soc2013/def/crashdump-head/sys/dev/null/null.c Sun Nov 29 12:33:56 2015 (r294531) +++ soc2013/def/crashdump-head/sys/dev/null/null.c Sun Nov 29 13:18:25 2015 (r294532) @@ -108,6 +108,9 @@ error = 0; switch (cmd) { + case DIOCSEKCD: + error = set_dumper(NULL, NULL, td, 0, NULL, 0, NULL); + break; case DIOCSKERNELDUMP: error = set_dumper(NULL, NULL, td, 0, NULL, 0, NULL); break; Modified: soc2013/def/crashdump-head/sys/geom/geom_dev.c ============================================================================== --- soc2013/def/crashdump-head/sys/geom/geom_dev.c Sun Nov 29 12:33:56 2015 (r294531) +++ soc2013/def/crashdump-head/sys/geom/geom_dev.c Sun Nov 29 13:18:25 2015 (r294532) @@ -134,7 +134,7 @@ struct g_consumer *cp; int error, len; - if (dev == NULL) + if (dev == NULL || kda == NULL) return (set_dumper(NULL, NULL, td, 0, NULL, 0, NULL)); cp = dev->si_drv2; @@ -158,12 +158,15 @@ static void init_dumpdev(struct cdev *dev) { + struct diocskerneldump_arg kda; + + kda.kda_enable = 1; if (dumpdev == NULL) return; if (strcmp(devtoname(dev), dumpdev) != 0) return; - if (g_dev_setdumpdev(dev, NULL, curthread) == 0) { + if (g_dev_setdumpdev(dev, &kda, curthread) == 0) { freeenv(dumpdev); dumpdev = NULL; } @@ -465,7 +468,7 @@ case DIOCGFRONTSTUFF: error = g_io_getattr("GEOM::frontstuff", cp, &i, data); break; - case DIOCSKERNELDUMP: { + case DIOCSEKCD: { struct diocskerneldump_arg *kda; kda = (struct diocskerneldump_arg *)data; if (kda->kda_enable == 0) @@ -474,6 +477,15 @@ error = g_dev_setdumpdev(dev, kda, td); break; } + case DIOCSKERNELDUMP: { + struct diocskerneldump_arg kda; + kda.kda_enable = (uint8_t)*(u_int *)data; + if (kda.kda_enable == 0) + error = g_dev_setdumpdev(NULL, NULL, td); + else + error = g_dev_setdumpdev(dev, &kda, td); + break; + } case DIOCGFLUSH: error = g_io_flush(cp); break; Modified: soc2013/def/crashdump-head/sys/sys/disk.h ============================================================================== --- soc2013/def/crashdump-head/sys/sys/disk.h Sun Nov 29 12:33:56 2015 (r294531) +++ soc2013/def/crashdump-head/sys/sys/disk.h Sun Nov 29 13:18:25 2015 (r294532) @@ -61,11 +61,17 @@ uint32_t kda_encryptedkeysize; uint8_t *kda_encryptedkey; }; -#define DIOCSKERNELDUMP _IOW('d', 133, struct diocskerneldump_arg) +#define DIOCSEKCD _IOW('d', 132, struct diocskerneldump_arg) /* * Enable/Disable the device for kernel core dumps. */ +#define DIOCSKERNELDUMP _IOW('d', 133, u_int) /* Set/Clear kernel dumps */ + /* + * Enable/Disable (the argument is boolean) the device for kernel + * core dumps. + */ + #define DIOCGFRONTSTUFF _IOR('d', 134, off_t) /* * Many disk formats have some amount of space reserved at the
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201511291318.tATDIQSB079034>