Index: config.5 =================================================================== RCS file: /cvsroot/src/usr.bin/config/config.5,v retrieving revision 1.34 diff -p -u -r1.34 config.5 --- config.5 1 Sep 2015 13:42:48 -0000 1.34 +++ config.5 15 Jan 2016 14:56:23 -0000 @@ -662,6 +662,9 @@ and parameters can be wildcarded with .Dq \&? to let the kernel automatically discover those values. +The +.Ar device +can also be specified as a quoted specification string. .Pp At least one .Ic config Index: gram.y =================================================================== RCS file: /cvsroot/src/usr.bin/config/gram.y,v retrieving revision 1.52 diff -p -u -r1.52 gram.y --- gram.y 1 Sep 2015 13:42:48 -0000 1.52 +++ gram.y 15 Jan 2016 14:56:23 -0000 @@ -103,6 +103,7 @@ DECL_ALLOCWRAP(condexpr); #define new_nx(n, x) new0(n, NULL, NULL, 0, x) #define new_ns(n, s) new0(n, s, NULL, 0, NULL) #define new_si(s, i) new0(NULL, s, NULL, i, NULL) +#define new_spi(s, p, i) new0(NULL, s, p, i, NULL) #define new_nsi(n,s,i) new0(n, s, NULL, i, NULL) #define new_np(n, p) new0(n, NULL, p, 0, NULL) #define new_s(s) new0(NULL, s, NULL, 0, NULL) @@ -908,6 +909,8 @@ root_spec: dev_spec: '?' { $$ = new_si(intern("?"), (long long)NODEV); } + | QSTRING { $$ = new_spi($1, intern("spec"), + (long long)NODEV); } | WORD { $$ = new_si($1, (long long)NODEV); } | major_minor { $$ = new_si(NULL, $1); } Index: sem.c =================================================================== RCS file: /cvsroot/src/usr.bin/config/sem.c,v retrieving revision 1.73 diff -p -u -r1.73 sem.c --- sem.c 29 Aug 2015 07:24:49 -0000 1.73 +++ sem.c 15 Jan 2016 14:56:23 -0000 @@ -928,6 +928,12 @@ resolve(struct nvlist **nvp, const char */ return (0); + if (nv->nv_ptr != NULL && strcmp(nv->nv_ptr, "spec") == 0) + /* + * spec string, interpreted by kernel + */ + return (0); + /* * The normal case: things like "ra2b". Check for partition * suffix, remove it if there, and split into name ("ra") and