Message ID | 20191011160552.22907-122-vsementsov@virtuozzo.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | error: auto propagated local_err | expand |
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 == &fatal_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 > &error_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 <kwolf@redhat.com> > Reported-by: Greg Kurz <groug@kaod.org> > Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> > --- > 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(&s->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(&s->sdbus), TYPE_SD_CARD); > if (dinfo) { > - qdev_prop_set_drive(carddev, "drive", blk_by_legacy_dinfo(dinfo), &err); > + 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", &err); > - object_property_set_bool(OBJECT(carddev), true, "realized", &err); > - 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é <philmd@redhat.com>
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 == &fatal_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 >> &error_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 <kwolf@redhat.com> >> Reported-by: Greg Kurz <groug@kaod.org> >> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> >> --- >> 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(&s->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(&s->sdbus), TYPE_SD_CARD); >> if (dinfo) { >> - qdev_prop_set_drive(carddev, "drive", blk_by_legacy_dinfo(dinfo), &err); >> + 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", &err); >> - object_property_set_bool(OBJECT(carddev), true, "realized", &err); >> - 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é <philmd@redhat.com> Thanks!
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 == &fatal_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 >>> &error_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 <kwolf@redhat.com> >>> Reported-by: Greg Kurz <groug@kaod.org> >>> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> >>> --- >>> 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(&s->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(&s->sdbus), TYPE_SD_CARD); >>> if (dinfo) { >>> - qdev_prop_set_drive(carddev, "drive", blk_by_legacy_dinfo(dinfo), &err); >>> + 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. >> >>> } >>> - object_property_set_bool(OBJECT(carddev), true, "spi", &err); >>> - object_property_set_bool(OBJECT(carddev), true, "realized", &err); >>> - 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é <philmd@redhat.com> > > Thanks! >
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 == &fatal_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 >>>> &error_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 <kwolf@redhat.com> >>>> Reported-by: Greg Kurz <groug@kaod.org> >>>> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> >>>> --- >>>> 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(&s->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(&s->sdbus), TYPE_SD_CARD); >>>> if (dinfo) { >>>> - qdev_prop_set_drive(carddev, "drive", blk_by_legacy_dinfo(dinfo), &err); >>>> + 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", &err); >>>> - object_property_set_bool(OBJECT(carddev), true, "realized", &err); >>>> - 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é <philmd@redhat.com> >> >> Thanks! >>
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(&s->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(&s->sdbus), TYPE_SD_CARD); if (dinfo) { - qdev_prop_set_drive(carddev, "drive", blk_by_legacy_dinfo(dinfo), &err); + qdev_prop_set_drive(carddev, "drive", blk_by_legacy_dinfo(dinfo), + errp); } - object_property_set_bool(OBJECT(carddev), true, "spi", &err); - object_property_set_bool(OBJECT(carddev), true, "realized", &err); - 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)); return; } }
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 == &fatal_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 &error_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 <kwolf@redhat.com> Reported-by: Greg Kurz <groug@kaod.org> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com> --- hw/sd/ssi-sd.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-)