<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Posts on tony is coding</title>
    <link>https://andrealmeid.com/post/</link>
    <description>Recent content in Posts on tony is coding</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <copyright>© André Almeida 2022&lt;br/&gt;Licensed as &lt;a href=&#39;https://creativecommons.org/licenses/by/4.0/&#39;&gt;CC BY 4.0&lt;/a&gt;</copyright>
    <lastBuildDate>Mon, 26 May 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://andrealmeid.com/post/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Linux 6.15, DRM scheduler, wedged events, sched_ext and more</title>
      <link>https://andrealmeid.com/post/2025-05-26-kernel-6-15/</link>
      <pubDate>Mon, 26 May 2025 00:00:00 +0000</pubDate>
      
      <guid>https://andrealmeid.com/post/2025-05-26-kernel-6-15/</guid>
      <description>&lt;p&gt;The Linux 6.15 has just been released, bringing a lot of new features:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://lore.kernel.org/linux-doc/20250306222336.23482-1-dakr@kernel.org/T/&#34;&gt;nova-core&lt;/a&gt;, the &amp;ldquo;base&amp;rdquo; driver for the new NVIDIA GPU driver, written in Rust. nova project will eventually replace Nouveau driver for all GSP-based GPUs.&lt;/li&gt;
&lt;li&gt;RISC-V gained support for some extensions: BFloat16 floating-point, Zaamo, Zalrsc and ZBKB.&lt;/li&gt;
&lt;li&gt;The fwctl subsystem has been merged. This new family of drivers acts as a transport layer between userspace and complex firmware. To understand more about its controversies and how it got merged, check out this &lt;a href=&#34;https://lwn.net/Articles/990802/&#34;&gt;LWN article&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Support for MacBook touch bars, both as a DRM driver and input source.&lt;/li&gt;
&lt;li&gt;Support for Adreno 623 GPU.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As always, I suggest to have a look at the &lt;a href=&#34;https://kernelnewbies.org/Linux_6.15&#34;&gt;Kernel Newbies summary&lt;/a&gt;. Now, let&amp;rsquo;s have a look at Igalia&amp;rsquo;s contributions.&lt;/p&gt;
&lt;h2 id=&#34;drm-wedged-events&#34;&gt;DRM wedged events&lt;/h2&gt;
&lt;p&gt;In 3D graphics APIs such Vulkan and OpenGL, there are some mechanisms that applications can rely to check if the GPU had reset (you can read more about this in the &lt;a href=&#34;https://www.kernel.org/doc/html/latest/gpu/drm-uapi.html#robustness&#34;&gt;kernel documentation&lt;/a&gt;). However, there was no generic mechanism to inform userspace that a GPU reset has happened. This is useful because in some cases the reset affected not only the app involved in the reset, but the whole graphic stack and thus needs some action to recover, like doing a module rebind or even bus reset to recovery the hardware. For this release, we helped to add an userspace event for this, so a daemon or the compositor can listen to it and trigger some recovery measure after the GPU has reset. Read more in the &lt;a href=&#34;https://www.kernel.org/doc/html/latest/gpu/drm-uapi.html#device-wedging&#34;&gt;kernel docs&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;drm-scheduler-work&#34;&gt;DRM scheduler work&lt;/h2&gt;
&lt;p&gt;In the DRM scheduler area, in preparation for the future scheduling improvements, we worked on cleaning up the code base, better separation of the internal and external interfaces, and adding formal interfaces at places where individual drivers had too much knowledge of the scheduler internals.&lt;/p&gt;
&lt;h2 id=&#34;general-gpudrm-stack&#34;&gt;General GPU/DRM stack&lt;/h2&gt;
&lt;p&gt;In the wider GPU stack area we optimised the most frequent dma-fence single fence merge operation to avoid memory allocations and array sorting. This should slightly reduce the CPU utilisation with workloads which use the DRM sync objects heavily, such as the modern composited desktops using Vulkan explicit sync.&lt;/p&gt;
&lt;p&gt;Some releases ago, we helped to enable &lt;a href=&#34;https://lore.kernel.org/lkml/20231122161941.320564-1-andrealmeid@igalia.com/&#34;&gt;async page flips in the atomic DRM uAPI&lt;/a&gt;. So far, this feature was only enabled for the primary plane. In this release, we added a mechanism for the driver to decide which plane can perform async flips. We used this to enable overlay planes to do async flips in AMDGPU driver.&lt;/p&gt;
&lt;p&gt;We also fixed a bug in the DRM fdinfo common layer which could cause use after free after driver unbind.&lt;/p&gt;
&lt;h2 id=&#34;intel-xe-driver-improvements&#34;&gt;Intel Xe driver improvements&lt;/h2&gt;
&lt;p&gt;On the Intel GPU specific front we worked on adding better Alderlake-P support to the new Intel Xe driver by identifying and adding missing hardware workarounds, fixed the workaround application in general and also made some other smaller improvements.&lt;/p&gt;
&lt;h2 id=&#34;sched_ext&#34;&gt;sched_ext&lt;/h2&gt;
&lt;p&gt;When developing and optimizing a &lt;code&gt;sched_ext&lt;/code&gt;-based scheduler, it is important to understand the interactions between the BPF scheduler and the in-kernel &lt;code&gt;sched_ext&lt;/code&gt; core. If there is a mismatch between what the BPF scheduler developer expects and how the &lt;code&gt;sched_ext&lt;/code&gt; core actually works, such a mismatch could often be the source of bugs or performance issues.&lt;/p&gt;
&lt;p&gt;To address such a problem, we added a mechanism to count and report the internal events of the &lt;code&gt;sched_ext&lt;/code&gt; core. This significantly improves the visibility of subtle edge cases, which might easily slip off. So far, eight events have been added, and the events can be monitored through a BPF program, sysfs, and a tracepoint.&lt;/p&gt;
&lt;h2 id=&#34;a-few-less-bugs&#34;&gt;A few less bugs&lt;/h2&gt;
&lt;p&gt;As usual, as part of our work on diverse projects, we keep an eye on automated test results to look for potential security and stability issues in different kernel areas. We&amp;rsquo;re happy to have contributed to making this release a bit more robust by fixing bugs in memory management, network (SCTP), ext4, suspend/resume and other subsystems.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;This is the complete list of Igalia&amp;rsquo;s contributions for this release:&lt;/p&gt;
&lt;h2 id=&#34;authored-75&#34;&gt;Authored (75)&lt;/h2&gt;
&lt;h3 id=&#34;andré-almeida&#34;&gt;André Almeida&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=6fe52b63f569c11a70b737751055afd46c4454b3&#34;&gt;drm/amdgpu: Use device wedged event&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=fd40a63c63a182aeea1089a343e2f729de7e514d&#34;&gt;drm/atomic: Let drivers decide which planes to async flip&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=41129e236f14c6c54145c722da06f6793e9fd13d&#34;&gt;drm/amdgpu: Enable async flip on overlay planes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=28d05f0836dfc4479d81e664f345ce125ea921d8&#34;&gt;drm/amdgpu: Log the creation of a coredump file&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b7fd6528b5ad80eea66df6240f2399602d9fd388&#34;&gt;drm/amdgpu: Log after a successful ring reset&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=9c696cc57c1a6dab6da6b51f4b30a7d16e233cbc&#34;&gt;drm/amdgpu: Create a debug option to disable ring reset&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=099f273eff9c4927be47e337ecf9b10df88a99ad&#34;&gt;drm/amdgpu: Trigger a wedged event for ring reset&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;angelos-oikonomopoulos&#34;&gt;Angelos Oikonomopoulos&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=c28f31deeacda307acfee2f18c0ad904e5123aac&#34;&gt;arm64: Don&amp;rsquo;t call NULL in do_compat_alignment_fixup()&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;bhupesh&#34;&gt;Bhupesh&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=c8e008b60492cf6fd31ef127aea6d02fd3d314cd&#34;&gt;ext4: ignore xattrs past end&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;changwoo-min&#34;&gt;Changwoo Min&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=17103b8504de68958b0ff412ed2ae2e6484fa65f&#34;&gt;sched_ext: Implement event counter infrastructure&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=f7f6142107f0e0dd4a2b041116461a049ca18cb0&#34;&gt;sched_ext: Add an event, SCX_EV_SELECT_CPU_FALLBACK&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=9be0a1b0c8fbd21ef6d7f9428a76b759f9db0de3&#34;&gt;sched_ext: Add an event, SCX_EV_DISPATCH_LOCAL_DSQ_OFFLINE&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=7125660bc16b7e87665bc859e7337388bdb63e0a&#34;&gt;sched_ext: Add an event, SCX_EV_DISPATCH_KEEP_LAST&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=824d4f2dce50da4b748c1e280cb50e4b82146ce7&#34;&gt;sched_ext: Add an event, SCX_EV_ENQ_SKIP_EXITING&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=4f7a38c7c917436bb40f10c251a1a973e2f1ada8&#34;&gt;sched_ext: Add an event, SCX_EV_BYPASS_ACTIVATE&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=5c605cd33cad957f3eff747e088d07db23808080&#34;&gt;sched_ext: Add an event, SCX_EV_BYPASS_DISPATCH&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=d46457c31c432b6b717dcaebab634d5126e2969a&#34;&gt;sched_ext: Add an event, SCX_EV_BYPASS_DURATION&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=9865f31d852a40e39b8efb8feec69182e1002489&#34;&gt;sched_ext: Add scx_bpf_events() and scx_read_event() for BPF schedulers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=6df93804b718ec9741f056dae777f12332d54002&#34;&gt;sched_ext: Print core event count in scx_central scheduler&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=2494e555fbaadf1b02eb89f3bee0cec95516f6c2&#34;&gt;sched_ext: Print core event count in scx_qmap scheduler&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=6d3f8fb4b2d47b7b6581a1a5a6ce35700f1416e6&#34;&gt;sched_ext: Add an event, SCX_EV_ENQ_SLICE_DFL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=38d65cd692a26e09152bcec67d641a7914a5cba6&#34;&gt;sched_ext: Print an event, SCX_EV_ENQ_SLICE_DFL, in scx_qmap/central&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=372033ad9e98dce205fc3c48a146cfff5699e3e9&#34;&gt;tools/sched_ext: Compatible testing of SCX_ENQ_CPU_SELECTED&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=2e7df12bdde13c0efefc3230dc96b36edfa53ec5&#34;&gt;tools/sched_ext: Update enum_defs.autogen.h&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=ad3b301aa05af408462775368bd25d2a05409fe1&#34;&gt;sched_ext: Provides a sysfs &amp;lsquo;events&amp;rsquo; to expose core event counters&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=038730dc12cb1fa016a95978286a767e8a8b521e&#34;&gt;sched_ext: Change the event type from u64 to s64&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=71d078803ccbc020ae3b640293a40a86691b9151&#34;&gt;sched_ext: Add trace point to track sched_ext core events&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;gavin-guo&#34;&gt;Gavin Guo&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=be6e843fc51a584672dfd9c4a6a24c8cb81d5fb7&#34;&gt;mm/huge_memory: fix dereferencing invalid pmd migration entry&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;guilherme-g-piccoli&#34;&gt;Guilherme G. Piccoli&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=d90c9de9de2f1712df56de6e4f7d6982d358cabe&#34;&gt;x86/tsc: Always save/restore TSC sched_clock() on suspend/resume&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=35dac71cff8f68f065a6719631db919d0640d5e5&#34;&gt;scripts: add script to extract built-in firmware blobs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;luis-henriques&#34;&gt;Luis Henriques&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=841c7b812c038661e4f659d1b9c9a366c6d24b71&#34;&gt;fuse: removed unused function fuse_uring_create() from header&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;maíra-canal&#34;&gt;Maíra Canal&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=dc4afc0de9654f88676d77094a38f9451d519011&#34;&gt;drm/v3d: Remove &lt;code&gt;v3d-&amp;gt;cpu_job&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=04630796c437a9285643097825cbd3cd06603f47&#34;&gt;drm/vc4: Use DRM Execution Contexts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=21bd85f82ec20ddfc65ae999f49356c86fb68a8d&#34;&gt;drm/vc4: Use DMA Resv to implement VC4 wait BO IOCTL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=e8941ac97f281ffa06d6ed058b3bba676f3f8183&#34;&gt;drm/vc4: Remove BOs seqnos&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=dcdae6e92d4e062da29235fe88980604595e3f0f&#34;&gt;drm/v3d: Fix Indirect Dispatch configuration for V3D 7.1.6 and later&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=35e4079bf1a2570abffce6ababa631afcf8ea0e5&#34;&gt;drm/v3d: Add job to pending list if the reset was skipped&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;melissa-wen&#34;&gt;Melissa Wen&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=81262b1656feb3813e3d917ab78824df6831e69e&#34;&gt;drm/amd/display: restore edid reading from a given i2c adapter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=a3b7e65b6be59e686e163fa1ceb0922f996897c2&#34;&gt;drm/amd/display: Fix null check of pipe_ctx-&amp;gt;plane_state for update_dchubp_dpp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=fe14c0f096f58d2569e587e9f4b05d772272bbb4&#34;&gt;Revert &amp;ldquo;drm/amd/display: Hardware cursor changes color when switched to software cursor&amp;rdquo;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;ricardo-cañuelo-navarro&#34;&gt;Ricardo Cañuelo Navarro&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=f1a69a940de58b16e8249dff26f74c8cc59b32be&#34;&gt;sctp: detect and prevent references to a freed transport in sendmsg&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=ee40c9920ac286c5bfe7c811e66ff899266d2582&#34;&gt;mm: fix copy_vma() error handling for hugetlb mappings&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;rodrigo-siqueira&#34;&gt;Rodrigo Siqueira&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=2df30ae0ba0b8b529c64f670a5294634db24ed16&#34;&gt;Documentation/gpu: Add acronyms for some firmware components&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=9b3ef540397cfc356f10f504841b2e9d16e31286&#34;&gt;MAINTAINERS: Change my role from Maintainer to Reviewer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=289387d0dbf806bd59063ab93d94f48cd4c75c7c&#34;&gt;mailmap: Add entry for Rodrigo Siqueira&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;thadeu-lima-de-souza-cascardo&#34;&gt;Thadeu Lima de Souza Cascardo&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=8e2bad543eca5c25cd02cbc63d72557934d45f13&#34;&gt;dlm: prevent NPD when writing a positive value to event_done&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=6aa9826330539abcfd3435de93b45cb506e7b86d&#34;&gt;char: misc: improve testing Kconfig description&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=9feb82badf33e9269ebca47ccbfca0278102ec39&#34;&gt;parisc: perf: use named initializers for struct miscdevice&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=42d9d7bed270247f134190ba0cb05bbd072f58c2&#34;&gt;drm/amd/display: avoid NPD when ASIC does not support DMUB&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=17d253af4c2c8a2acf84bb55a0c2045f150b7dfd&#34;&gt;tpm: do not start chip while suspended&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=424eafe65647a8d6c690284536e711977153195a&#34;&gt;i2c: cros-ec-tunnel: defer probe if parent EC is not present&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=c876be906ce7e518d9ef9926478669c151999e69&#34;&gt;char: misc: register chrdev region with all possible minors&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;tvrtko-ursulin&#34;&gt;Tvrtko Ursulin&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=178ada9d6e90637667a7410dd7fe75fbbe2cd4c5&#34;&gt;dma-fence: Add a single fence fast path for fence merging&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=d2a0b1bc5773d3124ef7bee886fce1bb59fd9b76&#34;&gt;dma-fence: Add some more fence-merge-unwrap tests&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=573b73e5ac2ce0d58859eace8218f3a7e9212186&#34;&gt;drm/sched: Delete unused update_job_credits&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=440aaf479c9aaf5ecea9a463eb826ec243d5f1cf&#34;&gt;drm/sched: Remove weak paused submission checks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=51678bb9a7fb25e44f38a4f0b1bd283fec809917&#34;&gt;drm/sched: Add helper to check job dependencies&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=cdb73451bc675392c9c76779e2fec720edafd7ab&#34;&gt;drm/imagination: Use the drm_sched_job_has_dependency helper&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=2eca617f12586abff62038db1c14cb3aa60a15aa&#34;&gt;drm/scheduler: Remove some unused prototypes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b6eb664d89e7ed1e3369fe2860fea31e6dc45e34&#34;&gt;drm/sched: Add internal job peek/pop API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=80b6ef8ae25ade45e6418df3ddf699a5a10a7ca4&#34;&gt;drm/amdgpu: Pop jobs from the queue more robustly&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b76f1467dc56fccecfdd63357e2c71542ecd96c5&#34;&gt;drm/sched: Remove a hole from struct drm_sched_job&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=4b7320bfd49dcaf33ef8ab724b88f7baf6bd9978&#34;&gt;drm/sched: Move drm_sched_entity_is_ready to internal header&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=71a18f7266f301b20faf9f5fd7aee228c83bb4a3&#34;&gt;drm/sched: Move internal prototypes to internal header&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=27d4815149ba0c80ef2db2a82f0512f647e76d62&#34;&gt;drm/sched: Group exported prototypes by object type&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=25d434cef791e03cf40680f5441b576c639bfa84&#34;&gt;drm/xe: Fix GT &amp;ldquo;for each engine&amp;rdquo; workarounds&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=d9b5d83c5a4d720af6ddbefe2825c78f0325a3fd&#34;&gt;drm/xe/xelp: Move Wa_16011163337 from tunings to workarounds&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=96f18263140266d737e931530cb759d14858b0df&#34;&gt;drm/xe/xelp: Add Wa_1604555607&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=4f122372579d28e5ac74f3c222c173466ae5951d&#34;&gt;drm/xe/xelp: L3 recommended hashing mask&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=067a974fd8a9ea43f97ca184e2768b583f2f8c44&#34;&gt;drm/xe: Add performance tunings to debugfs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=298661cd9cea55233cf60dee3ef9f736ddd1db7a&#34;&gt;drm/xe: Fix MOCS debugfs LNCF readout&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=e2a0a6328ea7385db00c3d4f3067ded9bbb709a1&#34;&gt;drm/xe: Fix ring flush invalidation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=11ef40eb57322322139de460f6370aec38da5a45&#34;&gt;drm/xe: Pass flags directly to emit_flush_imm_ggtt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=7b7b07c285c304317d00ea21c2a659167d4d4d12&#34;&gt;drm/xe: Use correct type width for alignment in fb pinning code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=5b1834d6202f86180e451ad1a2a8a193a1da18fc&#34;&gt;drm/fdinfo: Protect against driver unbind&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;reviewed-30&#34;&gt;Reviewed (30)&lt;/h2&gt;
&lt;h3 id=&#34;andré-almeida-1&#34;&gt;André Almeida&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b7cf9f4ac1b8ad0fae1c0f011913361c140b49e1&#34;&gt;drm: Introduce device wedged event&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=a97bc11b20df7083e1a5f9250eacf054f5d2eae0&#34;&gt;drm/doc: Document device wedged event&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=7d50e00fef2832e98d7e06bbfc85c1d66ee110ca&#34;&gt;selftests/futex: futex_waitv wouldblock test should fail&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b662b162c3d06f120749eea0351ec9317d9dd905&#34;&gt;drm: Fix potential overflow issue in event_string array&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;christian-gmeiner&#34;&gt;Christian Gmeiner&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=796a9f55a8d1d85387b973df9a06cbf4bc2d6327&#34;&gt;drm/sched: Use struct for drm_sched_init() params&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;iago-toral-quiroga&#34;&gt;Iago Toral Quiroga&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=dcdae6e92d4e062da29235fe88980604595e3f0f&#34;&gt;drm/v3d: Fix Indirect Dispatch configuration for V3D 7.1.6 and later&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=35e4079bf1a2570abffce6ababa631afcf8ea0e5&#34;&gt;drm/v3d: Add job to pending list if the reset was skipped&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;jose-maria-casanova-crespo&#34;&gt;Jose Maria Casanova Crespo&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=dc4afc0de9654f88676d77094a38f9451d519011&#34;&gt;drm/v3d: Remove &lt;code&gt;v3d-&amp;gt;cpu_job&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;luis-henriques-1&#34;&gt;Luis Henriques&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=9b17cb59a7db983a967c3658fe9a2f250f588bbd&#34;&gt;fuse: add default_request_timeout and max_request_timeout sysctls&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;maíra-canal-1&#34;&gt;Maíra Canal&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=0a3f3f7c5da8e45e1d4adf4ed6f4e2b05912785a&#34;&gt;drm/vkms: Switch to managed for connector&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=16d22ba2debda22907b3eda4cc8ec1229136f424&#34;&gt;drm/vkms: Switch to managed for encoder&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=796a9f55a8d1d85387b973df9a06cbf4bc2d6327&#34;&gt;drm/sched: Use struct for drm_sched_init() params&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=4dd40b5f9c3d89b67af0dbe059cf4a51aac6bf06&#34;&gt;drm/v3d: Add clock handling&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;melissa-wen-1&#34;&gt;Melissa Wen&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=04630796c437a9285643097825cbd3cd06603f47&#34;&gt;drm/vc4: Use DRM Execution Contexts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=21bd85f82ec20ddfc65ae999f49356c86fb68a8d&#34;&gt;drm/vc4: Use DMA Resv to implement VC4 wait BO IOCTL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=e8941ac97f281ffa06d6ed058b3bba676f3f8183&#34;&gt;drm/vc4: Remove BOs seqnos&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;rodrigo-siqueira-1&#34;&gt;Rodrigo Siqueira&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=c0a01660de20bfc60b01f616e7aead727f12ba9e&#34;&gt;Documentation/gpu: remove duplicate entries in different glossaries&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=f4f086de310026abfe28512dfa4984fb4648663a&#34;&gt;drm/amd/display: change kzalloc to kcalloc in dcn30_validate_bandwidth()&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=934cb529e90c57f5766668fe13624624dae1d790&#34;&gt;drm/amd/display: change kzalloc to kcalloc in dcn31_validate_bandwidth()&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b17a94f2fe8225e47c8efe770c6c246488c76a20&#34;&gt;drm/amd/display: change kzalloc to kcalloc in dcn314_validate_bandwidth()&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=315ce6c41aa9b913461a3e018ce7516435245787&#34;&gt;drm/amd/display: change kzalloc to kcalloc in dml1_validate()&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=6a87982b5897c387f5508fddfe2404726045517c&#34;&gt;drm/amd/display: Remove incorrect macro guard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=42d9d7bed270247f134190ba0cb05bbd072f58c2&#34;&gt;drm/amd/display: avoid NPD when ASIC does not support DMUB&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;thadeu-lima-de-souza-cascardo-1&#34;&gt;Thadeu Lima de Souza Cascardo&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=35dac71cff8f68f065a6719631db919d0640d5e5&#34;&gt;scripts: add script to extract built-in firmware blobs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;tvrtko-ursulin-1&#34;&gt;Tvrtko Ursulin&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b1cce631e61fcf3e1bc77ace05f10d00c737af9a&#34;&gt;dma-buf: add selftest for fence order after merge&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=87b593d79864e6e82cb00aa3d837094a1643e272&#34;&gt;drm/i915/pmu: Drop custom hotplug code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=af6c2b7c46e16701fba44a21326cb634786e3e71&#34;&gt;drm/file: Add fdinfo helper for printing regions with prefix&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=796a9f55a8d1d85387b973df9a06cbf4bc2d6327&#34;&gt;drm/sched: Use struct for drm_sched_init() params&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=44d2f310f008613c1dbe5e234c2cf2be90cbbfab&#34;&gt;drm/sched: drm_sched_job_cleanup(): correct false doc&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=cedf23842d7433eb32cb782a637bb870fb096a3b&#34;&gt;drm/xe/rtp: Drop sentinels from arg to xe_rtp_process_to_sr()&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;tested-2&#34;&gt;Tested (2)&lt;/h2&gt;
&lt;h3 id=&#34;changwoo-min-1&#34;&gt;Changwoo Min&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=e38be1c7647c8c78304ce6d931b3b654e27948b3&#34;&gt;sched_ext: Fix rq lock state in hotplug ops&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;guilherme-g-piccoli-1&#34;&gt;Guilherme G. Piccoli&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=c929d08df8bee855528b9d15b853c892c54e1eee&#34;&gt;x86/split_lock: Fix the delayed detection logic&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;acked-12&#34;&gt;Acked (12)&lt;/h2&gt;
&lt;h3 id=&#34;changwoo-min-2&#34;&gt;Changwoo Min&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=46a0e1615886b87bdb18cf3f29bf494a30aafc01&#34;&gt;tool/sched_ext: Event counter dumping updates&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=26176116d931621fd96bcef15e7b42a9ddf524da&#34;&gt;sched_ext: Count SCX_EV_DISPATCH_LOCAL_DSQ_OFFLINE in the right spot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=eace54dff05157ed2629848111366b836dcf3ad9&#34;&gt;sched_ext: Add SCX_EV_ENQ_SKIP_MIGRATION_DISABLED&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=1a4e0d8682eb66a4fb37158a520eacd37c0b61b7&#34;&gt;sched_ext: Take NUMA node into account when allocating per-CPU cpumasks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=5e3b64246fe4cafed0755e3850de2874bf4a0da9&#34;&gt;tools/sched_ext: Provide consistent access to scx flags&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=18853ba782bef65fc81ef2b3370382e5b479c5eb&#34;&gt;sched_ext: Track currently locked rq&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=a11d6784d7316a6c77ca9f14fb1a698ebbb3c1fb&#34;&gt;sched_ext: Fix missing rq lock in scx_bpf_cpuperf_set()&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;maíra-canal-2&#34;&gt;Maíra Canal&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=099b79f94366f3110783301e20d8136d762247f8&#34;&gt;drm/doc: Document KUnit expectations&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;tvrtko-ursulin-2&#34;&gt;Tvrtko Ursulin&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=3ddf003c7e41c038c877ee4661d4900d5eb05268&#34;&gt;Documentation/gpu: Clarify format of driver-specific fidnfo keys&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=11bb3d1876fc59d2699e8050a361c9bc92464830&#34;&gt;drm/i915: Use device wedged event&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=099b79f94366f3110783301e20d8136d762247f8&#34;&gt;drm/doc: Document KUnit expectations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=35e4079bf1a2570abffce6ababa631afcf8ea0e5&#34;&gt;drm/v3d: Add job to pending list if the reset was skipped&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;maintainer-sob-2&#34;&gt;Maintainer SoB (2)&lt;/h2&gt;
&lt;h3 id=&#34;maíra-canal-3&#34;&gt;Maíra Canal&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=4dd40b5f9c3d89b67af0dbe059cf4a51aac6bf06&#34;&gt;drm/v3d: Add clock handling&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;tvrtko-ursulin-3&#34;&gt;Tvrtko Ursulin&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b1cce631e61fcf3e1bc77ace05f10d00c737af9a&#34;&gt;dma-buf: add selftest for fence order after merge&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>Linux 6.14, an almost forgotten release</title>
      <link>https://andrealmeid.com/post/2025-03-28-kernel-6-14/</link>
      <pubDate>Fri, 28 Mar 2025 00:00:00 +0000</pubDate>
      
      <guid>https://andrealmeid.com/post/2025-03-28-kernel-6-14/</guid>
      <description>&lt;p&gt;Linux 6.14 is the second release of 2025, and as usual Igalia took part on it. It&amp;rsquo;s a very normal release, except that it was release on Monday, instead of the usual Sunday release that has been going on for years now. The reason behind this? Well, &lt;a href=&#34;https://lore.kernel.org/lkml/CAHk-=wg7TO09Si5tTPyhdrLLvyYtVmCf+GGN4kVJ0=Xk=5TE3g@mail.gmail.com/&#34;&gt;quoting Linus himself&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I&amp;rsquo;d like to say that some important last-minute thing came up and
delayed things.&lt;/p&gt;
&lt;p&gt;But no. It&amp;rsquo;s just pure incompetence.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;But we did not forget about it, so here&amp;rsquo;s our Linux 6.14 blog post!&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;A part of the development cycle for this release happened during late December, when a lot of maintainers and developers were taking their deserved breaks. As a result of this, this release contains less changes than usual as &lt;a href=&#34;https://lwn.net/Articles/1006378/&#34;&gt;stated by LWN&lt;/a&gt; as the &amp;ldquo;lowest level of merge-window activity seen in years&amp;rdquo;. Nevertheless, some cool features made through this release:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.kernel.org/next/userspace-api/ntsync.html&#34;&gt;NT synchronization primitives&lt;/a&gt;: Elizabeth Figura, from Codeweavers, is know from her work around improving Wine sync functions, like mutexes and semaphores. She was one the main collaborators behind the &lt;code&gt;futex_waitv()&lt;/code&gt; work and now developed a virtual driver that is more compliant with the precise semantics that the NT kernel exposes. This allows Wine to behave closer to Windows without the need to create new syscalls, since this driver uses &lt;code&gt;ioctl()&lt;/code&gt; as the front-end uAPI.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://lwn.net/Articles/998783/&#34;&gt;RWF_UNCACHED&lt;/a&gt;: Linux has two ways of dealing with storage I/O:  buffered I/O (usually the preferred one) that stores data in a temporary buffer and regularly syncs the cache data with the device; and direct I/O that doesn&amp;rsquo;t use cache and always writes/reads synchronously with the storage device. Now a new mixed approach is available: uncached buffered I/O. This method is aimed to have a fast way to write or read data that will not be needed again in the short term. For reading, the device writes data in the buffer and as soon as the user finished reading the buffer, it&amp;rsquo;s cleared from the cache. For writing, as soon as userspace fills the cache, the device reads it and removes it from the cache. In this way we still have the advantage of using a fast cache but reducing the cache pressure.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://lore.kernel.org/amd-gfx/20241112213716.49355-1-alexander.deucher@amd.com/&#34;&gt;amdgpu panic support&lt;/a&gt;: AMD developers added kernel panic support for amdgpu driver, &amp;ldquo;which displays a pretty user friendly message on the screen when a Linux kernel panic occurs&amp;rdquo; instead of just a black screen or a partial dmesg log.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As usual Kernel Newbies provides a very good summary, you should check it for more details: &lt;a href=&#34;https://kernelnewbies.org/Linux_6.14&#34;&gt;Linux 6.14 changelog&lt;/a&gt;. Now let&amp;rsquo;s jump to see what were the merged contributions by Igalia for this release!&lt;/p&gt;
&lt;h2 id=&#34;drm&#34;&gt;DRM&lt;/h2&gt;
&lt;p&gt;For the DRM common infrastructure, we helped to land a standardization for DRM client memory usage reporting. Additionally, we contributed to improve and fix bugs found in drivers of AMD, Intel, Broadcom, and Vivante.&lt;/p&gt;
&lt;h3 id=&#34;amdgpu&#34;&gt;AMDGPU&lt;/h3&gt;
&lt;p&gt;For the AMD driver, we fixed bugs experienced by users of Cosmic Desktop Environment on several AMD hardware versions. One was uncovered with the introduction of overlay cursor mode, and a definition mismatch across the display driver caused a page-fault in the usage of multiple overlay planes. Another bug was related to division by zero on plane scaling. Also, we fixed regressions on VRR and MST generated by the series of changes to migrate AMD display driver from open-coded EDID handling to &lt;code&gt;drm_edid&lt;/code&gt; struct.&lt;/p&gt;
&lt;h3 id=&#34;intel&#34;&gt;Intel&lt;/h3&gt;
&lt;p&gt;For the Intel drivers, we fixed a bug in the xe GPU driver which prevented certain type of workarounds from being applied, helped with the maintainership of the i915 driver, handled external code contributions, maintained the development branch and sent several pull requests.&lt;/p&gt;
&lt;h3 id=&#34;raspberry-pi-v3d&#34;&gt;Raspberry Pi (V3D)&lt;/h3&gt;
&lt;p&gt;We &lt;a href=&#34;https://lore.kernel.org/dri-devel/20250226-v3d-gpu-reset-fixes-v1-0-83a969fdd9c1@igalia.com/&#34;&gt;fixed the GPU resets&lt;/a&gt; for the Raspberry Pi 4 as we found out to be broken as per &lt;a href=&#34;https://github.com/raspberrypi/linux/issues/6660&#34;&gt;a user bug report&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Also in the V3D driver, the active performance monitor is now properly stopped before being destroyed, addressing a potential use-after-free issue. Additionally, support for a global performance monitor has been added via a new &lt;code&gt;DRM_IOCTL_V3D_PERFMON_SET_GLOBAL&lt;/code&gt; ioctl. This allows all jobs to share a single, globally configured perfmon, enabling more consistent performance tracking and paving the way for integration with user-space tools such as &lt;a href=&#34;https://perfetto.dev&#34;&gt;perfetto&lt;/a&gt;.&lt;/p&gt;

 

&lt;video width=100% controls autoplay&gt;
    &lt;source src=&#34;https://andrealmeid.com/videos/2025-03-28-perfetto.webm&#34; type=&#34;video/webm&#34;&gt;
    Your browser does not support the video tag.  
&lt;/video&gt;



&lt;p&gt;&lt;em&gt;A small video demo of perfetto integration with V3D&lt;/em&gt;&lt;/p&gt;
&lt;h3 id=&#34;etnaviv&#34;&gt;etnaviv&lt;/h3&gt;
&lt;p&gt;On the etnaviv side, &lt;code&gt;fdinfo&lt;/code&gt; support has been implemented to expose memory usage statistics per file descriptor, enhancing observability and debugging capabilities for memory-related behavior.&lt;/p&gt;
&lt;h2 id=&#34;sched_ext&#34;&gt;sched_ext&lt;/h2&gt;
&lt;p&gt;Many BPF schedulers (e.g., &lt;code&gt;scx_lavd&lt;/code&gt;) frequently call &lt;code&gt;bpf_ktime_get_ns()&lt;/code&gt; for tracking tasks&amp;rsquo; runtime properties. &lt;code&gt;bpf_ktime_get_ns()&lt;/code&gt; eventually reads a hardware timestamp counter (TSC). However, reading a hardware TSC is not performant in some hardware platforms, degrading instructions per cycyle (IPC).&lt;/p&gt;
&lt;p&gt;We addressed the performance problem of reading hardware TSC by leveraging the rq clock in the scheduler core, introducing a &lt;code&gt;scx_bpf_now()&lt;/code&gt; function for BPF schedulers. Whenever the rq clock is fresh and valid, &lt;code&gt;scx_bpf_now()&lt;/code&gt; provides the rq clock, which is already updated by the scheduler core, so it can reduce reading the hardware TSC. Using &lt;code&gt;scx_bpf_now()&lt;/code&gt; reduces the number of reading hardware TSC by 50-80% (e.g., 76% for &lt;code&gt;scx_lavd&lt;/code&gt;).&lt;/p&gt;
&lt;h2 id=&#34;assorted-kernel-fixes&#34;&gt;Assorted kernel fixes&lt;/h2&gt;
&lt;p&gt;Continuing our efforts on cleaning up kernel bugs, we provided a few fixes that address issues reported by &lt;a href=&#34;https://syzkaller.appspot.com/upstream&#34;&gt;syzbot&lt;/a&gt; with the goal of increasing stability and security, leveraging the fuzzing capabilities of &lt;a href=&#34;https://lwn.net/Articles/677764/&#34;&gt;syzkaller&lt;/a&gt; to bring to the surface certain bugs that are hard to notice otherwise. We&amp;rsquo;re addressing bug reports from different kernel areas, including drivers and core subsystems such as the memory manager. As part of this effort, several fixes were done for the probe path of the rtlwifi driver.&lt;/p&gt;
&lt;h2 id=&#34;check-the-complete-list-of-igalias-contributions-for-the-614-release&#34;&gt;Check the complete list of Igalia’s contributions for the 6.14 release&lt;/h2&gt;
&lt;h2 id=&#34;authored-38&#34;&gt;Authored (38)&lt;/h2&gt;
&lt;h3 id=&#34;changwoo-min&#34;&gt;Changwoo Min&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=ea9b2626271f4e82f329ba52503dd5193fe656e9&#34;&gt;sched_ext: Relocate scx_enabled() related code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=3a9910b5904d29c566e3ff9290990b519827ba75&#34;&gt;sched_ext: Implement scx_bpf_now()&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=2e1ce39fde7caacc98bc0472d15e8c641dfb31bf&#34;&gt;sched_ext: Add scx_bpf_now() for BPF scheduler&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=d07be814fc7165cb804317c99228243382e81188&#34;&gt;sched_ext: Add time helpers for BPF schedulers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=0f130bc341d09a82ad23e7fc59d4306528c4c4ce&#34;&gt;sched_ext: Replace bpf_ktime_get_ns() to scx_bpf_now()&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=62addc6dbf3644272c064c16076221bf4f633f25&#34;&gt;sched_ext: Use time helpers in BPF schedulers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=029b6ce733712a41421955194b113f283dcb1026&#34;&gt;sched_ext: Fix incorrect time delta calculation in time_delta()&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;christian-gmeiner&#34;&gt;Christian Gmeiner&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=21f1435b1e6b012a07c42f36b206d2b66fc8f13b&#34;&gt;drm/v3d: Stop active perfmon if it is being destroyed&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=6bef484c5e9a5d3937a4bdf56e0f08f25517f8a0&#34;&gt;drm/etnaviv: Add fdinfo support for memory stats&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=c6eabbab359c156669e10d5dec3e71e80ff09bd2&#34;&gt;drm/v3d: Add DRM_IOCTL_V3D_PERFMON_SET_GLOBAL&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;luis-henriques&#34;&gt;Luis Henriques&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=d55011469b41d9da6c06cb1c4a4da7a87fe155bc&#34;&gt;fuse: fix possible deadlock if rings are never initialized&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;maíra-canal&#34;&gt;Maíra Canal&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=e987e22e9229d70c2083a91cc61269b2c4924955&#34;&gt;drm/v3d: Fix performance counter source settings on V3D 7.x&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=4ee06e3b6120a77fd3967c2c62268083d26c5500&#34;&gt;drm/v3d: Fix miscellaneous documentation errors&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=6e64d6b3a3c39655de56682ec83e894978d23412&#34;&gt;drm/v3d: Assign job pointer to NULL before signaling the fence&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=80cbee810e4e13cdbd3ae9654e9ecddf17f3e828&#34;&gt;drm/v3d: Don&amp;rsquo;t run jobs that have errors flagged in its fence&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=c3e4a25602f8b941b154f52a4da13ae77b4664c4&#34;&gt;drm/v3d: Set job pointer to NULL when the job&amp;rsquo;s fence has an error&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;melissa-wen&#34;&gt;Melissa Wen&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=1c86c81a86c60f9b15d3e3f43af0363cf56063e7&#34;&gt;drm/amd/display: fix page fault due to max surface definition mismatch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b8d6daffc871a42026c3c20bff7b8fa0302298c1&#34;&gt;drm/amd/display: increase MAX_SURFACES to the value supported by hw&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=ab75a0d2e07942ae15d32c0a5092fd336451378c&#34;&gt;drm/amd/display: fix divide error in DM plane scale calcs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=7f2b5237e313e39008a85b33ca94ab503a8fdff9&#34;&gt;drm/amd/display: restore invalid MSA timing check for freesync&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=12f3b92d1cfa5526715fff93a6d6fe29300d5e2a&#34;&gt;drm/amd/display: restore edid reading from a given i2c adapter&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;ricardo-cañuelo-navarro&#34;&gt;Ricardo Cañuelo Navarro&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=2ede647a6fde3e54a6bfda7cf01c716649655900&#34;&gt;mm,madvise,hugetlb: check for 0-length range after end address adjustment&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=adae46ac1e38a288b14f0298e27412adcba83f8e&#34;&gt;mm: shmem: remove unnecessary warning in shmem_writepage()&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;rodrigo-siqueira&#34;&gt;Rodrigo Siqueira&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=733d675c2a436b416107893db87eb182585c1b39&#34;&gt;MAINTAINERS: Change my role from Maintainer to Reviewer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=96989f3dca6f51f202b6dbc92c37e17df6ca12f4&#34;&gt;mailmap: Add entry for Rodrigo Siqueira&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;thadeu-lima-de-souza-cascardo&#34;&gt;Thadeu Lima de Souza Cascardo&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=e73e11d303940119e41850a0452a0deda2cc4eb5&#34;&gt;wifi: rtlwifi: do not complete firmware loading needlessly&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=8559a9e0c457729fe3edb3176bbf7c7874f482b0&#34;&gt;wifi: rtlwifi: rtl8192se: rise completion of firmware loading as last step&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b4b26642b31ef282df6ff7ea8531985edfdef12a&#34;&gt;wifi: rtlwifi: wait for firmware loading before releasing memory&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=00260350aed80c002df270c805ca443ec9a719a6&#34;&gt;wifi: rtlwifi: fix init_sw_vars leak when probe fails&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=f79bc5c67867c19ce2762e7934c20dbb835ed82c&#34;&gt;wifi: rtlwifi: usb: fix workqueue leak when probe fails&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=2fdac64c3c35858aa8ac5caa70b232e03456e120&#34;&gt;wifi: rtlwifi: remove unused check_buddy_priv&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=d8ece6fc3694657e4886191b32ca1690af11adda&#34;&gt;wifi: rtlwifi: destroy workqueue at rtl_deinit_core&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=e7ceefbfd8d447abc8aca8ab993a942803522c06&#34;&gt;wifi: rtlwifi: fix memory leaks and invalid access at probe error path&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b59b86c5d08be7d761c04affcbcec8184738c200&#34;&gt;wifi: rtlwifi: pci: wait for firmware loading before releasing memory&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=8004d635f27bbccaa5c083c50d4d5302a6ffa00e&#34;&gt;Revert &amp;ldquo;media: uvcvideo: Require entities to have a non-zero unique ID&amp;rdquo;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=6d991f569c5ef6eaeadf1238df2c36e3975233ad&#34;&gt;char: misc: deallocate static minor in error path&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;tvrtko-ursulin&#34;&gt;Tvrtko Ursulin&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=e996127ec1aabecc33e405de42e7e1cbfae39315&#34;&gt;drm/amdgpu: Use DRM scheduler API in amdgpu_xcp_release_sched&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=54f94dc7f6b4db45dbc23b4db3d20c7194e2c54f&#34;&gt;drm/xe: Fix GT &amp;ldquo;for each engine&amp;rdquo; workarounds&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;reviewed-36&#34;&gt;Reviewed (36)&lt;/h2&gt;
&lt;h3 id=&#34;andré-almeida&#34;&gt;André Almeida&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=1d44a30ae3f9195cb4eb7d81bb9ced2776232094&#34;&gt;ASoC: cs35l41: Fallback to using HID for system_name if no SUB is available&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b19181638182d1f5c43757b471c056b6196c8ca3&#34;&gt;ASoC: cs35l41: Fix acpi_device_hid() not found&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;christian-gmeiner-1&#34;&gt;Christian Gmeiner&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=e987e22e9229d70c2083a91cc61269b2c4924955&#34;&gt;drm/v3d: Fix performance counter source settings on V3D 7.x&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=16ab70e8dabe4f26b2de1c13e1937e190b0d2d24&#34;&gt;drm/etnaviv: Convert timeouts to secs_to_jiffies()&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;iago-toral-quiroga&#34;&gt;Iago Toral Quiroga&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=e987e22e9229d70c2083a91cc61269b2c4924955&#34;&gt;drm/v3d: Fix performance counter source settings on V3D 7.x&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=6e64d6b3a3c39655de56682ec83e894978d23412&#34;&gt;drm/v3d: Assign job pointer to NULL before signaling the fence&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=80cbee810e4e13cdbd3ae9654e9ecddf17f3e828&#34;&gt;drm/v3d: Don&amp;rsquo;t run jobs that have errors flagged in its fence&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=c3e4a25602f8b941b154f52a4da13ae77b4664c4&#34;&gt;drm/v3d: Set job pointer to NULL when the job&amp;rsquo;s fence has an error&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;jose-maria-casanova-crespo&#34;&gt;Jose Maria Casanova Crespo&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=6e64d6b3a3c39655de56682ec83e894978d23412&#34;&gt;drm/v3d: Assign job pointer to NULL before signaling the fence&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;luis-henriques-1&#34;&gt;Luis Henriques&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=92270d076115ae81b83f0605703602d2d5a866e2&#34;&gt;fuse: rename to fuse_dev_end_requests and make non-static&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=867d93dcdede5ea453543085d1ed0bf43cde60de&#34;&gt;fuse: Move fuse_get_dev to header file&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=88be7aa98d91f5761f8764273ebd961915e4632d&#34;&gt;fuse: Move request bits&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=a7040a06e4bc6a550ddb2078d59fad311dc0ee3b&#34;&gt;fuse: Add fuse-io-uring design documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=7ccd86ba3a485a8bc33478776eb7053d9adb7816&#34;&gt;fuse: make args-&amp;gt;in_args[0] to be always the header&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=24fe962c86f55347385933a1b06ca71b60854690&#34;&gt;fuse: {io-uring} Handle SQEs - register commands&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=d0f9c62aaf7a98412b46a91fe7daad76b316b3b7&#34;&gt;fuse: Make fuse_copy non static&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=f773a7c2c3d934d00542c6471170066d150d152f&#34;&gt;fuse: Add fuse-io-uring handling into fuse_copy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=3821336530616776414aa7a879640052b89def28&#34;&gt;fuse: {io-uring} Make hash-list req unique finding functions non-static&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=c090c8abae4b6b77a1bee116aa6c385456ebef96&#34;&gt;fuse: Add io-uring sqe commit and fetch support&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=4a9bfb9b6850fec0685447aed280533cf980de70&#34;&gt;fuse: {io-uring} Handle teardown of ring entries&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=ba74ba571189668697a8d8da906ad6d44762ebc6&#34;&gt;fuse: {io-uring} Make fuse_dev_queue_{interrupt,forget} non-static&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=c2c9af9a0b13261c36909036057a116f2edb5e1a&#34;&gt;fuse: Allow to queue fg requests through io-uring&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=857b0263f30eebe13ab4b6a65156a0d6c8fc2210&#34;&gt;fuse: Allow to queue bg requests through io-uring&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b6236c8407cba5d7a108facb1bcfab24994d3814&#34;&gt;fuse: {io-uring} Prevent mount point hang on fuse-server termination&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=3393ff964e0fa5def66570c54a4612bf9df06b76&#34;&gt;fuse: block request allocation until io-uring init is complete&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=786412a73e7ee5b00ef3437bbf2f3a250759b2ae&#34;&gt;fuse: enable fuse-over-io-uring&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=2d4fde59fd502a65c1698b61ad4d0f10a9ab665a&#34;&gt;fuse: prevent disabling io-uring on active connections&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;maíra-canal-1&#34;&gt;Maíra Canal&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=12e755103f2404fa87bd1d7af93100ec45b43feb&#34;&gt;drm/vkms: Remove index parameter from init_vkms_output&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=22f16c50beb6b7c4e2744eb7ea998dae0d2cdbdc&#34;&gt;drm/vkms: Code formatting&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=2f9741ac3b94c5f4418cd727d232ae0590b8ef1a&#34;&gt;drm/vkms: Use drm_frame directly&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=51091b4ab257887d9ab79d93078b7989abeeda6f&#34;&gt;drm/vkms: Use const for input pointers in pixel_read an pixel_write functions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=c6eabbab359c156669e10d5dec3e71e80ff09bd2&#34;&gt;drm/v3d: Add DRM_IOCTL_V3D_PERFMON_SET_GLOBAL&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;tvrtko-ursulin-1&#34;&gt;Tvrtko Ursulin&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=6bef484c5e9a5d3937a4bdf56e0f08f25517f8a0&#34;&gt;drm/etnaviv: Add fdinfo support for memory stats&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=bebf2ebd70f210a6c8fe5f668dadefb083014217&#34;&gt;drm: make drm-active- stats optional&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=e77d0401e8a198d348bdff5ad48f9dab07902eb4&#34;&gt;Documentation/gpu: Clarify drm memory stats definition&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=23e0832d6d7be2d3c713f9390c060b6f1c48bf36&#34;&gt;drm/sched: Fix preprocessor guard&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;tested-2&#34;&gt;Tested (2)&lt;/h2&gt;
&lt;h3 id=&#34;andré-almeida-1&#34;&gt;André Almeida&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=1d44a30ae3f9195cb4eb7d81bb9ced2776232094&#34;&gt;ASoC: cs35l41: Fallback to using HID for system_name if no SUB is available&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;christian-gmeiner-2&#34;&gt;Christian Gmeiner&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=8a20030038742b9915c6d811a4e6c14b126cafb4&#34;&gt;hexagon: fix using plain integer as NULL pointer warning in cmpxchg&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;acked-1&#34;&gt;Acked (1)&lt;/h2&gt;
&lt;h3 id=&#34;iago-toral-quiroga-1&#34;&gt;Iago Toral Quiroga&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=4ee06e3b6120a77fd3967c2c62268083d26c5500&#34;&gt;drm/v3d: Fix miscellaneous documentation errors&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;maintainer-sob-6&#34;&gt;Maintainer SoB (6)&lt;/h2&gt;
&lt;h3 id=&#34;maíra-canal-2&#34;&gt;Maíra Canal&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=21f1435b1e6b012a07c42f36b206d2b66fc8f13b&#34;&gt;drm/v3d: Stop active perfmon if it is being destroyed&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=c6eabbab359c156669e10d5dec3e71e80ff09bd2&#34;&gt;drm/v3d: Add DRM_IOCTL_V3D_PERFMON_SET_GLOBAL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=c5cf801914ef3e67923e5dc912e04167e665dd11&#34;&gt;drm/vc4: plane: Remove WARN on state being set in plane_reset&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;tvrtko-ursulin-2&#34;&gt;Tvrtko Ursulin&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=bc6b027e6d735bde7622f3bbf809de5b911b49e9&#34;&gt;drm/i915: Remove deadcode&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=64420d2f3e3bf3e72c4a56f806711fb93faf1feb&#34;&gt;drm/i915: Remove unused intel_huc_suspend&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=0a1584ec3dd947ce31d031122f7f57dd1a8f5a0e&#34;&gt;drm/i915: Remove unused intel_ring_cacheline_align&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>Linux 6.13, I WANT A GUITAR PEDAL</title>
      <link>https://andrealmeid.com/post/2025-01-20-kernel-13/</link>
      <pubDate>Mon, 20 Jan 2025 00:00:00 +0000</pubDate>
      
      <guid>https://andrealmeid.com/post/2025-01-20-kernel-13/</guid>
      <description>&lt;p&gt;Just as 2025 is starting, we got a new Linux release in mid January, tagged as 6.13. In the spirit of holidays, Linus Torvalds even announced during 6.13-rc6 that he would be &lt;a href=&#34;https://lore.kernel.org/lkml/CAHk-=wjrP_uH7_2h7_P+qAO9o5wmQRnhpiivsq1dti4xsM-_9w@mail.gmail.com/&#34;&gt;building and raffling a guitar pedal&lt;/a&gt; for a random kernel developer!&lt;/p&gt;
&lt;p&gt;As usual, this release comes with a pack of exciting news done by the kernel community:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;This release has two important improvements for task scheduling: lazy preemption and proxy execution. The goal with lazy preemption is to find a better balance between throughput and response time. A secondary goal is being able to make it the preferred non-realtime scheduling policy for most cases. Tasks that really need a reschedule in a hurry will use the older &lt;code&gt;TIF_NEED_RESCHED&lt;/code&gt; flag. A preliminary work for proxy execution was merged, which will let us avoid priority-inversion scenarios when using real time tasks with deadline scheduling, for use cases such as Android.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;New important Rust abstractions arrived, such as VFS data structures and interfaces, and also abstractions for misc devices.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Lightweight guard pages: guard pages are used to raise a fatal signal when accessed. This feature had the drawback of having a heavy performance impact, but in this new release the flag &lt;code&gt;MADV_GUARD_INSTALL&lt;/code&gt; was added for the &lt;code&gt;madvise()&lt;/code&gt; syscall, offering a lightweight way to guard pages.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To know more about the community improvements, check out the &lt;a href=&#34;https://kernelnewbies.org/Linux_6.13&#34;&gt;summary made by Kernel Newbies&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Now let&amp;rsquo;s highlight the contributions made by Igalians for this release.&lt;/p&gt;
&lt;h2 id=&#34;case-insensitive-support-for-tmpfs&#34;&gt;Case-insensitive support for tmpfs&lt;/h2&gt;
&lt;p&gt;Case sensitivity has been a traditional difference between Linux distros and MS Windows, with the most popular filesystems been in opposite sides: while ext4 is case sensitive, NTFS is case insensitive. This difference proved to be challenging when Windows apps, mainly games, started to be a common use case for Linux distros (thanks to Wine!). For instance, games running through Steam&amp;rsquo;s Proton would expect that the path &lt;code&gt;assets/player.png&lt;/code&gt; and &lt;code&gt;assets/PLAYER.PNG&lt;/code&gt; would point to be the same file, but this is not the case in ext4. To avoid doing workarounds in userspace, &lt;a href=&#34;https://lwn.net/Articles/829737/&#34;&gt;ext4 has support for casefolding since Linux 5.2&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Now, tmpfs joins the group of filesystems with case-insensitive support. This is particularly useful for running games inside containers, like the combination of Wine + Flatpak. In such scenarios, the container shares a subset of the host filesystem with the application, mounting it using tmpfs. To keep the filesystem consistent, with the same expectations of the host filesystem about the mounted one, if the host filesystem is case-insensitive we can do the same thing for the container filesystem too. You can read more about the use case in the &lt;a href=&#34;https://lore.kernel.org/all/20241021-tonyk-tmpfs-v8-0-f443d5814194@igalia.com/&#34;&gt;patchset cover letter&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;While the container frameworks implement proper support for this feature, you can play with it and try it yourself:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;$ mount -t tmpfs -o casefold fs_name /mytmpfs
$ cd /mytmpfs &lt;span style=&#34;color:#75715e&#34;&gt;# case-sensitive by default, we still need to enable it&lt;/span&gt;
$ mkdir a
$ touch a; touch A
$ ls
A  a
$ mkdir B; cd b
cd: The directory &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;b&amp;#39;&lt;/span&gt; does not exist
$ &lt;span style=&#34;color:#75715e&#34;&gt;# now let&amp;#39;s create a case-insensitive dir&lt;/span&gt;
$ mkdir case_dir
$ chattr +F case_dir
$ cd case_dir
$ touch a; touch A
$ ls
a
$ mkdir B; cd b
$ pwd
$ /home/user/mytmpfs/case_dir/B
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;v3d-super-pages-support&#34;&gt;V3D Super Pages support&lt;/h2&gt;
&lt;p&gt;As part of Igalia&amp;rsquo;s effort for enhancing the graphics stack for Raspberry Pi, the V3D DRM driver now has support for Super Pages, improving performance and making memory usage more efficient for Raspberry Pi 4 and 5. Using Linux 6.13, the driver will enable the MMU to allocate not only the default 4KB pages, but also 64KB &amp;ldquo;Big Pages&amp;rdquo; and 1MB &amp;ldquo;Super Pages&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;To measure the difference that Super Pages made to the performance, a series of benchmarks where used, and the highlights are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;+8.36% of FPS boost for Warzone 2100 in RPi4&lt;/li&gt;
&lt;li&gt;+3.62% of FPS boost for Quake 2 in RPi5&lt;/li&gt;
&lt;li&gt;10% time reduction for the Mesa CI job &lt;code&gt;v3dv-rpi5-vk-full:arm64&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Aether SX2 emulator is more fluid to play&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can read a detailed post about this, with all benchmark results, in &lt;a href=&#34;https://mairacanal.github.io/unleashing-power-enabling-super-pages-on-RPi/&#34;&gt;Maíra&amp;rsquo;s blog post&lt;/a&gt;, including a super cool PlayStation 2 emulation showcase!&lt;/p&gt;
&lt;h2 id=&#34;new-transparent_hugepage_shmem-command-line-parameter&#34;&gt;New &lt;code&gt;transparent_hugepage_shmem=&lt;/code&gt; command-line parameter&lt;/h2&gt;
&lt;p&gt;Igalia contributed new kernel command-line parameters to improve the configuration of multi-size Transparent Huge Pages (mTHP) for shmem. These parameters, &lt;code&gt;transparent_hugepage_shmem=&lt;/code&gt; and &lt;code&gt;thp_shmem=&lt;/code&gt;, enable more flexible and fine-grained control over the allocation of huge pages when using shmem.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;transparent_hugepage_shmem=&lt;/code&gt; parameter allows users to set a global default huge page allocation policy for the internal shmem mount. This is particularly valuable for DRM GPU drivers. Just as CPU architectures, GPUs can also take advantage of huge pages, but this is possible only if DRM GEM objects are backed by huge pages.&lt;/p&gt;
&lt;p&gt;Since GEM uses shmem to allocate anonymous pageable memory, having control over the default huge page allocation policy allows for the exploration of huge pages use on GPUs that rely on GEM objects backed by shmem.&lt;/p&gt;
&lt;p&gt;In addition, the &lt;code&gt;thp_shmem=&lt;/code&gt; parameter provides fine-grained control over the default huge page allocation policy for specific huge page sizes.&lt;/p&gt;
&lt;p&gt;By configuring page sizes and policies of huge-page allocations for the internal shmem mount, these changes complement the V3D Super Pages feature, as we can now tailor the size of the huge pages to the needs of our GPUs.&lt;/p&gt;
&lt;h2 id=&#34;drm-and-amdgpu-improvements&#34;&gt;DRM and AMDGPU improvements&lt;/h2&gt;
&lt;p&gt;As usual in Linux releases, this one collects a list of improvements made by our team in DRM and AMDGPU driver from the last cycle.&lt;/p&gt;
&lt;p&gt;Cosmic (the desktop environment behind Pop! OS) users discovered some bugs in the AMD display driver regarding the handling of overlay planes. These issues were pre-existing and came to light with the introduction of cursor overlay mode. They were causing page faults and divide errors. We debugged the issue together with reporters and proposed a set of solutions that were ultimately accepted by AMD developers in time for this release.&lt;/p&gt;
&lt;p&gt;In addition, we worked with AMD developers to migrate the driver-specific handling of EDID data to the DRM common code, using drm_edid opaque objects to avoid handling raw EDID data. The first phase was incorporated and allowed the inclusion of new functionality to get EDID from ACPI. However, some dependencies between the AMD the Linux-dependent and OS-agnostic components were left to be resolved in next iterations. It means that next steps will focus on removing the legacy way of handling this data.&lt;/p&gt;
&lt;p&gt;Also in the AMD driver, we fixed one out of bounds memory write, fixed one warning on a boot regression and exposed special GPU memory pools via the fdinfo common DRM framework.&lt;/p&gt;
&lt;p&gt;In the DRM scheduler code, we added some missing locking, removed a couple of re-lock cycles for slightly reduced command submission overheads and clarified the internal documentation.&lt;/p&gt;
&lt;p&gt;In the common dma-fence code, we fixed one memory leak on the failure path and one significant runtime memory leak caused by incorrect merging of fences. The latter was found by the community and was manifesting itself as a system out of memory condition after a few hours of gameplay.&lt;/p&gt;
&lt;h2 id=&#34;sched_ext&#34;&gt;sched_ext&lt;/h2&gt;
&lt;p&gt;The sched_ext landed in kernel 6.12 to enable the efficient development of BPF-based custom schedulers. During the 6.13 development cycle, the sched_ext community has made efforts to harden the code to make it more reliable and clean up the BPF APIs and documentation for clarity.&lt;/p&gt;
&lt;p&gt;Igalia has contributed to hardening the sched_ext core code. We fixed the incorrect use of the scheduler run queue lock, especially during initializing and finalizing the BPF scheduler. Also, we fixed the missing RCU lock protections when the sched_core selects a proper CPU for a task. Without these fixes, the sched_ext core, in the worst case, could crash or raise a kernel oops message.&lt;/p&gt;
&lt;h2 id=&#34;other-contributions--fixes&#34;&gt;Other Contributions &amp;amp; Fixes&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://lwn.net/Articles/677764/&#34;&gt;syzkaller&lt;/a&gt;, a kernel fuzzer, has been an important instrument to find kernel bugs. With the help of &lt;a href=&#34;https://www.kernel.org/doc/html/v4.14/dev-tools/kasan.html&#34;&gt;KASAN&lt;/a&gt;, a memory error detector, and &lt;a href=&#34;https://syzkaller.appspot.com/upstream&#34;&gt;syzbot&lt;/a&gt;, numerous such bugs have been reported and fixed.&lt;/p&gt;
&lt;p&gt;Igalians have contributed to such fixes around a lot of subsystems (like media, network, etc), helping reduce the number of open bugs.&lt;/p&gt;
&lt;h2 id=&#34;check-the-complete-list-of-igalias-contributions-for-the-613-release&#34;&gt;Check the complete list of Igalia’s contributions for the 6.13 release&lt;/h2&gt;
&lt;h2 id=&#34;authored-70&#34;&gt;Authored (70)&lt;/h2&gt;
&lt;h3 id=&#34;andré-almeida&#34;&gt;André Almeida&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=156bb2c569cd869583c593d27a5bd69e7b2a4264&#34;&gt;unicode: Fix utf8_load() error path&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=6b56a63d286f6f57066c4b5648d8fbec9510beae&#34;&gt;MAINTAINERS: Add Unicode tree&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=82f5ee35d0b960c54370a72418b9ec0dca382262&#34;&gt;scripts/kernel-doc: Fix build time warnings&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=0e152beb5aa1ccdac9aae9fa570a9e039aff7a03&#34;&gt;libfs: Create the helper function generic_ci_validate_strict_name()&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=3f5ad0d21db80e31894de4c49874ef5dfc5999a7&#34;&gt;ext4: Use generic_ci_validate_strict_name helper&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=04dad6c6d37d741bad9946a92171bfa637e989f0&#34;&gt;unicode: Export latest available UTF-8 version number&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=142fa60f61f93805471012f24e029af6d113c5cc&#34;&gt;unicode: Recreate utf8_parse_version()&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=458532c8dfeb24edd5e07467605a6484a728e5c2&#34;&gt;libfs: Export generic_ci_ dentry functions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=58e55efd6c72cbc3e76423a1086f7b4d6c2ae9c2&#34;&gt;tmpfs: Add casefold lookup support&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=5cd9aecbc72c07e8b83e900078669a7d0bc5f98f&#34;&gt;tmpfs: Add flag FS_CASEFOLD_FL support for tmpfs dirs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=5132f08bd3325602f4de01ccd59537c7f91e1f89&#34;&gt;tmpfs: Expose filesystem features via sysfs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=a713f830c9033f0e92f8f036bd49d6f2e03dde3c&#34;&gt;docs: tmpfs: Add casefold options&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=33b091c08ed85e023c21376e6f787355fd46b440&#34;&gt;libfs: Fix kernel-doc warning in generic_ci_validate_strict_name&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=18d2f10f6284f5bb9c03a759044121c71e5b3b4c&#34;&gt;tmpfs: Fix type for sysfs&amp;rsquo; casefold attribute&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=65c481f30896750f659345b915b669f78a3c0289&#34;&gt;tmpfs: Initialize sysfs during tmpfs init&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;changwoo-min&#34;&gt;Changwoo Min&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=6268d5bc10354fc2ab8d44a0cd3b042d49a0417e&#34;&gt;sched_ext: Replace rq_lock() to raw_spin_rq_lock() in scx_ops_bypass()&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=153591f7036be19ddcdb102c34b9f3e876a236c7&#34;&gt;sched_ext: Clarify sched_ext_ops table for userland scheduler&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=f39489fea677ad78ca4ce1ab2d204a6639b868dc&#34;&gt;sched_ext: add a missing rcu_read_lock/unlock pair at scx_select_cpu_dfl()&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=48ca421268735c60ea0d4c2e19610b224d5c8656&#34;&gt;MAINTAINERS: add me as reviewer for sched_ext&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;christian-gmeiner&#34;&gt;Christian Gmeiner&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=f2a4bcb2532881655ee546305f2a4fc6e1399a3e&#34;&gt;drm/v3d: Use v3d_perfmon_find()&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;guilherme-g-piccoli&#34;&gt;Guilherme G. Piccoli&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=7d6094e62cc0e987bab01c4c3f7e3b613fb314d2&#34;&gt;Documentation: Improve crash_kexec_post_notifiers description&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=5c1b544563005a00591a3aa86ecff62ed4d11be3&#34;&gt;wifi: rtlwifi: Drastically reduce the attempts to read efuse in case of failures&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;maíra-canal&#34;&gt;Maíra Canal&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=cf1becb7f996a0a23ea2c270cf6bb0911ec3ca1a&#34;&gt;drm/v3d: Address race-condition in MMU flush&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=d2fb8811108b2c1285c56f4fba4fff8fe3525593&#34;&gt;drm/v3d: Flush the MMU before we supply more memory to the binner&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=56cf76ed784fe5347c9305f7f0f3d0f9cb8d8a3b&#34;&gt;drm/v3d: Fix return if scheduler initialization fails&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=0992b2541e1cd9580c2e70fab7a78558de054bae&#34;&gt;drm/gem: Create a drm_gem_object_init_with_mnt() function&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=eb8d395f68421449c6201d3019f51011d034f00e&#34;&gt;drm/v3d: Introduce gemfs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=be431dfec976e553a08883e26d0d0cc2598a8dfa&#34;&gt;drm/gem: Create shmem GEM object in a given mountpoint&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=8dd6074d4719644b676adf9f07d71292bee28e3a&#34;&gt;drm/v3d: Reduce the alignment of the node allocation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=e4c17720262f394f6320a2b6e17a128bfdabb37c&#34;&gt;drm/v3d: Support Big/Super Pages when writing out PTEs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=20d69e8905fc36818ab585cb50f6de48fb8f6de3&#34;&gt;drm/v3d: Use gemfs/THP in BO creation if available&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=0df4a13ca8bed29cbc362c99b958fbb8b27b1675&#34;&gt;drm/v3d: Add modparam for turning off Big/Super Pages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=9f8e1c93a0d459463819d8bd222196b2655c279f&#34;&gt;drm/v3d: Expose Super Pages capability&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=82fe69e63d2b5a5e86ea94c7361c833d3848ab69&#34;&gt;drm/vc4: Use &lt;code&gt;vc4_perfmon_find()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=522bb461b1335e5999fe30838b03f0cec6a721de&#34;&gt;MAINTAINERS: Add Maíra to VC4 reviewers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=949042811117d2f437ef6b529a69d45e2ee2d429&#34;&gt;mm: shmem: control THP support through the kernel command line&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=1c8d48497525d77acfb7bdaaa246a887e754f379&#34;&gt;mm: move &lt;code&gt;get_order_from_str()&lt;/code&gt; to internal.h&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=24f9cd195fbc9382ae0ed8b332e6302d1722d8e0&#34;&gt;mm: shmem: override mTHP shmem default with a kernel parameter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=93c1e57adeb0aa7d3feedeb82ac19845cbe540de&#34;&gt;mm: huge_memory: use strscpy() instead of strcpy()&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=c98b10496b2f3c4f576af3482c71aadcfcbf765e&#34;&gt;drm/v3d: Enable Performance Counters before clearing them&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=e4b5ccd392b92300a2b341705cc4805681094e49&#34;&gt;drm/v3d: Ensure job pointer is set to NULL after job completion&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;melissa-wen&#34;&gt;Melissa Wen&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=48edb2a4256eedf6c92eecf2bc7744e6ecb44b5e&#34;&gt;drm/amd/display: switch amdgpu_dm_connector to use struct drm_edid&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=9f293c4544f74a428275e6fbf9b2b62587ced7f0&#34;&gt;drm/amd/display: switch to setting physical address directly&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=abb91c545a51feb9ea871593dd819c42644f25ad&#34;&gt;drm/amd/display: always call connector_update when parsing freesync_caps&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=0159f88a99c9f5722dbe52ac42faf3446f371dea&#34;&gt;drm/amd/display: remove redundant freesync parser for DP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=5605a0d363f1283e10985aa81000e63e5b783fc4&#34;&gt;drm/amd/display: add missing tracepoint event in DM atomic_commit_tail&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=7de8d5c90be9ad9f6575e818a674801db2ada794&#34;&gt;drm/amd/display: fix page fault due to max surface definition mismatch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=21541bc6b44241e3f791f9e552352d8440b2b29e&#34;&gt;drm/amd/display: increase MAX_SURFACES to the value supported by hw&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=5225fd2a26211d012533acf98a6ad3f983885817&#34;&gt;drm/amd/display: fix divide error in DM plane scale calcs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;thadeu-lima-de-souza-cascardo&#34;&gt;Thadeu Lima de Souza Cascardo&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=3dd075fe8ebbc6fcbf998f81a75b8c4b159a6195&#34;&gt;media: uvcvideo: Require entities to have a non-zero unique ID&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=1c82587cb57687de3f18ab4b98a8850c789bedcf&#34;&gt;hfsplus: don&amp;rsquo;t query the device logical block size multiple times&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b548f5e9456c568155499d9ebac675c0d7a296e8&#34;&gt;Bluetooth: btmtk: avoid UAF in btmtk_process_coredump&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;tvrtko-ursulin&#34;&gt;Tvrtko Ursulin&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=06c3c406850e5495bb56ccf624d0c9477e1ba901&#34;&gt;drm/v3d: Appease lockdep while updating GPU stats&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b37918090b2e84133c6eb9a1e227b2b7092d219e&#34;&gt;drm/sched: Add locking to drm_sched_entity_modify_sched&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=2c04742b04ee35ab75ffdbf4fe1a6ef1792775af&#34;&gt;Documentation/gpu: Document the situation with unqualified drm-memory-&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=fc282e9e8651842db8bd48d449566f4d3b82da9c&#34;&gt;drm/amdgpu: Drop unused fence argument from amdgpu_vmid_grab_used&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=04bdba46542c953e26f3ba4ac84dd65fbb4e7382&#34;&gt;drm/amdgpu: Use drm_print_memory_stats helper from fdinfo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=871f44b4ba74a676ef2f0528a3efc591346fa92a&#34;&gt;drm/amdgpu: Drop impossible condition from amdgpu_job_prepare_job&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=89cfa73b612a711ad19c6323814f4d28535a0fca&#34;&gt;drm/amdgpu: Remove the while loop from amdgpu_job_prepare_job&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=d42a254633c773921884a19e8a1a0f53a31150c3&#34;&gt;drm/sched: Optimise drm_sched_entity_push_job&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=6a313579eac899b34dc40b0c342f5bd91e44a081&#34;&gt;drm/sched: Stop setting current entity in FIFO mode&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=a6f46283e952fe50dea5f932a1e4f0b6b2370968&#34;&gt;drm/sched: Re-order struct drm_sched_rq members for clarity&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=f93126f5d55920d1447ef00a3fbe6706f40f53de&#34;&gt;drm/sched: Re-group and rename the entity run-queue lock&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=134e71bd1edcc7252b64ca31efe88edfef86d784&#34;&gt;drm/sched: Further optimise drm_sched_entity_push_job&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=0880f58f9609f0200483a49429af0f050d281703&#34;&gt;drm/amd/pm: Vangogh: Fix kernel memory out of bounds write&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=cd3037f3fce5bf1556ad1a078cf458ebe52b12e8&#34;&gt;drm/amdgpu: Stop reporting special chip memory pools as CPU memory in fdinfo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=aa2ac51c8e1952ff95588d082e1a8b402c510ed0&#34;&gt;drm/amdgpu: Expose special on chip memory pools in fdinfo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=949291c5314009b4f6e252391edbb40fdd5d5414&#34;&gt;dma-fence: Fix reference leak on fence merge failure path&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=fe52c649438b8489c9456681d93a9b3de3d38263&#34;&gt;dma-fence: Use kernel&amp;rsquo;s sort for merging fences&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=de35994ecd2dd6148ab5a6c5050a1670a04dec77&#34;&gt;workqueue: Do not warn when cancelling WQ_MEM_RECLAIM work from !WQ_MEM_RECLAIM worker&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;reviewed-41&#34;&gt;Reviewed (41)&lt;/h2&gt;
&lt;h3 id=&#34;andré-almeida-1&#34;&gt;André Almeida&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=19298f48694987fac843261c84e24834c255b451&#34;&gt;futex: Use atomic64_inc_return() in get_inode_sequence_number()&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=87347f148061b48c3495fb61dcbad384760da9cf&#34;&gt;futex: Use atomic64_try_cmpxchg_relaxed() in get_inode_sequence_number()&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b071cc35469ea44392222fe8de69b431a0778a5f&#34;&gt;mm: shmem: use signed int for version handling in casefold option&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;christian-gmeiner-1&#34;&gt;Christian Gmeiner&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=82fe69e63d2b5a5e86ea94c7361c833d3848ab69&#34;&gt;drm/vc4: Use &lt;code&gt;vc4_perfmon_find()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=13c96ac9a3f0f1c7ba1ff0656ea508e7fa065e7e&#34;&gt;drm/etnaviv: Request pages from DMA32 zone on addressing_limited&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=56257d4c422d0f45b1367145ffe1a1350d4338b6&#34;&gt;drm/etnaviv: Use unsigned type to count the number of pages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=c82e8b292c2a2a4e780677af895c6233ef5538b2&#34;&gt;drm/etnaviv: Use &amp;lsquo;unsigned&amp;rsquo; type to count the number of pages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b09ccba779c8dd241c9254a4b5c062c51e6fa80d&#34;&gt;drm/etnaviv: Drop the &amp;lt;linux/pm_runtime.h&amp;gt; header&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=deadf1ef4adce096352489d1ef3721e43fa188bf&#34;&gt;drm/etnaviv: Fix missing mutex_destroy()&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=37dc4737447a7667f8e9ec790dac251da057eb27&#34;&gt;drm/etnaviv: hold GPU lock across perfmon sampling&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=67cb86039f8e2e29164b317d16756804e0deaa2a&#34;&gt;drm/etnaviv: assert GPU lock held in perfmon pipe_*_read functions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=ca0593a29e9ea2df17bf222a649a41bc16936255&#34;&gt;drm/etnaviv: unconditionally enable debug registers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=46864a690b92464063947420ad1a55e295b2004d&#34;&gt;drm/etnaviv: update hardware headers from rnndb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=e1f3220b957a55a875d668f3e2fadd6315c8bbf4&#34;&gt;drm/etnaviv: take current primitive into account when checking for hung GPU&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=5a85670cfaaca6a88eb6ee23777e45de444e5967&#34;&gt;drm/etnaviv: always allocate 4K for kernel ringbuffers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=4f8dbadef085ab447a01a8d4806a3f629fea05ed&#34;&gt;drm/etnaviv: flush shader L1 cache after user commandstream&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;iago-toral-quiroga&#34;&gt;Iago Toral Quiroga&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=cf1becb7f996a0a23ea2c270cf6bb0911ec3ca1a&#34;&gt;drm/v3d: Address race-condition in MMU flush&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=d2fb8811108b2c1285c56f4fba4fff8fe3525593&#34;&gt;drm/v3d: Flush the MMU before we supply more memory to the binner&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=56cf76ed784fe5347c9305f7f0f3d0f9cb8d8a3b&#34;&gt;drm/v3d: Fix return if scheduler initialization fails&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=eb8d395f68421449c6201d3019f51011d034f00e&#34;&gt;drm/v3d: Introduce gemfs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=8dd6074d4719644b676adf9f07d71292bee28e3a&#34;&gt;drm/v3d: Reduce the alignment of the node allocation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=9f8e1c93a0d459463819d8bd222196b2655c279f&#34;&gt;drm/v3d: Expose Super Pages capability&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=c98b10496b2f3c4f576af3482c71aadcfcbf765e&#34;&gt;drm/v3d: Enable Performance Counters before clearing them&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;jose-maria-casanova-crespo&#34;&gt;Jose Maria Casanova Crespo&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=e4b5ccd392b92300a2b341705cc4805681094e49&#34;&gt;drm/v3d: Ensure job pointer is set to NULL after job completion&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;juan-a-suarez&#34;&gt;Juan A. Suarez&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=82fe69e63d2b5a5e86ea94c7361c833d3848ab69&#34;&gt;drm/vc4: Use &lt;code&gt;vc4_perfmon_find()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;maíra-canal-1&#34;&gt;Maíra Canal&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=f2a4bcb2532881655ee546305f2a4fc6e1399a3e&#34;&gt;drm/v3d: Use v3d_perfmon_find()&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=01c29dbf9dfdf0ba8527e559bc78804a3ce4075d&#34;&gt;drm/vc4: Run default client setup for all variants.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=cf1c87d978d47339a39bfa7a6133ecd3f8f87525&#34;&gt;drm/vc4: Match drm_dev_enter and exit calls in vc4_hvs_lut_load&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=6b0bd1b02ea24b10522c92b2503981970b26d1a2&#34;&gt;drm/vc4: Match drm_dev_enter and exit calls in vc4_hvs_atomic_flush&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=42aa18d1c3e7762bcebd89a5857ed7774e669d92&#34;&gt;drm/vc4: Correct generation check in vc4_hvs_lut_load&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=1d43dddd7c38ea1aa93f78f7ee10087afb0a561f&#34;&gt;drm/vkms: Drop unnecessary call to drm_crtc_cleanup()&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;tvrtko-ursulin-1&#34;&gt;Tvrtko Ursulin&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=0992b2541e1cd9580c2e70fab7a78558de054bae&#34;&gt;drm/gem: Create a drm_gem_object_init_with_mnt() function&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=be431dfec976e553a08883e26d0d0cc2598a8dfa&#34;&gt;drm/gem: Create shmem GEM object in a given mountpoint&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=e4c17720262f394f6320a2b6e17a128bfdabb37c&#34;&gt;drm/v3d: Support Big/Super Pages when writing out PTEs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=20d69e8905fc36818ab585cb50f6de48fb8f6de3&#34;&gt;drm/v3d: Use gemfs/THP in BO creation if available&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=0df4a13ca8bed29cbc362c99b958fbb8b27b1675&#34;&gt;drm/v3d: Add modparam for turning off Big/Super Pages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=56c594d8df64e726e803652ee9f4ab08659d4574&#34;&gt;drm: add DRM_SET_CLIENT_NAME ioctl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=2c34a5464007c45142af009d13c668b0630ef9c0&#34;&gt;drm: use drm_file client_name in fdinfo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=f2863650384b32f1a511e338f102b819044ca930&#34;&gt;drm/amdgpu: make drm-memory-* report resident memory&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=78ac1c3558810486d90aa533b0039aa70487a3da&#34;&gt;dma-buf: fix dma_fence_array_signaled v4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=0cff90dec63da908fb16d9ea2872ebbcd2d18e6a&#34;&gt;dma-buf: Fix __dma_buf_debugfs_list_del argument for !CONFIG_DEBUG_FS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;tested-1&#34;&gt;Tested (1)&lt;/h2&gt;
&lt;h3 id=&#34;christian-gmeiner-2&#34;&gt;Christian Gmeiner&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=72dc70a062f9faea178d674416d72a2596b69633&#34;&gt;drm/etnaviv: Replace the &amp;lsquo;&amp;amp;pdev-&amp;gt;dev&amp;rsquo; with &amp;lsquo;dev&amp;rsquo;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;acked-5&#34;&gt;Acked (5)&lt;/h2&gt;
&lt;h3 id=&#34;changwoo-min-1&#34;&gt;Changwoo Min&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=cc26abb1a19adbb91b79d25a2e74976633ece429&#34;&gt;sched_ext: Rename &lt;code&gt;scx_bpf_dispatch[_vtime]()&lt;/code&gt; to &lt;code&gt;scx_bpf_dsq_insert[_vtime]()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=5209c03c8ed215357a4827496a71fd32167d83ef&#34;&gt;sched_ext: Rename &lt;code&gt;scx_bpf_consume()&lt;/code&gt; to &lt;code&gt;scx_bpf_dsq_move_to_local()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=5cbb302880f50f3edf35f8c6a1d38b6948bf4d11&#34;&gt;sched_ext: Rename &lt;code&gt;scx_bpf_dispatch[_vtime]_from_dsq*()&lt;/code&gt; -&amp;gt; &lt;code&gt;scx_bpf_dsq_move[_vtime]*()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;maíra-canal-2&#34;&gt;Maíra Canal&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=65676a6fc0ab83cc368ec4fae0f55422ecb1464d&#34;&gt;MAINTAINERS: remove myself as a VKMS maintainer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=80fd814e93f10fe60d02d8a31c46718ff9e9edec&#34;&gt;MAINTAINERS: Add myself as VKMS Maintainer&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;maintainer-sob-6&#34;&gt;Maintainer SoB (6)&lt;/h2&gt;
&lt;h3 id=&#34;maíra-canal-3&#34;&gt;Maíra Canal&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=65676a6fc0ab83cc368ec4fae0f55422ecb1464d&#34;&gt;MAINTAINERS: remove myself as a VKMS maintainer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=80fd814e93f10fe60d02d8a31c46718ff9e9edec&#34;&gt;MAINTAINERS: Add myself as VKMS Maintainer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=6e5eb6dcb3042adcda432a3498d0d62d91588c4d&#34;&gt;drm/vkms: Add documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=2b75feb312894f87d0539d46eeb364f447df723f&#34;&gt;drm/vkms: Suppress context imbalance detected by sparse warning&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=2f7bd9d66e638e1ce4a20fea83c9d44c25c3dae8&#34;&gt;drm/vkms: Add missing check for CRTC initialization&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=d28292aa48d1917db39fac6bcdaf991ba0ed279f&#34;&gt;drm/v3d: Drop allocation of object without mountpoint&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>Installing kernel modules faster with multithread XZ</title>
      <link>https://andrealmeid.com/post/2023-03-03-xz/</link>
      <pubDate>Fri, 03 Mar 2023 00:00:00 +0000</pubDate>
      
      <guid>https://andrealmeid.com/post/2023-03-03-xz/</guid>
      <description>&lt;p&gt;As a kernel developer, everyday I need to compile and install custom kernels, and any improvement in this workflow means to be more productive. While installing my fresh compiled modules, I noticed that it would be stuck in &lt;code&gt;amdgpu&lt;/code&gt; compression for some time:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;XZ      /usr/lib/modules/6.2.0-tonyk/kernel/drivers/gpu/drm/amd/amdgpu/amdgpu.ko.xz
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;xz-format&#34;&gt;XZ format&lt;/h3&gt;
&lt;p&gt;My target machine is the Steam Deck, that uses &lt;code&gt;.xz&lt;/code&gt; for compressing the modules. Giving that we want gamers to be able to install as many games as possible, the OS shouldn&amp;rsquo;t waste much disk space. &lt;code&gt;amdgpu&lt;/code&gt;, when compiled with debug symbols can use a good hunk of space. Here&amp;rsquo;s the comparison of disk size of the module uncompressed, and then with &lt;code&gt;.zst&lt;/code&gt; and &lt;code&gt;.xz&lt;/code&gt; compression:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;360M amdgpu.ko
61M  amdgpu.ko.zst
38M  amdgpu.ko.xz
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This more compact module comes with a cost: more CPU time for compression.&lt;/p&gt;
&lt;h3 id=&#34;multithread-compression&#34;&gt;Multithread compression&lt;/h3&gt;
&lt;p&gt;When I opened &lt;code&gt;htop&lt;/code&gt;, I saw that only a lonely thread was doing the hard work to compress &lt;code&gt;amdgpu&lt;/code&gt;, even that compression is a task easily parallelizable. I then hacked &lt;code&gt; scripts/Makefile.modinst&lt;/code&gt; so &lt;code&gt;XZ&lt;/code&gt; would use as many threads as possible, with the option &lt;code&gt;-T0&lt;/code&gt;. In my main build machine, &lt;code&gt;modules_install&lt;/code&gt; was running 4 times faster!&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# before the patch
$ time make modules_install -j16
Executed in  100.08 secs

# after the patch
$ time make  modules_install -j16
Executed in   28.60 secs
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Then, I submitted a patch to make this default for everyone: &lt;a href=&#34;https://lore.kernel.org/lkml/20230223001607.95523-1-andrealmeid@igalia.com/&#34;&gt;[PATCH] kbuild: modinst: Enable multithread xz compression&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;However, as Masahiro Yamada noticed, we shouldn&amp;rsquo;t be spawning numerous threads in the build system without the user request. Until today we specify manually how many threads we should run with &lt;code&gt;make -jX&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Hopefully, Nathan Chancellor suggested that the same results can be achieved using &lt;code&gt;XZ_OPT=-T0&lt;/code&gt;, so we still can benefit from this without the patch. I experimented with different &lt;code&gt;-TX&lt;/code&gt; and &lt;code&gt;-jY&lt;/code&gt; values, but in my notebook the most efficient values were &lt;code&gt;X = Y = nproc&lt;/code&gt;. You can check some results bellow:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ make modules_install
174.83 secs

$ make modules_install -j8
100.55 secs

$ make modules_install XZ_OPT=-T0
81.51 secs

$ make modules_install -j8 XZ_OPT=-T0
53.22 sec
&lt;/code&gt;&lt;/pre&gt;</description>
    </item>
    
    <item>
      <title>futex2 at Linux Plumbers Conference 2022</title>
      <link>https://andrealmeid.com/post/2022-09-22-lpc22/</link>
      <pubDate>Fri, 23 Sep 2022 00:00:00 +0000</pubDate>
      
      <guid>https://andrealmeid.com/post/2022-09-22-lpc22/</guid>
      <description>&lt;p&gt;In-person conferences are finally back! After two years of remote conferences, the kernel development community got together in Dublin, Ireland, to discuss current problems that need collaboration to be solved.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;img src=&#34;https://andrealmeid.com/blog-pics/lpc22-talk.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;As in the past editions, I took the opportunity to discuss about &lt;strong&gt;futex2&lt;/strong&gt;, a project I&amp;rsquo;m deeply involved in. futex2 is a project to solve issues found in the current futex interface. This years&amp;rsquo; session was about NUMA awaress of futex. Currently, futex allocates a single hash table in the kernel to store all data. If this is done in a NUMA machine, the table is allocated in a single node. This increases the cost of futex operations when done from any other node, given that will need to access a memory outside of it&amp;rsquo;s node.&lt;/p&gt;
&lt;p&gt;To solve this, futex2 will allocate a table per NUMA node and have a NUMA-aware interface to tell the kernel which node to work on, using this struct:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt; futexX_numa {
   __uX value;
   __sX hint;
};
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Where &lt;code&gt;X&lt;/code&gt; can be a range of values &lt;code&gt;[8, 16, 32, 64]&lt;/code&gt;, for each available futex size in futex2. &lt;code&gt;value&lt;/code&gt; is the futex value and &lt;code&gt;hint&lt;/code&gt; is the node where you want to operate on. It can be &lt;code&gt;-1&lt;/code&gt; for the current node or &lt;code&gt;[0, MAX_NUMNODES)&lt;/code&gt; to specify the node. So, for example:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt; futex32_numa f &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {.value &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, .hint &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;};

futex_wait(&lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt;f, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, FUTEX_NUMA &lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt; FUTEX_32, NULL);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The session was short, but very productive, with Peter Zijlstra and Thomas Gleixner  giving most feedback about the proposal. Here&amp;rsquo;s a list of ideas that were covered in the session and are to be consider when implementing this interface:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Userspace always initialize &lt;code&gt;.hint = -1&lt;/code&gt;. The kernel then overwrites &lt;code&gt;-1&lt;/code&gt; with the current node being used by &lt;strong&gt;the first waiter&lt;/strong&gt;. In that way, every following futex operation (wait or wake) will be guaranteed to be on the same node.&lt;/li&gt;
&lt;li&gt;After the last waiter is waked, &lt;code&gt;.hint&lt;/code&gt; can be set as &lt;code&gt;-1&lt;/code&gt; again.&lt;/li&gt;
&lt;li&gt;To avoid racing, any change to the &lt;code&gt;struct futex_numa&lt;/code&gt; needs to be done atomically for the whole structure.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;struct&lt;/code&gt; needs to have explicitly alignment and to be &lt;code&gt;__packed&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Benchmark data will for sure attracts reviewers and users. &lt;code&gt;perf bench&lt;/code&gt; is the right place to add that.&lt;/li&gt;
&lt;li&gt;The local hash table doesn&amp;rsquo;t need to be as big as is the global futex table, probably &lt;code&gt;num_possible_cpus()&lt;/code&gt; will be enough.&lt;/li&gt;
&lt;li&gt;Support for a &lt;code&gt;struct futex64_numa&lt;/code&gt; might be tricky, so we might just restrict for smaller sizes. &lt;code&gt;hint&lt;/code&gt; may be always &lt;code&gt;s16&lt;/code&gt; giving that &lt;code&gt;MAX_NUMNODES&lt;/code&gt; isn&amp;rsquo;t that huge.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&#34;https://lpc.events/event/16/contributions/1306/attachments/1031/1977/futex2.pdf&#34;&gt;Here&lt;/a&gt; are my slides from this year. If you need any help with futex, you can get in touch with me &lt;a href=&#34;mailto:andrealmeid@igalia.com&#34;&gt;andrealmeid@igalia.com&lt;/a&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Apart from futex, there were other talks to highlight. As a trend in recent Plumber editions, Rust was once again a hot topic in the conference. From a single session at &lt;a href=&#34;https://lpc.events/event/7/contributions/804/&#34;&gt;LPC 2020&lt;/a&gt;, this year we had Rust in the main track, in the &lt;a href=&#34;https://lwn.net/Articles/908320/&#34;&gt;Maintainers Summit&lt;/a&gt; and its own &lt;a href=&#34;https://lpc.events/event/16/sessions/150/&#34;&gt;Microconference&lt;/a&gt;. The initial mistrust of adding a second language to the kernel is long gone, and now the conversations are around the final bits on how to get it merged (Will the patches go though the maintainers tree, or directly to Torvalds? Which Rust version to use? Stable or unstable?). This whole effort is a good showcase of the conference ability to join efforts from different companies, communities and projects along the stack (GCC, clang) to solve complex problems together. Oh, and if you are wondering, Rust will likely be available in &lt;a href=&#34;https://lwn.net/SubscriberLink/908347/da67a5162d1bc4a3/&#34;&gt;Linux 6.1 or 6.2&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;From the GPU world we had &lt;a href=&#34;https://airlied.blogspot.com/2022/09/accelerators-bof-outcomes-summary.html&#34;&gt;a session&lt;/a&gt; to discuss how to deal with &lt;a href=&#34;https://lwn.net/Articles/870418/&#34;&gt;accelerator drivers&lt;/a&gt; in the kernel, as there&amp;rsquo;s some disagreement on how to accept (and where to accept) these new drivers. Along with that, &lt;a href=&#34;https://airlied.blogspot.com/2022/09/lpc-2022-gpu-bof-user-console-and.html&#34;&gt;a BoF&lt;/a&gt; to talk about getting a userspace console to be used in case the graphics stack crashes and how to get an implementation of cgroups for GPUs.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&#34;https://lpc.events/event/16/sessions/140/&#34;&gt;Kernel Testing &amp;amp; Dependability Microconference&lt;/a&gt; was a stage to get news from testing tools, like syzbot, kselftests, KernelCI and KUnit. There was some discussion on how to integrate all frameworks as well, given that there&amp;rsquo;s a lot of testing nowadays, but not much communication and deploying of all this. Last but not least, Tales Aparecida (my GSoC mentee) presented the challenges of using &lt;a href=&#34;https://lpc.events/event/16/contributions/1310/&#34;&gt;KUnit to test device drivers&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s it for 2022 edition. Thanks &lt;a href=&#34;https://igalia.com&#34;&gt;Igalia&lt;/a&gt; for sponsoring my travel to LPC and see ya next year!&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Keeping a project bisectable</title>
      <link>https://andrealmeid.com/post/2022-07-31-keep-bisect/</link>
      <pubDate>Thu, 04 Aug 2022 00:00:00 +0000</pubDate>
      
      <guid>https://andrealmeid.com/post/2022-07-31-keep-bisect/</guid>
      <description>&lt;p&gt;People write code. Test coverage is never enough. Some angry contributor will
disable the CI. And we all write bugs.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;But that&amp;rsquo;s OK, it part of the job. Programming is hard and sometimes we may miss
a corner case, forget that numbers overflow and all other strange things that
computers can do.&lt;/p&gt;
&lt;p&gt;One easy thing that we can do to help the poor developer that needs to find
what changed in the code that stopped their printer to work properly, is to keep
the project bisectable.&lt;/p&gt;
&lt;p&gt;A &amp;ldquo;bisectable&amp;rdquo; project is a project where one can reliably run &lt;a href=&#34;https://git-scm.com/docs/git-bisect&#34;&gt;&lt;code&gt;git bisect&lt;/code&gt;&lt;/a&gt;, which is a very useful command
to find a commit that introduces a bug. It works doing a binary search in the
git history until finding the guilty commit. This process involves building
each step of the bisect and running a test on each build to check if it&amp;rsquo;s good
or bad (that you can magically automate with &lt;a href=&#34;https://git-scm.com/docs/git-bisect#_bisect_run&#34;&gt;&lt;code&gt;git bisect run&lt;/code&gt;&lt;/a&gt;).  The problem is, if
you can&amp;rsquo;t compile, you can&amp;rsquo;t tell if this commit is before or
after the bug (it can even be the culpable commit itself!). Then you need to
jump and try &lt;a href=&#34;https://git-scm.com/docs/git-bisect#_avoiding_testing_a_commit&#34;&gt;another commit&lt;/a&gt;
and hope that it will compile, making the process more painful. A lot of build
breakages along the commit history can easily discourage a brave bisecter.&lt;/p&gt;
&lt;h3 id=&#34;keep-it-buildable&#34;&gt;Keep it buildable&lt;/h3&gt;
&lt;p&gt;To make sure we keep the bisectability of a project, we just need to make sure
that &lt;strong&gt;every commit&lt;/strong&gt; is buildable. Sometimes we split a feature in a bunch of
cool commits but fail to see if they work as standalone changes. We can simply
do a interactive rebase, building it at each step:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git rebase -i main --exec &amp;quot;make&amp;quot;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Replace &lt;code&gt;main&lt;/code&gt; with the reference that you want to build from and &lt;code&gt;make&lt;/code&gt; with
your fancy build system and ta-da, let the magic happen. If any of the steps
fails to build, the rebase stops (given that &amp;ldquo;any command that fails will
interrupt the rebase, with exit code 1&amp;rdquo;) so you can investigate what happened.&lt;/p&gt;
&lt;p&gt;Of course, there&amp;rsquo;s still some room for build breakages for different build
configurations, but if you always follow this practice before upstreaming your
patches you are building a better git log.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Discussion on &lt;a href=&#34;https://www.reddit.com/r/programming/comments/wg1ql3/keeping_a_project_bisectable/&#34;&gt;Reddit&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Discussion on &lt;a href=&#34;https://news.ycombinator.com/item?id=32342860&#34;&gt;Hacker News&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>Resurrecting a bootlooped Nexus 5X</title>
      <link>https://andrealmeid.com/post/2020-11-23-bullhead-los/</link>
      <pubDate>Mon, 23 Nov 2020 00:00:00 +0000</pubDate>
      
      <guid>https://andrealmeid.com/post/2020-11-23-bullhead-los/</guid>
      <description>&lt;p&gt;Nexus 5X (also know as &lt;code&gt;bullhead&lt;/code&gt;) was launched in 2015, manufactured by LG and
designed by Google, and is the successor of Nexus 5. Even today, this device
has some nice features like its 12.3 MP Rear camera, fingerprint sensor, USB C
and a hexa-core ARM CPU. However, this last item was controversial: issues
during the manufacturing process could lead to a problem in the CPU soldering,
resulting in an infinite cycle of reboots, called Bootloop of Death (or just BLOD).&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://andrealmeid.com/blog-pics/bullhead-thumb.jpg&#34; alt=&#34;Photo of Nexus 5x showing LineageOS Easter Egg screen&#34;&gt;&lt;/p&gt;
&lt;p&gt;In this post, I&amp;rsquo;m going to show how I managed to overcome this issue (besides
some story behind it) and install a fresh LineageOS 17.1 with MicroG.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;As anything that you read in the internet, I can&amp;rsquo;t assure that this will
solve your problem. I&amp;rsquo;ve written this in the in the best of intentions, but
I&amp;rsquo;m not responsible for the destruction of devices, data, friendships or
environments that you may cause by following my guide.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id=&#34;the-bootloop-of-death&#34;&gt;The Bootloop of Death&lt;/h1&gt;
&lt;p&gt;N5X has an heterogeneous 64-bit ARMv8-A CPU: four 1.4 GHz Cortex-A53 cores and
two 1.8 GHz Cortex-A57 cores. This architecture, named as big.LITTE, was
developed to have a nice balance of energy and performance: during a heavy
load, the task scheduler will give the work to the two big cores, decreasing
the latency for the end-user, for the price of higher energy use. In the
meanwhile, the kernel will just use the four little cores, saving some battery.&lt;/p&gt;
&lt;p&gt;However, between 2015 and 2016, someone took a wrong decision in a LG business
meeting and a lot of devices got
&lt;a href=&#34;https://en.wikipedia.org/wiki/LG_smartphone_bootloop_issues&#34;&gt;manufacturing defects&lt;/a&gt;,
(e.g. G3, G4, G5, G7, V10, V20)
including the Nexus 5X. The problem in bullhead was in the CPU assembling,
where a bad soldering makes the big cores separated from the motherboard and
unreachable by the operating system&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;. Then, seeing that something had
failed, the system would reboot in the hope that things get better. And will go
like that, again and again.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://andrealmeid.com/blog-pics/bullhead-topology.jpg&#34; alt=&#34;big.LITTLE topology drawing&#34;&gt;
&lt;em&gt;Basic diagram of how the topology looks like in my mind&lt;/em&gt;&lt;/p&gt;
&lt;h3 id=&#34;shut-up-and-give-my-money&#34;&gt;Shut up and give my money&lt;/h3&gt;
&lt;p&gt;LG acknowledged the issue and replaced the motherboard of affected devices, &lt;a href=&#34;https://www.xda-developers.com/lg-arbitration-suit-bootloop-settlement/&#34;&gt;extended
warranty&lt;/a&gt;
and
&lt;a href=&#34;https://www.gsmarena.com/lg_usa_will_give_you_a_full_refund_if_your_nexus_5x_is_stuck_in_a_boot_loop-blog-21829.php&#34;&gt;returned the money&lt;/a&gt;
for some angry consumers. However, in some corner cases, for instance, if you
purchased the device while traveling abroad, if LG believed the device was
exposed to moisture, if you lost the deadline for taking an action, or just
found this old mobile in some forgotten drawer, you may have a BLOD affected
device lying around. It&amp;rsquo;s too late to ask LG for help, but it&amp;rsquo;s not the end.&lt;/p&gt;
&lt;h2 id=&#34;break-the-loop&#34;&gt;Break the loop&lt;/h2&gt;
&lt;h3 id=&#34;do-not-burn-your-cellphone&#34;&gt;(Do not) Burn your cellphone&lt;/h3&gt;
&lt;p&gt;In order to make the device bootable again, we need an unlocked bootloader.
If you already have one, just continue to &lt;a href=&#34;#make-biglittle-just-little&#34;&gt;next section&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Before doing that, we need to enable USB Debugging in the system&amp;rsquo;s settings.
But, in order to do that, you need to turn on your device and properly boot it,
something that the bug prevents us to do in the first place.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Caution&lt;/strong&gt;: this is where things start going dangerous. You
have been warned.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The internet is made of some brave and curious people. Someone out there
discovered a temporary fix that makes the device bootable and operating: point
a heat blower to the device, near the camera for some minutes. The problem is
that it&amp;rsquo;s a temporary fix, and it makes the cellphone work only for a few
minutes as well. This would make the solder reach temperatures near the melting
point, slightly making everything in contact again for a short period of time.
This should give you enough time to enable everything you need for breaking the
loop. Since I don&amp;rsquo;t have a heat gun, I just used a common hair dryer and I can
say that it worked! Start heating and testing, paying attention for not to burn
your device. Also, those temperature variations could make things worse, so I&amp;rsquo;m
not quite sure about how many attempts you have available.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Hot n Cold:&lt;/strong&gt;
&lt;a href=&#34;https://www.reddit.com/r/nexus5x/comments/jzuurg/resurrecting_a_bootlooped_nexus_5x/gdg4tjm/?context=3&#34;&gt;u/Deconceptualist&lt;/a&gt; and
&lt;a href=&#34;https://www.reddit.com/r/Nexus/comments/jzuvfp/resurrecting_a_bootlooped_nexus_5x/gdeuw1u/?context=3&#34;&gt;u/subenvarg0&lt;/a&gt; in Reddit
said that the following also did the trick for booting the device:
&amp;ldquo;Put the phone in a ziploc, then leave it in the freezer for 30 minutes.&amp;rdquo;
It seems that &amp;ldquo;the cold contracted the housing or components enough to make the
motherboard and big cores connect temporarily&amp;rdquo;. I tried that, but it didn&amp;rsquo;t
work for me, just the hot version.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Once you managed to boot the device, you need to quickly enable debugging
options. From the
&lt;a href=&#34;https://wiki.lineageos.org/adb_fastboot_guide.html#setting-up-adb&#34;&gt;LineageOS wiki&lt;/a&gt;,
this can be done in some simple steps using the phone:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Open Settings, and select “About”.&lt;/li&gt;
&lt;li&gt;Tap on “Build number” seven times.&lt;/li&gt;
&lt;li&gt;Go back, and select “Developer options”.&lt;/li&gt;
&lt;li&gt;Enable &amp;ldquo;OEM unlock&amp;rdquo; option.&lt;/li&gt;
&lt;li&gt;Scroll down, and check the “Android debugging” or &amp;ldquo;USB debugging” entry
under “Debugging”.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;make-biglittle-just-little&#34;&gt;Make big.LITTLE just LITTLE&lt;/h3&gt;
&lt;p&gt;The worst part of our quest is done now, so  it&amp;rsquo;s time to disable some cores.
The bootloader begins the initialization of the system using the little cluster,
and then tries to get the big cluster ready, and here is where the problem lives.
The fix for it is quite simple: just a sort of
&lt;a href=&#34;https://github.com/xcnathan32/4Core-Android-O-5X/commit/a4814e7e9c05e09d41ad1621f9d95f7eea409d77&#34;&gt;sysfs and kernel parameter&lt;/a&gt;
modifications that disable the big cluster. If there&amp;rsquo;s no cluster to fail, the
loop will not happen.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The following steps require a computer with some
&lt;a href=&#34;https://www.archlinux.org/packages/community/x86_64/android-tools/&#34;&gt;Android tools&lt;/a&gt;
installed (&lt;code&gt;adb&lt;/code&gt; and &lt;code&gt;fastboot&lt;/code&gt;). I have tested in a GNU/Linux distribution,
but it should work good in different OS&amp;rsquo;s as well.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 id=&#34;unlocking-bootloader&#34;&gt;Unlocking bootloader&lt;/h4&gt;
&lt;p&gt;First of all, we need to unlock the bootloader. Here are the steps, as described
in &lt;a href=&#34;https://wiki.lineageos.org/devices/bullhead/install#unlocking-the-bootloader&#34;&gt;LineageOS wiki&lt;/a&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Enter in fastboot mode by pressing &lt;code&gt;Volume Down&lt;/code&gt; + &lt;code&gt;Power&lt;/code&gt; while the device
is powered off.&lt;/li&gt;
&lt;li&gt;Connect the device to your computer via USB.&lt;/li&gt;
&lt;li&gt;Once the device is in fastboot mode, verify if your computer finds it by
typing (you will likely need &lt;code&gt;sudo&lt;/code&gt;):&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;fastboot devices
&lt;/code&gt;&lt;/pre&gt;&lt;ol start=&#34;4&#34;&gt;
&lt;li&gt;Now type the following command to unlock the bootloader:&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;fastboot flashing unlock
&lt;/code&gt;&lt;/pre&gt;&lt;ol start=&#34;5&#34;&gt;
&lt;li&gt;Follow the instructions that appears on the screen and wait for the reboot.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&#34;custom-recovery&#34;&gt;Custom recovery&lt;/h4&gt;
&lt;p&gt;Now we need a customized custom recovery, that supports bullhead and uses only
4 cores. You can find one &lt;a href=&#34;https://androidfilehost.com/?w=files&amp;amp;flid=312881&#34;&gt;here&lt;/a&gt;,
look for the &lt;code&gt;twrp-3.2.1-0-fbe-4core-bullhead.img&lt;/code&gt; one.&lt;/p&gt;
&lt;p&gt;Back to the fastboot mode, use this command to flash the custom recovery:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;fastboot flash recovery
&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;for-stock-rom-fans&#34;&gt;For stock ROM fans&lt;/h4&gt;
&lt;p&gt;If you&amp;rsquo;re happy with the stock ROM (the last version officially supported is
Android 8.1), there&amp;rsquo;s a guide that fix BLOD for that ROM from XDA:
&lt;a href=&#34;https://forum.xda-developers.com/nexus-5x/general/tool-bootloop-death-blod-workaround-t3819497&#34;&gt;[TOOL][HOW-TO] [Nexus 5X] Bootloop of Death (BLOD) Workaround&lt;/a&gt;&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;.
I haven&amp;rsquo;t tested myself, but if it works, congratulations! Your device is now
ready to be used again. However, if you want a more updated experience, stay
tuned.&lt;/p&gt;
&lt;h1 id=&#34;installing-things&#34;&gt;Installing things&lt;/h1&gt;
&lt;p&gt;Now, I&amp;rsquo;ll proceed to create an &lt;em&gt;almost&lt;/em&gt; degoogled system, using LineageOS 17.1
(Android 10) and MicroG. I ain&amp;rsquo;t getting in details about what is what, but
here are a few handful links:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Learn more about LineageOS &lt;a href=&#34;https://en.wikipedia.org/wiki/LineageOS&#34;&gt;here&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Learn more about MicroG project &lt;a href=&#34;https://microg.org/&#34;&gt;here&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;lineageos&#34;&gt;LineageOS&lt;/h2&gt;
&lt;p&gt;There&amp;rsquo;s no official LineageOS image for this device, just images independently
developed by someone in the community. In my experience, those ROMs have equally
quality, so the unofficial status is not a big deal.
&lt;a href=&#34;https://forum.xda-developers.com/member.php?u=6765239&#34;&gt;&lt;code&gt;theandroid02&lt;/code&gt;&lt;/a&gt;
is one of such developers, and for your convenience, has patched the image with
the BLOD fix, so you can just flash it without more hacks.&lt;/p&gt;
&lt;p&gt;You can download the ROM at
&lt;a href=&#34;https://forum.xda-developers.com/nexus-5x/development/rom-lineageos-17-1-t4049993&#34;&gt;XDA forums&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Get back to your device in flashboot mode, and boot on recovery.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Starting by wiping the device, both &amp;ldquo;Normal&amp;rdquo; and &amp;ldquo;Format data&amp;rdquo; mode (if by
some miracle you haven&amp;rsquo;t lost your data yet, you will lost it for sure
here).&lt;/li&gt;
&lt;li&gt;Go in Advanced menu and enable ABD Sideload. This method will copy the zip
to the device and install it. To flash it, run&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code&gt;adb sideload &amp;lt;path-to-lineage-17.1-bullhead.zip&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;When I was trying to do that, the device would complain something about &lt;code&gt;error E3004&lt;/code&gt; and the installation would fail. I believe that this is due to a bug in
the recovery image that I&amp;rsquo;m using. Here is what happens: in the installation
script of the ROM, the first line does a small sanity check, comparing if the
device is compatible with the ROM (i.e. is this a bullhead device?). This check
is very useful and I&amp;rsquo;m sure it saved some precious devices out there. However,
the recovery image and the install script can&amp;rsquo;t come to terms and agree that
they are both for a bullhead device. So I just removed the first line of
&lt;code&gt;META-INF/com/google/android/updater-script&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;assert(getprop(&amp;quot;ro.product.device&amp;quot;) == &amp;quot;bullhead&amp;quot; || getprop(&amp;quot;ro.build.product&amp;quot;) == &amp;quot;bullhead&amp;quot; || abort(&amp;quot;E3004: This package is for device: bullhead; this device is &amp;quot; + getprop(&amp;quot;ro.product.device&amp;quot;) + &amp;quot;.&amp;quot;););
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Now, try again. It should work this time.&lt;/p&gt;
&lt;p&gt;If you want to install core Google apps (Play, Service, etc) now is the time to
do so. Download your favorite package for Android 10 and ARM64
&lt;a href=&#34;https://opengapps.org/&#34;&gt;here&lt;/a&gt; and install it using the sideload method
described earlier. If you do so, the tutorial ends here: go enjoy your device!&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://andrealmeid.com/blog-pics/bullhead-screen.png&#34; alt=&#34;Photo of Nexus 5x showing LineageOS Easter Egg screen&#34;&gt;
&lt;em&gt;My clean LineageOS lock and home screen&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The &amp;ldquo;Open&amp;rdquo; at &amp;ldquo;Open GApps&amp;rdquo; is about the scripts and the infrastructure created
by the community on how to install proprietary software from Google. For
installing open source alternatives for the later, keep reading.&lt;/p&gt;
&lt;h3 id=&#34;microg-and-friends&#34;&gt;MicroG and friends&lt;/h3&gt;
&lt;p&gt;In order to make MicroG work properly, we need to enable signature spoofing&lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt;,
so MicroG will pretend to be Google Services + Play Store and apps will work as
expected (at least, most of times). The first step for doing so is
&lt;a href=&#34;https://github.com/topjohnwu/Magisk/releases&#34;&gt;installing Magisk&lt;/a&gt;,
a &amp;ldquo;suite of open source tools for customizing Android&amp;rdquo;. I installed version
20.4 and it worked fine. Use the &lt;code&gt;adb sideload&lt;/code&gt; method to install it and boot
your phone.&lt;/p&gt;
&lt;p&gt;Open Magisk, go to Download and search for the following modules: &lt;strong&gt;Riru Core&lt;/strong&gt; and
&lt;strong&gt;Riru EdXposed&lt;/strong&gt;. Those modules will help us to modify the behaviour of apps. You
will also need to install EdXposed Manager. A pop up should appear notifying
that, but you can also download it
&lt;a href=&#34;https://github.com/ElderDrivers/EdXposedManager/releases&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Open EdXposed Manager and install the module &lt;strong&gt;fakegapps&lt;/strong&gt;, finally allowing
signature spoofing. You need to manually enable it inside EdXposed. Boot the
system in recovery again. Now, it&amp;rsquo;s time to install MicroG.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;FriendlyNeighborhoodShane&lt;/code&gt; developed a nice zip containing all the software you
need to use MicroG. I
&lt;a href=&#34;https://github.com/FriendlyNeighborhoodShane/MinMicroG_releases/releases&#34;&gt;downloaded the &lt;code&gt;NoGoolag-2.7&lt;/code&gt; version at GitHub&lt;/a&gt;.
To learn more about the difference of releases, check out the
&lt;a href=&#34;https://github.com/FriendlyNeighborhoodShane/MinMicroG/blob/master/README.md&#34;&gt;README&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Boot the device once more, and open the MicroG self test, in MicroG settings.
Everything should be marked and looking good there. A lot of apps are really
not that useful without Push Notifications, so you may want to enable it at
&amp;ldquo;Device registration&amp;rdquo; and &amp;ldquo;Google Cloud Messaging&amp;rdquo;. There&amp;rsquo;s an app called
&lt;a href=&#34;https://play.google.com/store/apps/details?id=com.firstrowria.pushnotificationtester&#34;&gt;Push Notification Tester&lt;/a&gt;
that you can download from Aurora Store (the alternative to Google Play) and check
if it&amp;rsquo;s working as expected. If it&amp;rsquo;s not, try dialing &lt;code&gt;*#*#2432546#*#*&lt;/code&gt; and
rebooting one last time. It might take some minutes (and some reboots) in order
to start working, so be patient.&lt;/p&gt;
&lt;h3 id=&#34;bonus-google-camera&#34;&gt;Bonus: Google Camera&lt;/h3&gt;
&lt;p&gt;You may have heard about Google Pixel series and how its camera
&lt;a href=&#34;https://www.trustedreviews.com/reviews/google-pixel-3-camera&#34;&gt;is&lt;/a&gt;
&lt;a href=&#34;https://www.techradar.com/reviews/google-pixel-4a&#34;&gt;very&lt;/a&gt;
&lt;a href=&#34;https://www.cnet.com/news/google-pixel-4a-in-depth-review-budget-phone-2020-best-phone-camera-for-the-cost/&#34;&gt;impressive&lt;/a&gt;.
While some manufactures  need to use two or three cameras to get the same
quality for a picture, Google achieves similar results using &lt;a href=&#34;https://www.wired.com/story/google-pixel-3-camera-features/&#34;&gt;artificial
intelligence&lt;/a&gt;
tricks, like taking a lot of frames and merging the best ones.&lt;/p&gt;
&lt;p&gt;However, this is not widely available for all devices. First, the hardware needs to
support some functions like raw capture and ISO control, and the Android version
needs to export those functionalities. In order to support all those features,
the phone needs to have
&lt;a href=&#34;https://www.thegeeksclub.com/camera-2-api-check-smartphone-support/&#34;&gt;API Camera2 Level3&lt;/a&gt;
and you can use this app to check the support on your device:
&lt;a href=&#34;https://play.google.com/store/apps/details?id=com.airbeat.device.inspector&#34;&gt;Camera2 API Probe&lt;/a&gt;.
Spoiler: Nexus 5X has full support. What is left to use the app? It seems
that Google doesn&amp;rsquo;t use the normal Android API, they are doing some stuff
that makes the application hard to port for other devices&amp;hellip; what is something
different on the Android ecosystems, where you usually write the app once
and it works everywhere.&lt;/p&gt;
&lt;p&gt;Someone did the hard work for us and ported it to Nexus 5X. You can download it
at &lt;a href=&#34;https://chromloop.com/2017/10/apk-camera-nx-v7-nexus-5x6p-base-google-camera-5-1-meet-motion-photo/&#34;&gt;Chromloop&lt;/a&gt;
and check the &lt;a href=&#34;https://www.xda-developers.com/google-camera-port-hub/&#34;&gt;thread at XDA&lt;/a&gt;.
I must say that the app didn&amp;rsquo;t worked in my setup. Maybe is MicroG, maybe is
LineageOS 17.1, I don&amp;rsquo;t know for sure. If you ever made it work for you, please
share with me what have you done. There is a huge repo of unofficial Google
camera ports maintained by
&lt;a href=&#34;https://www.celsoazevedo.com/files/android/google-camera/&#34;&gt;Celso Azevedo&lt;/a&gt;. I
tried a few, and none have worked.&lt;/p&gt;
&lt;p&gt;What did worked, however, is the Go edition, a simplified version that doesn&amp;rsquo;t
make the best from the hardware but it does some basic tricks. I downloaded it
&lt;a href=&#34;http://www.mediafire.com/file/vz4qqwfewv7ay35/CameraGo_HDR.apk/file&#34;&gt;here&lt;/a&gt;.
It&amp;rsquo;s up to you to test them and find out what takes good pics.&lt;/p&gt;
&lt;h3 id=&#34;final-words&#34;&gt;Final words&lt;/h3&gt;
&lt;p&gt;&lt;img src=&#34;https://andrealmeid.com/blog-pics/g866.png&#34; alt=&#34;Drawning of a skull in CPU inside a loop icon&#34;&gt;
&lt;em&gt;The Bootloop of Death as seeing in a microscope&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This work would be impossible without the huge effort from random folks around
the internet. All the links that I used to create this guide are scattered in
this post. Thanks for getting here and for the courage that takes to bring to
life a five years old device.&lt;/p&gt;
&lt;hr&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Discussion on &lt;a href=&#34;https://www.reddit.com/r/nexus5x/duplicates/jzuurg/resurrecting_a_bootlooped_nexus_5x/&#34;&gt;Reddit&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Discussion on &lt;a href=&#34;https://news.ycombinator.com/item?id=25194009&#34;&gt;Hacker News&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;section class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34; role=&#34;doc-endnote&#34;&gt;
&lt;p&gt;This problem is similar to what happened in the first generation of Xbox
360, where the
&lt;a href=&#34;https://en.wikipedia.org/wiki/Xbox_360_technical_problems#Causes&#34;&gt;incorrect type of soldering&lt;/a&gt;
leads to cracks in high temperatures. &lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34; role=&#34;doc-endnote&#34;&gt;
&lt;p&gt;This link also has a lot of good information about the problem. Read it
carefully if my guide doesn&amp;rsquo;t help you. &lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:3&#34; role=&#34;doc-endnote&#34;&gt;
&lt;p&gt;Free Software Foundation Europe wrote a cool article explaining what is
&lt;a href=&#34;https://blogs.fsfe.org/larma/2016/microg-signature-spoofing-security/&#34;&gt;signature spoofing in the context of Android&lt;/a&gt;. &lt;a href=&#34;#fnref:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;
</description>
    </item>
    
    <item>
      <title>Flash LineageOS 17 &#43; microG on a Nexus 5</title>
      <link>https://andrealmeid.com/post/2020-11-05-hammerhead-los/</link>
      <pubDate>Thu, 05 Nov 2020 00:00:00 +0000</pubDate>
      
      <guid>https://andrealmeid.com/post/2020-11-05-hammerhead-los/</guid>
      <description>&lt;p&gt;In this tutorial, I&amp;rsquo;m going to show how I installed LineageOS 17.1 with disk
encryption and microG in my Nexus 5.&lt;/p&gt;
&lt;hr&gt;
&lt;h1 id=&#34;hammerhead&#34;&gt;hammerhead&lt;/h1&gt;
&lt;p&gt;&lt;img src=&#34;https://andrealmeid.com/blog-pics/hammerhead-screen.jpg&#34; alt=&#34;Photo of Nexus 5 showing LineageOS Easter Egg screen&#34;&gt;&lt;/p&gt;
&lt;p&gt;Nexus 5 is an old phone. It was launched in October 2013 (designed by Google,
manufactured by LG), but differently than some 2013 phones, it still works!
Even in 2020, I&amp;rsquo;ve used it as daily driver and it works quite well for my use
case. All peripherals still works, I can use 5GHz Wi-Fi and 4G mobile data (it
even supports
&lt;a href=&#34;https://www.phonearena.com/news/Confirmed-the-Nexus-5-does-work-with-the-Nexus-Wireless-Charging-Orb_id49049&#34;&gt;wireless charging!&lt;/a&gt;).
The battery life can carry on for one complete day. The quality of photos is
not as good as current phones, the device isn&amp;rsquo;t super fast for some tasks and I
needed to replace the battery once, but overall it is enough for basic
messaging and internet browsing.&lt;/p&gt;
&lt;p&gt;However, even if works fine, the vendor doesn&amp;rsquo;t provide official support
anymore and was discontinued in march 2015. The initial Android version was 4.4
&amp;ldquo;KitKat&amp;rdquo;, it got updates until Android 6.0.1 &amp;ldquo;Marshmallow&amp;rdquo; in December 2015,
with a lifetime of a bit more than 2 years.&lt;/p&gt;
&lt;p&gt;It got a good reception, as was one of the most balanced products in terms of
price and performance, along with the robustness and well made. The first
release got some problems like battery life and an unstable camera, however,
those problems got better on following Android releases.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.gsmarena.com/lg_nexus_5-reviews-5705.php&#34;&gt;GSMArena&lt;/a&gt; collects
information about the hardware and also have some comments and reviews from
users, like those:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;JMac:&lt;/strong&gt; &lt;em&gt;My girlfriend uses my old Nexus 5 and I was surprised to find the
other day that it can get a 4G signal. Don&amp;rsquo;t think we had 4G in 2013.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Alphadurus:&lt;/strong&gt; &lt;em&gt;Unbelievable how so many users still using nexus 5 in 2020,
I got mine replaced 3 years back.. Nexus 5 was a beast for sure but
widt poor battery. I got 2 hours sot max. But it was the best phone
for rooting and adding modded os.. still the king of good times..&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;sajith:&lt;/strong&gt; &lt;em&gt;I&amp;rsquo;m using my nexus 5 from July 2014. This is one of the best
mobile phones I have ever used. Still no lags.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;In &lt;a href=&#34;https://forum.xda-developers.com/google-nexus-5/&#34;&gt;XDA Developers&lt;/a&gt; forum, is
possible to see that the community around this device has tons of ROMs, posts
and comments. The process of flashing a ROM can take some minutes but it&amp;rsquo;s very
straightforward, so I invite you to browse XDA and try some ROMs for you to
find out what fits your purpose. I won&amp;rsquo;t be explaining each piece of the stack
in the tutorial, but here are some helpful links:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Learn more about LineageOS &lt;a href=&#34;https://en.wikipedia.org/wiki/LineageOS&#34;&gt;here&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Learn more about MicroG project &lt;a href=&#34;https://microg.org/&#34;&gt;here&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&#34;the-tutorial&#34;&gt;The tutorial&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;DISCLAIMER:&lt;/strong&gt; inserting a new operation system in your phone shouldn&amp;rsquo;t make
it unusable forever (also know as bricking), but it &lt;strong&gt;could&lt;/strong&gt;. Steps
described here worked fine in my device and I did my best to be as
descriptive as possible, but unfortunately I can&amp;rsquo;t assure that will work in
all cases. Only proceed following the commands only if you are comfortable
with the procedure.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I&amp;rsquo;m using GNU/Linux for this tutorial. Make sure you have &lt;code&gt;adb&lt;/code&gt; and &lt;code&gt;fastboot&lt;/code&gt;
installed in your system. In Arch Linux, this can be found in the package
&lt;code&gt;android-tools&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;unlocking-the-bootloader&#34;&gt;Unlocking the bootloader&lt;/h2&gt;
&lt;p&gt;Your device comes with a bootloader that is locked by default, so you can&amp;rsquo;t
flash any new cool ROMs as it is. However, the unlocking procedure is no
trouble. This is a common pattern for devices from Google, and it&amp;rsquo;s very
helpful. Some vendors can make this procedure very hard, and some can be even
impossible! Instructions from
&lt;a href=&#34;https://wiki.lineageos.org/devices/hammerhead/install&#34;&gt;LineageOS wiki&lt;/a&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;First step, boot in your current ROM and go to settings.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Tap 5 times in the &amp;ldquo;Build number&amp;rdquo; to enable developers options.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Go to developers option and enable USB debug. Connects the device to a
computer using a USB cable.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Boot to the bootloader:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Shut the device down, and press Volume Down + Power&lt;/li&gt;
&lt;li&gt;Or, run &lt;code&gt;$ adb reboot bootloader&lt;/code&gt; in your computer.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Check if the computer detects the device:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;sudo fastboot devices&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Unlock the bootloader. Notice that this step will remove the warranty, but
you don&amp;rsquo;t have one anymore right?:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;sudo fastboot oem unlock&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;A screen with options will appear. Use the volume buttons to select &lt;strong&gt;YES&lt;/strong&gt;
and press power to confirm. If the device does not reboot, reboot it.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;flash-a-custom-recovery&#34;&gt;Flash a custom recovery&lt;/h2&gt;
&lt;p&gt;Nexus 5 has a recovery mode that allows us to wipe data from a device and to
factory reset it. Using a custom one gives us more powerful options, like
flashing a new ROM. The most famous custom recovery project is maintained by
Team Win Recovery Project (&lt;a href=&#34;https://twrp.me/about/&#34;&gt;TWRP&lt;/a&gt;) and trusted by the
community.&lt;/p&gt;
&lt;p&gt;For this device specifically, we are going to use a slightly different one.
It&amp;rsquo;s a fork that comes with a small tool that increases the size of &lt;code&gt;system/&lt;/code&gt;
partition and decreases the &lt;code&gt;cache/&lt;/code&gt; one. This is done because the stock
partitioning scheme is too small for current Android/LOS images.&lt;/p&gt;
&lt;p&gt;You can download it from
&lt;a href=&#34;https://forum.xda-developers.com/google-nexus-5/orig-development/recovery-twrp-hh-nexus-5-hammerhead-t4047653&#34;&gt;XDA&lt;/a&gt;,
and it also provides some useful information about the tool.&lt;/p&gt;
&lt;p&gt;After downloading it, go to phone&amp;rsquo;s bootloader and flash the recovery:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;fastboot flash recovery &amp;lt;recovery_filename&amp;gt;.img
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Now, boot to the recovery mode using the bootloader menu.&lt;/p&gt;
&lt;p&gt;Wipe the old system using the &lt;strong&gt;Wipe&lt;/strong&gt; menu. First, tap &lt;strong&gt;Format Data&lt;/strong&gt;. After
that is completed, get back to &lt;strong&gt;Wipe&lt;/strong&gt; menu, select &lt;strong&gt;Advanced Wipe&lt;/strong&gt;, after
that select the Cache and System partitions and then Swipe to Wipe.&lt;/p&gt;
&lt;h3 id=&#34;repart-the-filesystem&#34;&gt;Repart the filesystem&lt;/h3&gt;
&lt;p&gt;Go to &lt;strong&gt;Advanced&lt;/strong&gt; menu and select &lt;strong&gt;Terminal&lt;/strong&gt;. Use the following command to
resize it:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;hh_repart -m
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Wait until it reboots.&lt;/p&gt;
&lt;h2 id=&#34;install-lineageos&#34;&gt;Install LineageOS&lt;/h2&gt;
&lt;p&gt;There are tons of ROMs around XDA for Nexus 5. The flash process is basically
the same for all them, so I recommend you to check out some ROMs and find which
one is better. I chose the unofficial release of LineageOS 17.1 and you can
download it
&lt;a href=&#34;https://forum.xda-developers.com/google-nexus-5/orig-development/rom-lineageos-17-1-nexus-5-hammerhead-t4039273&#34;&gt;in XDA&lt;/a&gt;.
Then, in recovery mode, select &lt;strong&gt;Advanced&lt;/strong&gt; and &lt;strong&gt;ADB Sideload&lt;/strong&gt;. On host
machine, run:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo adb sideload &amp;lt;lineage-17.1-file.zip&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;With this step, LineageOS is installed on the mobile.&lt;/p&gt;
&lt;h3 id=&#34;encryption&#34;&gt;Encryption&lt;/h3&gt;
&lt;p&gt;If you want to use disk encryption (something I highly recommend), you need to
perform some extra steps before using it. These are the steps I did in order
to make it work:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Boot in system.
again.&lt;/li&gt;
&lt;li&gt;Setup a password or lock pattern. You can change the pattern matrix from 3x3
to up to 6x6.&lt;/li&gt;
&lt;li&gt;Go to Settings &amp;gt; Security and click in the &amp;ldquo;Cryptography&amp;rdquo; option.&lt;/li&gt;
&lt;li&gt;Wait until it&amp;rsquo;s finished, and we are done!&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If your device doesn&amp;rsquo;t want to boot, you can try those steps (without losing
the encryption):&lt;/p&gt;
&lt;ol start=&#34;5&#34;&gt;
&lt;li&gt;After it gets completed, get back to recovery.&lt;/li&gt;
&lt;li&gt;In Settings, mark the option &lt;code&gt;use rm -f instead of formating&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Get in &lt;strong&gt;Wipe&lt;/strong&gt; and mark &lt;strong&gt;Data&lt;/strong&gt; in &lt;strong&gt;Advanced Wipe&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Get back to the system. The phone should be encrypted and ready to be used.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;microg-and-friends&#34;&gt;MicroG and friends&lt;/h3&gt;
&lt;p&gt;In order to make MicroG work properly, we need to enable signature spoofing&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;,
so MicroG will pretend to be Google Services + Play Store and apps will work as
expected (at least, most of times). The first step for doing so is
&lt;a href=&#34;https://github.com/topjohnwu/Magisk/releases&#34;&gt;installing Magisk&lt;/a&gt;,
a &amp;ldquo;suite of open source tools for customizing Android&amp;rdquo;. I installed version
20.4 and it worked fine. Use the &lt;code&gt;adb sideload&lt;/code&gt; method to install it and boot
your phone.&lt;/p&gt;
&lt;p&gt;Open Magisk, go to Download and search for the following modules: Riru Core and
Riru EdXposed. Those modules will help us to modify the behaviour of apps. You
will also need to install EdXposed Manager. A pop up should appear notifying
that, but you can also download it
&lt;a href=&#34;https://github.com/ElderDrivers/EdXposedManager/releases&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Open EdXposed Manager and install the module &lt;code&gt;fakegapps&lt;/code&gt;, finally allowing
signature spoofing. You need to manually enable it inside EdXposed. Boot the
system in recovery again. Now, it&amp;rsquo;s time to install MicroG.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;FriendlyNeighborhoodShane&lt;/code&gt; developed a nice zip containing all the software you
need to use MicroG. I
&lt;a href=&#34;https://github.com/FriendlyNeighborhoodShane/MinMicroG_releases/releases&#34;&gt;downloaded the &lt;code&gt;NoGoolag-2.7&lt;/code&gt; version at GitHub&lt;/a&gt;.
To learn more about the difference of releases, check out the
&lt;a href=&#34;https://github.com/FriendlyNeighborhoodShane/MinMicroG/blob/master/README.md&#34;&gt;README&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Boot the device once more, and open the MicroG self test, in MicroG settings.
Everything should be marked and looking good there. A lot of apps are really
not that useful without Push Notifications, so you may want to enable it at
&amp;ldquo;Device registration&amp;rdquo; and &amp;ldquo;Google Cloud Messaging&amp;rdquo;. There&amp;rsquo;s an app called
&lt;a href=&#34;https://play.google.com/store/apps/details?id=com.firstrowria.pushnotificationtester&#34;&gt;Push Notification Tester&lt;/a&gt;
that you can download from Aurora Store (the alternative to Google Play) and check
if it&amp;rsquo;s working as expected. If it&amp;rsquo;s not, try dialing &lt;code&gt;*#*#2432546#*#*&lt;/code&gt; and
rebooting one last time. It might take some minutes (and some reboots) in order
to start working, so be patient.&lt;/p&gt;
&lt;h2 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;&lt;img src=&#34;https://andrealmeid.com/blog-pics/hammerhead-back.jpg&#34; alt=&#34;Photo of Nexus 5 showing LineageOS Easter Egg screen&#34;&gt;&lt;/p&gt;
&lt;p&gt;Thank you for recycling a device, the planet says thanks. However, if LineageOS
hackers get tired of it and none release new ROMs, it might be time to search
for another mobile&amp;hellip; or
&lt;a href=&#34;https://wiki.postmarketos.org/wiki/Google_Nexus_5_(lg-hammerhead)&#34;&gt;use postmarketOS&lt;/a&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Discussion on &lt;a href=&#34;https://www.reddit.com/r/MicroG/comments/jovww6/flash_lineageos_17_microg_on_a_nexus_5/&#34;&gt;Reddit&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Discussion on &lt;a href=&#34;https://news.ycombinator.com/item?id=25004055&#34;&gt;Hacker News&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;section class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34; role=&#34;doc-endnote&#34;&gt;
&lt;p&gt;Free Software Foundation Europe wrote a cool article explaining what is
&lt;a href=&#34;https://blogs.fsfe.org/larma/2016/microg-signature-spoofing-security/&#34;&gt;signature spoofing in the context of Android&lt;/a&gt;. &lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;
</description>
    </item>
    
    <item>
      <title>How to use Hammer Editor in Linux</title>
      <link>https://andrealmeid.com/post/2020-05-28-csgo-hammer-linux/</link>
      <pubDate>Thu, 28 May 2020 00:00:00 +0000</pubDate>
      
      <guid>https://andrealmeid.com/post/2020-05-28-csgo-hammer-linux/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Talk is cheap, show me the code: &lt;a href=&#34;#tldr&#34;&gt;TL;DR&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;One key part of Valve games is the ability to create custom user content. The
Source SDK, with the Hammer Editor and the in-game developer console (with a
crazy amount of commands) have allowed the community to create tons of contents,
including maps and new game modes, that eventually leaded to games like
Counter Strike, Portal and Garry&amp;rsquo;s Mod.&lt;/p&gt;
&lt;p&gt;This tutorial will focus on how to create new maps for Counter Strike: Global
Offensive using the Hammer Editor in Linux.&lt;/p&gt;
&lt;p&gt;To get started, I&amp;rsquo;m assuming that you already have a functional GS:GO game
installed and working on your Linux machine. I&amp;rsquo;ve tried this with AMD GPUs and
Intel Integrated Graphics. If you have problems running in NVIDIA, try using a
staging version of Wine. Also, I&amp;rsquo;m using ArchLinux with the most recent
Proton, kernel and Mesa to date of writing (May of 2020). As the stack evolves,
the steps described here are subject to change in the future.&lt;/p&gt;
&lt;h2 id=&#34;crafting-the-hammer&#34;&gt;Crafting the hammer&lt;/h2&gt;
&lt;h3 id=&#34;downloading-some-steel&#34;&gt;Downloading some steel&lt;/h3&gt;
&lt;p&gt;There is no native release of Hammer, so we need to use the Windows version. To
get it, install the &amp;ldquo;Counter Strike: Global Offensive - SDK&amp;rdquo; from your library,
in the &amp;ldquo;Tools&amp;rdquo; section. Not everyone is able to access the tool however: one
needs to either had purchased the game when it was paid, or had bought the
&lt;a href=&#34;https://store.steampowered.com/sub/54029/&#34;&gt;Prime Status Upgrade&lt;/a&gt;. If you get
Prime by playing the game, you still need to buy the status to download the SDK.
This is done probably to restrict low quality items to be sent to the workshop,
requiring an investment from wannabe mappers.&lt;/p&gt;
&lt;p&gt;The tool has some sort of integration with the game files, and expects the
Windows version of the game. To get those files, one could download the Windows
version of the game from Steam library, but there&amp;rsquo;s a more clever way to do so,
using the Steam console, a command line interface to manage Steam
library. To open it, copy and paste &lt;code&gt;steam://open/console&lt;/code&gt; in your web
browser or run &lt;code&gt;steam -console&lt;/code&gt; on your terminal. A new tab &amp;ldquo;CONSOLE&amp;rdquo;
will appear right side of your profile tab. Finally run &lt;code&gt;download_depot 730 732&lt;/code&gt; to download the Windows files. This command will download, from game
&lt;a href=&#34;https://steamdb.info/app/730&#34;&gt;730&lt;/a&gt; (CS:GO), depot number
&lt;a href=&#34;https://steamdb.info/depot/732/&#34;&gt;732&lt;/a&gt; (Windows binaries).&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://andrealmeid.com/blog-pics/hammer-steam-console.png&#34;&gt;&lt;img src=&#34;https://andrealmeid.com/blog-pics/hammer-steam-console.png&#34; alt=&#34;Screenshot of Steam console&#34;&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Steam console&lt;/em&gt;&lt;/p&gt;
&lt;h3 id=&#34;moving-parts&#34;&gt;Moving parts&lt;/h3&gt;
&lt;p&gt;Go to your Steam local folder (&lt;code&gt;cd ~/.steam/steam&lt;/code&gt;). The files that you just
downloaded will be found at &lt;code&gt;ubuntu12_32/steamapps/content/app_730/depot_732/&lt;/code&gt;,
and we just need to copy then to the CS:GO folder. &lt;code&gt;ubuntu12_32&lt;/code&gt; will be your
folder independently of your distro, since this is how Steam Runtime deals with
their libraries. If everything works fine, you can deleted the &lt;code&gt;app_730&lt;/code&gt; folder
later:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cp -r ubuntu12_32/steamapps/content/app_730/depot_732/* &amp;quot;steamapps/common/Counter-Strike Global Offensive&amp;quot;
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;hammering-some-nails&#34;&gt;Hammering some nails&lt;/h2&gt;
&lt;p&gt;This should be enough to open and run the editor. Just click &amp;ldquo;Launch&amp;rdquo; in your
library and a nice menu from 90&amp;rsquo;s should appear. Double click the Hammer option
and after some seconds the tool will appear.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://andrealmeid.com/blog-pics/hammer-menu.png&#34;&gt;&lt;img src=&#34;https://andrealmeid.com/blog-pics/hammer-menu.png#c&#34; alt=&#34;CS:GO SDK Menu&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s create a simple map to test our game. Use the block tool (Shift + B) to
make a big cube. It needs to be big enough to fit a player model, more than 192
units of height will be more that enough. For reference, the player camera has
64 units of height. After making it with the proper size, press enter to create
the cube. Use &amp;ldquo;Tools &amp;gt; Make Hollow&amp;rdquo; to create a border for the map. With the
Entity tool (Shift + E), place a spawn point for the player
(&lt;code&gt;info_player_terrorist&lt;/code&gt;) somewhere inside the cube.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://andrealmeid.com/blog-pics/hammer-map0.png&#34;&gt;&lt;img src=&#34;https://andrealmeid.com/blog-pics/hammer-map0.png#c&#34; alt=&#34;Hammer editing a map&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Too complex? I have create a map for you with this all done, download
&lt;a href=&#34;https://andrealmeid.com/files/de_test.vmf&#34;&gt;here&lt;/a&gt; and open with Hammer. Save a copy in the default
folder:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;~/.steam/steam/steamapps/common/Counter-Strike\ Global\ Offensive/sdk_content/maps/
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;To compile the map, press F9 and leave the options
&lt;a href=&#34;https://developer.valvesoftware.com/wiki/BSP&#34;&gt;BSP&lt;/a&gt;,
&lt;a href=&#34;https://developer.valvesoftware.com/wiki/VVIS&#34;&gt;VIS&lt;/a&gt; and
&lt;a href=&#34;https://developer.valvesoftware.com/wiki/VVIS&#34;&gt;RAD&lt;/a&gt; with &amp;ldquo;Normal&amp;rdquo;. Select HDR
for RAD, &amp;ldquo;Don&amp;rsquo;t run the game after compiling&amp;rdquo; and &amp;ldquo;Wait for keypress when done
compiling&amp;rdquo;. Press OK and let the magic happen.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://andrealmeid.com/blog-pics/hammer-normal-compile.png&#34;&gt;&lt;img src=&#34;https://andrealmeid.com/blog-pics/hammer-normal-compile.png#c&#34; alt=&#34;Normal compile options&#34;&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Compile menu&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;If everything works fine, let&amp;rsquo;s test it. As far as I know, we can&amp;rsquo;t open the game from the tool, since it will try to open the Windows version in the Windows way. The workaround is fairly easy. Open your native version of the game, and open the console. If you never opened it before, go to &amp;ldquo;Settings &amp;gt; Game Settings &amp;gt; Enable Developer Console: &lt;strong&gt;Yes&lt;/strong&gt;&amp;quot;. Now hit the &lt;strong&gt;`&lt;/strong&gt; key (grave) to open it. Run &lt;code&gt;map de_test&lt;/code&gt;, and your custom map will open. Congratulations! Now go there and create Dust III.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://andrealmeid.com/blog-pics/hammer-map1.png&#34;&gt;&lt;img src=&#34;https://andrealmeid.com/blog-pics/hammer-map1.png#c&#34; alt=&#34;de_test in action&#34;&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;de_test in action&lt;/em&gt;&lt;/p&gt;
&lt;h3 id=&#34;expert-options&#34;&gt;Expert options&lt;/h3&gt;
&lt;p&gt;If you want to use the &amp;ldquo;Expert&amp;rdquo; compilation options (and you want to do that
for calculating the light of your objects), you will find trouble in the first
time.  This happens because in Windows the tool works fine if you use the name
of the map&amp;rsquo;s file without the extension &lt;code&gt;.vmf&lt;/code&gt;, but this will not work in Wine.
To fix that, just check the parameters for &lt;code&gt;$bsp_exe&lt;/code&gt;, &lt;code&gt;$vis_exe&lt;/code&gt;, &lt;code&gt;$light_exe&lt;/code&gt;
and search for &lt;code&gt;$file&lt;/code&gt;. This is the source file of the map that you are
editing, and just edit the parameters from &lt;code&gt;$file&lt;/code&gt; to  &lt;code&gt;$file.vmf&lt;/code&gt; after that
variable and you should be good. It is not needed to edit the &lt;code&gt;Copy File&lt;/code&gt;
options since it already has the file extension. I didn&amp;rsquo;t edit the option
&lt;code&gt;$game_exe&lt;/code&gt; since I wasn&amp;rsquo;t able to run the game from the tool anyway.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://andrealmeid.com/blog-pics/hammer-expert.png&#34;&gt;&lt;img src=&#34;https://andrealmeid.com/blog-pics/hammer-expert.png#c&#34; alt=&#34;Expert options menu&#34;&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Expert options menu&lt;/em&gt;&lt;/p&gt;
&lt;h3 id=&#34;dealing-with-leaks&#34;&gt;Dealing with leaks&lt;/h3&gt;
&lt;p&gt;If your map has &lt;a href=&#34;https://developer.valvesoftware.com/wiki/Leak&#34;&gt;leaks&lt;/a&gt;, it
means it has problems that makes it impossible to compile. Your map should be a
closed box, without any opening to the external world, otherwise the compiler
will not be sure what is &amp;ldquo;inside&amp;rdquo; and what is &amp;ldquo;outside&amp;rdquo; of the map. If you don&amp;rsquo;t
place any spawn point, the tool will not compile the map as well. The BSP step
will fail, and it will warn you in the console output and won&amp;rsquo;t generate a
&lt;code&gt;.prt&lt;/code&gt; file.&lt;/p&gt;
&lt;p&gt;In Windows, the VIS step will nicely notify the user that the file wasn&amp;rsquo;t
found, but at Wine we get a page fault probably due to some
&lt;a href=&#34;#bugs-in-wine&#34;&gt;behavior that doesn&amp;rsquo;t exactly matches the way Windows does&lt;/a&gt;. If
the compiler fails with a long list of memory addresses and fails, check the
file &lt;code&gt;&amp;lt;map_name&amp;gt;.log&lt;/code&gt; in the same folder you saved the map and search for
&amp;ldquo;leaked&amp;rdquo;. You can also run just the BSP step of compilation, since is when the
maps is checked for leaks. After a leak is found, a file is created to show the
holes in your map. Use &amp;ldquo;Map &amp;gt; Load Pointfile&amp;rdquo; to open it.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://andrealmeid.com/blog-pics/hammer-segfault.png&#34;&gt;&lt;img src=&#34;https://andrealmeid.com/blog-pics/hammer-segfault.png#c&#34; alt=&#34;Page fault error on console&#34;&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;A beautiful page fault&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&#34;native-port&#34;&gt;Native port?&lt;/h2&gt;
&lt;p&gt;Valve is by far one of the companies that invests the most for the Linux gaming
scene, mainly driven by development of Proton and their high quality
native games, so is natural to believe that there is a chance that Valve could
release a port of the tool for Linux. However, when people in Valve&amp;rsquo;s GitHub
project asked for a native port,
&lt;a href=&#34;https://github.com/ValveSoftware/steam-for-linux/issues/7038#issuecomment-614792289&#34;&gt;&lt;code&gt;kisak&lt;/code&gt;&lt;/a&gt;
pointed to
&lt;a href=&#34;https://github.com/ValveSoftware/source-sdk-2013/issues/141#issuecomment-22062601&#34;&gt;this comment&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Hammer relies heavily on AFX/MFC which are windows only libraries. You&amp;rsquo;d have
to essentially rewrite the tool to get it working on non-Windows operating
systems.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;AFX/MFC stands for &amp;ldquo;Application Framework Extensions&amp;rdquo; and &amp;ldquo;Microsoft Foundation
Class Library&amp;rdquo; that, as you may guess, are Windows-only libraries. Valve would
then need to rewrite all the tool backend to get it native, or implement an
emulation layer for those libraries, just as Proton does, so I don&amp;rsquo;t think we
will see a native port of Hammer itself, but maybe we will have more lucky
someday if we have a new editor around.&lt;/p&gt;
&lt;h3 id=&#34;bugs-in-wine&#34;&gt;Bugs in Wine&lt;/h3&gt;
&lt;p&gt;Sometimes applications in Proton/Wine don&amp;rsquo;t behave exactly like in Windows, and
this is a bug. There are some undocumented behaviors that Wine relies on to run
properly. For instance, in the case of this bug, it could be about some
uninitialized variable or use after free. Then, Wine needs to implement the
buggy in order to correctly run Windows applications. This also happened when
&lt;a href=&#34;https://medium.com/microsoft-open-source-stories/how-microsoft-rewrote-its-c-compiler-in-c-and-made-it-open-source-4ebed5646f98&#34;&gt;.NET team at Microsoft ported the old C# compiler from C++ to C#&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Writing a new compiler for C# means trying to match the old compiler
bug-for-bug. And I’m not just talking about known bugs, but those unknown and
unintended behaviors that developers have found and come to rely on, often
unknowingly.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;I haven&amp;rsquo;t tested all aspects of the tool, but I could compile and run some
simple maps made by my friends and some maps from the examples files. I didn&amp;rsquo;t
try to use any of texture creating tools (&lt;code&gt;VTEX&lt;/code&gt; and &lt;code&gt;VFTEdit&lt;/code&gt;), but since
Hammer and its build chain are far more complex than them, I believe it won&amp;rsquo;t
be hard. If you found major bugs running the Hammer Editor through Proton, the
best place to comment is in the
&lt;a href=&#34;https://github.com/ValveSoftware/Proton/issues/851&#34;&gt;issue tracker of the tool on GitHub&lt;/a&gt;,
where I found the workaround I used to create this post. Thanks for the users
&lt;a href=&#34;https://github.com/ericek111&#34;&gt;Erik Bročko&lt;/a&gt; and
&lt;a href=&#34;https://github.com/Eoin-ONeill-Yokai&#34;&gt;Eoin O&amp;rsquo;Neill&lt;/a&gt; for the initial research in
this topic and for sharing it in GitHub.&lt;/p&gt;
&lt;p&gt;I opened &lt;code&gt;de_inferno.vmf&lt;/code&gt; to see how the tool performed with a more complex and
finished map, and it&amp;rsquo;s the pre-2016 version of the map. The tool was a bit lag
when navigating the 3D preview of the map, like if it wasn&amp;rsquo;t using hardware
acceleration. The compilation took some minutes as it was doing the hard work
using only one thread. When finally completed, the map was working as expected.&lt;/p&gt;
&lt;p&gt;As I said before, compiling with basic options won&amp;rsquo;t give you proper lighting
and color for some objects, you will need the &amp;ldquo;expert&amp;rdquo; options to use the
&lt;code&gt;$light_exe&lt;/code&gt; that will give you a normal map.&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://andrealmeid.com/blog-pics/hammer_inferno0.png&#34;&gt;&lt;img src=&#34;https://andrealmeid.com/blog-pics/hammer_inferno0.png#c&#34; alt=&#34;de_inferno with some black objects&#34;&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;de_inferno with basic compiling options&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://andrealmeid.com/blog-pics/hammer_inferno1.png&#34;&gt;&lt;img src=&#34;https://andrealmeid.com/blog-pics/hammer_inferno1.png#c&#34; alt=&#34;de_inferno looking normal&#34;&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;de_inferno with &amp;ldquo;expert&amp;rdquo; compiling options&lt;/em&gt;&lt;/p&gt;
&lt;h3 id=&#34;more-resources&#34;&gt;More resources&lt;/h3&gt;
&lt;p&gt;Since the goal of this post is about getting the tool running, rather than
using it, here are some recommendations of resources about that:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=dhcoHQcrYKA&amp;amp;list=PLfwtcDG7LpxF7-uH_P9La76dgCMC_lfk3&#34;&gt;3kliksphilip tutorial playlist&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=pMGnPu8NdK0&amp;amp;list=PL-454Fe3dQH0WCzAsmydsr24NFaFrNC_h&#34;&gt;CSGO Level Design Boot Camp by TopHATTwaffle&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://developer.valvesoftware.com/wiki/Counter-Strike:_Global_Offensive_Level_Creation&#34;&gt;Counter-Strike: Global Offensive Level Creation by Valve&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;tldr&#34;&gt;TL;DR&lt;/h2&gt;
&lt;p&gt;Run this in Steam console:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;download_depot 730 732
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Then in your terminal:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cd ~/.steam/steam &amp;amp;&amp;amp; cp -r ubuntu12_32/steamapps/content/app_730/depot_732/* &amp;quot;steamapps/common/Counter-Strike Global Offensive&amp;quot;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Append &lt;code&gt;.vmf&lt;/code&gt; at all &lt;code&gt;$files&lt;/code&gt; without any extesion in expert options. The tool
will be ready to open and work. Beware leaks in the map. Save the map in the
default folder (&lt;code&gt;~/.steam/steam/steamapps/common/Counter-Strike Global Offensive/sdk_content/maps/&lt;/code&gt;). Open the Linux version of CS:GO, type in console
&lt;code&gt;map &amp;lt;map_name&amp;gt;&lt;/code&gt; and have fun.&lt;/p&gt;
&lt;hr&gt;
&lt;blockquote&gt;
&lt;p&gt;Thanks to &lt;a href=&#34;https://github.com/lcagustini/&#34;&gt;lcagustini&lt;/a&gt;,
&lt;a href=&#34;https://github.com/chinen93&#34;&gt;chinen93&lt;/a&gt; and
&lt;a href=&#34;https://gitlab.com/leandrohrb&#34;&gt;leandrohrb&lt;/a&gt; for reviewing and
testing this tutorial!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Discussion on &lt;a href=&#34;https://www.reddit.com/r/hammer/duplicates/gsj14j/how_to_use_hammer_editor_in_linux/&#34;&gt;Reddit&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Discussion on &lt;a href=&#34;https://news.ycombinator.com/item?id=23345164&#34;&gt;Hacker News&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>Finally, how to flash AMD VBIOS in Linux</title>
      <link>https://andrealmeid.com/post/2020-05-01-vbios2/</link>
      <pubDate>Fri, 01 May 2020 00:00:00 +0000</pubDate>
      
      <guid>https://andrealmeid.com/post/2020-05-01-vbios2/</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Check my &lt;a href=&#34;https://andrealmeid.com/post/2020-04-10-vbios/&#34;&gt;previous post&lt;/a&gt; to know more about the
background of this story.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;After publishing my rant on the web about the lack of a native GNU/Linux
application to flash my the VBIOS of my AMD card, it turns out that the Linux
version was in a public repository in GitHub. Simple like that.&lt;/p&gt;
&lt;h3 id=&#34;downloading&#34;&gt;Downloading&lt;/h3&gt;
&lt;p&gt;You can get the tool on &lt;a href=&#34;https://github.com/patrickschur/amdvbflash&#34;&gt;GitHub&lt;/a&gt;
(check the commit log for older versions) or get from AUR:
&lt;a href=&#34;https://aur.archlinux.org/packages/amdvbflash/&#34;&gt;amdvbflash&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;using&#34;&gt;Using&lt;/h3&gt;
&lt;p&gt;Every option of &lt;code&gt;amdvbflash&lt;/code&gt; requires administrative privileges, so use &lt;code&gt;sudo&lt;/code&gt;
to run it. To get all options, just run the tool without arguments:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ sudo amdvbflash
AMDVBFLASH version 4.69, Copyright (c) 2020 Advanced Micro Devices, Inc.

--- amdvbflash v4.69 ---
-h, -?, /h, /?          Help (this screen)
...
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Use &lt;code&gt;-i&lt;/code&gt; to list all cards in the system:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ sudo amdvbflash -i

adapter seg  bn dn dID       asic           flash      romsize test    bios p/n
======= ==== == == ==== =============== ============== ======= ==== ================
   0    0000 03 00 731F Navi10          GD25Q80C        100000 pass 113-EXT900170-L07
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Back up current image with &lt;code&gt;-s &amp;lt;Num&amp;gt; &amp;lt;File&amp;gt; [Size]&lt;/code&gt; (recommend before flashing):&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ sudo amdvbflash -s 0 bios.rom

0x100000 bytes saved, checksum = 0x7CE5
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Gather details of a VBIOS image file using &lt;code&gt;-biosfileinfo &amp;lt;File&amp;gt;&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ sudo amdvbflash -biosfileinfo bios.rom

    Product Name is :    NAVI10 A1/A2 D18901 XLE 6GB 300e/750m
    Device ID is    :    731F
    Bios Version    :    017.001.000.049.900170
    Bios P/N is     :    113-EXT900170-L07
    Bios SSID       :    5120
    Bios SVID       :    1849
    Bios Date is    :    01/17/20 01:27
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Finally, to flash your card with an image, use &lt;code&gt;-p &amp;lt;Num&amp;gt; &amp;lt;File&amp;gt;&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ sudo amdvbflash -p 0 bios.rom
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The software does a sign check using a public key from AMD, so it will only flash
&amp;ldquo;trusted&amp;rdquo; images. You can test the signature with &lt;code&gt;-rsa &amp;lt;filename&amp;gt;&lt;/code&gt; option.
Keep in mind that this verification is done solely in software, so it can
be bypassed using binary hacking.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;As noted by
&lt;a href=&#34;https://www.reddit.com/r/linux/comments/gblgah/finally_how_to_flash_amd_vbios_in_linux/fpa4aby/&#34;&gt;u/nikomo&lt;/a&gt;
, bypassing this check is not a good idea:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;AMD GPUs starting from Vega GPUs check the signature and refuse to start if
it doesn&amp;rsquo;t validate.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;Thanks Patrick for sharing the tool with me!&lt;/p&gt;
&lt;hr&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Discussion on &lt;a href=&#34;https://www.reddit.com/r/linuxhardware/duplicates/gblfa7/finally_how_to_flash_amd_vbios_in_linux/&#34;&gt;Reddit&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Discussion on &lt;a href=&#34;https://news.ycombinator.com/item?id=23045320&#34;&gt;Hacker News&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>That day when I tried to flash my AMD VBIOS in Linux</title>
      <link>https://andrealmeid.com/post/2020-04-10-vbios/</link>
      <pubDate>Fri, 10 Apr 2020 00:00:00 +0000</pubDate>
      
      <guid>https://andrealmeid.com/post/2020-04-10-vbios/</guid>
      <description>&lt;h2 id=&#34;prologue&#34;&gt;Prologue&lt;/h2&gt;
&lt;p&gt;It&amp;rsquo;s 2019. AMD is more than ready to take its place in the GPU market share.
Right after the release of RX 5600 XT, AMD and manufacturers partners released
an &lt;a href=&#34;https://www.phoronix.com/scan.php?page=article&amp;amp;item=rx5600xt-linux-vbios&#34;&gt;update for the
VBIOS&lt;/a&gt;
(yes, GPUs also have BIOS) changing the clocks of processors making the card
even more powerful.&lt;/p&gt;
&lt;p&gt;The selection of graphics drivers for AMD hardware is comparibly very good.
AMD is contributing to upstream projects like the mainline kernel code base and Mesa.
And even maintaining their own projects like amdvlk or Compressonator.&lt;/p&gt;
&lt;p&gt;There are 3 different Vulkan implementation available for Linux, which all use
the &lt;a href=&#34;https://www.kernel.org/doc/html/latest/gpu/amdgpu.html&#34;&gt;amdgpu&lt;/a&gt; kernel module.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.amd.com/en/support/kb/release-notes/rn-rad-lin-19-30-unified&#34;&gt;AMDGPU Pro&lt;/a&gt;,
the proprietary userspace AMD Vulkan implementation.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/GPUOpen-Drivers/AMDVLK&#34;&gt;amdvlk&lt;/a&gt;, an new open source Vulkan
implementation by AMD.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://gitlab.freedesktop.org/mesa/mesa/-/tree/master/src/amd/vulkan&#34;&gt;radv&lt;/a&gt;,
the free Vulkan implementation for AMD maintained by the Mesa project.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In addition you also can use a OpenGL 4.5 conformant GL implementation
&lt;a href=&#34;https://cgit.freedesktop.org/mesa/mesa/tree/src/gallium/drivers/radeon&#34;&gt;RadeonSI&lt;/a&gt; from Mesa,
implemented on the Gallium framework.&lt;/p&gt;
&lt;p&gt;radv also recently gained a new shader compiler &lt;code&gt;ACO&lt;/code&gt;, which was sponsored by Valve.
It is delivering
&lt;a href=&#34;https://www.phoronix.com/scan.php?page=article&amp;amp;item=radv-aco-gcn10&#34;&gt;considarable performance improvements&lt;/a&gt;
compared to the old one.&lt;/p&gt;
&lt;h2 id=&#34;lets-do-it&#34;&gt;Let&amp;rsquo;s do it&lt;/h2&gt;
&lt;p&gt;So here I’m, just one more GNU/Linux user with my GPU properly installed and
running just fine. Oh wait, it seems that I can upgrade its VBIOS in order to
improve performance, it shouldn’t be that hard, right? Right?&lt;/p&gt;
&lt;p&gt;:)&lt;/p&gt;
&lt;p&gt;Since this is the first time I do such operation, I started with some
DuckDuckGoing to check the required steps. Each manufacturer (e.g. Gigabyte,
ASRock, etc) is responsible to providing the update software for
theirs users. Some lucky people managed to get an updated board from factory,
while some versions won’t get support for the new version at all.&lt;/p&gt;
&lt;p&gt;Since I’m not lucky, I need to flash my card. My model is the “Radeon RX 5600 XT
Challenger D 6G OC”, also know as “RX5600XT CLD 6GO”. If you open the
&lt;a href=&#34;https://www.asrock.com/Graphics-Card/AMD/Radeon%20RX%205600%20XT%20Challenger%20D%206G%20OC/&#34;&gt;model page&lt;/a&gt;
and click in the support tab, there’s one button named “vBIOS”. Clicking it
reveals this text box:&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://andrealmeid.com/blog-pics/vbios-asrock.png&#34; alt=&#34;Screenshot showing VBIOS session in ASRock website, description bellow&#34;&gt;&lt;/p&gt;
&lt;p&gt;The detailed description “Enhance performance.” quickly gets my attention and I
know that I’m where I need to be. But calm down, let’s read all the information.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Please read the information below before downloading or updating your vBIOS&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Sure, safety first.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;We do not recommend users to update the vBIOS if their graphics card is already
running normally.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Wait. So it seems that ASRock released a software to enhance
performance of the card, but asks you not to do so and tells you that actually
this is not a good idea.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;ASRock assumes no responsibility for any damages caused by improper operations
of downloading or updating the vBIOS.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;And if something went wrong, good luck dealing with that.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Before you download or update the vBIOS, please read &amp;ldquo;(How to Update)&amp;rdquo; below
carefully.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;In the column “Update vBIOS Under/ How to Update” there’s only one entry where
is possible to read Windows. These are bad news for me, since I have no
Windows around to use. I click anyway in search for more knowledge and
(as suggested) I carefully read the four steps instructions on how
to extract a compressed file and how to double-click in a batch file, but they
are all for Windows, so wasn’t so useful for me. Anyway, I click and download
the “Global” option just in case I need it in the future.&lt;/p&gt;
&lt;p&gt;The zip contains two files: &lt;code&gt;Update.cmd&lt;/code&gt; and &lt;code&gt;h566GCLDO_L07_X64Gop_2_09.exe&lt;/code&gt;.
The first one is basically a batch script that call the second one with &lt;code&gt;update&lt;/code&gt;
as argument. The second one seems to be a C++ application to flash the card.
It is important to notice that this binary is a Windows application with a
VBIOS image embedded. To get only the image, TechPowerUp hosts a
&lt;a href=&#34;https://www.techpowerup.com/vgabios/&#34;&gt;collection of VBIOS images&lt;/a&gt;. If an
appropriated flashing tool.  My first attempt failed, now it’s time to search
again.&lt;/p&gt;
&lt;h3 id=&#34;amdmeminfo&#34;&gt;amdmeminfo&lt;/h3&gt;
&lt;p&gt;Looking for some kind of software to hack my AMD GPU that run in
Linux, I discovered that there is one called &lt;code&gt;amdmeminfo&lt;/code&gt;. Mysteriously, there
was no entry at ArchLinux User Repository.I moved forward and decided to give a try. For
that, I choose the first &lt;a href=&#34;https://github.com/ystarnaud/amdmeminfo&#34;&gt;GitHub result&lt;/a&gt;
in DDG, hoping for the best and that should be the most relevant one. From the
README, we can read that “Get GDDR5 memory information and other information
from AMD Radeon GPUs.” Not bad, huh?&lt;/p&gt;
&lt;p&gt;After following the build instructions, I managed to get my binary. This was the
result of the first run:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;AMDMemInfo by Zuikkis &amp;lt;zuikkis@gmail.com&amp;gt; Updated by Yann St.Arnaud
&amp;lt;ystarnaud@gmail.com&amp;gt; 03:00.0: Unable to unlock vbios
“./amdmeminfo” terminated by signal SIGSEGV (Address boundary error)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;After reading the code, I realized that this segfault had occurred because this
version of the tool doesn’t support my card and no one checked if
&lt;code&gt;(gpu == NULL)&lt;/code&gt;. I need a more recent version of &lt;code&gt;amdmeminfo&lt;/code&gt; for my
card. The “original” repo, the one ystarnaud has chosen to fork from Zuikkis
isn’t modified since 2014, so I think it will not help me. Back to the repo I’m
using, there is a
&lt;a href=&#34;https://github.com/ystarnaud/amdmeminfo/pull/12&#34;&gt;Pull Request&lt;/a&gt;.
Maybe it’s to add to support RX 5600 XT, who knows?&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;add files via upload

No description provided.

Files changed 1: BIN +385 KB xmrig-proxy-master.zip
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Well, you don’t need to be a git expert to see that’s something going strange
here. I download the file and opened, and it’s an entire different repo download
as zip, to deal with alt-coins proxy:
&lt;a href=&#34;https://github.com/xmrig/xmrig-proxy/&#34;&gt;xmrig-proxy&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Not sure what were VIP21’s intentions with this move, but it doesn’t seem it was
succeeded. I moved to check the forks, and found that there are 50 ones, mostly
from cryptomining people. After checking one by one, minershive’s (also a
cryptocoin enthusiastic account) one seems to be the most reasonable one, with
support to RX 5600 XT! It stills segfault, but at least was able to output the
current version of my vBIOS:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;113-EXT900162-L05
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;When I discovered this software, there were 50 forks. Now we have 51 forks!&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://andrealmeid.com/blog-pics/vbios-xkcd.png#c&#34; alt=&#34;Comic number 927 of xkcd&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Standars, by &lt;a href=&#34;https://xkcd.com/927/&#34;&gt;xkcd&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I had renamed the tool to &lt;code&gt;amdgpuinfo&lt;/code&gt;, since we get more general information
about a GPU, not only about memory (at least for my card, I can’t get any memory
information for now). You can find my repo at my
&lt;a href=&#34;https://gitlab.com/andrealmeid/amdgpuinfo&#34;&gt;GitLab&lt;/a&gt;.
I also solved the problem with AUR package, and created one:
&lt;a href=&#34;https://aur.archlinux.org/packages/amdgpuinfo-git/&#34;&gt;amdgpuinfo-git&lt;/a&gt;. This tool
was useful only to get my VBIOS version, since it can’t flash the card (at least
for now).&lt;/p&gt;
&lt;h3 id=&#34;atiflash--amdvbflash&#34;&gt;atiflash / amdvbflash&lt;/h3&gt;
&lt;p&gt;As I continued my seek for Linux tools that could flash AMD cards, I found a lot
of tutorials on how to do it in Windows. One popular tool among those guides is
called &lt;code&gt;atiflash&lt;/code&gt;, a tool to manipulate AMD GPUs and their VBIOSs. ATI was a
company acquired by AMD and become part of the GPU development sector, but since
2010, the name ATI name isn’t used in any products released by them. So even
with this outdated name, this tool shows some potential.&lt;/p&gt;
&lt;h4 id=&#34;freedos&#34;&gt;FreeDOS&lt;/h4&gt;
&lt;p&gt;I first heard of it in this
&lt;a href=&#34;https://www.techpowerup.com/forums/threads/amd-ati-flashing-guide.212849/&#34;&gt;guide&lt;/a&gt;
in TechPowerUp&amp;rsquo;s forum, teaching how to use atiflash to flash your VBIOS.
Wait, FreeDOS?&lt;/p&gt;
&lt;p&gt;It seems like a lot of Windows users don’t trust it to perform such critical
actions as flashing your VBIOS GPU. An unexpected interruption, reboot, a spiked
CPU load or blue screen could corrupt the image and brick the card. Windows
Update, Windows Defender, Cortana, antivirus, virus, all those softwares could
work together to do that for you.&lt;/p&gt;
&lt;p&gt;So how do you use your flashing tool, a Windows binary, in a safe environment?
The answer got me by surprise, but if you are familiar with this kind of
procedures, you probably already know FreeDOS. This is a GPL DOS-compatible
operating system that allows you to run Windows software in an isolated
condition. No updates, no voice assistance. Hopefully, no internet either. Just
you and a command prompt, waiting for your order. Fortunately, Windows has a
good retro compatible ABI, meaning that you can run some simple software in any
release between from DOS to Windows 10.&lt;/p&gt;
&lt;h3 id=&#34;supported-os-linux&#34;&gt;Supported OS: Linux&lt;/h3&gt;
&lt;p&gt;The version of &lt;code&gt;atiflash&lt;/code&gt; that is used in this guide, v4.17, is able to work on
DOS as I tested in FreeDOS. But won’t be even nicer just using this in
GNU/Linux? I could only find one version of this software for my OS, in a shady
repository from &lt;code&gt; konqueror1&lt;/code&gt;, one more cryptominer:
&lt;a href=&#34;https://github.com/konqueror1/atiflash&#34;&gt;https://github.com/konqueror1/atiflash&lt;/a&gt;. This tool, as version 4.25, could not
detect my flash card, so I needed a more updated one. Just to be sure, I tried
in FreeDOS. It worked fine, but it couldn’t detect my card as well.&lt;/p&gt;
&lt;p&gt;Hopefully, the same TechPowerUp website hosts &lt;a href=&#34;https://www.techpowerup.com/download/ati-atiflash/&#34;&gt;atiflash
versions&lt;/a&gt;, along with &lt;a href=&#34;https://www.techpowerup.com/vgabios/&#34;&gt;VBIOS
images&lt;/a&gt;, so maybe it was just a matter of
finding the right version, with the right image. So I grab the 2.93 version for
download, but it only has Windows versions. Changelog says that in August 15th,
2019, support for flashing Navi Radeon RX 5700 Series BIOS was added.
Two important things to notice here: even that this release is newer,
it’s version has a lower number than the one that we found before
(4.15). Also, the name of binary is actualy “AMDVbFlash”, without &amp;ldquo;ATI&amp;rdquo;
anymore. Probably they reset the version counter when changing the name,
but kept the old name in pages to enhance the Google visibility. Once
again I fire my FreeDOS USB, but this time all I get from the tool is
&amp;ldquo;This Program Can not Be Run in DOS Mode”. It turns that this message is
bultin in the software, and it seems that it just print this and then
exits, if it is running in a DOS environment. Maybe some developer in
AMD changed the compiler or build system, breaking the DOS compatibility
on the way.&lt;/p&gt;
&lt;p&gt;We had already tested Linux and DOS versions out there, but TPU doesn’t provide
any of then. In the hope that another tech forum has some binaries for me, I
found more two websites: Guru3D and Geeks3D. I have no idea if they same some
kind of relation or just use similar names by chance. By just a few days of
difference, both pages posted the 3.04 release of the tool:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://www.geeks3d.com/forums/index.php/topic,6313.0.html&#34;&gt;Geeks3D release&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://www.guru3d.com/files-details/amdvbflash-download,4.html&#34;&gt;Guru3D release&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Geeks3D post comes with a promise that I was waiting for:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Supported OS:
- Microsoft Windows (32bit/64bit)
- UEFI
- Linux
- DOS
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;My hope quickly ended, when clicking for download I was presented to
&lt;code&gt;AMDVbFlash_v3.04.exe&lt;/code&gt; file. Extracting the &lt;code&gt;.exe&lt;/code&gt;, there is an
&lt;code&gt;EndUserLicenseAgreement(use).doc&lt;/code&gt; by AMD and a &lt;code&gt;readme.txt&lt;/code&gt;. Once again, the
README states that Linux, UEFI and DOS are all supported, along with a nice AMD
Copyright.&lt;/p&gt;
&lt;h3 id=&#34;screwed-drivers&#34;&gt;Screwed Drivers&lt;/h3&gt;
&lt;p&gt;Those tools should be coming from somewhere, hopefully from AMD itself, since
they are both developer and copyright owner of the tool. However, the only
mention that I could find about the tool in AMD website is in their &lt;a href=&#34;https://www.amd.com/en/corporate/product-security&#34;&gt;security
page&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Screwed Drivers&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;8/11/19&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;At AMD, security is a top priority. We were made aware of the public disclosure
of potential industry-wide, driver-related vulnerabilities on August 11, 2019
and, after gaining new information from the researcher, AMD now believes this is
related to a disclosure communicated to us earlier this year regarding the
AMDVBFlash graphics driver tool that was temporarily made available on our
website so early adopters of older AMD graphics products could perform a needed
Video BIOS refresh and has since been removed. AMD is continuing to investigate
the issue to determine if any other of our drivers may be affected.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;To learn more about how this was being exploited, you can read the post by the
researchers
&lt;a href=&#34;https://eclypsium.com/2019/08/10/screwed-drivers-signed-sealed-delivered/&#34;&gt;at Eclypsium&amp;rsquo;s blog&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Drivers that provide access to system BIOS or system components for the
purposes of updating firmware, running diagnostics, or customizing options on
the component can allow attackers to turn the very tools used to manage a system
into powerful threats that can escalate privileges and persist invisibly on the
host.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;In summary, attackers could flash vulnerable firmware and driver to escalate
privilege to read/write in kernel space. The article talks only about Windows,
so it doesn’t seem to affect Linux. Also, it’s not clear about the
role of “AMDVBFlash” in that attack, the article only says that “[&amp;hellip;]
the very drivers and tools that would be used to update the firmware
are themselves vulnerable and provide a potential avenue for attack.”.
To prevent users exploiting this attack, they removed the tool from
their website, although they can’t delete it from the internet. It
would be nice to have a fixed version for users, or even the source
code, so they could fix it themselves. I just hope that they didn’t
take down the tool with the argument that “it could be used to flash
malicious images”. Similarly, this would be like removing the web
browser, since it could be used to download malware.&lt;/p&gt;
&lt;h4 id=&#34;geeks-gurus-and-miners&#34;&gt;Geeks, Gurus and miners&lt;/h4&gt;
&lt;p&gt;As you may have noticed, this statement was announced in August 8th, but the
TechPowerUp and Geeks3D/Guru3D released versions after that date, in January
24th. It would make sense that this tool continues under development for AMD and
their manufacturers partners, and there might have someone inside AMD leaking
this software for those forums. The first line of the changelog is “AMDVBFLASH
EXTERNAL – WINDOWS”, that once again brings more questions than answers. Is
there an internal version? Is there a non-Windows binary? How did
{Geek,Guru}3D managed to get access to this release, even after AMD saying that
the tool was removed from their website?&lt;/p&gt;
&lt;p&gt;I also found a Linux version of this tool in “ethOS Mining OS”, a paid distro
for mining coins that offers atiflash as a cool feature and in “minerstat”
distro as well. However, after reading their documentation, I strongly believe
that this version is the old ATIflash v4.25 that I tried before.&lt;/p&gt;
&lt;p&gt;Given all that, I couldn’t find a single tool to flash my card without a running
Windows machine. The poor user amd762 even posted in AMD community forum, &lt;a href=&#34;https://community.amd.com/thread/249381&#34;&gt;asking
for a Linux version&lt;/a&gt; for the tool,
but got only the silence.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://andrealmeid.com/blog-pics/vbios-amd-forum.png&#34; alt=&#34;Screenshot of AMD forum, showing a question without answer&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;that-day-when-i-tried-to-flash-my-amd-vbios-in-linuxwindows&#34;&gt;That day when I tried to flash my AMD VBIOS in &lt;del&gt;Linux&lt;/del&gt;Windows&lt;/h3&gt;
&lt;p&gt;&lt;img src=&#34;https://andrealmeid.com/blog-pics/vbios-windows.jpg&#34; alt=&#34;Screenshot of AMDVBFlash with GUI running in Windows&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;AMDVBFlash in graphical mode, running in Windows 10&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Eventually, I gave up, took the road and after 100 kilometers I reached the
house of a friend of mine that have a Windows machine. We opened the cabinet,
replaced the GPU, opened Windows 10 and fired up those tools described
during the article. First, I did a backup of the current VBIOS image with
AMDVbFlash and then used the ASRock solution to install the new one.
Fortunately, all worked fine and my card now has a faster clock.&lt;/p&gt;
&lt;h3 id=&#34;in-more-recent-news&#34;&gt;In more recent news&lt;/h3&gt;
&lt;p&gt;Luckily, now the situation is slight better in Linux side. After I did all those
steps to get my VBIOS updated, I found the following resources:&lt;/p&gt;
&lt;h4 id=&#34;overclocking-in-linux&#34;&gt;Overclocking in Linux&lt;/h4&gt;
&lt;p&gt;There is a post in Reddit
&lt;a href=&#34;https://www.reddit.com/r/linux_gaming/comments/fpcjb7/guide_how_to_bypass_the_clock_speed_and_voltage/&#34;&gt;that teaches you how to change the voltage and frequency of
your AMD card&lt;/a&gt;.
This is basically an overclocking, but as far as I know, the performance result
should be the same as flashing the VBIOS. Read the comments, since there are
some useful tips and information there.&lt;/p&gt;
&lt;h4 id=&#34;amdvbflash-uefi-version&#34;&gt;AMDVBFlash, UEFI version&lt;/h4&gt;
&lt;p&gt;&lt;img src=&#34;https://andrealmeid.com/blog-pics/vbios-uefi.jpg&#34; alt=&#34;Screenshot of AMDVBFlash running in UEFI shell&#34;&gt;&lt;/p&gt;
&lt;p&gt;TechPowerUp surprises me again, and release an
&lt;a href=&#34;https://www.techpowerup.com/download/ati-atiflash/&#34;&gt;UEFI shell version of AMDVBFlash 2.93&lt;/a&gt;
out of nowhere. Technically, this should be the best way to flash you card,
since it doesn’t depend on your OS, just requires that you have a
motherboard that supports UEFI. Just copy the files in a pen drive formated as
FAT32 and boot it.&lt;/p&gt;
&lt;p&gt;This release wasn’t made by AMD itself, but by “W1zzard”, an administrator from
TechPowerUp. I&amp;rsquo;m not sure if it&amp;rsquo;s a reverse engineer of the original tool, or
it&amp;rsquo;s the UEFI version released by AMD but with the Copyright modified. I
couldn’t find more information about this developer, since their &lt;a href=&#34;https://twitter.com/w1zzard&#34;&gt;Twitter
account&lt;/a&gt; has just one tweet with “6.5 million
LinkedIn passwords” in a pastebin.&lt;/p&gt;
&lt;p&gt;I tested following commands and everything worked as expected:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Listing devices/adapters: &lt;code&gt;amdvbflash -i&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://andrealmeid.com/blog-pics/vbios-uefi2.jpg&#34; alt=&#34;Screenshot of AMDVBFlash running in UEFI shell&#34;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Write the VBIOS of adapter &lt;code&gt;0&lt;/code&gt; at file: &lt;code&gt;amdvbflash -s 0 &amp;lt;file&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Check VBIOS info in a given file: &lt;code&gt;amdvbflash -biosfileinfo &amp;lt;file&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://andrealmeid.com/blog-pics/vbios-uefi3.jpg&#34; alt=&#34;Screenshot of AMDVBFlash running in UEFI shell&#34;&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; after I published this post, W1zzard &lt;a href=&#34;https://www.reddit.com/r/Amd/comments/fzdn1q/that_day_when_i_tried_to_flash_my_amd_vbios_in/&#34;&gt;commented in Reddit&lt;/a&gt;
clarifying the situation:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;W1zzard from tpu here, the uefi flasher itself is amd original, i packaged
it into a simple download with uefi shell and wrote the uefi Scripts&lt;/p&gt;
&lt;p&gt;We’re not hosting the newer vbflash because it requires that driver which
has security issues as you mentioned. The current 2.93 can flash all amd
cards so no reason to use the newer version and jump through the driver hoops&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Also, the UEFI version tool can be found with some vendors images, as is the
case of &lt;a href=&#34;https://www.msi.com/Laptop/support/Alpha-15-A3DDK#down-firmware&#34;&gt;MSI image&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;AMD, in contrast with others GPU vendors, does a great job supporting Linux
drivers in upstream. However, it lacks support for a VBIOS flashing tool in
Linux (despite their confusing README stating the opposite), so RX 5600 XT users
need to do wild things to get their card updated, including using Windows. If
the tool was open source, I’m very confident that the community would support a
Linux release. Thanks for reading, and if you know something about what is going
on, I would love to hear.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Check my &lt;a href=&#34;https://andrealmeid.com/post/2020-05-01-vbios2&#34;&gt;next post&lt;/a&gt; to see the final outcome of this
history.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;Thanks &lt;a href=&#34;https://twitter.com/spulaniraba&#34;&gt;Lubosz&lt;/a&gt; for joining me in this
adventure, digging in the web, looking for software, inspiring and
reviewing this text.&lt;/p&gt;
&lt;hr&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Discussion on &lt;a href=&#34;https://www.reddit.com/r/Amd/duplicates/fzdn1q/that_day_when_i_tried_to_flash_my_amd_vbios_in/&#34;&gt;Reddit&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Discussion on &lt;a href=&#34;https://news.ycombinator.com/item?id=22843087&#34;&gt;Hacker News&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>Create an ArchLinux image for kernel testing</title>
      <link>https://andrealmeid.com/post/2020-03-10-bootstrap-arch/</link>
      <pubDate>Tue, 10 Mar 2020 00:00:00 +0000</pubDate>
      
      <guid>https://andrealmeid.com/post/2020-03-10-bootstrap-arch/</guid>
      <description>&lt;p&gt;In this tutorial, we&amp;rsquo;ll look on how to create a functional and simple ArchLinux
virtual machine image, that can access the internet, display graphical windows
and share a folder with the host to help you with your kernel development.
The only requirement is that you need to have a working ArchLinux installation.&lt;/p&gt;
&lt;p&gt;A virtual machine is useful in a lot of development scenarios, but it&amp;rsquo;s
particularly essential in the Linux kernel development. It can be really
time-consuming to install the kernel on your own system and then needing to
reboot the machine just to see if your &lt;code&gt;printk()&lt;/code&gt; is working. This is why this
topic was already covered in
&lt;a href=&#34;https://www.collabora.com/news-and-blog/&#34;&gt;Collabora&amp;rsquo;s blog&lt;/a&gt;,
with Ezequiel explaining how to use
&lt;a href=&#34;https://www.collabora.com/news-and-blog/blog/2018/09/18/virtme-the-kernel-developers-best-friend/&#34;&gt;virtme&lt;/a&gt;
and Frédéric showing how to setup a minimal
&lt;a href=&#34;https://www.collabora.com/news-and-blog/blog/2017/01/16/setting-up-qemu-kvm-for-kernel-development/&#34;&gt;Debian to use with QEMU-KVM&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;As already said by my colleagues, there&amp;rsquo;s no need to install a complete system
from scratch, using a installation disc. If you&amp;rsquo;ve already used to Arch Linux,
you probably know that the distro slogan is
&lt;a href=&#34;https://wiki.archlinux.org/index.php/Arch_terminology#KISS&#34;&gt;&amp;ldquo;Keep it Simple, Stupid&amp;rdquo;&lt;/a&gt;. So let&amp;rsquo;s try not to suffer in order to get a kernel development environment.
It may seem to be complicated to achieve this, but once I explain all the
concepts behind it, you will notice how this is very customizable and easily
scriptable, so you can automate this part of your workflow.&lt;/p&gt;
&lt;p&gt;Since we&amp;rsquo;re going to work with two systems at the same time, let&amp;rsquo;s explicitly
state in which machine you should run the command:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;host&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;$ &lt;span style=&#34;color:#75715e&#34;&gt;# for you real machine&lt;/span&gt;

&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;guest&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;$ &lt;span style=&#34;color:#75715e&#34;&gt;# for the virtual machine&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;creating-a-disk&#34;&gt;Creating a disk&lt;/h2&gt;
&lt;p&gt;We will need a disk to store our new OS in. Hopefully, we have no need for a
physical device, a file will do the work. It&amp;rsquo;s up to you how much space you&amp;rsquo;ll
allocate, but I recommend a minimum of 4 GB. We&amp;rsquo;re going to create a 5GB sparse
file (a file that allocates space as needed) to be our disk, using the
&lt;code&gt;truncate&lt;/code&gt; command:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;host&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;$ truncate -s 5G arch_disk.raw&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;If you check the size with &lt;code&gt;du -h arch_disk.raw&lt;/code&gt;, it&amp;rsquo;s going to say &lt;code&gt;0&lt;/code&gt;
(because we haven&amp;rsquo;t used it yet), but if you run &lt;code&gt;du -h --apparent-size arch_disk.raw&lt;/code&gt; you can see the maximum size the file may expand.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s add a file system at this file. This means that this file will be ready to
contain files and folders, and will contain the new file system as its data.
This will make our disk to look and behave as a single partition.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;host&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;$ mkfs.ext4 arch_disk.raw&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Since we have a file that represents a partition, we can mount it. Create a
directory to be the mounting point and mount it:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;host&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;$ mkdir mnt
&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;host&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;$ sudo mount arch_disk.raw mnt&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;installing-archlinux&#34;&gt;Installing ArchLinux&lt;/h2&gt;
&lt;p&gt;Now that we have a disk, let&amp;rsquo;s place an initial system, just like when we are
installing Arch. Install these packages:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;host&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;$ sudo pacman -S arch-install-scripts qemu&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The first package has some scripts that are really helpful to install ArchLinux
(e.g. &lt;code&gt;pacstrap&lt;/code&gt;, &lt;code&gt;arch-chroot&lt;/code&gt;) and the second one is the QEMU emulator.&lt;/p&gt;
&lt;p&gt;Just remember to check if you are using a nice mirror close to you on top of
your mirrorlist file (&lt;code&gt;/etc/pacman.d/mirrorlist&lt;/code&gt;). This will speedup your
download.&lt;/p&gt;
&lt;p&gt;Now, let&amp;rsquo;s transform that formatted partition into a functional system.
&lt;code&gt;pacstrap&lt;/code&gt; is wrapper for &lt;code&gt;pacman&lt;/code&gt; that will install in the first argument
(&lt;code&gt;mnt&lt;/code&gt;) the packages/groups (&lt;code&gt;base&lt;/code&gt;, &lt;code&gt;base-devel&lt;/code&gt;) and create the root
filesystem, with the appropriated folders (&lt;code&gt;lib&lt;/code&gt;, &lt;code&gt;dev&lt;/code&gt;, &lt;code&gt;tmp&lt;/code&gt;, &lt;code&gt;home&lt;/code&gt;, &amp;hellip;).
You may also take this step to add more packages that you would like to have
in the virtual environment, like &lt;code&gt;vim&lt;/code&gt; for instance. If you want to enable
internet access in the guest in the future, use this step to install the
&lt;code&gt;dhcpcd&lt;/code&gt; package. Just add then after &lt;code&gt;base-devel&lt;/code&gt; in the following command:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;host&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;$ sudo pacstrap mnt base base-devel&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Pro tip&lt;/strong&gt;: if your host system is up-to-date, you can use the flag &lt;code&gt;-c&lt;/code&gt; to
just copy the packages from your host to the guest, instead of downloading
them all again: &lt;code&gt;pacstrap -c mnt ...&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This will create the directory structure and install the basic packages. You can
navigate through &lt;code&gt;mnt/&lt;/code&gt; and see an entire file system there, and even change the
root to this new system:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;host&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;$ sudo arch-chroot mnt&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;If you use &lt;code&gt;ls&lt;/code&gt; and &lt;code&gt;pwd&lt;/code&gt; you will see that you are definitely in a guest
system, and not in your host machine anymore. If you use &lt;code&gt;uname -r&lt;/code&gt; you can see
the kernel version was installed on your host system:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;guest&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;$ ls
bin   dev  home  lib64	     mnt  proc	run   srv  tmp	var
boot etc  lib	 lost+found  opt  root	sbin  sys  usr
&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;guest&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;$ ls home/
&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;guest&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;$ pwd
/
&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;guest&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;$ uname -r 4.20.7-arch1-1-ARCH&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Once inside, it can be useful to set a password for the root user with &lt;code&gt;passwd&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Use CTRL+D to exit from the guest and then &lt;code&gt;sudo umount mnt&lt;/code&gt; to umount the disk.
Let&amp;rsquo;s use a custom kernel now.&lt;/p&gt;
&lt;h2 id=&#34;using-qemu-and-your-kernel&#34;&gt;Using QEMU and your kernel&lt;/h2&gt;
&lt;p&gt;Now, for the next steps, you will need a compiled and functional Linux Kernel.
You already have one, since you are running a GNU/Linux distribution, but if you
still don&amp;rsquo;t have a custom kernel to make experiments, you can easily get one
like this:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;host&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;$ git clone --depth&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;host&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;$ cd linux
&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;host&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;$ make x86_64_defconfig
&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;host&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;$ make kvm_guest.config
&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;host&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;$ make -j8&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;The goal of this article is not get in details on how to compile the kernel.
For more information, check the
&lt;a href=&#34;https://wiki.archlinux.org/index.php/Kernel/Traditional_compilation&#34;&gt;Arch wiki&lt;/a&gt;
article and have a look at
&lt;a href=&#34;https://nickdesaulniers.github.io/blog/2018/06/02/speeding-up-linux-kernel-builds-with-ccache/&#34;&gt;ccache&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The git command will clone Linus&amp;rsquo; tree source code of the kernel into your
machine. With the argument &lt;code&gt;--depth=1&lt;/code&gt;, you won&amp;rsquo;t clone all the commit history of
the kernel and the download will be faster. If you want to have the
history (which is advisable with you want to send patches to the project),
remove this argument. The &lt;code&gt;make ...config&lt;/code&gt; commands will create a basic kernel
with virtualization powers for x86_64 machines.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;make -j8&lt;/code&gt; can take some time and some CPU usage. The &lt;code&gt;-j8&lt;/code&gt; argument will create
8 jobs to compile the kernel, change it according to the number of threads in
your machine.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s play with QEMU. We are going to use a lot of flags and arguments, so let&amp;rsquo;s
check in details each one:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-hda disk.raw&lt;/code&gt;: specify that the &lt;code&gt;arch_disk.raw&lt;/code&gt; file should be provided as the
first hard disk in the emulated system.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-m 4G&lt;/code&gt;: amount of RAM we are going to loan to the virtual machine.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-nographic&lt;/code&gt;: QEMU will run on the terminal instead of a graphical window.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-kernel linux/arch/x86_64/boot/bzImage&lt;/code&gt;: define the file where your
compressed kernel image is. You can also use the kernel installed on your
machine, it should be somewhere in &lt;code&gt;/boot/&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-smp 1&lt;/code&gt;: how many virtual CPUs QEMU will use.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-append &amp;quot;root=/dev/sda rw console=ttyS0 loglevel=5&amp;quot;&lt;/code&gt;: kernel parameters.
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;root&lt;/code&gt; defines which disk/partition has the root file system. In our
case, it will be the first storage device&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;, the hard disk
&lt;code&gt;arch_disk.raw&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rw&lt;/code&gt; that we want to read and write to disk.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;console&lt;/code&gt; is to set the standard output of the kernel and of the PID 1.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;loglevel&lt;/code&gt; is to set how much log the kernel will output to the
console and 7 is the highest and it will display all the kernel messages
in the console prompt.
&lt;ul&gt;
&lt;li&gt;I don&amp;rsquo;t find the
&lt;a href=&#34;https://wiki.archlinux.org/index.php/Audit_framework&#34;&gt;Audit logs&lt;/a&gt; useful.
You can disable them with &lt;code&gt;audit=0&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;You can learn more about kernel parameters in the
&lt;a href=&#34;https://www.kernel.org/doc/html/latest/admin-guide/kernel-parameters.html&#34;&gt;documentation&lt;/a&gt;;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--enable-kvm&lt;/code&gt;: this is to enable hardware acceleration to virtualization.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Feel free to change these parameters to suit your environment. Now run it all
together:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;host&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;$ qemu-system-x86_64 -hda arch_disk.raw -m 4G -nographic &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;        -kernel linux/.../bzImage &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;        -append &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;root=/dev/sda rw console=ttyS0 loglevel=5&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;        --enable-kvm&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;When the prompt displays archlinux login:, just type root and enter. Use &lt;code&gt;uname -r&lt;/code&gt; again to check which kernel you are running. When you are done, use CTRL+a
then x to exit:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;archlinux login: root
&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;guest&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;$ uname -r
5.0.0-rc1+&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 id=&#34;auto-login&#34;&gt;Auto login&lt;/h3&gt;
&lt;p&gt;If you always use the root user, you may set to auto login using systemd. Type
&lt;code&gt;systemctl edit serial-getty@.service&lt;/code&gt; in the guest and a text editor will
open. Add those lines and in the next login you should be good:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;Service&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;
ExecStart&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;
ExecStart&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;-/usr/bin/agetty --autologin root --noclear %I $TERM&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;connecting-to-the-internet&#34;&gt;Connecting to the internet&lt;/h2&gt;
&lt;p&gt;You may want to install some packages on your virtual machine or perform some
network tests, but as it stands, you can&amp;rsquo;t reach the internet:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;guest&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;$ ping eff.org
ping: eff.org: Temporary failure in name resolution&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Let&amp;rsquo;s use our host as a network bridge; login in our virtual machine with root
user and then:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;guest&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;$ systemctl enable dhcpcd
&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;guest&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;$ systemctl start dhcpcd&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Every time your system boots, it&amp;rsquo;ll start to run a DHCP service and connects to
the internet using a &amp;ldquo;virtual wire&amp;rdquo; to the host.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;guest&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;$ ping eff.org
PING eff.org &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;173.239.79.196&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; 56&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;84&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; bytes of data.&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Due to the configuration of the NAT, you won&amp;rsquo;t get ping answers like
&lt;code&gt;64 bytes from vm1.eff.org (173.239.79.196): icmp_seq=1 ttl=46 time=197 ms&lt;/code&gt;.
However, since we managed to solve the DNS (since ping showed to us the IP
address of &lt;code&gt;eff.org&lt;/code&gt;), we are sure that we have internet connection.&lt;/p&gt;
&lt;h2 id=&#34;displaying-graphical-windows&#34;&gt;Displaying graphical windows&lt;/h2&gt;
&lt;p&gt;If you want to run graphical applications inside your virtual machine, you may
follow one of the methods:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;QEMU display&lt;/strong&gt;: use QEMU display in graphical mode with a GUI compositor;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;SSH with XForwarding&lt;/strong&gt;: use your own terminal to SSH into the VM and then
display the content using your host&amp;rsquo;s display.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This can be useful to test some subsystems like DRM or V4L2. Keep in mind that
the performance won&amp;rsquo;t be the best and the functionality can be a bit buggy, so
I recommend using lightweight apps like &lt;code&gt;gstreamer&lt;/code&gt; and &lt;code&gt;ffmpeg&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id=&#34;qemu-display&#34;&gt;QEMU display&lt;/h3&gt;
&lt;p&gt;The first difference here is that we&amp;rsquo;re going to remove the &lt;code&gt;-nographic&lt;/code&gt; argument
from QEMU. Run it now and it should open a new window.&lt;/p&gt;
&lt;p&gt;Now, make sure to have this module enabled at your kernel: &lt;code&gt;DRM_BOCHS&lt;/code&gt;, a driver
to help us displaying graphical content in QEMU. This means that if you open the
&lt;code&gt;.config&lt;/code&gt; file at your kernel source directory it should have this line:
&lt;code&gt;CONFIG_DRM_BOCHS=y&lt;/code&gt;. Remember to recompile the kernel each time you change it&amp;rsquo;s
configuration.&lt;/p&gt;
&lt;p&gt;We need software to manage the windows and display them on the screen, so we are
going to install a lightweight Wayland compositor,
&lt;a href=&#34;https://gitlab.freedesktop.org/wayland/weston&#34;&gt;weston&lt;/a&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;guest&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;$ pacman -S weston xorg-server-xwayland xorg-fonts-type1 xorg-xclock&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Create a file &lt;code&gt;~/.config/weston.ini&lt;/code&gt; in guest and add this:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;core&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt; xwayland&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;true&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Run the weston command in guest, and the graphical interface should appear. You
can use your mouse to open the weston-terminal at the top left corner. If your
mouse is moving oddly, make sure your window zoom is set to the &amp;ldquo;Best fit&amp;rdquo;
option in the QEMU window bar. Inside the terminal, run &lt;code&gt;xclock&lt;/code&gt; and you should
be able to check the hours inside your virtual machine. When you&amp;rsquo;re done, you
can use Ctrl+Alt+Backspace to quit weston.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://andrealmeid.com/blog-pics/xclock-weston.png&#34; alt=&#34;Screen capture showing xclock inside weston&#34;&gt;
&lt;em&gt;Screen capture showing &lt;code&gt;xclock&lt;/code&gt; inside weston&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This is just the basic setup using QEMU graphical mode. To improve performance
and usability (like to have clipboard and multimonitor support) one can use a
QEMU front end (like &lt;code&gt;virt-manager&lt;/code&gt;) or SPICE to expand your options and features
between guest and host. Check the ArchWiki to learn more about
&lt;a href=&#34;https://wiki.archlinux.org/index.php/QEMU#Graphic_card&#34;&gt;virtual graphic cards&lt;/a&gt;,
&lt;a href=&#34;https://wiki.archlinux.org/index.php/QEMU/Guest_graphics_acceleration&#34;&gt;graphics acceleration&lt;/a&gt; and
&lt;a href=&#34;https://wiki.archlinux.org/index.php/QEMU#SPICE&#34;&gt;SPICE&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;xforwarding&#34;&gt;XForwarding&lt;/h3&gt;
&lt;p&gt;This is a way to display graphical interfaces running in a remote host in the
local machine. This means that the X server on your guest machine will forward
the graphical input/output to the X client on your host machine. You can keep
the argument &lt;code&gt;-nographic&lt;/code&gt; in QEMU. Let&amp;rsquo;s get some packages that will help us (you
need to install xorg-auth in both machines, the host and guest):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;host&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;$ sudo pacman -S xorg-xauth&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;guest&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;$ pacman -S xorg-xauth xorg-xclock openssh xorg-fonts-type1&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;As in the last section, our goal here is to run the application xclock, a simple
graphical clock as a proof of concept. If you try to run it now, this should
happen:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;guest&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;$ xclock Error: Can&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;t open display:&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;That&amp;rsquo;s why we are going to use SSH, to help us get the graphical output. The
default TCP port of SSH is 22, but probably your localhost already has reserved
this port. Besides this, the IP address QEMU gives to your VM usually isn&amp;rsquo;t
routable. So, let&amp;rsquo;s map our guest &lt;code&gt;22&lt;/code&gt; to another port, let&amp;rsquo;s say &lt;code&gt;1337&lt;/code&gt;, and
expose this port using the &lt;code&gt;hostfwd&lt;/code&gt; option. This can be done with these
additional QEMU flags:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-net nic&lt;/code&gt;: creates a basic network card;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-net user,hostfwd=tcp::1337-:22&lt;/code&gt;: maps port host&amp;rsquo;s &lt;code&gt;1337&lt;/code&gt; to guest&amp;rsquo;s &lt;code&gt;22&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you try to access the machine now via ssh (with QEMU running with this new
parameters), it won&amp;rsquo;t be possible yet:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;host&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;$ ssh root@localhost -p &lt;span style=&#34;color:#ae81ff&#34;&gt;1337&lt;/span&gt; ssh_exchange_identification: read: Connection
reset by peer&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;In the guest, if you run &lt;code&gt;systemctl status sshd&lt;/code&gt;, you can see that it isn&amp;rsquo;t
running. Let&amp;rsquo;s configure sshd before running it. Let&amp;rsquo;s edit &lt;strong&gt;guest&amp;rsquo;s&lt;/strong&gt;
&lt;code&gt;/etc/ssh/sshd_config&lt;/code&gt; to ensure that you have those lines uncommented and edited:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;PermitRootLogin yes &lt;span style=&#34;color:#75715e&#34;&gt;# allows root login with password via ssh&lt;/span&gt;
X11Forwarding yes &lt;span style=&#34;color:#75715e&#34;&gt;# allows XForwarding&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Let&amp;rsquo;s configure sshd to run at boot and to start now:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;guest&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;$ systemctl enable sshd
&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;guest&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;$ systemctl start sshd
&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;guest&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;$ systemctl status sshd
* sshd.service - OpenSSH Daemon
     Loaded: loaded &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;/usr/lib/systemd/system/sshd.service; enabled; vendor preset: disabled&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
     Active: active &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;running&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
     ...&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;To have access to the guest without using a password every time, you can
place your SSH public key inside the file &lt;code&gt;~/.ssh/authorized_keys&lt;/code&gt;. You can
copy and paste your key in this file while the guest machine is running, or
you can mount the guest rootfs and write in the file, like this:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;guest&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;$ &lt;span style=&#34;color:#75715e&#34;&gt;# Stop guest machine using CTRL+A, X&lt;/span&gt;
&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;host&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;$ sudo mount arch_disk.raw mnt
&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;host&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;$ sudo su
&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;root-host&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;$ cat /home/user/.ssh/id_rsa.pub &amp;gt; mnt/root/.ssh/authorized_keys
&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;root-host&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;$ exit
&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;host&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;$ sudo umount mnt&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Start the virtual machine again and, with a second terminal session, try to
login:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;host&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;$ ssh root@localhost -p &lt;span style=&#34;color:#ae81ff&#34;&gt;1337&lt;/span&gt;
Last login: Mon Feb &lt;span style=&#34;color:#ae81ff&#34;&gt;18&lt;/span&gt; 17:57:15 &lt;span style=&#34;color:#ae81ff&#34;&gt;2019&lt;/span&gt; from 10.0.2.2
&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;guest&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;$&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;You can use &lt;code&gt;exit&lt;/code&gt; command to close the session. If you don&amp;rsquo;t have a
&lt;code&gt;.Xauthority&lt;/code&gt; file on your home folder, it will prompt a warning, but don&amp;rsquo;t
worry: after the warning, the file will be created. Access the virtual machine
using ssh with the argument &lt;code&gt;-X&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;host&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;$ ssh -X root@localhost -p &lt;span style=&#34;color:#ae81ff&#34;&gt;1337&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;And check the hours with &lt;code&gt;xclock&lt;/code&gt;! To exit, you can also use CTRL+D.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://andrealmeid.com/blog-pics/xclock-ssh.png&#34; alt=&#34;Screen capture showing xclock with XForwarding&#34;&gt;
&lt;em&gt;Screen capture showing xclock with XForwarding&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&#34;shared-folder-between-host-and-guest&#34;&gt;Shared folder between host and guest&lt;/h2&gt;
&lt;p&gt;Copy-pasting is definitely not the best way to send a file to your guest
machine. Hopefully, we can easily solve this problem by sharing a folder between
machines.&lt;/p&gt;
&lt;p&gt;If you ran &lt;code&gt;make x86_64_defconfig&lt;/code&gt; and &lt;code&gt;make kvmconfig&lt;/code&gt; before the kernel
compilation, you should already have the required modules enabled. If you get
errors, please make sure your kernel has the following options enabled:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;host&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;$ grep &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;VIRTIO_PCI=\|NET_9P=\|9P_FS=\|NET_9P_V\|IG_PCI=&amp;#39;&lt;/span&gt; .config
CONFIG_NET_9P&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;y
CONFIG_NET_9P_VIRTIO&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;y
CONFIG_PCI&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;y
CONFIG_VIRTIO_PCI&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;y
CONFIG_9P_FS&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;y&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;If something looks like &lt;code&gt;# CONFIG_XXX is not set&lt;/code&gt;, you should enable it.&lt;/p&gt;
&lt;p&gt;Now, elect a folder to be your shared holder, for example &lt;code&gt;/home/user/shared&lt;/code&gt;.
Then, we need to add more arguments to our QEMU command:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-fsdev local,id=fs1,path=/home/user/shared,security_model=none&lt;/code&gt;: this will
add a new file system device to our emulation. Make sure to put the right
directory at path. Don&amp;rsquo;t worry about &lt;code&gt;security_model=none&lt;/code&gt;, this argument will
let the permission of creating/modifying files inside the guest as if was
created by the host user.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-device virtio-9p-pci,fsdev=fs1,mount_tag=shared_folder&lt;/code&gt;: this defines the
name and type of the virtual device.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We need to edit our guest &lt;code&gt;/etc/fstab&lt;/code&gt;. It should look like this:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Static information about the filesystems.&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# See fstab(5) for details.&lt;/span&gt;
&lt;span style=&#34;color:#75715e&#34;&gt;# &amp;lt;file system&amp;gt; &amp;lt;dir&amp;gt; &amp;lt;type&amp;gt; &amp;lt;options&amp;gt; &amp;lt;dump&amp;gt; &amp;lt;pass&amp;gt;&lt;/span&gt;
shared_folder /root/host_folder 9p trans&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;virtio &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;This determines the mounting pointing of the shared folder. As long you are
consistent, you can choose whatever name for &lt;code&gt;shared_folder&lt;/code&gt; and &lt;code&gt;host_folder&lt;/code&gt;.
Reboot the guest machine and then:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;guest&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;$ ls /root/
host_folder&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;adding-a-new-user&#34;&gt;Adding a new user&lt;/h2&gt;
&lt;p&gt;For some testing or actions, it&amp;rsquo;s maybe useful to have a regular user, that is
not the root one. For instance, &lt;code&gt;makepkg&lt;/code&gt; refuses to run as root for safety
reasons. The following commands should be used in the guest. Use &lt;code&gt;useradd -m user -G wheel&lt;/code&gt; to create a new user with the name &lt;code&gt;user&lt;/code&gt;, with a home directory
and part of group &lt;code&gt;wheel&lt;/code&gt;. You can set a password for it using &lt;code&gt;passwd user&lt;/code&gt;.
To use this account, just type &lt;code&gt;su user&lt;/code&gt;. If you want to login to this user
from SSH, remember to add the public key to &lt;code&gt;/home/user/.ssh/authorized_keys&lt;/code&gt;.
If you want to be able to run any &lt;code&gt;sudo&lt;/code&gt; command without typing password, run
as root user &lt;code&gt;visudo&lt;/code&gt; and uncomment the line that says &lt;code&gt;%wheel ALL=(ALL) NOPASSWD: ALL&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;You may also want your kernel to have a custom name, it may be useful for you to
organize your versions. You can do this changing the &lt;code&gt;LOCALVERSION&lt;/code&gt; value at
&lt;code&gt;menuconfig&lt;/code&gt; or simply running &lt;code&gt;make LOCALVERSION=&lt;/code&gt;, e.g.:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;host&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;$ make LOCALVERSION&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;-VM ...
&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;host&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;$ qemu-system-x86_64 ...
&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;guest&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;$ uname -r
5.0.0-rc1-VM&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Now you can easily hack and test your kernel! I recommend you read this section
of the ArchWiki, as you&amp;rsquo;ll find some cool tips to improve your VM performance.
You may also want to create scripts and alias to not deal with all the flags,
that will definitively make your life easier.&lt;/p&gt;
&lt;hr&gt;
&lt;blockquote&gt;
&lt;p&gt;This content was originally posted at
&lt;a href=&#34;https://www.collabora.com/news-and-blog/blog/2019/03/20/bootstraping-a-minimal-arch-linux-image/&#34;&gt;Collabora&amp;rsquo;s blog&lt;/a&gt;
, as part of my Software Engineer job. It was slight updated and edited before
being posted here.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;section class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34; role=&#34;doc-endnote&#34;&gt;
&lt;p&gt;The observant will notice that the argument used by QEMU to specify the
first drive is &lt;code&gt;hda&lt;/code&gt;, which results in the kernel enumerating a drive as &lt;code&gt;sda&lt;/code&gt;.
Historically IDE drives were labelled &lt;code&gt;hdX&lt;/code&gt; (where &lt;code&gt;X&lt;/code&gt; is an increasing drive
letter), but for quite a while it has been typical for IDE
drives to be accessed via an emulation layer in the SCSI subsystem, which labels
drive &lt;code&gt;sdX&lt;/code&gt;. Also in contrast to how most physical hard drives are used, we have
not created a boot partition and partitions in the virtual drive, instead
treating the whole device as a partition, and thus lacking the numerical suffix
we would typically see when referring to specific partitions. &lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;
</description>
    </item>
    
  </channel>
</rss>
