lkml.org 
[lkml]   [2005]   [Jan]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    SubjectRe: [PATCH] PCI patches for 2.6.10
    Date
    From
    ChangeSet 1.1938.447.16, 2004/12/21 16:48:08-08:00, rddunlap@osdl.org

    [PATCH] cpqphp: reduce stack usage

    Reduce local stack usage in cpqhp_set_irq()
    from 1028 bytes to 12 bytes (on x86-32).

    This was the 16th largest offender according to my
    recent 'make checkstack' run (and 2 other patches
    for large ones have recently been submitted).

    Signed-off-by: Randy Dunlap <rddunlap@osdl.org>
    Signed-off-by: Greg Kroah-Hartman <greg@kroah.com>


    drivers/pci/hotplug/cpqphp_pci.c | 30 +++++++++++++++++++++---------
    1 files changed, 21 insertions(+), 9 deletions(-)


    diff -Nru a/drivers/pci/hotplug/cpqphp_pci.c b/drivers/pci/hotplug/cpqphp_pci.c
    --- a/drivers/pci/hotplug/cpqphp_pci.c 2005-01-10 09:00:02 -08:00
    +++ b/drivers/pci/hotplug/cpqphp_pci.c 2005-01-10 09:00:02 -08:00
    @@ -151,18 +151,29 @@
    */
    int cpqhp_set_irq (u8 bus_num, u8 dev_num, u8 int_pin, u8 irq_num)
    {
    - int rc;
    - u16 temp_word;
    - struct pci_dev fakedev;
    - struct pci_bus fakebus;
    + int rc = 0;

    if (cpqhp_legacy_mode) {
    - fakedev.devfn = dev_num << 3;
    - fakedev.bus = &fakebus;
    - fakebus.number = bus_num;
    + struct pci_dev *fakedev;
    + struct pci_bus *fakebus;
    + u16 temp_word;
    +
    + fakedev = kmalloc(sizeof(*fakedev), GFP_KERNEL);
    + fakebus = kmalloc(sizeof(*fakebus), GFP_KERNEL);
    + if (!fakedev || !fakebus) {
    + kfree(fakedev);
    + kfree(fakebus);
    + return -ENOMEM;
    + }
    +
    + fakedev->devfn = dev_num << 3;
    + fakedev->bus = fakebus;
    + fakebus->number = bus_num;
    dbg("%s: dev %d, bus %d, pin %d, num %d\n",
    __FUNCTION__, dev_num, bus_num, int_pin, irq_num);
    - rc = pcibios_set_irq_routing(&fakedev, int_pin - 0x0a, irq_num);
    + rc = pcibios_set_irq_routing(fakedev, int_pin - 0x0a, irq_num);
    + kfree(fakedev);
    + kfree(fakebus);
    dbg("%s: rc %d\n", __FUNCTION__, rc);
    if (!rc)
    return !rc;
    @@ -176,9 +187,10 @@
    // This should only be for x86 as it sets the Edge Level Control Register
    outb((u8) (temp_word & 0xFF), 0x4d0);
    outb((u8) ((temp_word & 0xFF00) >> 8), 0x4d1);
    + rc = 0;
    }

    - return 0;
    + return rc;
    }


    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2005-03-22 14:09    [W:0.024 / U:29.500 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site