iflib: mark isc_driver_version as constant
From Jake: The iflib core never modifies the isc_driver_version string. Allow drivers to safely assign pointers to constant buffers by marking this parameter const. Submitted by: Jacob Keller <jacob.e.keller@intel.com> Reviewed by: erj@, gallatin@, jhb@ MFC after: 1 week Sponsored by: Intel Corporation Differential Revision: https://reviews.freebsd.org/D19577
This commit is contained in:
parent
312437815a
commit
10a1e981d4
@ -48,6 +48,7 @@
|
|||||||
.Nm SYSCTL_ADD_SBINTIME_MSEC ,
|
.Nm SYSCTL_ADD_SBINTIME_MSEC ,
|
||||||
.Nm SYSCTL_ADD_SBINTIME_USEC ,
|
.Nm SYSCTL_ADD_SBINTIME_USEC ,
|
||||||
.Nm SYSCTL_ADD_STRING ,
|
.Nm SYSCTL_ADD_STRING ,
|
||||||
|
.Nm SYSCTL_ADD_CONST_STRING ,
|
||||||
.Nm SYSCTL_ADD_STRUCT ,
|
.Nm SYSCTL_ADD_STRUCT ,
|
||||||
.Nm SYSCTL_ADD_U8 ,
|
.Nm SYSCTL_ADD_U8 ,
|
||||||
.Nm SYSCTL_ADD_U16 ,
|
.Nm SYSCTL_ADD_U16 ,
|
||||||
@ -82,6 +83,7 @@
|
|||||||
.Nm SYSCTL_SBINTIME_MSEC ,
|
.Nm SYSCTL_SBINTIME_MSEC ,
|
||||||
.Nm SYSCTL_SBINTIME_USEC ,
|
.Nm SYSCTL_SBINTIME_USEC ,
|
||||||
.Nm SYSCTL_STRING ,
|
.Nm SYSCTL_STRING ,
|
||||||
|
.Nm SYSCTL_CONST_STRING ,
|
||||||
.Nm SYSCTL_STRUCT ,
|
.Nm SYSCTL_STRUCT ,
|
||||||
.Nm SYSCTL_U8 ,
|
.Nm SYSCTL_U8 ,
|
||||||
.Nm SYSCTL_U16 ,
|
.Nm SYSCTL_U16 ,
|
||||||
@ -291,6 +293,16 @@
|
|||||||
.Fa "const char *descr"
|
.Fa "const char *descr"
|
||||||
.Fc
|
.Fc
|
||||||
.Ft struct sysctl_oid *
|
.Ft struct sysctl_oid *
|
||||||
|
.Fo SYSCTL_ADD_CONST_STRING
|
||||||
|
.Fa "struct sysctl_ctx_list *ctx"
|
||||||
|
.Fa "struct sysctl_oid_list *parent"
|
||||||
|
.Fa "int number"
|
||||||
|
.Fa "const char *name"
|
||||||
|
.Fa "int ctlflags"
|
||||||
|
.Fa "const char *ptr"
|
||||||
|
.Fa "const char *descr"
|
||||||
|
.Fc
|
||||||
|
.Ft struct sysctl_oid *
|
||||||
.Fo SYSCTL_ADD_STRUCT
|
.Fo SYSCTL_ADD_STRUCT
|
||||||
.Fa "struct sysctl_ctx_list *ctx"
|
.Fa "struct sysctl_ctx_list *ctx"
|
||||||
.Fa "struct sysctl_oid_list *parent"
|
.Fa "struct sysctl_oid_list *parent"
|
||||||
@ -443,6 +455,7 @@
|
|||||||
.Fn SYSCTL_SBINTIME_MSEC parent number name ctlflags ptr descr
|
.Fn SYSCTL_SBINTIME_MSEC parent number name ctlflags ptr descr
|
||||||
.Fn SYSCTL_SBINTIME_USEC parent number name ctlflags ptr descr
|
.Fn SYSCTL_SBINTIME_USEC parent number name ctlflags ptr descr
|
||||||
.Fn SYSCTL_STRING parent number name ctlflags arg len descr
|
.Fn SYSCTL_STRING parent number name ctlflags arg len descr
|
||||||
|
.Fn SYSCTL_CONST_STRING parent number name ctlflags arg descr
|
||||||
.Fn SYSCTL_STRUCT parent number name ctlflags ptr struct_type descr
|
.Fn SYSCTL_STRUCT parent number name ctlflags ptr struct_type descr
|
||||||
.Fn SYSCTL_U8 parent number name ctlflags ptr val descr
|
.Fn SYSCTL_U8 parent number name ctlflags ptr val descr
|
||||||
.Fn SYSCTL_U16 parent number name ctlflags ptr val descr
|
.Fn SYSCTL_U16 parent number name ctlflags ptr val descr
|
||||||
@ -607,6 +620,11 @@ If the
|
|||||||
.Fa len
|
.Fa len
|
||||||
argument in zero, the string length is computed at every access to the OID using
|
argument in zero, the string length is computed at every access to the OID using
|
||||||
.Xr strlen 3 .
|
.Xr strlen 3 .
|
||||||
|
Use the
|
||||||
|
.Fn SYSCTL_CONST_STRING
|
||||||
|
macro or the
|
||||||
|
.Fn SYSCTL_ADD_CONST_STRING
|
||||||
|
function to add a sysctl for a constant string.
|
||||||
.Sh CREATING OPAQUE SYSCTLS
|
.Sh CREATING OPAQUE SYSCTLS
|
||||||
The
|
The
|
||||||
.Fn SYSCTL_OPAQUE
|
.Fn SYSCTL_OPAQUE
|
||||||
@ -658,6 +676,7 @@ Static sysctls are declared using one of the
|
|||||||
.Fn SYSCTL_SBINTIME_MSEC ,
|
.Fn SYSCTL_SBINTIME_MSEC ,
|
||||||
.Fn SYSCTL_SBINTIME_USEC ,
|
.Fn SYSCTL_SBINTIME_USEC ,
|
||||||
.Fn SYSCTL_STRING ,
|
.Fn SYSCTL_STRING ,
|
||||||
|
.Fn SYSCTL_CONST_STRING ,
|
||||||
.Fn SYSCTL_STRUCT ,
|
.Fn SYSCTL_STRUCT ,
|
||||||
.Fn SYSCTL_U8 ,
|
.Fn SYSCTL_U8 ,
|
||||||
.Fn SYSCTL_U16 ,
|
.Fn SYSCTL_U16 ,
|
||||||
@ -690,6 +709,7 @@ Dynamic nodes are created using one of the
|
|||||||
.Fn SYSCTL_ADD_SBINTIME_MSEC ,
|
.Fn SYSCTL_ADD_SBINTIME_MSEC ,
|
||||||
.Fn SYSCTL_ADD_SBINTIME_USEC ,
|
.Fn SYSCTL_ADD_SBINTIME_USEC ,
|
||||||
.Fn SYSCTL_ADD_STRING ,
|
.Fn SYSCTL_ADD_STRING ,
|
||||||
|
.Fn SYSCTL_ADD_CONST_STRING ,
|
||||||
.Fn SYSCTL_ADD_STRUCT ,
|
.Fn SYSCTL_ADD_STRUCT ,
|
||||||
.Fn SYSCTL_ADD_U8 ,
|
.Fn SYSCTL_ADD_U8 ,
|
||||||
.Fn SYSCTL_ADD_U16 ,
|
.Fn SYSCTL_ADD_U16 ,
|
||||||
|
@ -6257,8 +6257,8 @@ iflib_add_device_sysctl_pre(if_ctx_t ctx)
|
|||||||
CTLFLAG_RD, NULL, "IFLIB fields");
|
CTLFLAG_RD, NULL, "IFLIB fields");
|
||||||
oid_list = SYSCTL_CHILDREN(node);
|
oid_list = SYSCTL_CHILDREN(node);
|
||||||
|
|
||||||
SYSCTL_ADD_STRING(ctx_list, oid_list, OID_AUTO, "driver_version",
|
SYSCTL_ADD_CONST_STRING(ctx_list, oid_list, OID_AUTO, "driver_version",
|
||||||
CTLFLAG_RD, ctx->ifc_sctx->isc_driver_version, 0,
|
CTLFLAG_RD, ctx->ifc_sctx->isc_driver_version,
|
||||||
"driver version");
|
"driver version");
|
||||||
|
|
||||||
SYSCTL_ADD_U16(ctx_list, oid_list, OID_AUTO, "override_ntxqs",
|
SYSCTL_ADD_U16(ctx_list, oid_list, OID_AUTO, "override_ntxqs",
|
||||||
|
@ -248,7 +248,7 @@ struct if_shared_ctx {
|
|||||||
|
|
||||||
/* fields necessary for probe */
|
/* fields necessary for probe */
|
||||||
pci_vendor_info_t *isc_vendor_info;
|
pci_vendor_info_t *isc_vendor_info;
|
||||||
char *isc_driver_version;
|
const char *isc_driver_version;
|
||||||
/* optional function to transform the read values to match the table*/
|
/* optional function to transform the read values to match the table*/
|
||||||
void (*isc_parse_devinfo) (uint16_t *device_id, uint16_t *subvendor_id,
|
void (*isc_parse_devinfo) (uint16_t *device_id, uint16_t *subvendor_id,
|
||||||
uint16_t *subdevice_id, uint16_t *rev_id);
|
uint16_t *subdevice_id, uint16_t *rev_id);
|
||||||
|
@ -354,6 +354,25 @@ TAILQ_HEAD(sysctl_ctx_list, sysctl_ctx_entry);
|
|||||||
NULL); \
|
NULL); \
|
||||||
})
|
})
|
||||||
|
|
||||||
|
/* Oid for a constant '\0' terminated string. */
|
||||||
|
#define SYSCTL_CONST_STRING(parent, nbr, name, access, arg, descr) \
|
||||||
|
SYSCTL_OID(parent, nbr, name, CTLTYPE_STRING|(access), \
|
||||||
|
__DECONST(char *, arg), 0, sysctl_handle_string, "A", descr); \
|
||||||
|
CTASSERT(!(access & CTLFLAG_WR)); \
|
||||||
|
CTASSERT(((access) & CTLTYPE) == 0 || \
|
||||||
|
((access) & SYSCTL_CT_ASSERT_MASK) == CTLTYPE_STRING)
|
||||||
|
|
||||||
|
#define SYSCTL_ADD_CONST_STRING(ctx, parent, nbr, name, access, arg, descr) \
|
||||||
|
({ \
|
||||||
|
char *__arg = __DECONST(char *, arg); \
|
||||||
|
CTASSERT(!(access & CTLFLAG_WR)); \
|
||||||
|
CTASSERT(((access) & CTLTYPE) == 0 || \
|
||||||
|
((access) & SYSCTL_CT_ASSERT_MASK) == CTLTYPE_STRING); \
|
||||||
|
sysctl_add_oid(ctx, parent, nbr, name, CTLTYPE_STRING|(access), \
|
||||||
|
__arg, 0, sysctl_handle_string, "A", __DESCR(descr), \
|
||||||
|
NULL); \
|
||||||
|
})
|
||||||
|
|
||||||
/* Oid for a bool. If ptr is NULL, val is returned. */
|
/* Oid for a bool. If ptr is NULL, val is returned. */
|
||||||
#define SYSCTL_NULL_BOOL_PTR ((bool *)NULL)
|
#define SYSCTL_NULL_BOOL_PTR ((bool *)NULL)
|
||||||
#define SYSCTL_BOOL(parent, nbr, name, access, ptr, val, descr) \
|
#define SYSCTL_BOOL(parent, nbr, name, access, ptr, val, descr) \
|
||||||
|
Loading…
x
Reference in New Issue
Block a user