Message ID | 149727924253.28532.2681638904562623104.stgit@frigg.lan (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 06/12/2017 07:54 AM, Lluís Vilanova wrote: > Adds macro QTAILQ_FOREACH_CONTINUE to support incremental list > traversal. > > Signed-off-by: Lluís Vilanova <vilanova@ac.upc.edu> > --- > include/qemu/queue.h | 12 ++++++++++++ > 1 file changed, 12 insertions(+) > > diff --git a/include/qemu/queue.h b/include/qemu/queue.h > index 35292c3155..eb2bf9cb1c 100644 > --- a/include/qemu/queue.h > +++ b/include/qemu/queue.h > @@ -415,6 +415,18 @@ struct { \ > (var); \ > (var) = ((var)->field.tqe_next)) > > +/** > + * QTAILQ_FOREACH_CONTINUE: > + * @var: Variable to resume iteration from. > + * @field: Field in @var holding a QTAILQ_ENTRY for this queue. > + * > + * Resumes iteration on a queue from the element in @var. > + */ > +#define QTAILQ_FOREACH_CONTINUE(var, field) \ > + for ((var) = ((var)->field.tqe_next); \ > + (var); \ > + (var) = ((var)->field.tqe_next)) > + > #define QTAILQ_FOREACH_SAFE(var, head, field, next_var) \ > for ((var) = ((head)->tqh_first); \ > (var) && ((next_var) = ((var)->field.tqe_next), 1); \ > > I still say this isn't required if the breakpoint loop is better structured. r~
Richard Henderson writes: > On 06/12/2017 07:54 AM, Lluís Vilanova wrote: >> Adds macro QTAILQ_FOREACH_CONTINUE to support incremental list >> traversal. >> >> Signed-off-by: Lluís Vilanova <vilanova@ac.upc.edu> >> --- >> include/qemu/queue.h | 12 ++++++++++++ >> 1 file changed, 12 insertions(+) >> >> diff --git a/include/qemu/queue.h b/include/qemu/queue.h >> index 35292c3155..eb2bf9cb1c 100644 >> --- a/include/qemu/queue.h >> +++ b/include/qemu/queue.h >> @@ -415,6 +415,18 @@ struct { \ >> (var); \ >> (var) = ((var)->field.tqe_next)) >> +/** >> + * QTAILQ_FOREACH_CONTINUE: >> + * @var: Variable to resume iteration from. >> + * @field: Field in @var holding a QTAILQ_ENTRY for this queue. >> + * >> + * Resumes iteration on a queue from the element in @var. >> + */ >> +#define QTAILQ_FOREACH_CONTINUE(var, field) \ >> + for ((var) = ((var)->field.tqe_next); \ >> + (var); \ >> + (var) = ((var)->field.tqe_next)) >> + >> #define QTAILQ_FOREACH_SAFE(var, head, field, next_var) \ >> for ((var) = ((head)->tqh_first); \ >> (var) && ((next_var) = ((var)->field.tqe_next), 1); \ >> >> > I still say this isn't required if the breakpoint loop is better structured. I can embed the use of QTAILQ into translate-block.c, but I wanted to keep the implementation of breakpoint lists hidden behind the cpu_breakpoint API. Thanks, Lluis
On 06/26/2017 05:33 AM, Lluís Vilanova wrote: > Richard Henderson writes: > >> On 06/12/2017 07:54 AM, Lluís Vilanova wrote: >>> Adds macro QTAILQ_FOREACH_CONTINUE to support incremental list >>> traversal. >>> >>> Signed-off-by: Lluís Vilanova <vilanova@ac.upc.edu> >>> --- >>> include/qemu/queue.h | 12 ++++++++++++ >>> 1 file changed, 12 insertions(+) >>> >>> diff --git a/include/qemu/queue.h b/include/qemu/queue.h >>> index 35292c3155..eb2bf9cb1c 100644 >>> --- a/include/qemu/queue.h >>> +++ b/include/qemu/queue.h >>> @@ -415,6 +415,18 @@ struct { \ >>> (var); \ >>> (var) = ((var)->field.tqe_next)) >>> +/** >>> + * QTAILQ_FOREACH_CONTINUE: >>> + * @var: Variable to resume iteration from. >>> + * @field: Field in @var holding a QTAILQ_ENTRY for this queue. >>> + * >>> + * Resumes iteration on a queue from the element in @var. >>> + */ >>> +#define QTAILQ_FOREACH_CONTINUE(var, field) \ >>> + for ((var) = ((var)->field.tqe_next); \ >>> + (var); \ >>> + (var) = ((var)->field.tqe_next)) >>> + >>> #define QTAILQ_FOREACH_SAFE(var, head, field, next_var) \ >>> for ((var) = ((head)->tqh_first); \ >>> (var) && ((next_var) = ((var)->field.tqe_next), 1); \ >>> >>> > >> I still say this isn't required if the breakpoint loop is better structured. > > I can embed the use of QTAILQ into translate-block.c, but I wanted to keep the > implementation of breakpoint lists hidden behind the cpu_breakpoint API. I think using QTAILQ in the common main loop is better than twisting the logic so that the loop is unnaturally split into a subroutine. r~
Richard Henderson writes: > On 06/26/2017 05:33 AM, Lluís Vilanova wrote: >> Richard Henderson writes: >> >>> On 06/12/2017 07:54 AM, Lluís Vilanova wrote: >>>> Adds macro QTAILQ_FOREACH_CONTINUE to support incremental list >>>> traversal. >>>> >>>> Signed-off-by: Lluís Vilanova <vilanova@ac.upc.edu> >>>> --- >>>> include/qemu/queue.h | 12 ++++++++++++ >>>> 1 file changed, 12 insertions(+) >>>> >>>> diff --git a/include/qemu/queue.h b/include/qemu/queue.h >>>> index 35292c3155..eb2bf9cb1c 100644 >>>> --- a/include/qemu/queue.h >>>> +++ b/include/qemu/queue.h >>>> @@ -415,6 +415,18 @@ struct { \ >>>> (var); \ >>>> (var) = ((var)->field.tqe_next)) >>>> +/** >>>> + * QTAILQ_FOREACH_CONTINUE: >>>> + * @var: Variable to resume iteration from. >>>> + * @field: Field in @var holding a QTAILQ_ENTRY for this queue. >>>> + * >>>> + * Resumes iteration on a queue from the element in @var. >>>> + */ >>>> +#define QTAILQ_FOREACH_CONTINUE(var, field) \ >>>> + for ((var) = ((var)->field.tqe_next); \ >>>> + (var); \ >>>> + (var) = ((var)->field.tqe_next)) >>>> + >>>> #define QTAILQ_FOREACH_SAFE(var, head, field, next_var) \ >>>> for ((var) = ((head)->tqh_first); \ >>>> (var) && ((next_var) = ((var)->field.tqe_next), 1); \ >>>> >>>> >> >>> I still say this isn't required if the breakpoint loop is better structured. >> >> I can embed the use of QTAILQ into translate-block.c, but I wanted to keep the >> implementation of breakpoint lists hidden behind the cpu_breakpoint API. > I think using QTAILQ in the common main loop is better than twisting the logic > so that the loop is unnaturally split into a subroutine. Ok, then I'll integrate that into the new series. Thanks, Lluis
diff --git a/include/qemu/queue.h b/include/qemu/queue.h index 35292c3155..eb2bf9cb1c 100644 --- a/include/qemu/queue.h +++ b/include/qemu/queue.h @@ -415,6 +415,18 @@ struct { \ (var); \ (var) = ((var)->field.tqe_next)) +/** + * QTAILQ_FOREACH_CONTINUE: + * @var: Variable to resume iteration from. + * @field: Field in @var holding a QTAILQ_ENTRY for this queue. + * + * Resumes iteration on a queue from the element in @var. + */ +#define QTAILQ_FOREACH_CONTINUE(var, field) \ + for ((var) = ((var)->field.tqe_next); \ + (var); \ + (var) = ((var)->field.tqe_next)) + #define QTAILQ_FOREACH_SAFE(var, head, field, next_var) \ for ((var) = ((head)->tqh_first); \ (var) && ((next_var) = ((var)->field.tqe_next), 1); \
Adds macro QTAILQ_FOREACH_CONTINUE to support incremental list traversal. Signed-off-by: Lluís Vilanova <vilanova@ac.upc.edu> --- include/qemu/queue.h | 12 ++++++++++++ 1 file changed, 12 insertions(+)