7

gallium: deduplicate etnaviv, freedreno & lima `screen_lookup_or_create` fun...

 1 year ago
source link: https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20180
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Activity

    • d8a77d4e - v3d: deduplicate file descriptors referring to the same underlying file description

    Compare with previous version

    • 168593f6 - vc4: keep track of and reuse screens
    • 4ce8a1ab - v3d: deduplicate file descriptors referring to the same underlying file description
    • ef3d9227 - vc4: deduplicate file descriptors referring to the same underlying file description

    Compare with previous version

  • Eric Engestrom changed title from Draft: v3d: keep track of and reuse screens to Draft: v3d & vc4: keep track of and reuse screens 5 months ago
    • Thanks a lot for looking into this @eric! Would the same approach work for panfrost as well, and is there a chance of talking you into expanding this MR? :P

    • P.S.: in case of Panfrost I could help testing and debugging the Mutter side.

    • Yeah, once I get it to work I'm going to de-duplicate this with existing implementations, at which point it will hopefully be easy to add it to the drivers that don't have it yet.

      Speaking of getting it to work, would you be available on IRC to have a live conversation (perhaps on Monday, as it's already late here)?
      I'm not sure I quite understand all the parts and how they interact.

    • Sure, feel free to ping me (CET here). @daenzer is probably an even better address though.

    • Please register or sign in to reply
    • ef3d9227...e2dc32d7 - 549 commits from branch mesa:main
    • 4dda18d3 - gallium/u_screen.h: add missing stdint.h include
    • e71cff8b - gallium: move etnaviv screen_lookup_or_create function to common code
    • 3aa07a90 - freedreno: replace custom code with u_pipe_screen_lookup_or_create()
    • 12b14c3a - lima: replace custom code with u_pipe_screen_lookup_or_create()
    • f3d35a87 - v3d: use u_pipe_screen_lookup_or_create() to keep track of and reuse screens
    • 295f0911 - vc4: use u_pipe_screen_lookup_or_create() to keep track of and reuse screens
    • 42426f33 - panfrost: use u_pipe_screen_lookup_or_create() to keep track of and reuse screens

    Compare with previous version

    Toggle commit list
  • Eric Engestrom changed title from Draft: v3d & vc4: keep track of and reuse screens to Draft: gallium: deduplicate etnaviv, freedreno, lima screen_lookup_or_create functionality, and reuse it in v3d, vc4 & panfrost 5 months ago
  • Eric Engestrom changed title from Draft: gallium: deduplicate etnaviv, freedreno, lima screen_lookup_or_create functionality, and reuse it in v3d, vc4 & panfrost to Draft: gallium: deduplicate etnaviv, freedreno & lima {++}screen_lookup_or_create{++} functionality, and reuse it in v3d, vc4 & panfrost 5 months ago
    • Made it into a common helper, which etnaviv, freedreno & lima now use, and added the functionality to v3d, vc4 & panfrost.

      @rmader you mentioned you can test it on panfrost; I would love that :)

      When testing on rpi4 the flickering (that I can reproduce by dragging the mouse in glmark2-wayland --fullscreen) is still there, but I think it might be because v3d actually uses parts of vc4 (specifically it uses vc4_drm_screen_create() + v3d_drm_screen_create_renderonly()) and things might not be deduplicated the right way between the two (but also I'm not sure what the "right way" would be). I expect things should work on other drivers, but unfortunately I don't have the hardware to test them.

      This MR is a draft because of all of the above, but if you have the hardware please do test it (and report back 😜)

    • I think it might be because v3d actually uses parts of vc4 (specifically it uses vc4_drm_screen_create() + v3d_drm_screen_create_renderonly()) and things might not be deduplicated the right way between the two (but also I'm not sure what the "right way" would be).

      In some cases like this, deduplication of screens isn't really possible. Instead, if the BO was allocated for a different DRM file description than the one referenced by the fd passed to gbm_create_device, the BO needs to be imported into that DRM file description (e.g. by exporting and re-importing a dma-buf) and the GEM handle of that re-imported BO be returned for gbm_bo_get_handle(_for_plane). See e.g. iris_bo_export_gem_handle_for_device.

    • Ah, that makes sense, thanks for the explanation!

      I'm off work today, but I'll try to do that tomorrow :)

    • Please register or sign in to reply
    • panfrost changes look ok to me, but I don't understand any of the WSI details (and I think I like it that way ;) ) so not going to try to review in detail.

    • Please register or sign in to reply
    • 3ddcab70 - panfrost: use u_pipe_screen_lookup_or_create() to keep track of and reuse screens

    Compare with previous version

    • I think if you use ro->kms_fd as your hash key, that will get the right deduping for the kmsro case too. As is, each kmsro screen create from the same display device will open a new gpu_fd

    • (thankyouthankyouthankyou for deduping this code!)

    • Ah, thanks, so basically int index_fd = ro ? ro->kms_fd : gpu_fd; and use that in util_hash_table_get() and _mesa_hash_table_insert()?

      That actually brings back something I forgot to look into: in _mesa_hash_table_insert(), isn't the fd we get from the screen always going to be gpu_fd (or index_fd after the above)? I wanted to look into why the previous code was getting the fd back from the screen here instead of using the fd already there, as I expect it would always be the same one (or a dup thereof) stored in there.

      I'll look into all that tomorrow, asking this both as a note to self and in case you already know the answer off the top of your head :)

    • Sorry, no off-the-top-of-head answers here :)

    • So, I checked the drivers affected by this MR: asahi, etnaviv, lima, panfrost, v3d & vc4 all store the fd itself, while freedreno stores a dup of the fd (which makes no difference in the hash table, thanks to hash_file_description()).

      Dropping the fd read-back, and doing that int key_fd = ro ? ro->kms_fd : gpu_fd;.

      Do we have any test that does multiple eglInitialize() (that's when screen_create() is called, right?), other than egl_khr_display_reference that we don't yet support (it's the only one I could find)? The more change I do, the less confident I get that "just run mutter and glmark on it" is enough to validate it.

      (Is that a sign I should finish that MR? 😅)

    • Please register or sign in to reply
  • Yonggang Luo @lygstate started a thread on an outdated change in commit 4dda18d3 5 months ago
    Resolved 5 months ago by Eric Engestrom
  • Robert Mader @rmader started a thread on an outdated change in commit e71cff8b 5 months ago
    Resolved 5 months ago by Eric Engestrom
  • Thanks a lot for this! Will need a few days before I can test on my Pinebook Pro, though.

    @vanvugt, can you maybe confirm that this makes https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2688 redundant for the Raspberry Pi?

  • Eric Engestrom @eric started a thread on an outdated change in commit 3ddcab70 5 months ago
    Resolved 5 months ago by Eric Engestrom
    • 3ddcab70...ba31ec0d - 88 commits from branch mesa:main
    • 44069250 - gallium/u_screen.h: add missing stdint.h include
    • 66365d8e - gallium: move etnaviv screen_lookup_or_create function to common code
    • 307d536c - freedreno: replace custom code with u_pipe_screen_lookup_or_create()
    • 7cf636c1 - lima: replace custom code with u_pipe_screen_lookup_or_create()
    • 3ef6ac92 - v3d: use u_pipe_screen_lookup_or_create() to keep track of and reuse screens
    • 3f914a30 - vc4: use u_pipe_screen_lookup_or_create() to keep track of and reuse screens
    • b855309d - panfrost: use u_pipe_screen_lookup_or_create() to keep track of and reuse screens
    • 85731d35 - asahi: use u_pipe_screen_lookup_or_create() to keep track of and reuse screens

    Compare with previous version

    Toggle commit list
  • The commit splitting things out of etnaviv looks good to me.

    • 47d905ee - u_pipe_screen_lookup_or_create: avoid re-querying the fd to have a consistent hash key
    • 20d6a90f - u_pipe_screen_lookup_or_create: use ro->kms_fd as the lookup key for kmsro

    Compare with previous version

    • 20d6a90f...aab4a260 - 551 commits from branch mesa:main
    • e15ade0e - gallium/u_screen.h: add missing stdint.h include
    • 61c040bf - gallium: move etnaviv screen_lookup_or_create function to common code
    • 1ec607b9 - freedreno: replace custom code with u_pipe_screen_lookup_or_create()
    • bbe808f7 - lima: replace custom code with u_pipe_screen_lookup_or_create()
    • 8a1fa48a - v3d: use u_pipe_screen_lookup_or_create() to keep track of and reuse screens
    • b21eb775 - vc4: use u_pipe_screen_lookup_or_create() to keep track of and reuse screens
    • 981bb338 - panfrost: use u_pipe_screen_lookup_or_create() to keep track of and reuse screens
    • 05a6f338 - asahi: use u_pipe_screen_lookup_or_create() to keep track of and reuse screens
    • a605b3c0 - u_pipe_screen_lookup_or_create: avoid re-querying the fd to have a consistent hash key
    • b1db89c7 - u_pipe_screen_lookup_or_create: use ro->kms_fd as the lookup key for kmsro

    Compare with previous version

    Toggle commit list
    • I can't figure out how to properly test this, short of calling u_pipe_screen_lookup_or_create() twice in *_drm_screen_create_renderonly(), in which case I can see that the hash table works fine and the existing screen is returned the second time:

      I'm calling this MR ready, but I'd be grateful if someone could point out a non-hacky way to test this (ie. without having to change the driver code) 🙂

      (The latest rebase is just for panfrost & asahi's clang-format changes, no functional change.)

      Edited 4 months ago by Eric Engestrom
    • Ping 🙂

      I would love some reviews 🔍

    • Please register or sign in to reply
  • Eric Engestrom marked this merge request as ready 4 months ago
  • Eric Engestrom changed title from Draft: gallium: deduplicate etnaviv, freedreno & lima screen_lookup_or_create functionality, and reuse it in v3d, vc4 & panfrost to gallium: deduplicate etnaviv, freedreno & lima screen_lookup_or_create functionality, and reuse it in v3d, vc4, asahi & panfrost 4 months ago
    • Resolved 4 months ago by Eric Engestrom

      Subject: [PATCH 02/10] gallium: move etnaviv screen_lookup_or_create function

      A-b, didn't actually check the original logic though.

      Subject: [PATCH 07/10] panfrost: use u_pipe_screen_lookup_or_create() to keep

      nit: indentation after the clang-format rebase, other r-b

    • Please register or sign in to reply
    • Resolved 4 months ago by Eric Engestrom

      Subject: [PATCH 09/10] u_pipe_screen_lookup_or_create: avoid re-querying the fd to have a consistent hash key

      This really needs an extneded commit message. What was wrong before? How does this fix it? Or is this just an optimization?

    • Last reply by Eric Engestrom 4 months ago
    • Resolved 4 months ago by Eric Engestrom

      Subject: [PATCH 10/10] u_pipe_screen_lookup_or_create: use ro->kms_fd as the

      Likewise, this needs an extended commit message because I can't tell what issue this is addressing without reading the gitlab discussion that prompted it.

    • Last reply by Eric Engestrom 4 months ago
    • Resolved 4 months ago by Eric Engestrom

      I just saw that this is causing a crash in piglit glx-close-display:

      I haven't figured out what's going on exactly, but the fact it's happening on the second run of the test which has the following comment:

      Run a second to exercise reloading the *_dri.so driver.

      makes me guess that this memory belongs to the previous memory block for the driver, so I'm guessing something like this:

      1. test creates screen
      2. screen is allocated by X, with the vtbl pointing to the driver loaded
      3. test unloads the driver, reloads it
      4. test creates screen
      5. screen is found by u_pipe_screen_lookup_or_create() because it still exists in X's memory and is returned, with its vtbl pointing to now-unloaded memory

      I'm not sure how to fix this; is there a way to test in u_pipe_screen_lookup_or_create() if the screen's vtbl is within the loaded driver's memory? I couldn't find any way to do that, but plenty of people saying it's impossible (but it's only impossible until someone does it).

      Edited 4 months ago by Eric Engestrom
    • Last reply by Eric Engestrom 4 months ago
    • c92cea26 - gallium/u_screen.h: add missing stdint.h include
    • 871819f8 - gallium: move etnaviv screen_lookup_or_create function to common code
    • ff819a9b - freedreno: replace custom code with u_pipe_screen_lookup_or_create()
    • 9171a84e - lima: replace custom code with u_pipe_screen_lookup_or_create()
    • fd19973c - v3d: use u_pipe_screen_lookup_or_create() to keep track of and reuse screens
    • 40c8585f - vc4: use u_pipe_screen_lookup_or_create() to keep track of and reuse screens
    • fedb3cef - panfrost: use u_pipe_screen_lookup_or_create() to keep track of and reuse screens
    • 9f3a974b - asahi: use u_pipe_screen_lookup_or_create() to keep track of and reuse screens
    • 4a30854c - u_pipe_screen_lookup_or_create: avoid re-querying the fd to have a consistent hash key

    Compare with previous version

    Toggle commit list
    • @robclark @anholt could I ask you to review the freedreno commit? ff819a9b

      @anarsoul @enunes could I ask you to review the lima commit? 9171a84e

      For both of those, you'll want to also look at the commit that moves the etnaviv implementation to common code: 871819f8

      Thanks :)

    • a-b for the concept.. but I'll take a closer look a bit later today when I have some free minutes

    • a-b for lima changes. I'm not an expert in WSI though

    • a-b for me too for the lima changes, other than CI I gave it some tests locally and there doesn't seem to be any changes. Thanks!

    • Please register or sign in to reply
  • 86 86 * context.
    87 87 */
    88 88 struct pipe_screen {
    89 int refcnt;
    90 void *winsys_priv;
    91
    92 /**
    93 * Get the fd associated with the screen
    • nit, when it comes to fd's, it is probably a good idea to spell out the ownership (which AFAICT is that it is not a dup() that the caller owns/close()s but it is expected to be valid until the screen id destroyed)..

    • I'm wondering whether to add something like "Currently its only purpose is looking up the screen before destroying it." since that's the kind of comments that can bitrot easily 🤷

    • Please register or sign in to reply
  • 555
    556
    557 static bool
    558 equal_file_description(const void *key1, const void *key2)
    559 {
    560 int ret;
    561 int fd1 = pointer_to_intptr(key1);
    562 int fd2 = pointer_to_intptr(key2);
    563 struct stat stat1, stat2;
    564
    565 // If the file descriptors are the same, the file description will be too
    566 // This will also catch sentinels, such as -1
    567 if (fd1 == fd2)
    568 return true;
    569
    570 ret = os_same_file_description(fd1, fd2);
    • This is problematic with an android kernel, and I think older non-android kernels that do not have CONFIG_CHECKPOINT_RESTORE enabled. On the chromeos kernel we have a workaround to enable SYS_kcmp in a limited way, to only support this use-case (without allowing the SYSV_IPC stuff that android wants disabled).

      In the android case it just insta-dies, so we don't really have a chance to handle the error and fallback to something different:

      I'm not sure if there is some way we could probe at runtime for SYS_kcmp support?

      EDIT: Hmm, I guess the crash is a seccomp issue, which is maybe fixable (but probably also a thing that would cause headaches for other android uses?)

      Edited 4 months ago by Rob Clark
    • Since kernel 5.12 the needed functionality is enabled via CONFIG_KCMP, which is selected by DRM, so you don't need the full checkpoint restore enabled in the kernel for this to work properly.

    • There are kernels older than v5.12. Not to mention users on android devices with vendor (non-drm) kernel driver (turnip works on this config, and there is someone working on support for the gallium driver as well). Furthermore regardless of kernel version, android seccomp rules block kcmp, and I don't see any easy way around this.. it is insta-death if you try this syscall.

      Maybe the way forward is a meson build option to disable kcmp support? But without some solution for this, I'm hard-nak on this MR.

      (And because of the various environments where mesa needs to work with seccomp, I think we need to be more careful about introducing dependencies on new syscalls.)

    • @robclark would avoiding the kcmp path on android be ok?

      Edited 4 months ago by Eric Engestrom
    • I think that would be ok, the other prominent sandbox env that mesa needs to live in (ie. chrome/ium) does seem to permit kcmp. So android is the only problematic case that I am aware of.

    • I guess the question is whether this would be a regression; I don't know if seccomp is always on/this strict on android, or if there are cases where os_same_file_description() works fine right now on android?

      I guess iris/crocus would be the only case that might be affected as I don't think amdgpu and virgl are used on android, so pinging @tpalli for this question :)

    • radv/radeonsi and virgl/venus are both also used on android, at least in the context of CrOS. I'm not entirely sure at what point kcmp started getting blocked, I guess somewhere between P and R?

      I guess another way to look at it is whether the scenario where the better fd comparision of kcmp comes up on android? I guess not, or at least no one noticed any issue so far.

    • Is it possible to use the same DRM file descriptor (technically description) for multiple APIs (GL / Vulkan / VA-API / ...) on Android? If yes, it should be possible to hit issues without kcmp.

    • Actually with amdgpu it doesn't need to be the same file description, just the same device, since libdrm_amdgpu internally uses the same DRM file description for all contexts of the same device in the same process, and without kcmp the user-space drivers can't know whether that's the same file description they're using.

    • I don't think the same fd ends up getting shared on android, but I'm not super familiar with how the video stuff works. Sharing between APIs should be via dmabuf. At any rate, as far as I can tell, whatever works today on R does so without kcmp.

      Looking at platform_android and turnip, for example, they each do their own open() so handles would be unique between the APIs and dmabuf sharing across API would "just work"(TM). Fortunately we don't have something like libdrm_amdgpu trying to de-duplicate. I think de-duplication like that seems like it is going to be problematic. (But I wonder why libdrm_amdgpu is even a separate thing outside of mesa these days?)

      Anyways, we could have a separate meson build arg to enable kcmp, and just make the default for the option depend on whether it is android or not. That would work out of the box for the common cases but still allow amd to enable kcmp for devices with customized seccomp rules.

    • (But I wonder why libdrm_amdgpu is even a separate thing outside of mesa these days?)

      It's also used by AMD's non-Mesa UMDs, and required for correct interoperability with those.

    • Please register or sign in to reply
  • Are Reviewed-by: Jose Maria Casanova Crespo <[email protected]>

    • 6cc724f5 - gallium: move etnaviv screen_lookup_or_create function to common code
    • 61f655d2 - freedreno: replace custom code with u_pipe_screen_lookup_or_create()
    • dfd27527 - lima: replace custom code with u_pipe_screen_lookup_or_create()
    • 59b4d9f8 - v3d: use u_pipe_screen_lookup_or_create() to keep track of and reuse screens
    • 1c1bc4e6 - vc4: use u_pipe_screen_lookup_or_create() to keep track of and reuse screens
    • 21adf4bc - panfrost: use u_pipe_screen_lookup_or_create() to keep track of and reuse screens
    • 99764381 - asahi: use u_pipe_screen_lookup_or_create() to keep track of and reuse screens
    • 3334943a - u_pipe_screen_lookup_or_create: avoid re-querying the fd to have a consistent hash key
    • 1a00d810 - util: avoid calling kcmp on Android

    Compare with previous version

    Toggle commit list
    • If the meson bit in the new util/kcmp patch does what I expect it to, this looks like it should work (and probably fix #5312). I don't have a setup for testing on android atm, but I'll test that for good measure on Monday.

      But the patch ordering should probably change to move the util patch first (or at least before the freedreno conversion)

    • I had to make a small change to get this working:

    • I thought kcmp was available on android on chromeos, but not on "plain" android?

      Anyway, I integrated your patch and moved the commit to the beginning 👍

      Edited 3 months ago by Eric Engestrom
    • thanks

      jfwiw, I think kcmp was not blocked by seccomp with arc++ (android P), but is with arcvm (android R and later)

    • Thanks for the explanation, and for the r-b; does it apply to both this meson change and the freedreno commit, or only the former?

    • Awesome, thanks for your help!

      With that, everything is reviewed or acked, so -> merging 🙂

    • Please register or sign in to reply
    • fcda6968 - util: avoid calling kcmp on Android
    • 4d7a38e8 - gallium: move etnaviv screen_lookup_or_create function to common code
    • b5fa583f - freedreno: replace custom code with u_pipe_screen_lookup_or_create()
    • 2505e446 - lima: replace custom code with u_pipe_screen_lookup_or_create()
    • 9abf5e70 - v3d: use u_pipe_screen_lookup_or_create() to keep track of and reuse screens
    • 51fdf526 - vc4: use u_pipe_screen_lookup_or_create() to keep track of and reuse screens
    • d9e671ca - panfrost: use u_pipe_screen_lookup_or_create() to keep track of and reuse screens
    • 6ed3a3e9 - asahi: use u_pipe_screen_lookup_or_create() to keep track of and reuse screens
    • 80a0d514 - u_pipe_screen_lookup_or_create: avoid re-querying the fd to have a consistent hash key

    Compare with previous version

    Toggle commit list
    • 80a0d514...6ace3d6c - 1431 commits from branch mesa:main
    • 7b777037 - gallium/u_screen.h: add missing stdint.h include
    • 1c07f0d4 - util: avoid calling kcmp on Android
    • a5fcfa01 - gallium: move etnaviv screen_lookup_or_create function to common code
    • 96335c2e - freedreno: replace custom code with u_pipe_screen_lookup_or_create()
    • 48dca0c3 - lima: replace custom code with u_pipe_screen_lookup_or_create()
    • 809a2231 - v3d: use u_pipe_screen_lookup_or_create() to keep track of and reuse screens
    • 494471aa - vc4: use u_pipe_screen_lookup_or_create() to keep track of and reuse screens
    • 141b203d - panfrost: use u_pipe_screen_lookup_or_create() to keep track of and reuse screens
    • bb29bca5 - asahi: use u_pipe_screen_lookup_or_create() to keep track of and reuse screens
    • 1aaeb419 - u_pipe_screen_lookup_or_create: avoid re-querying the fd to have a consistent hash key

    Compare with previous version

    Toggle commit list
  • I couldn't merge this branch: CI failed!

    • 40399f39 - fixup! gallium: move etnaviv screen_lookup_or_create function to common code

    Compare with previous version

    • Resolved 3 months ago by Eric Engestrom

      * grumble *

      windows is unhappy about _MTX_INITIALIZER_NP not existing there.

      @jenatali do you know if this is something that windows could easily support/provide, or should I just put all this new common code in a big #if !windows? (pushed a fixup commit for what that would look like, if someone has an opinion)

    • Last reply by Eric Engestrom 3 months ago
    • 1cb8ae9b - fixup! gallium: move etnaviv screen_lookup_or_create function to common code

    Compare with previous version

    • 2eb6b3a8 - fixup! gallium: move etnaviv screen_lookup_or_create function to common code

    Compare with previous version

    • 873eb819 - etnaviv: use simple_mtx to avoid breaking windows in the next commit
    • 6616f836 - gallium: move etnaviv screen_lookup_or_create function to common code
    • 809e6bf0 - freedreno: replace custom code with u_pipe_screen_lookup_or_create()
    • 65535255 - lima: replace custom code with u_pipe_screen_lookup_or_create()
    • 80c221f7 - v3d: use u_pipe_screen_lookup_or_create() to keep track of and reuse screens
    • 7cf2a07b - vc4: use u_pipe_screen_lookup_or_create() to keep track of and reuse screens
    • 40fc566b - panfrost: use u_pipe_screen_lookup_or_create() to keep track of and reuse screens
    • 5ce9761c - asahi: use u_pipe_screen_lookup_or_create() to keep track of and reuse screens
    • 59e92c8c - u_pipe_screen_lookup_or_create: avoid re-querying the fd to have a consistent hash key

    Compare with previous version

    Toggle commit list
  • I couldn't merge this branch: Sorry, I can't merge requests marked as Work-In-Progress!

  • Eric Engestrom marked this merge request as ready 3 months ago
    • 59e92c8c...e40ed0f8 - 239 commits from branch mesa:main
    • 0d6c240f - gallium/u_screen.h: add missing stdint.h include
    • a72035f9 - util: avoid calling kcmp on Android
    • 1dea6aea - etnaviv: use simple_mtx to avoid breaking windows in the next commit
    • 013f0587 - gallium: move etnaviv screen_lookup_or_create function to common code
    • e17c3af5 - freedreno: replace custom code with u_pipe_screen_lookup_or_create()
    • 759496cc - lima: replace custom code with u_pipe_screen_lookup_or_create()
    • 769b5110 - v3d: use u_pipe_screen_lookup_or_create() to keep track of and reuse screens
    • 7b3ee933 - vc4: use u_pipe_screen_lookup_or_create() to keep track of and reuse screens
    • 8193efec - panfrost: use u_pipe_screen_lookup_or_create() to keep track of and reuse screens
    • cd152ec9 - asahi: use u_pipe_screen_lookup_or_create() to keep track of and reuse screens
    • 1e73fd4a - u_pipe_screen_lookup_or_create: avoid re-querying the fd to have a consistent hash key

    Compare with previous version

    Toggle commit list
Please register or sign in to reply

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK