git: 00e501d720d4 - main - Update usb_timings_sysctl_handler() to accept any value for timings between 0 milliseconds and 2 seconds inclusivly. Some style fixes while at it.

Hans Petter Selasky hselasky at FreeBSD.org
Tue May 18 14:16:06 UTC 2021


The branch main has been updated by hselasky:

URL: https://cgit.FreeBSD.org/src/commit/?id=00e501d720d46386e6c8d0ebb4b3a8e98cb0390e

commit 00e501d720d46386e6c8d0ebb4b3a8e98cb0390e
Author:     Hans Petter Selasky <hselasky at FreeBSD.org>
AuthorDate: 2021-05-18 13:16:29 +0000
Commit:     Hans Petter Selasky <hselasky at FreeBSD.org>
CommitDate: 2021-05-18 13:52:41 +0000

    Update usb_timings_sysctl_handler() to accept any value for timings between
    0 milliseconds and 2 seconds inclusivly. Some style fixes while at it.
    
    The USB specification has minimum values and maximum values,
    and not only minimum values.
    
    MFC after:      1 week
    Sponsored by:   Mellanox Technologies // NVIDIA Networking
---
 sys/dev/usb/usb_debug.c | 57 +++++++++++--------------------------------------
 1 file changed, 13 insertions(+), 44 deletions(-)

diff --git a/sys/dev/usb/usb_debug.c b/sys/dev/usb/usb_debug.c
index 5b5d141508c3..5e521f7ec3a5 100644
--- a/sys/dev/usb/usb_debug.c
+++ b/sys/dev/usb/usb_debug.c
@@ -249,71 +249,40 @@ unsigned int usb_extra_power_up_time	= USB_EXTRA_POWER_UP_TIME;
 /*------------------------------------------------------------------------*
  *	usb_timings_sysctl_handler
  *
- * This function updates timings variables, adjusting them where necessary.
+ * This function is used to update USB timing variables.
  *------------------------------------------------------------------------*/
 static int usb_timings_sysctl_handler(SYSCTL_HANDLER_ARGS)
 {
 	int error = 0;
-	unsigned int val;
+	unsigned val;
 
 	/*
 	 * Attempt to get a coherent snapshot by making a copy of the data.
 	 */
 	if (arg1)
-		val = *(unsigned int *)arg1;
+		val = *(unsigned *)arg1;
 	else
 		val = arg2;
-	error = SYSCTL_OUT(req, &val, sizeof(int));
+	error = SYSCTL_OUT(req, &val, sizeof(unsigned));
 	if (error || !req->newptr)
 		return (error);
 
 	if (!arg1)
-		return EPERM;
+		return (EPERM);
 
-	error = SYSCTL_IN(req, &val, sizeof(unsigned int));
+	error = SYSCTL_IN(req, &val, sizeof(unsigned));
 	if (error)
 		return (error);
 
 	/*
-	 * Now make sure the values are decent, and certainly no lower than
-	 * what the USB spec prescribes.
+	 * Make sure the specified value is not too big. Accept any
+	 * value from 0 milliseconds to 2 seconds inclusivly for all
+	 * parameters.
 	 */
-	unsigned int *p = (unsigned int *)arg1;
-	if (p == &usb_port_reset_delay) {
-		if (val < USB_PORT_RESET_DELAY_SPEC)
-			return (EINVAL);
-	} else if (p == &usb_port_root_reset_delay) {
-		if (val < USB_PORT_ROOT_RESET_DELAY_SPEC)
-			return (EINVAL);
-	} else if (p == &usb_port_reset_recovery) {
-		if (val < USB_PORT_RESET_RECOVERY_SPEC)
-			return (EINVAL);
-	} else if (p == &usb_port_powerup_delay) {
-		if (val < USB_PORT_POWERUP_DELAY_SPEC)
-			return (EINVAL);
-	} else if (p == &usb_port_resume_delay) {
-		if (val < USB_PORT_RESUME_DELAY_SPEC)
-			return (EINVAL);
-	} else if (p == &usb_set_address_settle) {
-		if (val < USB_SET_ADDRESS_SETTLE_SPEC)
-			return (EINVAL);
-	} else if (p == &usb_resume_delay) {
-		if (val < USB_RESUME_DELAY_SPEC)
-			return (EINVAL);
-	} else if (p == &usb_resume_wait) {
-		if (val < USB_RESUME_WAIT_SPEC)
-			return (EINVAL);
-	} else if (p == &usb_resume_recovery) {
-		if (val < USB_RESUME_RECOVERY_SPEC)
-			return (EINVAL);
-	} else if (p == &usb_extra_power_up_time) {
-		if (val < USB_EXTRA_POWER_UP_TIME_SPEC)
-			return (EINVAL);
-	} else {
-		/* noop */
-	}
+	if (val > 2000)
+		return (EINVAL);
 
-	*p = val;
-	return 0;
+	*(unsigned *)arg1 = val;
+	return (0);
 }
 #endif


More information about the dev-commits-src-all mailing list