]> git.baikalelectronics.ru Git - kernel.git/commitdiff
staging: axis-fifo: initialize timeouts in init only
authorKhadija Kamran <kamrankhadijadj@gmail.com>
Thu, 16 Mar 2023 20:09:00 +0000 (01:09 +0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 24 May 2023 16:32:40 +0000 (17:32 +0100)
[ Upstream commit 752cbd8f191678e86aa754f795546b7f06b7f171 ]

Initialize the module parameters, read_timeout and write_timeout once in
init().

Module parameters can only be set once and cannot be modified later, so we
don't need to evaluate them again when passing the parameters to
wait_event_interruptible_timeout().

Convert datatype of {read,write}_timeout from 'int' to 'long int' because
implicit conversion of 'long int' to 'int' in statement
'{read,write}_timeout = MAX_SCHEDULE_TIMEOUT' results in an overflow.

Change format specifier for {read,write}_timeout from %i to %li.

Reviewed-by: Fabio M. De Francesco <fmdefrancesco@gmail.com>
Suggested-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Khadija Kamran <kamrankhadijadj@gmail.com>
Link: https://lore.kernel.org/r/ZBN3XAsItCiTk7CV@khadija-virtual-machine
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/staging/axis-fifo/axis-fifo.c

index dfd2b357f484b43ac783bcced80b5be02de95402..0a85ea667a1b58928ca357ed050dcdba2de6b9ad 100644 (file)
  *           globals
  * ----------------------------
  */
-static int read_timeout = 1000; /* ms to wait before read() times out */
-static int write_timeout = 1000; /* ms to wait before write() times out */
+static long read_timeout = 1000; /* ms to wait before read() times out */
+static long write_timeout = 1000; /* ms to wait before write() times out */
 
 /* ----------------------------
  * module command-line arguments
  * ----------------------------
  */
 
-module_param(read_timeout, int, 0444);
+module_param(read_timeout, long, 0444);
 MODULE_PARM_DESC(read_timeout, "ms to wait before blocking read() timing out; set to -1 for no timeout");
-module_param(write_timeout, int, 0444);
+module_param(write_timeout, long, 0444);
 MODULE_PARM_DESC(write_timeout, "ms to wait before blocking write() timing out; set to -1 for no timeout");
 
 /* ----------------------------
@@ -384,9 +384,7 @@ static ssize_t axis_fifo_read(struct file *f, char __user *buf,
                mutex_lock(&fifo->read_lock);
                ret = wait_event_interruptible_timeout(fifo->read_queue,
                        ioread32(fifo->base_addr + XLLF_RDFO_OFFSET),
-                                (read_timeout >= 0) ?
-                                 msecs_to_jiffies(read_timeout) :
-                                 MAX_SCHEDULE_TIMEOUT);
+                       read_timeout);
 
                if (ret <= 0) {
                        if (ret == 0) {
@@ -528,9 +526,7 @@ static ssize_t axis_fifo_write(struct file *f, const char __user *buf,
                ret = wait_event_interruptible_timeout(fifo->write_queue,
                        ioread32(fifo->base_addr + XLLF_TDFV_OFFSET)
                                 >= words_to_write,
-                                (write_timeout >= 0) ?
-                                 msecs_to_jiffies(write_timeout) :
-                                 MAX_SCHEDULE_TIMEOUT);
+                       write_timeout);
 
                if (ret <= 0) {
                        if (ret == 0) {
@@ -948,7 +944,17 @@ static struct platform_driver axis_fifo_driver = {
 
 static int __init axis_fifo_init(void)
 {
-       pr_info("axis-fifo driver loaded with parameters read_timeout = %i, write_timeout = %i\n",
+       if (read_timeout >= 0)
+               read_timeout = msecs_to_jiffies(read_timeout);
+       else
+               read_timeout = MAX_SCHEDULE_TIMEOUT;
+
+       if (write_timeout >= 0)
+               write_timeout = msecs_to_jiffies(write_timeout);
+       else
+               write_timeout = MAX_SCHEDULE_TIMEOUT;
+
+       pr_info("axis-fifo driver loaded with parameters read_timeout = %li, write_timeout = %li\n",
                read_timeout, write_timeout);
        return platform_driver_register(&axis_fifo_driver);
 }