Re: [RFC v5 121/126] hw/sd/ssi-sd.c: introduce ERRP_AUTO_PROPAGATE
14.10.2019 12:14, Philippe Mathieu-Daudé wrote: > On 10/14/19 11:07 AM, Vladimir Sementsov-Ogievskiy wrote: >> 12.10.2019 9:33, Philippe Mathieu-Daudé wrote: >>> On 10/11/19 6:05 PM, Vladimir Sementsov-Ogievskiy wrote: If we want to add some info to errp (by error_prepend() or error_append_hint()), we must use the ERRP_AUTO_PROPAGATE macro. Otherwise, this info will not be added when errp == _err (the program will exit prior to the error_append_hint() or error_prepend() call). Fix such cases. If we want to check error after errp-function call, we need to introduce local_err and than propagate it to errp. Instead, use ERRP_AUTO_PROPAGATE macro, benefits are: 1. No need of explicit error_propagate call 2. No need of explicit local_err variable: use errp directly 3. ERRP_AUTO_PROPAGATE leaves errp as is if it's not NULL or _fatel, this means that we don't break error_abort (we'll abort on error_set, not on error_propagate) This commit (together with its neighbors) was generated by for f in $(git grep -l errp \*.[ch]); do \ spatch --sp-file scripts/coccinelle/auto-propagated-errp.cocci \ --macro-file scripts/cocci-macro-file.h --in-place --no-show-diff $f; \ done; then fix a bit of compilation problems: coccinelle for some reason leaves several f() { ... goto out; ... out: } patterns, with "out:" at function end. then ./python/commit-per-subsystem.py MAINTAINERS "$(< auto-msg)" (auto-msg was a file with this commit message) Still, for backporting it may be more comfortable to use only the first command and then do one huge commit. Reported-by: Kevin Wolf Reported-by: Greg Kurz Signed-off-by: Vladimir Sementsov-Ogievskiy --- hw/sd/ssi-sd.c | 14 -- 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/hw/sd/ssi-sd.c b/hw/sd/ssi-sd.c index 91db069212..f42204d649 100644 --- a/hw/sd/ssi-sd.c +++ b/hw/sd/ssi-sd.c @@ -241,10 +241,10 @@ static const VMStateDescription vmstate_ssi_sd = { static void ssi_sd_realize(SSISlave *d, Error **errp) { + ERRP_AUTO_PROPAGATE(); ssi_sd_state *s = FROM_SSI_SLAVE(ssi_sd_state, d); DeviceState *carddev; DriveInfo *dinfo; - Error *err = NULL; qbus_create_inplace(>sdbus, sizeof(s->sdbus), TYPE_SD_BUS, DEVICE(d), "sd-bus"); @@ -254,12 +254,14 @@ static void ssi_sd_realize(SSISlave *d, Error **errp) dinfo = drive_get_next(IF_SD); carddev = qdev_create(BUS(>sdbus), TYPE_SD_CARD); if (dinfo) { - qdev_prop_set_drive(carddev, "drive", blk_by_legacy_dinfo(dinfo), ); + qdev_prop_set_drive(carddev, "drive", blk_by_legacy_dinfo(dinfo), + errp); >>> >>> This fits 72 chars, can you keep it in the same line? >> >> Honestly, I'd prefer not fixing code style in these 100 auto-generated >> commits... >> But if only you request this, it's not a problem. > > Ah, Coccinelle added the newline. Hmm maybe there is a spatch argument to set > the maximum line length? > > $ spatch --longhelp > [...] > --linux-spacing spacing of + code follows the conventions of > Linux > --smpl-spacing spacing of + code follows the semantic patch > --indent default indent, in spaces (no tabs) > --max-width column limit for generated code > > Have you tried --max-width? Maybe we need a combination with --smpl-spacing. Hmm, thanks, I'll try. > >>> } - object_property_set_bool(OBJECT(carddev), true, "spi", ); - object_property_set_bool(OBJECT(carddev), true, "realized", ); - if (err) { - error_setg(errp, "failed to init SD card: %s", error_get_pretty(err)); + object_property_set_bool(OBJECT(carddev), true, "spi", errp); + object_property_set_bool(OBJECT(carddev), true, "realized", errp); + if (*errp) { + error_setg(errp, "failed to init SD card: %s", + error_get_pretty(*errp)); >>> >>> Ditto... >>> return; } } >>> >>> If possible please squash with "47/126 SD (Secure Card)" >> >> Hmm this is in separate, as it's unmaintained accordingly to MAINTAINERS. >> I'll rebase >> the next version on your MAINTAINERS-fixes and it should work. >> >>> >>> Reviewed-by: Philippe Mathieu-Daudé >> >> Thanks! >> -- Best regards, Vladimir
Re: [RFC v5 121/126] hw/sd/ssi-sd.c: introduce ERRP_AUTO_PROPAGATE
On 10/14/19 11:07 AM, Vladimir Sementsov-Ogievskiy wrote: 12.10.2019 9:33, Philippe Mathieu-Daudé wrote: On 10/11/19 6:05 PM, Vladimir Sementsov-Ogievskiy wrote: If we want to add some info to errp (by error_prepend() or error_append_hint()), we must use the ERRP_AUTO_PROPAGATE macro. Otherwise, this info will not be added when errp == _err (the program will exit prior to the error_append_hint() or error_prepend() call). Fix such cases. If we want to check error after errp-function call, we need to introduce local_err and than propagate it to errp. Instead, use ERRP_AUTO_PROPAGATE macro, benefits are: 1. No need of explicit error_propagate call 2. No need of explicit local_err variable: use errp directly 3. ERRP_AUTO_PROPAGATE leaves errp as is if it's not NULL or _fatel, this means that we don't break error_abort (we'll abort on error_set, not on error_propagate) This commit (together with its neighbors) was generated by for f in $(git grep -l errp \*.[ch]); do \ spatch --sp-file scripts/coccinelle/auto-propagated-errp.cocci \ --macro-file scripts/cocci-macro-file.h --in-place --no-show-diff $f; \ done; then fix a bit of compilation problems: coccinelle for some reason leaves several f() { ... goto out; ... out: } patterns, with "out:" at function end. then ./python/commit-per-subsystem.py MAINTAINERS "$(< auto-msg)" (auto-msg was a file with this commit message) Still, for backporting it may be more comfortable to use only the first command and then do one huge commit. Reported-by: Kevin Wolf Reported-by: Greg Kurz Signed-off-by: Vladimir Sementsov-Ogievskiy --- hw/sd/ssi-sd.c | 14 -- 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/hw/sd/ssi-sd.c b/hw/sd/ssi-sd.c index 91db069212..f42204d649 100644 --- a/hw/sd/ssi-sd.c +++ b/hw/sd/ssi-sd.c @@ -241,10 +241,10 @@ static const VMStateDescription vmstate_ssi_sd = { static void ssi_sd_realize(SSISlave *d, Error **errp) { + ERRP_AUTO_PROPAGATE(); ssi_sd_state *s = FROM_SSI_SLAVE(ssi_sd_state, d); DeviceState *carddev; DriveInfo *dinfo; - Error *err = NULL; qbus_create_inplace(>sdbus, sizeof(s->sdbus), TYPE_SD_BUS, DEVICE(d), "sd-bus"); @@ -254,12 +254,14 @@ static void ssi_sd_realize(SSISlave *d, Error **errp) dinfo = drive_get_next(IF_SD); carddev = qdev_create(BUS(>sdbus), TYPE_SD_CARD); if (dinfo) { - qdev_prop_set_drive(carddev, "drive", blk_by_legacy_dinfo(dinfo), ); + qdev_prop_set_drive(carddev, "drive", blk_by_legacy_dinfo(dinfo), + errp); This fits 72 chars, can you keep it in the same line? Honestly, I'd prefer not fixing code style in these 100 auto-generated commits... But if only you request this, it's not a problem. Ah, Coccinelle added the newline. Hmm maybe there is a spatch argument to set the maximum line length? $ spatch --longhelp [...] --linux-spacing spacing of + code follows the conventions of Linux --smpl-spacingspacing of + code follows the semantic patch --indent default indent, in spaces (no tabs) --max-width column limit for generated code Have you tried --max-width? Maybe we need a combination with --smpl-spacing. } - object_property_set_bool(OBJECT(carddev), true, "spi", ); - object_property_set_bool(OBJECT(carddev), true, "realized", ); - if (err) { - error_setg(errp, "failed to init SD card: %s", error_get_pretty(err)); + object_property_set_bool(OBJECT(carddev), true, "spi", errp); + object_property_set_bool(OBJECT(carddev), true, "realized", errp); + if (*errp) { + error_setg(errp, "failed to init SD card: %s", + error_get_pretty(*errp)); Ditto... return; } } If possible please squash with "47/126 SD (Secure Card)" Hmm this is in separate, as it's unmaintained accordingly to MAINTAINERS. I'll rebase the next version on your MAINTAINERS-fixes and it should work. Reviewed-by: Philippe Mathieu-Daudé Thanks!
Re: [RFC v5 121/126] hw/sd/ssi-sd.c: introduce ERRP_AUTO_PROPAGATE
12.10.2019 9:33, Philippe Mathieu-Daudé wrote: > On 10/11/19 6:05 PM, Vladimir Sementsov-Ogievskiy wrote: >> If we want to add some info to errp (by error_prepend() or >> error_append_hint()), we must use the ERRP_AUTO_PROPAGATE macro. >> Otherwise, this info will not be added when errp == _err >> (the program will exit prior to the error_append_hint() or >> error_prepend() call). Fix such cases. >> >> If we want to check error after errp-function call, we need to >> introduce local_err and than propagate it to errp. Instead, use >> ERRP_AUTO_PROPAGATE macro, benefits are: >> 1. No need of explicit error_propagate call >> 2. No need of explicit local_err variable: use errp directly >> 3. ERRP_AUTO_PROPAGATE leaves errp as is if it's not NULL or >> _fatel, this means that we don't break error_abort >> (we'll abort on error_set, not on error_propagate) >> >> This commit (together with its neighbors) was generated by >> >> for f in $(git grep -l errp \*.[ch]); do \ >> spatch --sp-file scripts/coccinelle/auto-propagated-errp.cocci \ >> --macro-file scripts/cocci-macro-file.h --in-place --no-show-diff $f; \ >> done; >> >> then fix a bit of compilation problems: coccinelle for some reason >> leaves several >> f() { >> ... >> goto out; >> ... >> out: >> } >> patterns, with "out:" at function end. >> >> then >> ./python/commit-per-subsystem.py MAINTAINERS "$(< auto-msg)" >> >> (auto-msg was a file with this commit message) >> >> Still, for backporting it may be more comfortable to use only the first >> command and then do one huge commit. >> >> Reported-by: Kevin Wolf >> Reported-by: Greg Kurz >> Signed-off-by: Vladimir Sementsov-Ogievskiy >> --- >> hw/sd/ssi-sd.c | 14 -- >> 1 file changed, 8 insertions(+), 6 deletions(-) >> >> diff --git a/hw/sd/ssi-sd.c b/hw/sd/ssi-sd.c >> index 91db069212..f42204d649 100644 >> --- a/hw/sd/ssi-sd.c >> +++ b/hw/sd/ssi-sd.c >> @@ -241,10 +241,10 @@ static const VMStateDescription vmstate_ssi_sd = { >> static void ssi_sd_realize(SSISlave *d, Error **errp) >> { >> + ERRP_AUTO_PROPAGATE(); >> ssi_sd_state *s = FROM_SSI_SLAVE(ssi_sd_state, d); >> DeviceState *carddev; >> DriveInfo *dinfo; >> - Error *err = NULL; >> qbus_create_inplace(>sdbus, sizeof(s->sdbus), TYPE_SD_BUS, >> DEVICE(d), "sd-bus"); >> @@ -254,12 +254,14 @@ static void ssi_sd_realize(SSISlave *d, Error **errp) >> dinfo = drive_get_next(IF_SD); >> carddev = qdev_create(BUS(>sdbus), TYPE_SD_CARD); >> if (dinfo) { >> - qdev_prop_set_drive(carddev, "drive", blk_by_legacy_dinfo(dinfo), >> ); >> + qdev_prop_set_drive(carddev, "drive", blk_by_legacy_dinfo(dinfo), >> + errp); > > This fits 72 chars, can you keep it in the same line? Honestly, I'd prefer not fixing code style in these 100 auto-generated commits... But if only you request this, it's not a problem. > >> } >> - object_property_set_bool(OBJECT(carddev), true, "spi", ); >> - object_property_set_bool(OBJECT(carddev), true, "realized", ); >> - if (err) { >> - error_setg(errp, "failed to init SD card: %s", >> error_get_pretty(err)); >> + object_property_set_bool(OBJECT(carddev), true, "spi", errp); >> + object_property_set_bool(OBJECT(carddev), true, "realized", errp); >> + if (*errp) { >> + error_setg(errp, "failed to init SD card: %s", >> + error_get_pretty(*errp)); > > Ditto... > >> return; >> } >> } >> > > If possible please squash with "47/126 SD (Secure Card)" Hmm this is in separate, as it's unmaintained accordingly to MAINTAINERS. I'll rebase the next version on your MAINTAINERS-fixes and it should work. > > Reviewed-by: Philippe Mathieu-Daudé Thanks! -- Best regards, Vladimir
Re: [RFC v5 121/126] hw/sd/ssi-sd.c: introduce ERRP_AUTO_PROPAGATE
On 10/11/19 6:05 PM, Vladimir Sementsov-Ogievskiy wrote: If we want to add some info to errp (by error_prepend() or error_append_hint()), we must use the ERRP_AUTO_PROPAGATE macro. Otherwise, this info will not be added when errp == _err (the program will exit prior to the error_append_hint() or error_prepend() call). Fix such cases. If we want to check error after errp-function call, we need to introduce local_err and than propagate it to errp. Instead, use ERRP_AUTO_PROPAGATE macro, benefits are: 1. No need of explicit error_propagate call 2. No need of explicit local_err variable: use errp directly 3. ERRP_AUTO_PROPAGATE leaves errp as is if it's not NULL or _fatel, this means that we don't break error_abort (we'll abort on error_set, not on error_propagate) This commit (together with its neighbors) was generated by for f in $(git grep -l errp \*.[ch]); do \ spatch --sp-file scripts/coccinelle/auto-propagated-errp.cocci \ --macro-file scripts/cocci-macro-file.h --in-place --no-show-diff $f; \ done; then fix a bit of compilation problems: coccinelle for some reason leaves several f() { ... goto out; ... out: } patterns, with "out:" at function end. then ./python/commit-per-subsystem.py MAINTAINERS "$(< auto-msg)" (auto-msg was a file with this commit message) Still, for backporting it may be more comfortable to use only the first command and then do one huge commit. Reported-by: Kevin Wolf Reported-by: Greg Kurz Signed-off-by: Vladimir Sementsov-Ogievskiy --- hw/sd/ssi-sd.c | 14 -- 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/hw/sd/ssi-sd.c b/hw/sd/ssi-sd.c index 91db069212..f42204d649 100644 --- a/hw/sd/ssi-sd.c +++ b/hw/sd/ssi-sd.c @@ -241,10 +241,10 @@ static const VMStateDescription vmstate_ssi_sd = { static void ssi_sd_realize(SSISlave *d, Error **errp) { +ERRP_AUTO_PROPAGATE(); ssi_sd_state *s = FROM_SSI_SLAVE(ssi_sd_state, d); DeviceState *carddev; DriveInfo *dinfo; -Error *err = NULL; qbus_create_inplace(>sdbus, sizeof(s->sdbus), TYPE_SD_BUS, DEVICE(d), "sd-bus"); @@ -254,12 +254,14 @@ static void ssi_sd_realize(SSISlave *d, Error **errp) dinfo = drive_get_next(IF_SD); carddev = qdev_create(BUS(>sdbus), TYPE_SD_CARD); if (dinfo) { -qdev_prop_set_drive(carddev, "drive", blk_by_legacy_dinfo(dinfo), ); +qdev_prop_set_drive(carddev, "drive", blk_by_legacy_dinfo(dinfo), +errp); This fits 72 chars, can you keep it in the same line? } -object_property_set_bool(OBJECT(carddev), true, "spi", ); -object_property_set_bool(OBJECT(carddev), true, "realized", ); -if (err) { -error_setg(errp, "failed to init SD card: %s", error_get_pretty(err)); +object_property_set_bool(OBJECT(carddev), true, "spi", errp); +object_property_set_bool(OBJECT(carddev), true, "realized", errp); +if (*errp) { +error_setg(errp, "failed to init SD card: %s", + error_get_pretty(*errp)); Ditto... return; } } If possible please squash with "47/126 SD (Secure Card)" Reviewed-by: Philippe Mathieu-Daudé