summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan McDonald <danmcd@mnx.io>2022-05-18 13:12:23 -0400
committerDan McDonald <danmcd@mnx.io>2022-05-18 13:12:23 -0400
commit645c3a589af77ee8ceefd661ef71763341ee52ad (patch)
treef28ddf1de044c393e18a227aa5549fae235fb6fe
parentbaac7cebc69e995ea935f1318f395a564ef90eed (diff)
parentca0df52a1ec24f9498f363369c65d0e408d579b1 (diff)
downloadillumos-joyent-release-20220519.tar.gz
[illumos-gate merge]release-20220519
commit ca0df52a1ec24f9498f363369c65d0e408d579b1 14689 blkdev GUID support commit ecc39deb3ff51afe175edd847dcffb926c47a239 14695 format: input() feedback should be more verbose commit 6328d71e9dd97ed4dfdf9425b5dc7b9deb6f579a 14454 sys/debug.h: CTASSERT should use _Static_assert commit b602cbcd64fbbebf696bd7c8e03367bdfa19805d 14696 nvmeadm command dumps core when libumem.so is used commit 9f7719e79a5c2ccdc9ee6a14147ba723fb8c0e36 14643 ::dtrace dcmd can truncate output
-rw-r--r--usr/src/boot/common/bootstrap.h6
-rw-r--r--usr/src/cmd/devfsadm/disk_link.c8
-rw-r--r--usr/src/cmd/format/io.c54
-rw-r--r--usr/src/cmd/format/io.h8
-rw-r--r--usr/src/cmd/mdb/common/modules/dtrace/dtrace.c47
-rw-r--r--usr/src/cmd/nvmeadm/nvmeadm.c17
-rw-r--r--usr/src/uts/common/io/blkdev/blkdev.c74
-rw-r--r--usr/src/uts/common/io/mlxcx/mlxcx_endint.h10
-rw-r--r--usr/src/uts/common/sys/blkdev.h7
-rw-r--r--usr/src/uts/common/sys/debug.h5
-rw-r--r--usr/src/uts/i86pc/vm/hat_i86.c8
11 files changed, 160 insertions, 84 deletions
diff --git a/usr/src/boot/common/bootstrap.h b/usr/src/boot/common/bootstrap.h
index 689905ae68..f176973897 100644
--- a/usr/src/boot/common/bootstrap.h
+++ b/usr/src/boot/common/bootstrap.h
@@ -409,10 +409,6 @@ int nvstore_set_var_from_string(void *, const char *, const char *,
const char *);
int nvstore_unset_var(void *, const char *);
-#ifndef CTASSERT /* Allow lint to override */
-#define CTASSERT(x) _CTASSERT(x, __LINE__)
-#define _CTASSERT(x, y) __CTASSERT(x, y)
-#define __CTASSERT(x, y) typedef char __assert ## y[(x) ? 1 : -1]
-#endif
+#define CTASSERT(x) _Static_assert(x, "compile-time assertion failed")
#endif /* !_BOOTSTRAP_H_ */
diff --git a/usr/src/cmd/devfsadm/disk_link.c b/usr/src/cmd/devfsadm/disk_link.c
index ade81417c6..5e68c6c67f 100644
--- a/usr/src/cmd/devfsadm/disk_link.c
+++ b/usr/src/cmd/devfsadm/disk_link.c
@@ -21,7 +21,7 @@
/*
* Copyright 2016 Toomas Soome <tsoome@me.com>
- * Copyright 2017 Nexenta Systems, Inc.
+ * Copyright 2022 Tintri by DDN, Inc. All rights reserved.
* Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -226,12 +226,12 @@ disk_callback_blkdev(di_minor_t minor, di_node_t node)
{
char *addr;
char disk[DISK_SUBPATH_MAX];
- uint64_t eui64;
+ char guid[50];
uint_t lun = 0;
addr = di_bus_addr(node);
- (void) sscanf(addr, "w%016"PRIx64",%X", &eui64, &lun);
- (void) snprintf(disk, DISK_SUBPATH_MAX, "t%016"PRIX64"d%d", eui64, lun);
+ (void) sscanf(addr, "w%49[0-9A-F],%X", &guid, &lun);
+ (void) snprintf(disk, DISK_SUBPATH_MAX, "t%sd%d", guid, lun);
disk_common(minor, node, disk, RM_STALE);
return (DEVFSADM_CONTINUE);
}
diff --git a/usr/src/cmd/format/io.c b/usr/src/cmd/format/io.c
index 06342e975e..673e968424 100644
--- a/usr/src/cmd/format/io.c
+++ b/usr/src/cmd/format/io.c
@@ -367,7 +367,8 @@ getbn(char *str, diskaddr_t *iptr)
if (geti(buf, &cyl, &wild))
return (-1);
if ((cyl < 0) || (cyl >= (ncyl + acyl))) {
- err_print("`%d' is out of range.\n", cyl);
+ err_print("`%d' is out of range [0-%u].\n", cyl,
+ ncyl + acyl - 1);
return (-1);
}
/*
@@ -378,7 +379,7 @@ getbn(char *str, diskaddr_t *iptr)
if (geti(buf, &head, &wild))
return (-1);
if ((head < 0) || (head >= nhead)) {
- err_print("`%d' is out of range.\n", head);
+ err_print("`%d' is out of range [0-%u].\n", head, nhead - 1);
return (-1);
}
/*
@@ -389,7 +390,8 @@ getbn(char *str, diskaddr_t *iptr)
if (geti(buf, &sect, &wild))
return (-1);
if ((sect < 0) || (sect >= sectors(head))) {
- err_print("`%d' is out of range.\n", sect);
+ err_print("`%d' is out of range [0-%u].\n", sect,
+ sectors(head) - 1);
return (-1);
}
/*
@@ -784,7 +786,8 @@ reprompt:
if ((bn64 < bounds->lower) || (bn64 > bounds->upper)) {
err_print("`");
pr_dblock(err_print, bn64);
- err_print("' is out of range.\n");
+ err_print("' is out of range [%llu-%llu].\n",
+ bounds->lower, bounds->upper);
break;
}
/*
@@ -817,7 +820,8 @@ reprompt:
* Check to be sure it is within the legal bounds.
*/
if ((bn < bounds->lower) || (bn > bounds->upper)) {
- err_print("`%lu' is out of range.\n", bn);
+ err_print("`%lu' is out of range [%llu-%llu].\n", bn,
+ bounds->lower, bounds->upper);
break;
}
/*
@@ -848,7 +852,8 @@ reprompt:
* Check to be sure it is within the legal bounds.
*/
if ((bn64 < bounds->lower) || (bn64 > bounds->upper)) {
- err_print("`%llu' is out of range.\n", bn64);
+ err_print("`%llu' is out of range [%llu-%llu].\n",
+ bn64, bounds->lower, bounds->upper);
break;
}
/*
@@ -881,7 +886,8 @@ reprompt:
* Check to be sure it is within the legal bounds.
*/
if ((bn < bounds->lower) || (bn > bounds->upper)) {
- err_print("`%lu' is out of range.\n", bn);
+ err_print("`%lu' is out of range [%llu-%llu].\n", bn,
+ bounds->lower, bounds->upper);
break;
}
/*
@@ -1150,8 +1156,9 @@ reprompt:
/*
* Check the bounds - cyls is number of cylinders
*/
- if (cyls > (bounds->upper/spc())) {
- err_print("`%dc' is out of range\n", cyls);
+ if (cyls > (bounds->upper / spc())) {
+ err_print("`%dc' is out of range [0-%llu]\n",
+ cyls, bounds->upper / spc());
break;
}
/*
@@ -1171,7 +1178,8 @@ reprompt:
* Check the bounds
*/
if (nmegs > bn2mb(bounds->upper)) {
- err_print("`%1.2fmb' is out of range\n", nmegs);
+ err_print("`%1.2fmb' is out of range "
+ "[0-%1.2f]\n", nmegs, bn2mb(bounds->upper));
break;
}
/*
@@ -1197,7 +1205,8 @@ reprompt:
* Check the bounds
*/
if (ngigs > bn2gb(bounds->upper)) {
- err_print("`%1.2fgb' is out of range\n", ngigs);
+ err_print("`%1.2fgb' is out of range "
+ "[0-%1.2f]\n", ngigs, bn2gb(bounds->upper));
break;
}
/*
@@ -1384,8 +1393,9 @@ or g(gigabytes)\n");
* Check the bounds - cyls is number of
* cylinders
*/
- if (cyls > (bounds->upper/spc())) {
- err_print("`%dc' is out of range\n", cyls);
+ if (cyls > (bounds->upper / spc())) {
+ err_print("`%dc' is out of range [0-%llu]\n",
+ cyls, bounds->upper / spc());
break;
}
@@ -1410,7 +1420,8 @@ or g(gigabytes)\n");
* Check the bounds
*/
if (nmegs > bn2mb(bounds->upper)) {
- err_print("`%1.2fmb' is out of range\n", nmegs);
+ err_print("`%1.2fmb' is out of range "
+ "[0-%1.2f]\n", nmegs, bn2mb(bounds->upper));
break;
}
@@ -1441,7 +1452,8 @@ or g(gigabytes)\n");
* Check the bounds
*/
if (ngigs > bn2gb(bounds->upper)) {
- err_print("`%1.2fgb' is out of range\n", ngigs);
+ err_print("`%1.2fgb' is out of range "
+ "[0-%1.2f]\n", ngigs, bn2gb(bounds->upper));
break;
}
@@ -1608,7 +1620,9 @@ or g(gigabytes)\n");
* Check the bounds
*/
if (nmegs > bn2mb(bounds->upper - bounds->lower)) {
- err_print("`%1.2fmb' is out of range\n", nmegs);
+ err_print("`%1.2fmb' is out of range "
+ "[0-%1.2f]\n", nmegs,
+ bn2mb(bounds->upper - bounds->lower));
break;
}
@@ -1621,7 +1635,9 @@ or g(gigabytes)\n");
break;
}
if (nmegs > bn2gb(bounds->upper - bounds->lower)) {
- err_print("`%1.2fgb' is out of range\n", nmegs);
+ err_print("`%1.2fgb' is out of range "
+ "[0-%1.2f]\n", nmegs,
+ bn2gb(bounds->upper - bounds->lower));
break;
}
@@ -1634,7 +1650,9 @@ or g(gigabytes)\n");
break;
}
if (nmegs > bn2tb(bounds->upper - bounds->lower)) {
- err_print("`%1.2ftb' is out of range\n", nmegs);
+ err_print("`%1.2ftb' is out of range "
+ "[0-%1.2f]\n", nmegs,
+ bn2tb(bounds->upper - bounds->lower));
break;
}
return (uint64_t)((float)nmegs * 1024.0 *
diff --git a/usr/src/cmd/format/io.h b/usr/src/cmd/format/io.h
index e20c719c02..7450a37a0f 100644
--- a/usr/src/cmd/format/io.h
+++ b/usr/src/cmd/format/io.h
@@ -106,10 +106,10 @@ int geti(char *str, int *iptr, int *wild);
uint64_t input(int, char *, int, u_ioparam_t *, int *, int);
int find_value(slist_t *slist, char *match_str, int *match_value);
char *find_string(slist_t *slist, int match_value);
-void fmt_print(char *format, ...);
-void nolog_print(char *format, ...);
-void log_print(char *format, ...);
-void err_print(char *format, ...);
+void fmt_print(char *format, ...) __PRINTFLIKE(1);
+void nolog_print(char *format, ...) __PRINTFLIKE(1);
+void log_print(char *format, ...) __PRINTFLIKE(1);
+void err_print(char *format, ...) __PRINTFLIKE(1);
void print_buf(char *buf, int nbytes);
void pr_diskline(struct disk_info *disk, int num);
void pr_dblock(void (*func)(char *, ...), diskaddr_t bn);
diff --git a/usr/src/cmd/mdb/common/modules/dtrace/dtrace.c b/usr/src/cmd/mdb/common/modules/dtrace/dtrace.c
index aaf430f82d..ec1523dd28 100644
--- a/usr/src/cmd/mdb/common/modules/dtrace/dtrace.c
+++ b/usr/src/cmd/mdb/common/modules/dtrace/dtrace.c
@@ -23,6 +23,7 @@
* Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2013 by Delphix. All rights reserved.
* Copyright 2019 Joyent, Inc.
+ * Copyright 2022 Racktop Systems, Inc.
*/
/*
@@ -354,6 +355,8 @@ dtracemdb_aggdesc(dtrace_state_t *state, dtrace_aggdesc_t *agd)
static int
dtracemdb_bufsnap(dtrace_buffer_t *which, dtrace_bufdesc_t *desc)
{
+ static hrtime_t hr_offset = 0;
+ static boolean_t offset_set = B_FALSE;
uintptr_t addr;
size_t bufsize;
dtrace_buffer_t buf;
@@ -430,10 +433,52 @@ dtracemdb_bufsnap(dtrace_buffer_t *which, dtrace_bufdesc_t *desc)
desc->dtbd_oldest = 0;
}
+ /*
+ * On a live system, dtbd_timestamp is set to gethrtime() when the
+ * DTRACEIOC_BUFSNAP ioctl is called. The effect of this is that the
+ * timestamps of all the enabled probe records in the buf will always
+ * be less than dtbd_timestamp. dtrace_consume() relies on this
+ * invariant to determine when it needs to retrieve more dtrace bufs
+ * from the kernel.
+ *
+ * However when mdb is reading a crash dump, the value of
+ * gethrtime() on the system running mdb may smaller than the
+ * enabled probe records in the crash dump, violating the invariant
+ * dtrace_consume() is relying on. This can cause dtrace_consume()
+ * to prematurely stop processing records.
+ *
+ * To preserve the invariant dtrace_consume() requires, we simply
+ * add the value of panic_hrtime to gethrtime() when setting
+ * dtdb_timestamp. On a live system, panic_hrtime will be 0, and
+ * the invariant will be preserved by virtue of being running on
+ * a live system. On a crash dump, no valid probe record can have a
+ * timestamp greater than panic_hrtime, so adding this to the value
+ * of gethrtime() will guarantee the invariant expected by
+ * dtrace_consume() is preserved.
+ */
+ if (!offset_set) {
+ hrtime_t panic_hrtime;
+
+ /*
+ * We could be slightly more clever and only set hr_offset
+ * if gethrtime() in mdb is < panic_hrtime, but it doesn't
+ * seem necessary. If for some reason, we cannot read
+ * panic_hrtime, we'll try to continue -- ::dtrace may
+ * still succeed, so we just warn and continue.
+ */
+ if (mdb_readvar(&panic_hrtime, "panic_hrtime") == -1) {
+ mdb_warn("failed to read 'panic_hrtime' -- "
+ "some dtrace data may not be displayed");
+ } else {
+ hr_offset = panic_hrtime;
+ }
+ offset_set = B_TRUE;
+ }
+
desc->dtbd_size = bufsize;
desc->dtbd_drops = buf.dtb_drops;
desc->dtbd_errors = buf.dtb_errors;
- desc->dtbd_timestamp = gethrtime();
+ desc->dtbd_timestamp = gethrtime() + hr_offset;
return (0);
}
diff --git a/usr/src/cmd/nvmeadm/nvmeadm.c b/usr/src/cmd/nvmeadm/nvmeadm.c
index 3de4fa0b00..d78c7fe9ee 100644
--- a/usr/src/cmd/nvmeadm/nvmeadm.c
+++ b/usr/src/cmd/nvmeadm/nvmeadm.c
@@ -472,6 +472,8 @@ nvme_dskname(const nvme_process_arg_t *npa)
di_node_t child;
di_dim_t dim;
char *addr;
+ char *disk_ctd;
+ char *diskname = NULL;
dim = di_dim_init();
@@ -501,19 +503,23 @@ nvme_dskname(const nvme_process_arg_t *npa)
/* Chop off 's0' and get everything past the last '/' */
path[strlen(path) - 2] = '\0';
- path = strrchr(path, '/');
- if (path == NULL)
+ disk_ctd = strrchr(path, '/');
+ if (disk_ctd == NULL)
+ goto fail;
+ diskname = strdup(++disk_ctd);
+ if (diskname == NULL)
goto fail;
- path++;
+ free(path);
break;
}
di_dim_fini(dim);
- return (path);
+ return (diskname);
fail:
+ free(path);
err(-1, "nvme_dskname");
}
@@ -561,14 +567,15 @@ nvme_process(di_node_t node, di_minor_t minor, void *arg)
out:
di_devfs_path_free(npa->npa_path);
- free(npa->npa_dsk);
free(npa->npa_version);
free(npa->npa_idctl);
free(npa->npa_idns);
+ free(npa->npa_dsk);
npa->npa_version = NULL;
npa->npa_idctl = NULL;
npa->npa_idns = NULL;
+ npa->npa_dsk = NULL;
nvme_close(fd);
diff --git a/usr/src/uts/common/io/blkdev/blkdev.c b/usr/src/uts/common/io/blkdev/blkdev.c
index 7e5e5716e2..2587d51799 100644
--- a/usr/src/uts/common/io/blkdev/blkdev.c
+++ b/usr/src/uts/common/io/blkdev/blkdev.c
@@ -207,7 +207,7 @@ struct bd_handle {
void *h_private;
bd_t *h_bd;
char *h_name;
- char h_addr[30]; /* enough for w%0.16x,%X */
+ char h_addr[50]; /* enough for w%0.32x,%X */
};
struct bd_xfer_impl {
@@ -651,6 +651,7 @@ bd_attach(dev_info_t *dip, ddi_attach_cmd_t cmd)
int rv;
char name[16];
char kcache[32];
+ char *node_type;
switch (cmd) {
case DDI_ATTACH:
@@ -823,11 +824,17 @@ bd_attach(dev_info_t *dip, ddi_attach_cmd_t cmd)
offsetof(struct bd_xfer_impl, i_linkage));
}
+ if (*(uint64_t *)drive.d_eui64 != 0 ||
+ *(uint64_t *)drive.d_guid != 0 ||
+ *((uint64_t *)drive.d_guid + 1) != 0)
+ node_type = DDI_NT_BLOCK_BLKDEV;
+ else if (drive.d_lun >= 0)
+ node_type = DDI_NT_BLOCK_CHAN;
+ else
+ node_type = DDI_NT_BLOCK;
+
rv = cmlb_attach(dip, &bd_tg_ops, DTYPE_DIRECT,
- bd->d_removable, bd->d_hotpluggable,
- /*LINTED: E_BAD_PTR_CAST_ALIGN*/
- *(uint64_t *)drive.d_eui64 != 0 ? DDI_NT_BLOCK_BLKDEV :
- drive.d_lun >= 0 ? DDI_NT_BLOCK_CHAN : DDI_NT_BLOCK,
+ bd->d_removable, bd->d_hotpluggable, node_type,
CMLB_FAKE_LABEL_ONE_PARTITION, bd->d_cmlbh, 0);
if (rv != 0) {
goto fail_cmlb_attach;
@@ -2325,8 +2332,9 @@ bd_free_handle(bd_handle_t hdl)
int
bd_attach_handle(dev_info_t *dip, bd_handle_t hdl)
{
- dev_info_t *child;
bd_drive_t drive = { 0 };
+ dev_info_t *child;
+ size_t len;
/*
* It's not an error if bd_attach_handle() is called on a handle that
@@ -2345,31 +2353,37 @@ bd_attach_handle(dev_info_t *dip, bd_handle_t hdl)
hdl->h_parent = dip;
hdl->h_name = "blkdev";
- /*LINTED: E_BAD_PTR_CAST_ALIGN*/
- if (*(uint64_t *)drive.d_eui64 != 0) {
- if (drive.d_lun >= 0) {
- (void) snprintf(hdl->h_addr, sizeof (hdl->h_addr),
- "w%02X%02X%02X%02X%02X%02X%02X%02X,%X",
- drive.d_eui64[0], drive.d_eui64[1],
- drive.d_eui64[2], drive.d_eui64[3],
- drive.d_eui64[4], drive.d_eui64[5],
- drive.d_eui64[6], drive.d_eui64[7], drive.d_lun);
- } else {
- (void) snprintf(hdl->h_addr, sizeof (hdl->h_addr),
- "w%02X%02X%02X%02X%02X%02X%02X%02X",
- drive.d_eui64[0], drive.d_eui64[1],
- drive.d_eui64[2], drive.d_eui64[3],
- drive.d_eui64[4], drive.d_eui64[5],
- drive.d_eui64[6], drive.d_eui64[7]);
- }
+ /*
+ * Prefer the GUID over the EUI64.
+ */
+ if (*(uint64_t *)drive.d_guid != 0 ||
+ *((uint64_t *)drive.d_guid + 1) != 0) {
+ len = snprintf(hdl->h_addr, sizeof (hdl->h_addr),
+ "w%02X%02X%02X%02X%02X%02X%02X%02X"
+ "%02X%02X%02X%02X%02X%02X%02X%02X",
+ drive.d_guid[0], drive.d_guid[1], drive.d_guid[2],
+ drive.d_guid[3], drive.d_guid[4], drive.d_guid[5],
+ drive.d_guid[6], drive.d_guid[7], drive.d_guid[8],
+ drive.d_guid[9], drive.d_guid[10], drive.d_guid[11],
+ drive.d_guid[12], drive.d_guid[13], drive.d_guid[14],
+ drive.d_guid[15]);
+ } else if (*(uint64_t *)drive.d_eui64 != 0) {
+ len = snprintf(hdl->h_addr, sizeof (hdl->h_addr),
+ "w%02X%02X%02X%02X%02X%02X%02X%02X",
+ drive.d_eui64[0], drive.d_eui64[1],
+ drive.d_eui64[2], drive.d_eui64[3],
+ drive.d_eui64[4], drive.d_eui64[5],
+ drive.d_eui64[6], drive.d_eui64[7]);
} else {
- if (drive.d_lun >= 0) {
- (void) snprintf(hdl->h_addr, sizeof (hdl->h_addr),
- "%X,%X", drive.d_target, drive.d_lun);
- } else {
- (void) snprintf(hdl->h_addr, sizeof (hdl->h_addr),
- "%X", drive.d_target);
- }
+ len = snprintf(hdl->h_addr, sizeof (hdl->h_addr),
+ "%X", drive.d_target);
+ }
+
+ VERIFY(len <= sizeof (hdl->h_addr));
+
+ if (drive.d_lun >= 0) {
+ (void) snprintf(hdl->h_addr + len, sizeof (hdl->h_addr) - len,
+ ",%X", drive.d_lun);
}
if (ndi_devi_alloc(dip, hdl->h_name, (pnode_t)DEVI_SID_NODEID,
diff --git a/usr/src/uts/common/io/mlxcx/mlxcx_endint.h b/usr/src/uts/common/io/mlxcx/mlxcx_endint.h
index 4ad69173c0..acc8f4216c 100644
--- a/usr/src/uts/common/io/mlxcx/mlxcx_endint.h
+++ b/usr/src/uts/common/io/mlxcx/mlxcx_endint.h
@@ -36,12 +36,10 @@
* gain a little bit of type safety when dealing with endian-swapped bitfields.
*/
-#pragma pack(1)
-typedef struct { uint16_t be_val; } uint16be_t;
-typedef struct { uint8_t be_val[3]; } uint24be_t;
-typedef struct { uint32_t be_val; } uint32be_t;
-typedef struct { uint64_t be_val; } uint64be_t;
-#pragma pack()
+typedef struct { uint16_t be_val; } __packed uint16be_t;
+typedef struct { uint8_t be_val[3]; } __packed uint24be_t;
+typedef struct { uint32_t be_val; } __packed uint32be_t;
+typedef struct { uint64_t be_val; } __packed uint64be_t;
static inline uint16_t
from_be16(uint16be_t v)
diff --git a/usr/src/uts/common/sys/blkdev.h b/usr/src/uts/common/sys/blkdev.h
index 6407f7b960..7418aaac4c 100644
--- a/usr/src/uts/common/sys/blkdev.h
+++ b/usr/src/uts/common/sys/blkdev.h
@@ -20,10 +20,9 @@
*/
/*
* Copyright 2012 DEY Storage Systems, Inc. All rights reserved.
- * Copyright 2016 Nexenta Systems, Inc. All rights reserved.
* Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright 2019 Western Digital Corporation.
* Copyright 2020 Joyent, Inc.
+ * Copyright 2022 Tintri by DDN, Inc. All rights reserved.
*/
#ifndef _SYS_BLKDEV_H
@@ -120,8 +119,10 @@ struct bd_drive {
char *d_serial;
size_t d_revision_len;
char *d_revision;
+
uint8_t d_eui64[8];
- /* Added at the end to maintain binary compatibility */
+ uint8_t d_guid[16];
+
uint32_t d_qcount;
/*
diff --git a/usr/src/uts/common/sys/debug.h b/usr/src/uts/common/sys/debug.h
index 9c91905af2..0c1625455a 100644
--- a/usr/src/uts/common/sys/debug.h
+++ b/usr/src/uts/common/sys/debug.h
@@ -133,10 +133,7 @@ _NOTE(CONSTCOND) } while (0)
/*
* Compile-time assertion. The condition 'x' must be constant.
*/
-#define CTASSERT(x) _CTASSERT(x, __LINE__)
-#define _CTASSERT(x, y) __CTASSERT(x, y)
-#define __CTASSERT(x, y) \
- typedef char __compile_time_assertion__ ## y [(x) ? 1 : -1] __unused
+#define CTASSERT(x) _Static_assert(x, "compile-time assertion failed")
#if defined(_KERNEL) || defined(_FAKE_KERNEL)
diff --git a/usr/src/uts/i86pc/vm/hat_i86.c b/usr/src/uts/i86pc/vm/hat_i86.c
index e5676e5cff..cf7f97f972 100644
--- a/usr/src/uts/i86pc/vm/hat_i86.c
+++ b/usr/src/uts/i86pc/vm/hat_i86.c
@@ -1140,8 +1140,8 @@ hat_pcp_setup(struct cpu *cpu)
*/
hati_cpu_punchin(cpu, (uintptr_t)&kdi_idt, PROT_READ);
- CTASSERT(((uintptr_t)&kpti_tramp_start % MMU_PAGESIZE) == 0);
- CTASSERT(((uintptr_t)&kpti_tramp_end % MMU_PAGESIZE) == 0);
+ VERIFY0((uintptr_t)&kpti_tramp_start % MMU_PAGESIZE);
+ VERIFY0((uintptr_t)&kpti_tramp_end % MMU_PAGESIZE);
for (va = (uintptr_t)&kpti_tramp_start;
va < (uintptr_t)&kpti_tramp_end; va += MMU_PAGESIZE) {
hati_cpu_punchin(cpu, va, PROT_READ | PROT_EXEC);
@@ -1175,8 +1175,8 @@ hat_pcp_setup(struct cpu *cpu)
}
}
- CTASSERT(((uintptr_t)&kdi_isr_start % MMU_PAGESIZE) == 0);
- CTASSERT(((uintptr_t)&kdi_isr_end % MMU_PAGESIZE) == 0);
+ VERIFY0((uintptr_t)&kdi_isr_start % MMU_PAGESIZE);
+ VERIFY0((uintptr_t)&kdi_isr_end % MMU_PAGESIZE);
for (va = (uintptr_t)&kdi_isr_start;
va < (uintptr_t)&kdi_isr_end; va += MMU_PAGESIZE) {
hati_cpu_punchin(cpu, va, PROT_READ | PROT_EXEC);