tty: rocket: reduce stack usage
authorSudip Mukherjee <sudipm.mukherjee@gmail.com>
Fri, 18 Oct 2019 16:17:12 +0000 (17:17 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 4 Nov 2019 16:42:28 +0000 (17:42 +0100)
The build of xtensa allmodconfig gives warning of:
In function 'get_ports.isra.0':
warning: the frame size of 1040 bytes is larger than 1024 bytes

Signed-off-by: Sudip Mukherjee <sudipm.mukherjee@gmail.com>
Acked-by: Jiri Slaby <jslaby@suse.cz>
Link: https://lore.kernel.org/r/20191018161712.27807-1-sudipm.mukherjee@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/rocket.c

index 5ba6816ebf8110dd4aaaf1e9f37b259fadd9508f..fbaa4ec85560e661e22cd25a67169a00f4225ea2 100644 (file)
@@ -1222,22 +1222,28 @@ static int set_config(struct tty_struct *tty, struct r_port *info,
  */
 static int get_ports(struct r_port *info, struct rocket_ports __user *retports)
 {
-       struct rocket_ports tmp;
-       int board;
+       struct rocket_ports *tmp;
+       int board, ret = 0;
 
-       memset(&tmp, 0, sizeof (tmp));
-       tmp.tty_major = rocket_driver->major;
+       tmp = kzalloc(sizeof(*tmp), GFP_KERNEL);
+       if (!tmp)
+               return -ENOMEM;
+
+       tmp->tty_major = rocket_driver->major;
 
        for (board = 0; board < 4; board++) {
-               tmp.rocketModel[board].model = rocketModel[board].model;
-               strcpy(tmp.rocketModel[board].modelString, rocketModel[board].modelString);
-               tmp.rocketModel[board].numPorts = rocketModel[board].numPorts;
-               tmp.rocketModel[board].loadrm2 = rocketModel[board].loadrm2;
-               tmp.rocketModel[board].startingPortNumber = rocketModel[board].startingPortNumber;
-       }
-       if (copy_to_user(retports, &tmp, sizeof (*retports)))
-               return -EFAULT;
-       return 0;
+               tmp->rocketModel[board].model = rocketModel[board].model;
+               strcpy(tmp->rocketModel[board].modelString,
+                      rocketModel[board].modelString);
+               tmp->rocketModel[board].numPorts = rocketModel[board].numPorts;
+               tmp->rocketModel[board].loadrm2 = rocketModel[board].loadrm2;
+               tmp->rocketModel[board].startingPortNumber =
+                       rocketModel[board].startingPortNumber;
+       }
+       if (copy_to_user(retports, tmp, sizeof(*retports)))
+               ret = -EFAULT;
+       kfree(tmp);
+       return ret;
 }
 
 static int reset_rm2(struct r_port *info, void __user *arg)