USB: Remove large struct from the stack in USB storage isd200 driver
authorIan Munsie <imunsie@au.ibm.com>
Wed, 3 Mar 2010 00:00:37 +0000 (11:00 +1100)
committerGreg Kroah-Hartman <gregkh@suse.de>
Thu, 20 May 2010 20:21:31 +0000 (13:21 -0700)
The compiler throws the following warning when compiling for a PowerPC 64
bit machine:

drivers/usb/storage/isd200.c:580: warning: the frame size of 2208 bytes is larger than 2048 bytes

There is a struct scsi_device which is placed on the stack and is
largely responsible for such wastage. The struct is just a dummy struct
filled with NULLs and set as the scsi_cmnd->device to make the
usb_stor_Bulk_transport function happy.

This patch makes the struct static, so that it is never placed onto the
stack and silences the compiler warning.

Signed-off-by: Ian Munsie <imunsie@au.ibm.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/usb/storage/isd200.c

index fdba2f69d4c9ed2d390c69638f37e328960aab2b..e9cbc1467f76428749adb952c462efdced0e5608 100644 (file)
@@ -490,13 +490,13 @@ static int isd200_action( struct us_data *us, int action,
                          void* pointer, int value )
 {
        union ata_cdb ata;
-       struct scsi_device srb_dev;
+       /* static to prevent this large struct being placed on the valuable stack */
+       static struct scsi_device srb_dev;
        struct isd200_info *info = (struct isd200_info *)us->extra;
        struct scsi_cmnd *srb = &info->srb;
        int status;
 
        memset(&ata, 0, sizeof(ata));
-       memset(&srb_dev, 0, sizeof(srb_dev));
        srb->cmnd = info->cmnd;
        srb->device = &srb_dev;
        ++srb->serial_number;