Skip to content

Commit 6295d60

Browse files
committed
drm: Add modeset object iterators
And roll them out across drm_* files. The point here isn't code prettification (it helps with that too) but that some of these lists aren't static any more. And having macros will gives us a convenient place to put locking checks into. I didn't add an iterator for props since that's only used by a list_for_each_entry_safe in the driver teardown code. Search&replace was done with the below cocci spatch. Note that there's a bunch more places that didn't match and which would need some manual changes, but I've intentially left these out for this mostly automated patch. iterator name drm_for_each_crtc; struct drm_crtc *crtc; struct drm_device *dev; expression head; @@ - list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) { + drm_for_each_crtc (crtc, dev) { ... } @@ iterator name drm_for_each_encoder; struct drm_encoder *encoder; struct drm_device *dev; expression head; @@ - list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) { + drm_for_each_encoder (encoder, dev) { ... } @@ iterator name drm_for_each_fb; struct drm_framebuffer *fb; struct drm_device *dev; expression head; @@ - list_for_each_entry(fb, &dev->mode_config.fb_list, head) { + drm_for_each_fb (fb, dev) { ... } @@ iterator name drm_for_each_connector; struct drm_connector *connector; struct drm_device *dev; expression head; @@ - list_for_each_entry(connector, &dev->mode_config.connector_list, head) { + drm_for_each_connector (connector, dev) { ... } Reviewed-by: Maarten Lankhorst <[email protected]> Signed-off-by: Daniel Vetter <[email protected]>
1 parent 4ea50e9 commit 6295d60

File tree

6 files changed

+49
-39
lines changed

6 files changed

+49
-39
lines changed

