Const poison the command interface

Make the pointers we pass into the commands const, also make the
linker set mirrors const.

Suggested by: cem@
Sponsored by: Netflix
Differential Revision: https://reviews.freebsd.org/D18459
This commit is contained in:
imp 2018-12-06 22:58:42 +00:00
parent 5503f79902
commit e1f641b692
12 changed files with 41 additions and 39 deletions

View File

@ -60,7 +60,7 @@ ns_get_sector_size(struct nvme_namespace_data *nsdata)
}
static void
devlist(struct nvme_function *nf, int argc, char *argv[])
devlist(const struct nvme_function *nf, int argc, char *argv[])
{
struct nvme_controller_data cdata;
struct nvme_namespace_data nsdata;

View File

@ -174,7 +174,7 @@ activate_firmware(int fd, int slot, int activate_action)
}
static void
firmware(struct nvme_function *nf, int argc, char *argv[])
firmware(const struct nvme_function *nf, int argc, char *argv[])
{
int fd = -1, slot = 0;
int a_flag, s_flag, f_flag;

View File

@ -47,7 +47,7 @@ __FBSDID("$FreeBSD$");
"format [-f fmt] [-m mset] [-p pi] [-l pil] [-E] [-C] <controller id|namespace id>\n"
static void
format(struct nvme_function *nf, int argc, char *argv[])
format(const struct nvme_function *nf, int argc, char *argv[])
{
struct nvme_controller_data cd;
struct nvme_namespace_data nsd;

View File

@ -150,7 +150,7 @@ print_namespace(struct nvme_namespace_data *nsdata)
}
static void
identify_ctrlr(struct nvme_function *nf, int argc, char *argv[])
identify_ctrlr(const struct nvme_function *nf, int argc, char *argv[])
{
struct nvme_controller_data cdata;
int ch, fd, hexflag = 0, hexlength;
@ -197,7 +197,7 @@ identify_ctrlr(struct nvme_function *nf, int argc, char *argv[])
}
static void
identify_ns(struct nvme_function *nf,int argc, char *argv[])
identify_ns(const struct nvme_function *nf,int argc, char *argv[])
{
struct nvme_namespace_data nsdata;
char path[64];
@ -261,7 +261,7 @@ identify_ns(struct nvme_function *nf,int argc, char *argv[])
}
static void
identify(struct nvme_function *nf, int argc, char *argv[])
identify(const struct nvme_function *nf, int argc, char *argv[])
{
char *target;

View File

@ -326,7 +326,7 @@ NVME_LOGPAGE(fw,
static void
logpage_help(void)
{
struct logpage_function **f;
const struct logpage_function * const *f;
const char *v;
fprintf(stderr, "\n");
@ -341,7 +341,7 @@ logpage_help(void)
}
static void
logpage(struct nvme_function *nf, int argc, char *argv[])
logpage(const struct nvme_function *nf, int argc, char *argv[])
{
int fd;
int log_page = 0, pageflag = false;
@ -352,7 +352,7 @@ logpage(struct nvme_function *nf, int argc, char *argv[])
uint32_t nsid, size;
void *buf;
const char *vendor = NULL;
struct logpage_function **f;
const struct logpage_function * const *f;
struct nvme_controller_data cdata;
print_fn_t print_fn;
uint8_t ns_smart;

View File

@ -60,10 +60,10 @@ NVME_CMD_DECLARE(ns, struct nvme_function);
#define NSDETACH_USAGE \
"ns detach -n nsid [-c ctrlrid] nvmeN\n"
void nscreate(struct nvme_function *nf, int argc, char *argv[]);
void nsdelete(struct nvme_function *nf, int argc, char *argv[]);
void nsattach(struct nvme_function *nf, int argc, char *argv[]);
void nsdetach(struct nvme_function *nf, int argc, char *argv[]);
static void nscreate(const struct nvme_function *nf, int argc, char *argv[]);
static void nsdelete(const struct nvme_function *nf, int argc, char *argv[]);
static void nsattach(const struct nvme_function *nf, int argc, char *argv[]);
static void nsdetach(const struct nvme_function *nf, int argc, char *argv[]);
NVME_COMMAND(ns, create, nscreate, NSCREATE_USAGE);
NVME_COMMAND(ns, delete, nsdelete, NSDELETE_USAGE);
@ -109,8 +109,8 @@ get_res_str(uint16_t res)
* 0x16 = Namespace ID unavailable (number namespaces exceeded)
* 0xb = Thin Provisioning Not supported
*/
void
nscreate(struct nvme_function *nf, int argc, char *argv[])
static void
nscreate(const struct nvme_function *nf, int argc, char *argv[])
{
struct nvme_pt_command pt;
struct nvme_controller_data cd;
@ -204,8 +204,8 @@ nscreate(struct nvme_function *nf, int argc, char *argv[])
exit(0);
}
void
nsdelete(struct nvme_function *nf, int argc, char *argv[])
static void
nsdelete(const struct nvme_function *nf, int argc, char *argv[])
{
struct nvme_pt_command pt;
struct nvme_controller_data cd;
@ -271,8 +271,8 @@ nsdelete(struct nvme_function *nf, int argc, char *argv[])
*
* 0x2 Invalid Field can occur if ctrlrid d.n.e in system.
*/
void
nsattach(struct nvme_function *nf, int argc, char *argv[])
static void
nsattach(const struct nvme_function *nf, int argc, char *argv[])
{
struct nvme_pt_command pt;
struct nvme_controller_data cd;
@ -350,8 +350,8 @@ nsattach(struct nvme_function *nf, int argc, char *argv[])
exit(0);
}
void
nsdetach(struct nvme_function *nf, int argc, char *argv[])
static void
nsdetach(const struct nvme_function *nf, int argc, char *argv[])
{
struct nvme_pt_command pt;
struct nvme_controller_data cd;
@ -437,7 +437,7 @@ nsdetach(struct nvme_function *nf, int argc, char *argv[])
}
static void
ns(struct nvme_function *nf __unused, int argc, char *argv[])
ns(const struct nvme_function *nf __unused, int argc, char *argv[])
{
DISPATCH(argc, argv, ns);

View File

@ -75,7 +75,7 @@ print_usage(const struct nvme_function *f)
}
static void
gen_usage_set(struct nvme_function **f, struct nvme_function **flimit)
gen_usage_set(const struct nvme_function * const *f, const struct nvme_function * const *flimit)
{
fprintf(stderr, "usage:\n");
@ -96,10 +96,10 @@ usage(const struct nvme_function *f)
}
void
dispatch_set(int argc, char *argv[], struct nvme_function **tbl,
struct nvme_function **tbl_limit)
dispatch_set(int argc, char *argv[], const struct nvme_function * const *tbl,
const struct nvme_function * const *tbl_limit)
{
struct nvme_function **f = tbl;
const struct nvme_function * const *f = tbl;
if (argv[1] == NULL) {
gen_usage_set(tbl, tbl_limit);

View File

@ -35,7 +35,7 @@
#include <dev/nvme/nvme.h>
struct nvme_function;
typedef void (*nvme_fn_t)(struct nvme_function *nf, int argc, char *argv[]);
typedef void (*nvme_fn_t)(const struct nvme_function *nf, int argc, char *argv[]);
struct nvme_function {
const char *name;
@ -96,8 +96,8 @@ struct set_concat {
void set_concat_add(struct set_concat *m, void *begin, void *end);
#define SET_CONCAT_DEF(set, t) \
static struct set_concat set ## _concat; \
static inline t **set ## _begin() { return ((t **)set ## _concat.begin); } \
static inline t **set ## _limit() { return ((t **)set ## _concat.limit); } \
static inline const t * const *set ## _begin() { return ((const t * const *)set ## _concat.begin); } \
static inline const t * const *set ## _limit() { return ((const t * const *)set ## _concat.limit); } \
void add_to_ ## set(t **b, t **e) \
{ \
set_concat_add(&set ## _concat, b, e); \
@ -120,11 +120,13 @@ void read_logpage(int fd, uint8_t log_page, uint32_t nsid, void *payload,
void print_temp(uint16_t t);
void usage(const struct nvme_function *f);
void dispatch_set(int argc, char *argv[], struct nvme_function **tbl,
struct nvme_function **tbl_limit);
void dispatch_set(int argc, char *argv[], const struct nvme_function * const *tbl,
const struct nvme_function * const *tbl_limit);
#define DISPATCH(argc, argv, set) \
dispatch_set(argc, argv, NVME_CMD_BEGIN(set), NVME_CMD_LIMIT(set))
#define DISPATCH(argc, argv, set) \
dispatch_set(argc, argv, \
(const struct nvme_function * const *)NVME_CMD_BEGIN(set), \
(const struct nvme_function * const *)NVME_CMD_LIMIT(set)) \
/* Utility Routines */
/*

View File

@ -75,7 +75,7 @@ print_perftest(struct nvme_io_test *io_test, bool perthread)
}
static void
perftest(struct nvme_function *nf, int argc, char *argv[])
perftest(const struct nvme_function *nf, int argc, char *argv[])
{
struct nvme_io_test io_test;
int fd;

View File

@ -129,7 +129,7 @@ power_show(int fd)
}
static void
power(struct nvme_function *nf, int argc, char *argv[])
power(const struct nvme_function *nf, int argc, char *argv[])
{
struct nvme_controller_data cdata;
int ch, listflag = 0, powerflag = 0, power_val = 0, fd;

View File

@ -45,7 +45,7 @@ __FBSDID("$FreeBSD$");
"reset <controller id>\n"
static void
reset(struct nvme_function *nf, int argc, char *argv[])
reset(const struct nvme_function *nf, int argc, char *argv[])
{
int ch, fd;

View File

@ -52,7 +52,7 @@ NVME_CMD_DECLARE(wdc, struct nvme_function);
#define WDC_NVME_CAP_DIAG_OPCODE 0xe6
#define WDC_NVME_CAP_DIAG_CMD 0x0000
static void wdc_cap_diag(struct nvme_function *nf, int argc, char *argv[]);
static void wdc_cap_diag(const struct nvme_function *nf, int argc, char *argv[]);
#define WDC_CAP_DIAG_USAGE "wdc cap-diag [-o path-template]\n"
@ -154,7 +154,7 @@ wdc_do_dump(int fd, char *tmpl, const char *suffix, uint32_t opcode,
}
static void
wdc_cap_diag(struct nvme_function *nf, int argc, char *argv[])
wdc_cap_diag(const struct nvme_function *nf, int argc, char *argv[])
{
char path_tmpl[MAXPATHLEN];
int ch, fd;
@ -183,7 +183,7 @@ wdc_cap_diag(struct nvme_function *nf, int argc, char *argv[])
}
static void
wdc(struct nvme_function *nf __unused, int argc, char *argv[])
wdc(const struct nvme_function *nf __unused, int argc, char *argv[])
{
DISPATCH(argc, argv, wdc);