s390: Reduce common I/O layer stack usage.
Subsystems (2)
PATCH 1/1 s390: Reduce common I/O layer stack usage.
From: Heiko Carstens <[email protected]>
[S390] Reduce common I/O layer stack usage.
Use different kind of assignment to make sure gcc doesn't create code that creates temp variables on the stack, assigns values to it and copies the content of the whole temp variable to the destination. This reduces stack usage of e.g. ccwgroup_driver_register from 976 to 48 bytes instead.
Signed-off-by Heiko Carstens <[email protected]>
Signed-off-by Martin Schwidefsky <[email protected]>
---
drivers/s390/cio/ccwgroup.c | 14 +++++--------- drivers/s390/cio/chsc.c | 6 ++---- drivers/s390/cio/device.c | 19 +++++++------------ drivers/s390/cio/device_fsm.c | 20 ++++++++------------ 4 files changed, 22 insertions(+), 37 deletions(-)
drivers/s390/cio/ccwgroup.c +5 -9
@@ -183,11 +183,9 @@ ccwgroup_create(struct device *root, gdev->creator_id = creator_id; gdev->count = argc; - gdev->dev = (struct device ) { - .bus = &ccwgroup_bus_type, - .parent = root, - .release = ccwgroup_release, - }; + gdev->dev.bus = &ccwgroup_bus_type; + gdev->dev.parent = root; + gdev->dev.release = ccwgroup_release;snprintf (gdev->dev.bus_id,BUS_ID_SIZE ,"%s" , gdev->cdev[0 ]->dev.bus_id);
@@ -391,10 +389,8 @@ int ccwgroup_driver_register (struct ccwgroup_driver *cdriver) {/* register our new driver with the core */ - cdriver->driver = (struct device_driver ) { - .bus = &ccwgroup_bus_type, - .name = cdriver->name, - }; + cdriver->driver.bus = &ccwgroup_bus_type; + cdriver->driver.name = cdriver->name;return driver_register (&cdriver->driver); }
drivers/s390/cio/chsc.c +2 -4
@@ -1391,10 +1391,8 @@ new_channel_path(int chpid)/* fill in status, etc. */ chp->id = chpid; chp->state =1 ; - chp->dev = (struct device ) { - .parent = &css[0 ]->device, - .release = chp_release, - }; + chp->dev.parent = &css[0 ]->device; + chp->dev.release = chp_release;snprintf (chp->dev.bus_id,BUS_ID_SIZE ,"chp0.%x" , chpid);/* Obtain channel path description and fill it in. */
drivers/s390/cio/device.c +7 -12
@@ -556,12 +556,11 @@ get_disc_ccwdev_by_devno(unsigned int de struct ccw_device *sibling) {struct device *dev; -struct match_data data = { - .devno = devno, - .ssid = ssid, - .sibling = sibling, - }; +struct match_data data; + data.devno = devno; + data.ssid = ssid; + data.sibling = sibling; dev =bus_find_device (&ccw_bus_type,NULL , &data, match_devno);return dev ?to_ccwdev (dev) :NULL ;
@@ -835,10 +834,8 @@ io_subchannel_probe (struct subchannel *return -ENOMEM ; }atomic_set (&cdev->private->onoff,0 ); - cdev->dev = (struct device ) { - .parent = &sch->dev, - .release = ccw_device_release, - }; + cdev->dev.parent = &sch->dev; + cdev->dev.release = ccw_device_release;INIT_LIST_HEAD (&cdev->private->kick_work.entry);/* Do first half of device_register. */ device_initialize (&cdev->dev);
@@ -977,9 +974,7 @@ ccw_device_console_enable (struct ccw_deint rc;/* Initialize the ccw_device structure. */ - cdev->dev = (struct device ) { - .parent = &sch->dev, - }; + cdev->dev.parent= &sch->dev; rc =io_subchannel_recog (cdev, sch);if (rc)return rc;
drivers/s390/cio/device_fsm.c +8 -12
@@ -267,12 +267,10 @@ ccw_device_recog_done(struct ccw_device notify =1 ; }/* fill out sense information */ - cdev->id = (struct ccw_device_id ) { - .cu_type = cdev->private->senseid.cu_type, - .cu_model = cdev->private->senseid.cu_model, - .dev_type = cdev->private->senseid.dev_type, - .dev_model = cdev->private->senseid.dev_model, - }; + cdev->id.cu_type = cdev->private->senseid.cu_type; + cdev->id.cu_model = cdev->private->senseid.cu_model; + cdev->id.dev_type = cdev->private->senseid.dev_type; + cdev->id.dev_model = cdev->private->senseid.dev_model;if (notify) { cdev->private->state =DEV_STATE_OFFLINE ;if (same_dev) {
@@ -566,12 +564,10 @@ ccw_device_verify_done(struct ccw_device/* Deliver fake irb to device driver, if needed. */ if (cdev->private->flags.fake_irb) {memset (&cdev->private->irb,0 ,sizeof (struct irb )); - cdev->private->irb.scsw = (struct scsw ) { - .cc =1 , - .fctl =SCSW_FCTL_START_FUNC , - .actl =SCSW_ACTL_START_PEND , - .stctl =SCSW_STCTL_STATUS_PEND , - }; + cdev->private->irb.scsw.cc =1 ; + cdev->private->irb.scsw.fctl =SCSW_FCTL_START_FUNC ; + cdev->private->irb.scsw.actl =SCSW_ACTL_START_PEND ; + cdev->private->irb.scsw.stctl =SCSW_STCTL_STATUS_PEND ; cdev->private->flags.fake_irb =0 ;if (cdev->handler) cdev->handler(cdev, cdev->private->intparm,