Re: [igt-dev] [PATCH i-g-t 1/2] lib/kms: Add for_each_pipe_clamped
From: Petri Latvala <hidden>
Date: 2021-03-23 11:41:47
On Tue, Mar 23, 2021 at 04:23:05PM +0530, venkata.sai.patnana@intel.com wrote:
quoted hunk ↗ jump to hunk
From: Patnana Venkata Sai <redacted> for_each_pipe and for_each_pipe_static cannot be used for limiting pipe iteration. This api will provide limits the pipe iteration v2: Handle fused pipes (Petri) Add a variable pipe count (Bhanu) v3: change api name as suggested (Petri) Cc: Uma Shankar <redacted> Cc: Juha-Pekka Heikkilä <redacted> Cc: Modem Bhanuprakash <redacted> Cc: Karthik B S <redacted> Cc: Petri Latvala <redacted> Signed-off-by: Patnana Venkata Sai <redacted> --- lib/igt_kms.h | 12 ++++++++++++ 1 file changed, 12 insertions(+)diff --git a/lib/igt_kms.h b/lib/igt_kms.h index 09b10b3e04..7dbf14483c 100644 --- a/lib/igt_kms.h +++ b/lib/igt_kms.h@@ -534,6 +534,18 @@ static inline bool igt_output_is_connected(igt_output_t *output) for_each_pipe_static(pipe) \ for_each_if((display)->pipes[(pipe)].enabled) +/** + * for_each_pipe_clamped: + * @display: a pointer to an #igt_display_t structure + * @pipe: The pipe to iterate. + * @pipe_count: Number of pipes to be iterate + * + * This for loop iterates based on pipe_count and supported by IGT libraries, + */ +#define for_each_pipe_clamped(display, pipe, pipe_count) \ + for_each_pipe_static(pipe) \ + for_each_if((display)->pipes[(pipe)].enabled) \ + for_each_if(pipe_count-- > 0)
This is awkward to use. It requires an lvalue as the third parameter,
and doesn't restore it after the loop is done. Patch 2/2 completely
breaks testing when running multiple subtests at a time.
You need something like
#define for_each_pipe_clamped(display, pipe, count) \
for (int igt_tokencat(__tmpint,__LINE__) = 0, pipe = 0; \
igt_tokencat(__tmpint,__LINE__) < (count) && (pipe) < IGT_MAX_PIPES; \
(pipe) ++) \
for_each_if((display)->pipes[(pipe)].enabled) \
for_each_if(igt_tokencat(__tmpint,__LINE__) ++)
(Above code completely untested)
--
Petri Latvala
/** * for_each_pipe_with_valid_output: * @display: a pointer to an #igt_display_t structure -- 2.25.1
_______________________________________________ igt-dev mailing list igt-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/igt-dev