Reduce nr of ptr derefs in drivers/pci/hotplug/pciehp_core.c
PATCH 1/1 Reduce nr of ptr derefs in drivers/pci/hotplug/pciehp_core.c
Here's a small patch to reduce the nr. of pointer dereferences in drivers/pci/hotplug/pciehp_core.c
Benefits:
- micro speed optimization due to fewer pointer derefs
- generated code is slightly smaller
- small line length cleanup
- better readability
Please consider applying.
---
drivers/pci/hotplug/pciehp_core.c | 90 +++++++++++++++++++++----------------- 1 files changed, 50 insertions(+), 40 deletions(-)
orig:
text data bss dec hex filename
4910 436 24 5370 14fa drivers/pci/hotplug/pciehp_core.o
patched:
text data bss dec hex filename
4889 436 24 5349 14e5 drivers/pci/hotplug/pciehp_core.o
drivers/pci/hotplug/pciehp_core.c +50 -40
@@ -103,7 +103,10 @@ static void release_slot(struct hotplug_static int init_slots (struct controller *ctrl) { -struct slot *new_slot; +struct slot *slot; +struct hpc_ops *hpc_ops; +struct hotplug_slot *hotplug_slot; +struct hotplug_slot_info *hotplug_slot_info;u8 number_of_slots;u8 slot_device;u32 slot_number;
@@ -114,59 +117,66 @@ static int init_slots(struct controller slot_number = ctrl->first_slot;while (number_of_slots) { - new_slot =kmalloc (sizeof (*new_slot),GFP_KERNEL ); -if (!new_slot) + slot =kmalloc (sizeof (*slot),GFP_KERNEL ); +if (!slot) goto error; -memset (new_slot,0 ,sizeof (struct slot )); - new_slot->hotplug_slot = -kmalloc (sizeof (*(new_slot->hotplug_slot)), +memset (slot,0 ,sizeof (struct slot )); + slot->hotplug_slot = +kmalloc (sizeof (*(slot->hotplug_slot)),GFP_KERNEL ); -if (!new_slot->hotplug_slot) +if (!slot->hotplug_slot) goto error_slot; -memset (new_slot->hotplug_slot,0 ,sizeof (struct hotplug_slot )); + hotplug_slot = slot->hotplug_slot; +memset (hotplug_slot,0 ,sizeof (struct hotplug_slot )); - new_slot->hotplug_slot->info = -kmalloc (sizeof (*(new_slot->hotplug_slot->info)), + hotplug_slot->info = +kmalloc (sizeof (*(hotplug_slot->info)),GFP_KERNEL ); -if (!new_slot->hotplug_slot->info) +if (!hotplug_slot->info) goto error_hpslot; -memset (new_slot->hotplug_slot->info,0 , + hotplug_slot_info = hotplug_slot->info; +memset (hotplug_slot_info,0 ,sizeof (struct hotplug_slot_info )); - new_slot->hotplug_slot->name =kmalloc (SLOT_NAME_SIZE , -GFP_KERNEL ); -if (!new_slot->hotplug_slot->name) + hotplug_slot->name =kmalloc (SLOT_NAME_SIZE ,GFP_KERNEL ); +if (!hotplug_slot->name) goto error_info; - new_slot->ctrl = ctrl; - new_slot->bus = ctrl->slot_bus; - new_slot->device = slot_device; - new_slot->hpc_ops = ctrl->hpc_ops; + slot->ctrl = ctrl; + slot->bus = ctrl->slot_bus; + slot->device = slot_device; + slot->hpc_ops = hpc_ops = ctrl->hpc_ops; - new_slot->number = ctrl->first_slot; - new_slot->hp_slot = slot_device - ctrl->slot_device_offset; + slot->number = ctrl->first_slot; + slot->hp_slot = slot_device - ctrl->slot_device_offset;/* register this slot with the hotplug pci core */ - new_slot->hotplug_slot->private = new_slot; - new_slot->hotplug_slot->release = &release_slot; -make_slot_name (new_slot->hotplug_slot->name,SLOT_NAME_SIZE , new_slot); - new_slot->hotplug_slot->ops = &pciehp_hotplug_slot_ops; - - new_slot->hpc_ops->get_power_status (new_slot, &(new_slot->hotplug_slot->info->power_status)); - new_slot->hpc_ops->get_attention_status (new_slot, &(new_slot->hotplug_slot->info->attention_status)); - new_slot->hpc_ops->get_latch_status (new_slot, &(new_slot->hotplug_slot->info->latch_status)); - new_slot->hpc_ops->get_adapter_status (new_slot, &(new_slot->hotplug_slot->info->adapter_status)); - -dbg ("Registering bus=%x dev=%x hp_slot=%x sun=%x slot_device_offset=%x\n" , - new_slot->bus, new_slot->device, new_slot->hp_slot, new_slot->number, ctrl->slot_device_offset); - result =pci_hp_register (new_slot->hotplug_slot); + hotplug_slot->private = slot; + hotplug_slot->release = &release_slot; +make_slot_name (hotplug_slot->name,SLOT_NAME_SIZE , slot); + hotplug_slot->ops = &pciehp_hotplug_slot_ops; + + hpc_ops->get_power_status (slot, + &(hotplug_slot_info->power_status)); + hpc_ops->get_attention_status (slot, + &(hotplug_slot_info->attention_status)); + hpc_ops->get_latch_status (slot, + &(hotplug_slot_info->latch_status)); + hpc_ops->get_adapter_status (slot, + &(hotplug_slot_info->adapter_status)); + +dbg ("Registering bus=%x dev=%x hp_slot=%x sun=%x " +"slot_device_offset=%x\n" , + slot->bus, slot->device, slot->hp_slot, slot->number, + ctrl->slot_device_offset); + result =pci_hp_register (hotplug_slot);if (result) {err ("pci_hp_register failed with error %d\n" , result); goto error_name; } - new_slot->next = ctrl->slot; - ctrl->slot = new_slot; + slot->next = ctrl->slot; + ctrl->slot = slot; number_of_slots--; slot_device++;
@@ -176,13 +186,13 @@ static int init_slots(struct controllerreturn 0 ; error_name: -kfree (new_slot->hotplug_slot->name); +kfree (hotplug_slot->name); error_info: -kfree (new_slot->hotplug_slot->info); +kfree (hotplug_slot_info); error_hpslot: -kfree (new_slot->hotplug_slot); +kfree (hotplug_slot); error_slot: -kfree (new_slot); +kfree (slot); error:return result; }
drivers/pci/hotplug/pciehp_core.c
Quoted 2 lines · Jesper Juhl
drivers/pci/hotplug/pciehp_core.c +0
-0
@@ -114,59 +117,66 @@ static int init_slots(struct controller
slot_number = ctrl->first_slot;
while (number_of_slots) {
- new_slot = kmalloc(sizeof(*new_slot), GFP_KERNEL);
- if (!new_slot)
+ slot = kmalloc(sizeof(*slot), GFP_KERNEL);
+ if (!slot)
goto error;
- memset(new_slot, 0, sizeof(struct slot));
- new_slot->hotplug_slot =
- kmalloc(sizeof(*(new_slot->hotplug_slot)),
+ memset(slot, 0, sizeof(struct slot));
+ slot->hotplug_slot =
+ kmalloc(sizeof(*(slot->hotplug_slot)),
Just one suggestion:
In your patches I've seen a lot of kmalloc + memset calls. Perhaps you can convert them to kzalloc? This would improve readability even more.
Thanks,
Gregor
Quoted 22 lines · Gregor Jasny
Quoted 2 lines · Jesper Juhl
drivers/pci/hotplug/pciehp_core.c 2005-12-11 05:46:58.000000000 +0100 renamed from drivers/pci/hotplug/pciehp_core.c 2005-12-04 18:48:04.000000000 +0100 +0
-0drivers/pci/hotplug/pciehp_core.c +5
-5@@ -114,59 +117,66 @@ static int init_slots(struct controller slot_number = ctrl->first_slot;while (number_of_slots) { - new_slot =kmalloc (sizeof (*new_slot),GFP_KERNEL ); -if (!new_slot) + slot =kmalloc (sizeof (*slot),GFP_KERNEL ); +if (!slot) goto error; -memset (new_slot,0 ,sizeof (struct slot )); - new_slot->hotplug_slot = - kmalloc(sizeof(*(new_slot->hotplug_slot)), +memset (slot,0 ,sizeof (struct slot )); + slot->hotplug_slot = + kmalloc(sizeof(*(slot->hotplug_slot)),Just one suggestion:
Quoted 3 lines
In your patches I've seen a lot of kmalloc + memset calls. Perhaps you can convert them to kzalloc? This would improve readability even more.
Good idea, but I think I'll do that as a seperate round of patches at a later date. Added to my todo list. Thanks.
--
Jesper Juhl <[email protected]>
Don't top-post http://www.catb.org/~esr/jargon/html/T/top-post.html
Plain text mails only, please http://www.expita.com/nomime.html