Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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 <maarten.lankhorst@linux.intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>

+49 -39
+8 -13
drivers/gpu/drm/drm_crtc.c
··· 615 615 if (atomic_read(&fb->refcount.refcount) > 1) { 616 616 drm_modeset_lock_all(dev); 617 617 /* remove from any CRTC */ 618 - list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) { 618 + drm_for_each_crtc(crtc, dev) { 619 619 if (crtc->primary->fb == fb) { 620 620 /* should turn off the crtc */ 621 621 memset(&set, 0, sizeof(struct drm_mode_set)); ··· 627 627 } 628 628 } 629 629 630 - list_for_each_entry(plane, &dev->mode_config.plane_list, head) { 630 + drm_for_each_plane(plane, dev) { 631 631 if (plane->fb == fb) 632 632 drm_plane_force_disable(plane); 633 633 } ··· 1305 1305 struct drm_plane *plane; 1306 1306 unsigned int i = 0; 1307 1307 1308 - list_for_each_entry(plane, &dev->mode_config.plane_list, head) { 1308 + drm_for_each_plane(plane, dev) { 1309 1309 if (i == idx) 1310 1310 return plane; 1311 1311 i++; ··· 1838 1838 copied = 0; 1839 1839 crtc_id = (uint32_t __user *)(unsigned long)card_res->crtc_id_ptr; 1840 1840 if (!mode_group) { 1841 - list_for_each_entry(crtc, &dev->mode_config.crtc_list, 1842 - head) { 1841 + drm_for_each_crtc(crtc, dev) { 1843 1842 DRM_DEBUG_KMS("[CRTC:%d]\n", crtc->base.id); 1844 1843 if (put_user(crtc->base.id, crtc_id + copied)) { 1845 1844 ret = -EFAULT; ··· 1864 1865 copied = 0; 1865 1866 encoder_id = (uint32_t __user *)(unsigned long)card_res->encoder_id_ptr; 1866 1867 if (!mode_group) { 1867 - list_for_each_entry(encoder, 1868 - &dev->mode_config.encoder_list, 1869 - head) { 1868 + drm_for_each_encoder(encoder, dev) { 1870 1869 DRM_DEBUG_KMS("[ENCODER:%d:%s]\n", encoder->base.id, 1871 1870 encoder->name); 1872 1871 if (put_user(encoder->base.id, encoder_id + ··· 1893 1896 copied = 0; 1894 1897 connector_id = (uint32_t __user *)(unsigned long)card_res->connector_id_ptr; 1895 1898 if (!mode_group) { 1896 - list_for_each_entry(connector, 1897 - &dev->mode_config.connector_list, 1898 - head) { 1899 + drm_for_each_connector(connector, dev) { 1899 1900 DRM_DEBUG_KMS("[CONNECTOR:%d:%s]\n", 1900 1901 connector->base.id, 1901 1902 connector->name); ··· 2182 2187 2183 2188 /* For atomic drivers only state objects are synchronously updated and 2184 2189 * protected by modeset locks, so check those first. */ 2185 - list_for_each_entry(connector, &dev->mode_config.connector_list, head) { 2190 + drm_for_each_connector(connector, dev) { 2186 2191 if (!connector->state) 2187 2192 continue; 2188 2193 ··· 5388 5393 if (encoder->funcs->reset) 5389 5394 encoder->funcs->reset(encoder); 5390 5395 5391 - list_for_each_entry(connector, &dev->mode_config.connector_list, head) { 5396 + drm_for_each_connector(connector, dev) { 5392 5397 connector->status = connector_status_unknown; 5393 5398 5394 5399 if (connector->funcs->reset)
+17 -17
drivers/gpu/drm/drm_crtc_helper.c
··· 180 180 181 181 drm_warn_on_modeset_not_all_locked(dev); 182 182 183 - list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) { 183 + drm_for_each_encoder(encoder, dev) { 184 184 if (!drm_helper_encoder_in_use(encoder)) { 185 185 drm_encoder_disable(encoder); 186 186 /* disconnect encoder from any connector */ ··· 188 188 } 189 189 } 190 190 191 - list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) { 191 + drm_for_each_crtc(crtc, dev) { 192 192 const struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private; 193 193 crtc->enabled = drm_helper_crtc_in_use(crtc); 194 194 if (!crtc->enabled) { ··· 230 230 const struct drm_encoder_helper_funcs *encoder_funcs; 231 231 struct drm_encoder *encoder; 232 232 233 - list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) { 233 + drm_for_each_encoder(encoder, dev) { 234 234 encoder_funcs = encoder->helper_private; 235 235 /* Disable unused encoders */ 236 236 if (encoder->crtc == NULL) ··· 305 305 * adjust it according to limitations or connector properties, and also 306 306 * a chance to reject the mode entirely. 307 307 */ 308 - list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) { 308 + drm_for_each_encoder(encoder, dev) { 309 309 310 310 if (encoder->crtc != crtc) 311 311 continue; ··· 334 334 crtc->hwmode = *adjusted_mode; 335 335 336 336 /* 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) { 338 338 339 339 if (encoder->crtc != crtc) 340 340 continue; ··· 359 359 if (!ret) 360 360 goto done; 361 361 362 - list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) { 362 + drm_for_each_encoder(encoder, dev) { 363 363 364 364 if (encoder->crtc != crtc) 365 365 continue; ··· 376 376 /* Now enable the clocks, plane, pipe, and connectors that we set up. */ 377 377 crtc_funcs->commit(crtc); 378 378 379 - list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) { 379 + drm_for_each_encoder(encoder, dev) { 380 380 381 381 if (encoder->crtc != crtc) 382 382 continue; ··· 418 418 struct drm_encoder *encoder; 419 419 420 420 /* 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) { 422 422 if (encoder->crtc != crtc) 423 423 continue; 424 424 425 - list_for_each_entry(connector, &dev->mode_config.connector_list, head) { 425 + drm_for_each_connector(connector, dev) { 426 426 if (connector->encoder != encoder) 427 427 continue; 428 428 ··· 519 519 * restored, not the drivers personal bookkeeping. 520 520 */ 521 521 count = 0; 522 - list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) { 522 + drm_for_each_encoder(encoder, dev) { 523 523 save_encoders[count++] = *encoder; 524 524 } 525 525 526 526 count = 0; 527 - list_for_each_entry(connector, &dev->mode_config.connector_list, head) { 527 + drm_for_each_connector(connector, dev) { 528 528 save_connectors[count++] = *connector; 529 529 } 530 530 ··· 562 562 563 563 /* a) traverse passed in connector list and get encoders for them */ 564 564 count = 0; 565 - list_for_each_entry(connector, &dev->mode_config.connector_list, head) { 565 + drm_for_each_connector(connector, dev) { 566 566 const struct drm_connector_helper_funcs *connector_funcs = 567 567 connector->helper_private; 568 568 new_encoder = connector->encoder; ··· 602 602 } 603 603 604 604 count = 0; 605 - list_for_each_entry(connector, &dev->mode_config.connector_list, head) { 605 + drm_for_each_connector(connector, dev) { 606 606 if (!connector->encoder) 607 607 continue; 608 608 ··· 685 685 fail: 686 686 /* Restore all previous data. */ 687 687 count = 0; 688 - list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) { 688 + drm_for_each_encoder(encoder, dev) { 689 689 *encoder = save_encoders[count++]; 690 690 } 691 691 692 692 count = 0; 693 - list_for_each_entry(connector, &dev->mode_config.connector_list, head) { 693 + drm_for_each_connector(connector, dev) { 694 694 *connector = save_connectors[count++]; 695 695 } 696 696 ··· 862 862 bool ret; 863 863 864 864 drm_modeset_lock_all(dev); 865 - list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) { 865 + drm_for_each_crtc(crtc, dev) { 866 866 867 867 if (!crtc->enabled) 868 868 continue; ··· 876 876 877 877 /* Turn off outputs that were already powered off */ 878 878 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) { 880 880 881 881 if(encoder->crtc != crtc) 882 882 continue;
+5 -5
drivers/gpu/drm/drm_fb_helper.c
··· 98 98 struct drm_connector *connector; 99 99 int i; 100 100 101 - list_for_each_entry(connector, &dev->mode_config.connector_list, head) { 101 + drm_for_each_connector(connector, dev) { 102 102 struct drm_fb_helper_connector *fb_helper_connector; 103 103 104 104 fb_helper_connector = kzalloc(sizeof(struct drm_fb_helper_connector), GFP_KERNEL); ··· 269 269 struct drm_device *dev = crtc->dev; 270 270 struct drm_crtc *c; 271 271 272 - list_for_each_entry(c, &dev->mode_config.crtc_list, head) { 272 + drm_for_each_crtc(c, dev) { 273 273 if (crtc->base.id == c->base.id) 274 274 return c->primary->fb; 275 275 } ··· 321 321 322 322 drm_warn_on_modeset_not_all_locked(dev); 323 323 324 - list_for_each_entry(plane, &dev->mode_config.plane_list, head) { 324 + drm_for_each_plane(plane, dev) { 325 325 if (plane->type != DRM_PLANE_TYPE_PRIMARY) 326 326 drm_plane_force_disable(plane); 327 327 ··· 458 458 if (dev->primary->master) 459 459 return false; 460 460 461 - list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) { 461 + drm_for_each_crtc(crtc, dev) { 462 462 if (crtc->primary->fb) 463 463 crtcs_bound++; 464 464 if (crtc->primary->fb == fb_helper->fb) ··· 655 655 } 656 656 657 657 i = 0; 658 - list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) { 658 + drm_for_each_crtc(crtc, dev) { 659 659 fb_helper->crtc_info[i].mode_set.crtc = crtc; 660 660 i++; 661 661 }
+1 -1
drivers/gpu/drm/drm_of.c
··· 19 19 unsigned int index = 0; 20 20 struct drm_crtc *tmp; 21 21 22 - list_for_each_entry(tmp, &dev->mode_config.crtc_list, head) { 22 + drm_for_each_crtc(tmp, dev) { 23 23 if (tmp->port == port) 24 24 return 1 << index; 25 25
+3 -3
drivers/gpu/drm/drm_probe_helper.c
··· 312 312 goto out; 313 313 314 314 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) { 316 316 317 317 /* Ignore forced connectors. */ 318 318 if (connector->force) ··· 413 413 if (!dev->mode_config.poll_enabled || !drm_kms_helper_poll) 414 414 return; 415 415 416 - list_for_each_entry(connector, &dev->mode_config.connector_list, head) { 416 + drm_for_each_connector(connector, dev) { 417 417 if (connector->polled & (DRM_CONNECTOR_POLL_CONNECT | 418 418 DRM_CONNECTOR_POLL_DISCONNECT)) 419 419 poll = true; ··· 495 495 return false; 496 496 497 497 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) { 499 499 500 500 /* Only handle HPD capable connectors. */ 501 501 if (!(connector->polled & DRM_CONNECTOR_POLL_HPD))
+15
include/drm/drm_crtc.h
··· 1583 1583 list_for_each_entry(plane, &(dev)->mode_config.plane_list, head) \ 1584 1584 if (plane->type == DRM_PLANE_TYPE_OVERLAY) 1585 1585 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 + 1586 1601 #endif /* __DRM_CRTC_H__ */