drivers/gpu/drm/drm_crtc.c

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -615,7 +615,7 @@ void drm_framebuffer_remove(struct drm_framebuffer *fb)
615615
if (atomic_read(&fb->refcount.refcount) > 1) {
616616
drm_modeset_lock_all(dev);
617617
/* remove from any CRTC */
618-
list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
618+
drm_for_each_crtc(crtc, dev) {
619619
if (crtc->primary->fb == fb) {
620620
/* should turn off the crtc */
621621
memset(&set, 0, sizeof(struct drm_mode_set));
@@ -627,7 +627,7 @@ void drm_framebuffer_remove(struct drm_framebuffer *fb)
627627
}
628628
}
629629

630-
list_for_each_entry(plane, &dev->mode_config.plane_list, head) {
630+
drm_for_each_plane(plane, dev) {
631631
if (plane->fb == fb)
632632
drm_plane_force_disable(plane);
633633
}
@@ -1305,7 +1305,7 @@ drm_plane_from_index(struct drm_device *dev, int idx)
13051305
struct drm_plane *plane;
13061306
unsigned int i = 0;
13071307

1308-
list_for_each_entry(plane, &dev->mode_config.plane_list, head) {
1308+
drm_for_each_plane(plane, dev) {
13091309
if (i == idx)
13101310
return plane;
13111311
i++;
@@ -1838,8 +1838,7 @@ int drm_mode_getresources(struct drm_device *dev, void *data,
18381838
copied = 0;
18391839
crtc_id = (uint32_t __user *)(unsigned long)card_res->crtc_id_ptr;
18401840
if (!mode_group) {
1841-
list_for_each_entry(crtc, &dev->mode_config.crtc_list,
1842-
head) {
1841+
drm_for_each_crtc(crtc, dev) {
18431842
DRM_DEBUG_KMS("[CRTC:%d]\n", crtc->base.id);
18441843
if (put_user(crtc->base.id, crtc_id + copied)) {
18451844
ret = -EFAULT;
@@ -1865,9 +1864,7 @@ int drm_mode_getresources(struct drm_device *dev, void *data,
18651864
copied = 0;
18661865
encoder_id = (uint32_t __user *)(unsigned long)card_res->encoder_id_ptr;
18671866
if (!mode_group) {
1868-
list_for_each_entry(encoder,
1869-
&dev->mode_config.encoder_list,
1870-
head) {
1867+
drm_for_each_encoder(encoder, dev) {
18711868
DRM_DEBUG_KMS("[ENCODER:%d:%s]\n", encoder->base.id,
18721869
encoder->name);
18731870
if (put_user(encoder->base.id, encoder_id +
@@ -1896,9 +1893,7 @@ int drm_mode_getresources(struct drm_device *dev, void *data,
18961893
copied = 0;
18971894
connector_id = (uint32_t __user *)(unsigned long)card_res->connector_id_ptr;
18981895
if (!mode_group) {
1899-
list_for_each_entry(connector,
1900-
&dev->mode_config.connector_list,
1901-
head) {
1896+
drm_for_each_connector(connector, dev) {
19021897
DRM_DEBUG_KMS("[CONNECTOR:%d:%s]\n",
19031898
connector->base.id,
19041899
connector->name);
@@ -2187,7 +2182,7 @@ static struct drm_crtc *drm_encoder_get_crtc(struct drm_encoder *encoder)
21872182

21882183
/* For atomic drivers only state objects are synchronously updated and
21892184
* protected by modeset locks, so check those first. */
2190-
list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
2185+
drm_for_each_connector(connector, dev) {
21912186
if (!connector->state)
21922187
continue;
21932188

@@ -5393,7 +5388,7 @@ void drm_mode_config_reset(struct drm_device *dev)
53935388
if (encoder->funcs->reset)
53945389
encoder->funcs->reset(encoder);
53955390

5396-
list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
5391+
drm_for_each_connector(connector, dev) {
53975392
connector->status = connector_status_unknown;
53985393

53995394
if (connector->funcs->reset)

drivers/gpu/drm/drm_crtc_helper.c

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -180,15 +180,15 @@ static void __drm_helper_disable_unused_functions(struct drm_device *dev)
180180

181181
drm_warn_on_modeset_not_all_locked(dev);
182182

183-
list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
183+
drm_for_each_encoder(encoder, dev) {
184184
if (!drm_helper_encoder_in_use(encoder)) {
185185
drm_encoder_disable(encoder);
186186
/* disconnect encoder from any connector */
187187
encoder->crtc = NULL;
188188
}
189189
}
190190

191-
list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
191+
drm_for_each_crtc(crtc, dev) {
192192
const struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;
193193
crtc->enabled = drm_helper_crtc_in_use(crtc);
194194
if (!crtc->enabled) {
@@ -230,7 +230,7 @@ drm_crtc_prepare_encoders(struct drm_device *dev)
230230
const struct drm_encoder_helper_funcs *encoder_funcs;
231231
struct drm_encoder *encoder;
232232

233-
list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
233+
drm_for_each_encoder(encoder, dev) {
234234
encoder_funcs = encoder->helper_private;
235235
/* Disable unused encoders */
236236
if (encoder->crtc == NULL)
@@ -305,7 +305,7 @@ bool drm_crtc_helper_set_mode(struct drm_crtc *crtc,
305305
* adjust it according to limitations or connector properties, and also
306306
* a chance to reject the mode entirely.
307307
*/
308-
list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
308+
drm_for_each_encoder(encoder, dev) {
309309

310310
if (encoder->crtc != crtc)
311311
continue;
@@ -334,7 +334,7 @@ bool drm_crtc_helper_set_mode(struct drm_crtc *crtc,
334334
crtc->hwmode = *adjusted_mode;
335335

336336
/* Prepare the encoders and CRTCs before setting the mode. */
337-
list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
337+
drm_for_each_encoder(encoder, dev) {
338338

339339
if (encoder->crtc != crtc)
340340
continue;
@@ -359,7 +359,7 @@ bool drm_crtc_helper_set_mode(struct drm_crtc *crtc,
359359
if (!ret)
360360
goto done;
361361

362-
list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
362+
drm_for_each_encoder(encoder, dev) {
363363

364364
if (encoder->crtc != crtc)
365365
continue;
@@ -376,7 +376,7 @@ bool drm_crtc_helper_set_mode(struct drm_crtc *crtc,
376376
/* Now enable the clocks, plane, pipe, and connectors that we set up. */
377377
crtc_funcs->commit(crtc);
378378

379-
list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
379+
drm_for_each_encoder(encoder, dev) {
380380

381381
if (encoder->crtc != crtc)
382382
continue;
@@ -418,11 +418,11 @@ drm_crtc_helper_disable(struct drm_crtc *crtc)
418418
struct drm_encoder *encoder;
419419

420420
/* Decouple all encoders and their attached connectors from this crtc */
421-
list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
421+
drm_for_each_encoder(encoder, dev) {
422422
if (encoder->crtc != crtc)
423423
continue;
424424

425-
list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
425+
drm_for_each_connector(connector, dev) {
426426
if (connector->encoder != encoder)
427427
continue;
428428

@@ -519,12 +519,12 @@ int drm_crtc_helper_set_config(struct drm_mode_set *set)
519519
* restored, not the drivers personal bookkeeping.
520520
*/
521521
count = 0;
522-
list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
522+
drm_for_each_encoder(encoder, dev) {
523523
save_encoders[count++] = *encoder;
524524
}
525525

526526
count = 0;
527-
list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
527+
drm_for_each_connector(connector, dev) {
528528
save_connectors[count++] = *connector;
529529
}
530530

@@ -562,7 +562,7 @@ int drm_crtc_helper_set_config(struct drm_mode_set *set)
562562

563563
/* a) traverse passed in connector list and get encoders for them */
564564
count = 0;
565-
list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
565+
drm_for_each_connector(connector, dev) {
566566
const struct drm_connector_helper_funcs *connector_funcs =
567567
connector->helper_private;
568568
new_encoder = connector->encoder;
@@ -602,7 +602,7 @@ int drm_crtc_helper_set_config(struct drm_mode_set *set)
602602
}
603603

604604
count = 0;
605-
list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
605+
drm_for_each_connector(connector, dev) {
606606
if (!connector->encoder)
607607
continue;
608608

@@ -685,12 +685,12 @@ int drm_crtc_helper_set_config(struct drm_mode_set *set)
685685
fail:
686686
/* Restore all previous data. */
687687
count = 0;
688-
list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
688+
drm_for_each_encoder(encoder, dev) {
689689
*encoder = save_encoders[count++];
690690
}
691691

692692
count = 0;
693-
list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
693+
drm_for_each_connector(connector, dev) {
694694
*connector = save_connectors[count++];
695695
}
696696

@@ -862,7 +862,7 @@ void drm_helper_resume_force_mode(struct drm_device *dev)
862862
bool ret;
863863

864864
drm_modeset_lock_all(dev);
865-
list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
865+
drm_for_each_crtc(crtc, dev) {
866866

867867
if (!crtc->enabled)
868868
continue;
@@ -876,7 +876,7 @@ void drm_helper_resume_force_mode(struct drm_device *dev)
876876

877877
/* Turn off outputs that were already powered off */
878878
if (drm_helper_choose_crtc_dpms(crtc)) {
879-
list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
879+
drm_for_each_encoder(encoder, dev) {
880880

881881
if(encoder->crtc != crtc)
882882
continue;

drivers/gpu/drm/drm_fb_helper.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ int drm_fb_helper_single_add_all_connectors(struct drm_fb_helper *fb_helper)
9898
struct drm_connector *connector;
9999
int i;
100100

101-
list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
101+
drm_for_each_connector(connector, dev) {
102102
struct drm_fb_helper_connector *fb_helper_connector;
103103

104104
fb_helper_connector = kzalloc(sizeof(struct drm_fb_helper_connector), GFP_KERNEL);
@@ -269,7 +269,7 @@ static struct drm_framebuffer *drm_mode_config_fb(struct drm_crtc *crtc)
269269
struct drm_device *dev = crtc->dev;
270270
struct drm_crtc *c;
271271

272-
list_for_each_entry(c, &dev->mode_config.crtc_list, head) {
272+
drm_for_each_crtc(c, dev) {
273273
if (crtc->base.id == c->base.id)
274274
return c->primary->fb;
275275
}
@@ -321,7 +321,7 @@ static bool restore_fbdev_mode(struct drm_fb_helper *fb_helper)
321321

322322
drm_warn_on_modeset_not_all_locked(dev);
323323

324-
list_for_each_entry(plane, &dev->mode_config.plane_list, head) {
324+
drm_for_each_plane(plane, dev) {
325325
if (plane->type != DRM_PLANE_TYPE_PRIMARY)
326326
drm_plane_force_disable(plane);
327327

@@ -458,7 +458,7 @@ static bool drm_fb_helper_is_bound(struct drm_fb_helper *fb_helper)
458458
if (dev->primary->master)
459459
return false;
460460

461-
list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
461+
drm_for_each_crtc(crtc, dev) {
462462
if (crtc->primary->fb)
463463
crtcs_bound++;
464464
if (crtc->primary->fb == fb_helper->fb)
@@ -655,7 +655,7 @@ int drm_fb_helper_init(struct drm_device *dev,
655655
}
656656

657657
i = 0;
658-
list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
658+
drm_for_each_crtc(crtc, dev) {
659659
fb_helper->crtc_info[i].mode_set.crtc = crtc;
660660
i++;
661661
}

drivers/gpu/drm/drm_of.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ static uint32_t drm_crtc_port_mask(struct drm_device *dev,
1919
unsigned int index = 0;
2020
struct drm_crtc *tmp;
2121

22-
list_for_each_entry(tmp, &dev->mode_config.crtc_list, head) {
22+
drm_for_each_crtc(tmp, dev) {
2323
if (tmp->port == port)
2424
return 1 << index;
2525

drivers/gpu/drm/drm_probe_helper.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -312,7 +312,7 @@ static void output_poll_execute(struct work_struct *work)
312312
goto out;
313313

314314
mutex_lock(&dev->mode_config.mutex);
315-
list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
315+
drm_for_each_connector(connector, dev) {
316316

317317
/* Ignore forced connectors. */
318318
if (connector->force)
@@ -413,7 +413,7 @@ void drm_kms_helper_poll_enable(struct drm_device *dev)
413413
if (!dev->mode_config.poll_enabled || !drm_kms_helper_poll)
414414
return;
415415

416-
list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
416+
drm_for_each_connector(connector, dev) {
417417
if (connector->polled & (DRM_CONNECTOR_POLL_CONNECT |
418418
DRM_CONNECTOR_POLL_DISCONNECT))
419419
poll = true;
@@ -495,7 +495,7 @@ bool drm_helper_hpd_irq_event(struct drm_device *dev)
495495
return false;
496496

497497
mutex_lock(&dev->mode_config.mutex);
498-
list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
498+
drm_for_each_connector(connector, dev) {
499499

500500
/* Only handle HPD capable connectors. */
501501
if (!(connector->polled & DRM_CONNECTOR_POLL_HPD))

include/drm/drm_crtc.h

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1583,4 +1583,19 @@ static inline struct drm_property *drm_property_find(struct drm_device *dev,
15831583
list_for_each_entry(plane, &(dev)->mode_config.plane_list, head) \
15841584
if (plane->type == DRM_PLANE_TYPE_OVERLAY)
15851585

1586+
#define drm_for_each_plane(plane, dev) \
1587+
list_for_each_entry(plane, &(dev)->mode_config.plane_list, head)
1588+
1589+
#define drm_for_each_crtc(crtc, dev) \
1590+
list_for_each_entry(crtc, &(dev)->mode_config.crtc_list, head)
1591+
1592+
#define drm_for_each_connector(connector, dev) \
1593+
list_for_each_entry(connector, &(dev)->mode_config.connector_list, head)
1594+
1595+
#define drm_for_each_encoder(encoder, dev) \
1596+
list_for_each_entry(encoder, &(dev)->mode_config.encoder_list, head)
1597+
1598+
#define drm_for_each_fb(fb, dev) \
1599+
list_for_each_entry(fb, &(dev)->mode_config.fb_list, head)
1600+
15861601
#endif /* __DRM_CRTC_H__ */

0 commit comments

Comments
 (0)