* [linux-next:master 11135/15099] drivers/rtc/rtc-m48t59.c:133 m48t59_rtc_set_time() error: calling 'spin_unlock_irqrestore()' with bogus flags
From: kernel test robot @ 2026-06-24 23:10 UTC (permalink / raw)
To: oe-kbuild; +Cc: lkp, Dan Carpenter
BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
TO: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
head: 4e5dfb7c84012007c3c7061126491bbc92d71bf1
commit: e07d10ed0f238d3f4a8276932a36fe1f74775621 [11135/15099] lib/Kconfig.debug: enable CONFIG_PREEMPT_RT for syzbot kernels.
:::::: branch date: 34 hours ago
:::::: commit date: 2 weeks ago
config: x86_64-randconfig-161-20260625 (https://download.01.org/0day-ci/archive/20260625/202606250647.EPF3zhCj-lkp@intel.com/config)
compiler: clang version 22.1.3 (https://github.com/llvm/llvm-project e9846648fd6183ee6d8cbdb4502213fcf902a211)
smatch: v0.5.0-9185-gbcc58b9c
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Reported-by: Dan Carpenter <error27@gmail.com>
| Closes: https://lore.kernel.org/r/202606250647.EPF3zhCj-lkp@intel.com/
New smatch warnings:
drivers/rtc/rtc-m48t59.c:133 m48t59_rtc_set_time() error: calling 'spin_unlock_irqrestore()' with bogus flags
drivers/rtc/rtc-m48t59.c:335 m48t59_nvram_write() error: calling 'spin_unlock_irqrestore()' with bogus flags
drivers/hid/hid-picolcd_core.c:108 picolcd_send_and_wait() error: calling 'spin_unlock_irqrestore()' with bogus flags
drivers/hv/hv_balloon.c:910 handle_pg_range() error: calling 'spin_unlock_irqrestore()' with bogus flags
drivers/hid/hid-picolcd_fb.c:267 picolcd_fb_update() error: calling 'spin_unlock_irqrestore()' with bogus flags
drivers/hwmon/xgene-hwmon.c:437 xgene_hwmon_evt_work() error: calling 'spin_unlock_irqrestore()' with bogus flags
Old smatch warnings:
drivers/hid/hid-picolcd_fb.c:276 picolcd_fb_update() error: calling 'spin_unlock_irqrestore()' with bogus flags
vim +133 drivers/rtc/rtc-m48t59.c
2e774c7caf84455 Mark Zhan 2007-07-17 98
2e774c7caf84455 Mark Zhan 2007-07-17 99 static int m48t59_rtc_set_time(struct device *dev, struct rtc_time *tm)
2e774c7caf84455 Mark Zhan 2007-07-17 100 {
85368bb9de63666 Wolfram Sang 2018-04-19 101 struct m48t59_plat_data *pdata = dev_get_platdata(dev);
85368bb9de63666 Wolfram Sang 2018-04-19 102 struct m48t59_private *m48t59 = dev_get_drvdata(dev);
2e774c7caf84455 Mark Zhan 2007-07-17 103 unsigned long flags;
2e774c7caf84455 Mark Zhan 2007-07-17 104 u8 val = 0;
a06e4a93067cd8f Finn Thain 2024-11-13 105 int year = tm->tm_year - pdata->yy_offset;
2e774c7caf84455 Mark Zhan 2007-07-17 106
2e774c7caf84455 Mark Zhan 2007-07-17 107 dev_dbg(dev, "RTC set time %04d-%02d-%02d %02d/%02d/%02d\n",
12a9ee3cce256ae Krzysztof Helt 2008-10-29 108 year + 1900, tm->tm_mon, tm->tm_mday,
2e774c7caf84455 Mark Zhan 2007-07-17 109 tm->tm_hour, tm->tm_min, tm->tm_sec);
2e774c7caf84455 Mark Zhan 2007-07-17 110
12a9ee3cce256ae Krzysztof Helt 2008-10-29 111 if (year < 0)
12a9ee3cce256ae Krzysztof Helt 2008-10-29 112 return -EINVAL;
12a9ee3cce256ae Krzysztof Helt 2008-10-29 113
2e774c7caf84455 Mark Zhan 2007-07-17 114 spin_lock_irqsave(&m48t59->lock, flags);
2e774c7caf84455 Mark Zhan 2007-07-17 115 /* Issue the WRITE command */
2e774c7caf84455 Mark Zhan 2007-07-17 116 M48T59_SET_BITS(M48T59_CNTL_WRITE, M48T59_CNTL);
2e774c7caf84455 Mark Zhan 2007-07-17 117
fe20ba70abf7d6e Adrian Bunk 2008-10-18 118 M48T59_WRITE((bin2bcd(tm->tm_sec) & 0x7F), M48T59_SEC);
fe20ba70abf7d6e Adrian Bunk 2008-10-18 119 M48T59_WRITE((bin2bcd(tm->tm_min) & 0x7F), M48T59_MIN);
fe20ba70abf7d6e Adrian Bunk 2008-10-18 120 M48T59_WRITE((bin2bcd(tm->tm_hour) & 0x3F), M48T59_HOUR);
fe20ba70abf7d6e Adrian Bunk 2008-10-18 121 M48T59_WRITE((bin2bcd(tm->tm_mday) & 0x3F), M48T59_MDAY);
2e774c7caf84455 Mark Zhan 2007-07-17 122 /* tm_mon is 0-11 */
fe20ba70abf7d6e Adrian Bunk 2008-10-18 123 M48T59_WRITE((bin2bcd(tm->tm_mon + 1) & 0x1F), M48T59_MONTH);
12a9ee3cce256ae Krzysztof Helt 2008-10-29 124 M48T59_WRITE(bin2bcd(year % 100), M48T59_YEAR);
2e774c7caf84455 Mark Zhan 2007-07-17 125
60a06efc56d7d33 Abhishek Tamboli 2024-08-09 126 if (pdata->type == M48T59RTC_TYPE_M48T59 && (year >= 100))
2e774c7caf84455 Mark Zhan 2007-07-17 127 val = (M48T59_WDAY_CEB | M48T59_WDAY_CB);
fe20ba70abf7d6e Adrian Bunk 2008-10-18 128 val |= (bin2bcd(tm->tm_wday) & 0x07);
2e774c7caf84455 Mark Zhan 2007-07-17 129 M48T59_WRITE(val, M48T59_WDAY);
2e774c7caf84455 Mark Zhan 2007-07-17 130
2e774c7caf84455 Mark Zhan 2007-07-17 131 /* Clear the WRITE bit */
2e774c7caf84455 Mark Zhan 2007-07-17 132 M48T59_CLEAR_BITS(M48T59_CNTL_WRITE, M48T59_CNTL);
2e774c7caf84455 Mark Zhan 2007-07-17 @133 spin_unlock_irqrestore(&m48t59->lock, flags);
2e774c7caf84455 Mark Zhan 2007-07-17 134 return 0;
2e774c7caf84455 Mark Zhan 2007-07-17 135 }
2e774c7caf84455 Mark Zhan 2007-07-17 136
:::::: The code at line 133 was first introduced by commit
:::::: 2e774c7caf84455d5e7d492d123bad6f417818b5 rtc: add support for the ST M48T59 RTC
:::::: TO: Mark Zhan <rongkai.zhan@windriver.com>
:::::: CC: Linus Torvalds <torvalds@woody.linux-foundation.org>
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply
* Re: [RFC PATCH v2 2/7] mm, swap: support zswap and zeroswap as vswap backends
From: Nhat Pham @ 2026-06-24 23:08 UTC (permalink / raw)
To: Yosry Ahmed
Cc: akpm, chrisl, kasong, hannes, mhocko, roman.gushchin,
shakeel.butt, david, muchun.song, shikemeng, baoquan.he, baohua,
youngjun.park, chengming.zhou, ljs, liam, vbabka, rppt, surenb,
qi.zheng, axelrasmussen, yuanchu, weixugc, riel, gourry,
haowenchao22, kernel-team, linux-mm, linux-kernel, cgroups
In-Reply-To: <ajnNWRO7apBq2-kQ@google.com>
On Mon, Jun 22, 2026 at 5:16 PM Yosry Ahmed <yosry@kernel.org> wrote:
>
> On Fri, Jun 12, 2026 at 12:37:33PM -0700, Nhat Pham wrote:
> > Build the virtual swap layer on top of the swap-table infrastructure.
> > Virtual swap entries decouple PTE swap entries from physical backing,
> > allowing pages to be compressed by zswap (or detected as zero-filled)
> > without pre-allocating a physical swap slot.
> >
> > This patch only supports zswap and zero-page backends. If zswap_store
> > fails, the page stays dirty in the swap cache (AOP_WRITEPAGE_ACTIVATE)
> > - physical disk backing fallback comes in the next patch. Zswap
> > writeback of vswap-backed entries is also disabled - the shrinker
> > skips when no physical swap pages are available.
> >
> > Suggested-by: Kairui Song <kasong@tencent.com>
> > Signed-off-by: Nhat Pham <nphamcs@gmail.com>
> [..]
> > diff --git a/mm/zswap.c b/mm/zswap.c
> > index 993406074d58..466f8a182716 100644
> > --- a/mm/zswap.c
> > +++ b/mm/zswap.c
> > @@ -38,6 +38,7 @@
> > #include <linux/zsmalloc.h>
> >
> > #include "swap.h"
> > +#include "vswap.h"
> > #include "internal.h"
> >
> > /*********************************
> > @@ -762,7 +763,7 @@ static void zswap_entry_cache_free(struct zswap_entry *entry)
> > * Carries out the common pattern of freeing an entry's zsmalloc allocation,
> > * freeing the entry itself, and decrementing the number of stored pages.
> > */
> > -static void zswap_entry_free(struct zswap_entry *entry)
> > +void zswap_entry_free(struct zswap_entry *entry)
> > {
> > zswap_lru_del(&zswap_list_lru, entry);
> > zs_free(entry->pool->zs_pool, entry->handle);
> > @@ -994,16 +995,21 @@ static int zswap_writeback_entry(struct zswap_entry *entry,
> > struct swap_info_struct *si;
> > int ret = 0;
> >
> > + /* try to allocate swap cache folio */
> > si = get_swap_device(swpentry);
> > if (!si)
> > return -EEXIST;
> >
> > + /*
> > + * Vswap entries have no physical backing - writeback would fail
> > + * and SIGBUS the caller. Bail before we waste a swap-cache folio
> > + * allocation.
> > + */
>
> Seems like this comment belongs in the previous patch, and the other
> comment movement is undoing what last patch did.
Yeah this comment belongs to the first patch. I added it after the
fact but commit to the second patch.
TBH, the first patch kinda not do much. It just declares a new special
struct swap_info_struct, with some helpers and checks, but it's not
hooked to any allocation path. Logically it should be squashed into
this patch, but this patch is already 600 LoC, lol.
>
> > if (si->flags & SWP_VSWAP) {
> > put_swap_device(si);
> > return -EINVAL;
> > }
> >
> > - /* try to allocate swap cache folio */
> > mpol = get_task_policy(current);
> > folio = swap_cache_alloc_folio(swpentry, GFP_KERNEL, BIT(0), NULL, mpol,
> > NO_INTERLEAVE_INDEX);
> > @@ -1416,25 +1422,25 @@ static bool zswap_store_page(struct page *page,
> > if (!zswap_compress(page, entry, pool))
> > goto compress_failed;
> >
> > - old = xa_store(swap_zswap_tree(page_swpentry),
> > - swp_offset(page_swpentry),
> > - entry, GFP_KERNEL);
> > - if (xa_is_err(old)) {
> > - int err = xa_err(old);
> > + if (is_vswap_entry(page_swpentry)) {
> > + vswap_zswap_store(page_swpentry, entry);
> > + } else {
> > + old = xa_store(swap_zswap_tree(page_swpentry),
> > + swp_offset(page_swpentry),
> > + entry, GFP_KERNEL);
> > + if (xa_is_err(old)) {
> > + int err = xa_err(old);
> > +
> > + WARN_ONCE(err != -ENOMEM,
> > + "unexpected xarray error: %d\n", err);
> > + zswap_reject_alloc_fail++;
> > + goto store_failed;
> > + }
> >
> > - WARN_ONCE(err != -ENOMEM, "unexpected xarray error: %d\n", err);
> > - zswap_reject_alloc_fail++;
> > - goto store_failed;
> > + if (old)
> > + zswap_entry_free(old);
> > }
> >
> > - /*
> > - * We may have had an existing entry that became stale when
> > - * the folio was redirtied and now the new version is being
> > - * swapped out. Get rid of the old.
> > - */
> > - if (old)
> > - zswap_entry_free(old);
> > -
> > /*
> > * The entry is successfully compressed and stored in the tree, there is
> > * no further possibility of failure. Grab refs to the pool and objcg,
> > @@ -1487,6 +1493,7 @@ bool zswap_store(struct folio *folio)
> > struct mem_cgroup *memcg = NULL;
> > struct zswap_pool *pool;
> > bool ret = false;
> > + bool partial_store = false;
> > long index;
> >
> > VM_WARN_ON_ONCE(!folio_test_locked(folio));
> > @@ -1524,8 +1531,10 @@ bool zswap_store(struct folio *folio)
> > for (index = 0; index < nr_pages; ++index) {
> > struct page *page = folio_page(folio, index);
> >
> > - if (!zswap_store_page(page, objcg, pool))
> > + if (!zswap_store_page(page, objcg, pool)) {
> > + partial_store = index > 0;
> > goto put_pool;
> > + }
> > }
> >
> > if (objcg)
> > @@ -1548,7 +1557,9 @@ bool zswap_store(struct folio *folio)
> > * offsets corresponding to each page of the folio. Otherwise,
> > * writeback could overwrite the new data in the swapfile.
> > */
> > - if (!ret) {
> > + if (partial_store && is_vswap_entry(swp))
> > + folio_release_vswap_backing(folio);
>
> Hmm the above should also only happen in the !ret case, but that's not
> obvious from the code here. I think all of this should go under if
> (!ret), but maybe reverse the polarity to avoid the indentation?
Yeah that's just me avoiding indentation lol. But yes, it only happens
in !ret case:
>
> if (ret)
> return ret;
>
> if (is_vswap_entry(swp)) {
> if (partial_store)
> folio_release_vswap_backing(folio);
> return ret;
> }
>
> ...
>
> Alternatively you can move the check_old code for xarray into a helper
> and do:
>
> if (!ret) {
> if (is_vswap_entry(swp)) {
> if (partial_store)
> folio_release_vswap_backing(folio);
> } else {
> zswap_free_old_xa_entries(swp, nr_pages)
> }
> }
Yup! I can switch to this if you think it's cleaner.
>
> Also, I think you can probably drop partial_store and check the index
> directly here.
Ah yeah. That's true!
>
> > + else if (!ret && !is_vswap_entry(swp)) {
> > unsigned type = swp_type(swp);
> > pgoff_t offset = swp_offset(swp);
> > struct zswap_entry *entry;
> > @@ -1588,8 +1599,7 @@ bool zswap_store(struct folio *folio)
> > int zswap_load(struct folio *folio)
> > {
> > swp_entry_t swp = folio->swap;
> > - pgoff_t offset = swp_offset(swp);
> > - struct xarray *tree = swap_zswap_tree(swp);
> > + struct swap_info_struct *si = __swap_entry_to_info(swp);
> > struct zswap_entry *entry;
> >
> > VM_WARN_ON_ONCE(!folio_test_locked(folio));
> > @@ -1599,16 +1609,25 @@ int zswap_load(struct folio *folio)
> > return -ENOENT;
> >
> > /*
> > - * Large folios should not be swapped in while zswap is being used, as
> > - * they are not properly handled. Zswap does not properly load large
> > - * folios, and a large folio may only be partially in zswap.
> > + * zswap_load() does not support large folios. For non-vswap
> > + * entries this is unexpected on the swapin path: WARN and
> > + * sigbus. For vswap entries __swap_cache_add_check() has already
> > + * filtered out ZSWAP-backed THPs under the cluster lock, so the
> > + * large folio here is zero- or phys-backed; return -ENOENT to
> > + * fall through to the phys/zero IO path.
>
> Hmm should we start simple and avoid THP swapin for vswap initially?
>
> IIUC, it isn't really vswap specific. Even without vswap, it's possible
> that an entire folio is on-disk, not in zswap, in which case THP swap
> should be allowed.
>
> I assume it's not common for zswap to be enabled and an entire THP worth
> of pages are not in zswap, so maybe we can add this later?
I was thinking of removing it altogether haha. Are we even doing THP
swap in for non-sync IO devices?
if (!folio) {
/* Swapin bypasses readahead for SWP_SYNCHRONOUS_IO devices */
if (data_race(si->flags & SWP_SYNCHRONOUS_IO))
folio = swapin_sync(entry, GFP_HIGHUSER_MOVABLE,
[...]
else
folio = swapin_readahead(entry, GFP_HIGHUSER_MOVABLE, vmf);
So I guess it's primarily zram that does THP swap in here? on
non-SWP_SYNCHRONOUS_IO devices, seems like we only do "THP swapin" if
we catch the page in swap cache (minor page fault). :) Will zram users
like vswap?
OTOH, zswap might be getting THP zswap-in support soon, so it's not
just zram backend that cares about these kinds of check? :)
Or maybe I can keep it, but separate it from this big patch to make it
easier to review :) Lemme play with it.
>
> > */
> > - if (WARN_ON_ONCE(folio_test_large(folio))) {
> > - folio_unlock(folio);
> > - return -EINVAL;
> > + if (folio_test_large(folio)) {
> > + if (WARN_ON_ONCE(!swap_is_vswap(si))) {
> > + folio_unlock(folio);
> > + return -EINVAL;
> > + }
> > + return -ENOENT;
> > }
> >
> > - entry = xa_load(tree, offset);
> > + if (swap_is_vswap(si))
> > + entry = vswap_zswap_load(swp);
> > + else
> > + entry = xa_load(swap_zswap_tree(swp), swp_offset(swp));
> > if (!entry)
> > return -ENOENT;
> >
> > @@ -1623,16 +1642,14 @@ int zswap_load(struct folio *folio)
> > if (entry->objcg)
> > count_objcg_events(entry->objcg, ZSWPIN, 1);
> >
> > - /*
> > - * We are reading into the swapcache, invalidate zswap entry.
> > - * The swapcache is the authoritative owner of the page and
> > - * its mappings, and the pressure that results from having two
> > - * in-memory copies outweighs any benefits of caching the
> > - * compression work.
> > - */
> > folio_mark_dirty(folio);
> > - xa_erase(tree, offset);
> > - zswap_entry_free(entry);
> > +
> > + if (swap_is_vswap(si)) {
> > + folio_release_vswap_backing(folio);
>
> Is there any advantage to calling folio_release_vswap_backing() over
> zswap_entry_free()? Seems like __vswap_release_backing() ends up just
> calling zswap_entry_free() -- and I don't see any vswap-specific state
> being cleaned up.
>
> I wonder if the zswap code should call zswap_entry_free() directly? Same
> goes for the call in zswap_store() above.
Most just not repeating the vtable lookup-and-lock and what not. :)
The pattern is repeated the third time in swapoff when I allow phys
swap to be the backend of vswap in the next patch so I figure probably
should add some helper.
>
> > + } else {
> > + xa_erase(swap_zswap_tree(swp), swp_offset(swp));
> > + zswap_entry_free(entry);
> > + }
> >
> > folio_unlock(folio);
> > return 0;
> > --
> > 2.53.0-Meta
> >
^ permalink raw reply
* Re: [RFC PATCH] mm: Avoiding split large folios if swap has no space
From: Barry Song @ 2026-06-24 23:08 UTC (permalink / raw)
To: David Hildenbrand (Arm)
Cc: akpm, axelrasmussen, baolin.wang, dev.jain, kasong, lance.yang,
liam, linux-kernel, linux-mm, ljs, npache, qi.zheng, ryan.roberts,
shakeel.butt, weixugc, yuanchu, zhaonanzhe, ziy
In-Reply-To: <4aa8350e-712f-4380-b3bf-2ff06cf2a35d@kernel.org>
On Mon, Jun 22, 2026 at 4:58 PM David Hildenbrand (Arm)
<david@kernel.org> wrote:
>
> On 6/20/26 10:10, Barry Song (Xiaomi) wrote:
> > On Fri, Jun 19, 2026 at 10:04 PM David Hildenbrand (Arm) <david@kernel.org> wrote:
> > [...]
> >>> /*
> >>> * The page can not be swapped.
> >>> *
> >>> @@ -1280,6 +1289,8 @@ static unsigned int shrink_folio_list(struct list_head *folio_list,
> >>>
> >>> if (!folio_test_large(folio))
> >>> goto activate_locked_split;
> >>> + if (!__can_reclaim_anon_pages(memcg, sc))
> >>> + goto activate_locked_split;
> >>
> >> Why are we even trying to allocate swap space if we cannot reclaim such pages?
> >> Makes we wonder whether we would want to have that check earlier, before the
> >> folio_alloc_swap().
> >>
> >> Any downsides?
> >
> > I don't think there are any obvious downsides there. One issue is that
> > the memcg may not be passed from reclaim_pages(), so memcg would
> > always be NULL. However, the folio could still belong to a memcg
> > whose swap quota has been exhausted. In that case, my
> > __can_reclaim_anon_pages() will fail when checking whether we can
> > swap out. But switching to folio_memcg() also seems awkward.
> >
> > So I feel Kairui’s suggestion [1] might be the best approach. In
> > folio_alloc_swap(), we return -EAGAIN to tell vmscan.c that
> > we can split the folio and retry the swap-out.
> > only when there are sufficient swap slots and sufficient memcg swap
> > quota do we return -EAGAIN, allowing vmscan to perform a split.
> >
> > diff --git a/mm/swapfile.c b/mm/swapfile.c
> > index 78b49b0658ad..62e2c506ccae 100644
> > --- a/mm/swapfile.c
> > +++ b/mm/swapfile.c
> > @@ -1755,6 +1755,9 @@ int folio_alloc_swap(struct folio *folio)
> > VM_WARN_ON_ONCE(1);
> > return -EINVAL;
> > }
> > +
> > + if (get_nr_swap_pages() < (1 << order))
> > + return -ENOMEM;
>
> I guess we could be clearer with the return value:
>
> -> !get_nr_swap_pages() -> -ENOSPC / -ENOMEM
>
> (no space at all)
>
> -> get_nr_swap_pages() < (1 << order) -> -E2BIG
>
> (there is some space, but not for the full thing)
understood. make sense.
>
> But now I wonder whether we would also want to check "is there any free swap
> space", not just "is there any swap".
I don't quite understand you. get_nr_swap_pages() returns
nr_swap_pages, which increases or decreases as swap is allocated or
freed. I guess it just reflects how many swaps we currently have
available?
>
>
> Essentially, try returning -E2BIG if there is the chance to swap out after
> split, and -ENOSPC / -ENOMEM if a split wouldn't help.
>
> > }
> >
> > again:
> > @@ -1769,11 +1772,13 @@ int folio_alloc_swap(struct folio *folio)
> > }
> >
> > /* Need to call this even if allocation failed, for MEMCG_SWAP_FAIL. */
> > - if (unlikely(mem_cgroup_try_charge_swap(folio)))
> > + if (unlikely(mem_cgroup_try_charge_swap(folio))) {
> > swap_cache_del_folio(folio);
> > + return -ENOMEM;
>
> Here we wouldn't have the information whether we could charge after a split.
>
> So that would require a rework to signal this more cleanly to the caller.
Yep. The tricky part is that mem_cgroup_try_charge_swap() cannot
return how much swap quota is available in the memcg. Do you prefer to
add an output argument to mem_cgroup_try_charge_swap() to expose
that, or should we introduce a separate wrapper such as …
long get_nr_swap_pages_from_folio_memcg(struct folio *folio)
{
long int nr;
memcg = get_memcg_from_folio(folio);
nr = mem_cgroup_get_nr_swap_pages(memcg);
return nr;
}
then in folio_alloc_swap(), if nr < folio_nr_pages() but > 0,
we ask for a split by returning -E2BIG ?
>
> > + }
> >
> > if (unlikely(!folio_test_swapcache(folio)))
> > - return -ENOMEM;
> > + return -EAGAIN;
> >
> > return 0;
> > }
> > diff --git a/mm/vmscan.c b/mm/vmscan.c
> > index 299b5d9e8836..63e8578454ea 100644
> > --- a/mm/vmscan.c
> > +++ b/mm/vmscan.c
> > @@ -1257,6 +1257,8 @@ static unsigned int shrink_folio_list(struct list_head *folio_list,
> > */
> > if (folio_test_anon(folio) && folio_test_swapbacked(folio) &&
> > !folio_test_swapcache(folio)) {
> > + int ret;
> > +
> > if (!(sc->gfp_mask & __GFP_IO))
> > goto keep_locked;
> > if (folio_maybe_dma_pinned(folio))
> > @@ -1275,10 +1277,10 @@ static unsigned int shrink_folio_list(struct list_head *folio_list,
> > split_folio_to_list(folio, folio_list))
> > goto activate_locked;
> > }
> > - if (folio_alloc_swap(folio)) {
> > + if ((ret = folio_alloc_swap(folio))) {
>
> I prefer doing the assignment outside the conditional.
Ok.
>
> > int __maybe_unused order = folio_order(folio);
> >
> > - if (!folio_test_large(folio))
> > + if (!folio_test_large(folio) || ret != -EAGAIN)
> > goto activate_locked_split;
> > /* Fallback to swap normal pages */
> > if (split_folio_to_list(folio, folio_list))
> >
> > What’s your view on this, David?
>
> I guess returning from folio_alloc_swap() whether a split could allow for
> swapout (e.g., -E2BIG) would be reasonable.
>
> To catch all the cases where it makes a difference:
> * No free swap space (split won't work)
> * Some free swap space (split would work)
> * Sufficient free swap space, but fragmented (split would work)
> * No memcg space (split won't work)
> * Some memcg space (split would work)
Right. The memcg part is the tricky one, since we don’t have that
information available.
Best Regards
Barry
^ permalink raw reply
* Re: [PATCH V9 05/17] block/export: track IOThread reference in BlockExport
From: Zhang Chen @ 2026-06-24 23:06 UTC (permalink / raw)
To: Stefan Hajnoczi
Cc: qemu-devel, Dr . David Alan Gilbert, Eric Blake,
Markus Armbruster, Michael S . Tsirkin, Paolo Bonzini, Kevin Wolf,
Jason Wang, Fam Zheng
In-Reply-To: <20260624175143.GD109308@fedora>
On Thu, Jun 25, 2026 at 2:33 AM Stefan Hajnoczi <stefanha@redhat.com> wrote:
>
> On Wed, Jun 24, 2026 at 03:08:39PM +0800, Zhang Chen wrote:
> > Users currently lack visibility into which block exports
> > are utilizing specific IOThreads. This patch integrates IOThread
> > referencing into the BlockExport lifecycle.
> >
> > - Add iothreads array and holder_name to BlockExport struct.
> > - Use iothread_ref_and_get_aio_context during export creation.
> > - Implement proper cleanup in blk_exp_add fail path and blk_exp_delete_bh.
> > - Support both single and multi-iothread export configurations.
> >
> > This ensures IOThread 'holders' status correctly reflects active block
> > exports for better debugging and resource tracking.
> >
> > Signed-off-by: Zhang Chen <zhangckid@gmail.com>
> > ---
> > block/export/export.c | 63 ++++++++++++++++++++++++++++++++++++------
> > include/block/export.h | 6 ++++
> > 2 files changed, 60 insertions(+), 9 deletions(-)
>
> If AI was used to generate this patch series, please see QEMU's AI
> policy:
> https://www.qemu.org/docs/master/devel/code-provenance.html#use-of-ai-generated-content
>
> This feels like AI generated code in that it is verbose and has lots of
> structure (e.g. commit messages that look like an AI summary of the code
> change), but the details are not correct (misleading comments, leaks,
> etc).
>
> I will pause my review at this patch and wait for your response.
I used the AI for parts of commit messages.
Please continue to review code parts and skip the commit message parts,
I will remove all AI-generated commit messages in next version.
Sorry, I just noticed the discussion:
[PATCH v2] docs/devel: relax policy on AI-generated contributions
>
> >
> > diff --git a/block/export/export.c b/block/export/export.c
> > index b733f269f3..b6c07f69b5 100644
> > --- a/block/export/export.c
> > +++ b/block/export/export.c
> > @@ -15,7 +15,6 @@
> >
> > #include "block/block.h"
> > #include "system/block-backend.h"
> > -#include "system/iothread.h"
> > #include "block/export.h"
> > #include "block/fuse.h"
> > #include "block/nbd.h"
> > @@ -85,6 +84,8 @@ BlockExport *blk_exp_add(BlockExportOptions *export, Error **errp)
> > AioContext *ctx;
> > AioContext **multithread_ctxs = NULL;
> > size_t multithread_count = 0;
> > + g_autofree IOThread **local_iothreads = NULL;
> > + const char *holder_name = NULL;
> > uint64_t perm;
> > int ret;
> >
> > @@ -139,7 +140,16 @@ BlockExport *blk_exp_add(BlockExportOptions *export, Error **errp)
> > goto fail;
> > }
> >
> > - new_ctx = iothread_get_aio_context(iothread);
> > + holder_name = bdrv_get_node_name(bs);
> > + IOThreadHolder holder = {
> > + .type = IO_THREAD_HOLDER_KIND_BLOCK_NODE,
>
> This is not a block node, this is a block export (a separate type of
> object). Reporting the export as a node is confusing because users will
> not know which block export id is assigned using this IOThread, they
> will only know the block node (which could be doing other things too).
OK, it looks need to change the type name from:
IO_THREAD_HOLDER_KIND_BLOCK_NODE
to:
IO_THREAD_HOLDER_KIND_BLOCK_EXPORT
>
> > + .u.block_node.node_name = (char *)holder_name,
>
> To remove the suspicious-looking const cast, try:
>
> const IOThreadHolder holder = {
> .type = ...,
> .u.block_node.node_name = holder_name,
> };
OK.
>
> > + };
> > +
> > + new_ctx = iothread_ref_and_get_aio_context(iothread, &holder);
> > + multithread_count = 1;
> > + local_iothreads = g_new0(IOThread *, 1);
> > + local_iothreads[0] = iothread;
> >
> > /* Ignore errors with fixed-iothread=false */
> > set_context_errp = fixed_iothread ? errp : NULL;
> > @@ -163,8 +173,15 @@ BlockExport *blk_exp_add(BlockExportOptions *export, Error **errp)
> > return NULL;
> > }
> >
> > + local_iothreads = g_new0(IOThread *, multithread_count);
> > multithread_ctxs = g_new(AioContext *, multithread_count);
> > i = 0;
> > + holder_name = bdrv_get_node_name(bs);
> > + IOThreadHolder holder = {
> > + .type = IO_THREAD_HOLDER_KIND_BLOCK_NODE,
> > + .u.block_node.node_name = (char *)holder_name,
> > + };
> > +
> > for (strList *e = iothread_list; e; e = e->next) {
> > IOThread *iothread = iothread_by_id(e->value);
> >
> > @@ -172,7 +189,9 @@ BlockExport *blk_exp_add(BlockExportOptions *export, Error **errp)
> > error_setg(errp, "iothread \"%s\" not found", e->value);
> > goto fail;
> > }
> > - multithread_ctxs[i++] = iothread_get_aio_context(iothread);
> > + local_iothreads[i] = iothread;
> > + multithread_ctxs[i++] = iothread_ref_and_get_aio_context(iothread,
> > + &holder);
> > }
> > assert(i == multithread_count);
> > }
> > @@ -225,12 +244,15 @@ BlockExport *blk_exp_add(BlockExportOptions *export, Error **errp)
> > assert(drv->instance_size >= sizeof(BlockExport));
> > exp = g_malloc0(drv->instance_size);
> > *exp = (BlockExport) {
> > - .drv = drv,
> > - .refcount = 1,
> > - .user_owned = true,
> > - .id = g_strdup(export->id),
> > - .ctx = ctx,
> > - .blk = blk,
> > + .drv = drv,
> > + .refcount = 1,
> > + .user_owned = true,
> > + .id = g_strdup(export->id),
> > + .ctx = ctx,
> > + .blk = blk,
> > + .iothreads = g_steal_pointer(&local_iothreads),
> > + .iothread_count = multithread_count,
> > + .iothread_holder_name = g_strdup(holder_name),
> > };
> >
> > ret = drv->create(exp, export, multithread_ctxs, multithread_count, errp);
> > @@ -253,6 +275,18 @@ fail:
> > g_free(exp->id);
> > g_free(exp);
> > }
> > + if (local_iothreads) {
>
> This doesn't handle the drv->create() goto fail code path where
> g_steal_pointer(&local_iothreads) has moved the pointer into exp.
> local_iothreads will be leaked.
>
> iothread_holder_name will also be leaked (it should be handled like
> g_free(exp->id) above).
OK, will fix in next version.
>
> > + IOThreadHolder holder = {
> > + .type = IO_THREAD_HOLDER_KIND_BLOCK_NODE,
> > + .u.block_node.node_name = (char *)holder_name,
> > + };
> > +
> > + for (size_t j = 0; j < multithread_count; j++) {
> > + if (local_iothreads[j]) {
> > + iothread_put_aio_context(local_iothreads[j], &holder);
> > + }
> > + }
> > + }
> > g_free(multithread_ctxs);
> > return NULL;
> > }
> > @@ -269,6 +303,17 @@ static void blk_exp_delete_bh(void *opaque)
> > BlockExport *exp = opaque;
> >
> > assert(exp->refcount == 0);
> > + if (exp->iothreads) {
> > + IOThreadHolder holder = {
> > + .type = IO_THREAD_HOLDER_KIND_BLOCK_NODE,
> > + .u.block_node.node_name = (char *)exp->iothread_holder_name,
> > + };
> > +
> > + for (size_t i = 0; i < exp->iothread_count; i++) {
> > + iothread_put_aio_context(exp->iothreads[i], &holder);
> > + }
> > + g_free(exp->iothreads);
> > + }
>
> iothread_holder_name is leaked.
Will fix in next version.
Thanks
Chen
>
> > QLIST_REMOVE(exp, next);
> > exp->drv->delete(exp);
>
> iothread_put_aio_context() must be moved after ->delete() since exports
> may still need to do some AioContext cleanup (e.g.
> vduse_blk_detach_ctx()).
>
> > blk_set_dev_ops(exp->blk, NULL, NULL);
> > diff --git a/include/block/export.h b/include/block/export.h
> > index ca45da928c..2bb98aae31 100644
> > --- a/include/block/export.h
> > +++ b/include/block/export.h
> > @@ -16,6 +16,7 @@
> >
> > #include "qapi/qapi-types-block-export.h"
> > #include "qemu/queue.h"
> > +#include "system/iothread.h"
> >
> > typedef struct BlockExport BlockExport;
> >
> > @@ -89,6 +90,11 @@ struct BlockExport {
> >
> > /* List entry for block_exports */
> > QLIST_ENTRY(BlockExport) next;
> > +
> > + /* The iothreads list for block_exports */
>
> This comment is confusing: block_export is the global list of
> BlockExports. This iothreads[] array is not for block_exports, it's for
> this specific BlockExport only.
>
> > + IOThread **iothreads;
> > + size_t iothread_count;
> > + char *iothread_holder_name;
> > };
> >
> > BlockExport *blk_exp_add(BlockExportOptions *export, Error **errp);
> > --
> > 2.49.0
> >
^ permalink raw reply
* [PATCH 2/2] app/testpmd: fix runtime config of Rx split
From: Thomas Monjalon @ 2026-06-24 23:03 UTC (permalink / raw)
To: dev; +Cc: Song Jiale, Aman Singh, Luca Vizzarro, Patrick Robb,
Gregory Etelson
In-Reply-To: <20260624230656.2172633-1-thomas@monjalon.net>
When adding selective Rx, it was assumed that the queue configuration
was set when starting testpmd via the command line options.
But it should be possible to configure mempools with --mbuf-size,
start Rx, stop, and configure later a split in the testpmd CLI.
In such a scenario, a regression prevented to start
with more than 1 mempool without configuring a split:
Configuring Port 0 (socket 0)
ETHDEV: No Rx segmentation offload configured
Fail to configure port 0 rx queues
It is fixed by considering having multiple mempools
is not a condition to trigger Rx split.
A test is added in DTS to validate this use case.
Bugzilla ID: 1956
Fixes: 0be0ad196b52 ("app/testpmd: support selective Rx")
Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
---
app/test-pmd/testpmd.c | 3 +--
dts/tests/TestSuite_rx_split.py | 24 ++++++++++++++++++++++++
2 files changed, 25 insertions(+), 2 deletions(-)
diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c
index fcd8a90967..b241a7025b 100644
--- a/app/test-pmd/testpmd.c
+++ b/app/test-pmd/testpmd.c
@@ -2750,8 +2750,7 @@ rx_queue_setup(uint16_t port_id, uint16_t rx_queue_id,
uint32_t prev_hdrs = 0;
int ret;
- if (multi_rx_mempool == 0 &&
- (rx_pkt_nb_segs > 1 || mbuf_data_size_n > 1)) {
+ if (multi_rx_mempool == 0 && rx_pkt_nb_segs > 1) {
unsigned int nb_segs = RTE_MAX(rx_pkt_nb_segs, (uint8_t)mbuf_data_size_n);
/* multi-segment configuration */
diff --git a/dts/tests/TestSuite_rx_split.py b/dts/tests/TestSuite_rx_split.py
index 633ba0bf1e..5117a569e2 100644
--- a/dts/tests/TestSuite_rx_split.py
+++ b/dts/tests/TestSuite_rx_split.py
@@ -210,6 +210,30 @@ def expected(packet: bytes) -> bytes:
self._start_and_verify(testpmd, expected)
+ @func_test
+ def selective_rx_runtime_config(self) -> None:
+ """Configure selective Rx at runtime after initial startup.
+
+ Steps:
+ Start testpmd with two mbuf-size pools but no rxpkts/rxhdrs.
+ Stop ports, configure buffer split offload, set rxpkts, restart ports.
+ Send an Ether/IP/payload packet.
+
+ Verify:
+ Initial startup succeeds without error.
+ Received packet has Ether + IP headers only after runtime config.
+ Port stats show expected rx_packets and rx_bytes.
+ """
+ with self._create_testpmd(
+ mbuf_size=[512, 0],
+ ) as testpmd:
+ self._start_and_verify(testpmd)
+ testpmd.stop()
+ testpmd.stop_all_ports()
+ testpmd.send_command("port config 0 rx_offload buffer_split on")
+ testpmd.send_command(f"set rxpkts {ETHER_IP_HDR_LEN},0")
+ self._start_and_verify(testpmd, ETHER_IP_HDR_LEN)
+
@func_test
def selective_rx_no_offload(self) -> None:
"""Configure selective Rx with buffer split disabled.
--
2.54.0
^ permalink raw reply related
* [PATCH 1/2] dts: simplify packet check in Rx split
From: Thomas Monjalon @ 2026-06-24 23:03 UTC (permalink / raw)
To: dev; +Cc: Song Jiale, Luca Vizzarro, Patrick Robb
In-Reply-To: <20260624230656.2172633-1-thomas@monjalon.net>
Add shortcuts to the function verifying a received packet
match its expected content.
Previous version worked with a callback function defining
the expected received packet based on the sent packet.
This new version allows to pass a header length,
so only the header is expected, or directly the expected bytes.
If the parameter is None, the full packet is expected.
This is shorter than defining a callback in many cases.
Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
---
dts/tests/TestSuite_rx_split.py | 35 +++++++++++++++++----------------
1 file changed, 18 insertions(+), 17 deletions(-)
diff --git a/dts/tests/TestSuite_rx_split.py b/dts/tests/TestSuite_rx_split.py
index 5f5a2e6187..633ba0bf1e 100644
--- a/dts/tests/TestSuite_rx_split.py
+++ b/dts/tests/TestSuite_rx_split.py
@@ -56,11 +56,24 @@ def _build_packet(self) -> Packet:
packet = Ether() / IP() / Raw(load=PAYLOAD)
return adjust_addresses([packet])[0]
- def _start_and_verify(self, testpmd: TestPmd, expected: Callable[[bytes], bytes]) -> None:
+ def _start_and_verify(
+ self,
+ testpmd: TestPmd,
+ expected: Callable[[bytes], bytes] | bytes | int | None = None,
+ ) -> None:
"""Start testpmd, send the default packet, and verify received bytes."""
testpmd.start()
packet = self._build_packet()
- self._send_and_verify(testpmd, packet, expected(bytes(packet)))
+ raw = bytes(packet)
+ if expected is None:
+ raw_expected = raw
+ elif isinstance(expected, int):
+ raw_expected = raw[:expected]
+ elif isinstance(expected, bytes):
+ raw_expected = expected
+ else:
+ raw_expected = expected(raw)
+ self._send_and_verify(testpmd, packet, raw_expected)
def _send_and_verify(self, testpmd: TestPmd, tg_packet: Packet, expected: bytes) -> None:
"""Clear stats, send a packet, and verify received content and stats.
@@ -128,11 +141,7 @@ def selective_rx_headers(self) -> None:
rx_segments_length=[ETHER_IP_HDR_LEN, 0],
mbuf_size=[256, 0],
) as testpmd:
-
- def expected(packet: bytes) -> bytes:
- return packet[:ETHER_IP_HDR_LEN]
-
- self._start_and_verify(testpmd, expected)
+ self._start_and_verify(testpmd, ETHER_IP_HDR_LEN)
@func_test
def selective_rx_headers_discard_length(self) -> None:
@@ -151,11 +160,7 @@ def selective_rx_headers_discard_length(self) -> None:
rx_segments_length=[ETHER_IP_HDR_LEN, len(PAYLOAD)],
mbuf_size=[256, 0],
) as testpmd:
-
- def expected(packet: bytes) -> bytes:
- return packet[:ETHER_IP_HDR_LEN]
-
- self._start_and_verify(testpmd, expected)
+ self._start_and_verify(testpmd, ETHER_IP_HDR_LEN)
@func_test
def selective_rx_payload_only(self) -> None:
@@ -173,11 +178,7 @@ def selective_rx_payload_only(self) -> None:
rx_segments_length=[ETHER_IP_HDR_LEN, len(PAYLOAD)],
mbuf_size=[0, 512],
) as testpmd:
-
- def expected(_: bytes) -> bytes:
- return PAYLOAD
-
- self._start_and_verify(testpmd, expected)
+ self._start_and_verify(testpmd, PAYLOAD)
@func_test
def selective_rx_two_segments(self) -> None:
--
2.54.0
^ permalink raw reply related
* [PATCH 0/2] fix Rx split in testpmd
From: Thomas Monjalon @ 2026-06-24 23:03 UTC (permalink / raw)
To: dev; +Cc: Song Jiale
Adding selective Rx in DPDK 26.07-rc1
introduced a regression when configuring Rx split
at runtime with mempools defined on start.
While fixing it, a test is added in DTS,
and a refactoring in DTS is added as first patch
to make the second change smaller.
Thomas Monjalon (2):
dts: simplify packet check in Rx split
app/testpmd: fix runtime config of Rx split
app/test-pmd/testpmd.c | 3 +-
dts/tests/TestSuite_rx_split.py | 59 +++++++++++++++++++++++----------
2 files changed, 43 insertions(+), 19 deletions(-)
--
2.54.0
^ permalink raw reply
* Re: [RFC] Null Namespaces
From: Andy Lutomirski @ 2026-06-24 23:06 UTC (permalink / raw)
To: John Ericson
Cc: Li Chen, Cong Wang, Christian Brauner, linux-arch, linux-kernel,
linux-fsdevel, linux-api, Arnd Bergmann, Andy Lutomirski,
Thomas Gleixner, Ingo Molnar, Borislav Petkov, Dave Hansen,
H. Peter Anvin, Jan Kara, Jonathan Corbet, Shuah Khan,
Alexander Viro, Kees Cook, Sergei Zimmerman, Farid Zakaria
In-Reply-To: <a49ce818-f38d-41b0-bbf7-80b8aad998b1@app.fastmail.com>
On Wed, Jun 24, 2026 at 3:52 PM John Ericson <mail@johnericson.me> wrote:
>
> Hello, I am hoping to discuss an idea I've had for a while, that I am
> calling "null namespaces" that has become more relevant with some recent
> other discussions. First I'll discuss null namespaces in general terms,
> and then I'll link those recent discussions and relate null namespaces
> to them.
>
> ### Null namespaces
>
> The essence of null namespaces is trying to give processes as little
> ambient authority as possible, so they are lighter weight and allowed to
> do even less than fully unshared processes today.
>
> Namespaces as they exist today are frequently described as an isolation
> mechanism, but I think this is the conflation of two different things.
> *Removing* a new process from its parent's namespaces unquestionably is
> increasing isolation --- no disagreement there. But putting the process
> in new namespaces is something else; I would call it supporting
> "delusions of grandeur" of that process. For example, namespaces allow a
> process to do mounts, have `CAP_SYS_ADMIN`, create network interfaces,
> look up other processes by PID, etc.
>
> Conceptually, to remove a process from one ambient authority scope (the
> very name "namespaces" indicates they are about ambient authority)
> should not require putting it in some ambient authority scope. Just
> because, for example, the process cannot see one mount tree, doesn't
> mean it needs to see another.
I think I like this, but some comments:
>
> Here's what I am thinking would happen concretely:
>
> First, the simpler cases:
>
> #### Null mount namespace
>
> - requires:
>
> - null root file system: absolute paths don't work.
>
> - null current working directory: relative paths with traditional,
> non-`*at` system calls (and `*at` ones using `AT_FDCWD`) don't work.
It's perfectly valid to cd to a directory that does not belong to
one's namespace. We have fchdir. What's wrong with letting it
continue working?
Regardless of that, the current directory either needs to be a
directory or to be nothing at all, and if we support the latter, we
need to figure out what /proc will show.
> #### Null user namespace
A user namespace is kind of about how *non-current* uids and gids work
for the process and how it perceives its own uid and gid and not so
much about what uid and gid it has when accessing outside resources.
So...
>
> - Process has no user or group ids
What does that mean? What does ps show?
Maybe the way to go is to implement the ones that have clearer
semantics and to defer the others.
^ permalink raw reply
* Re: [PATCH-next v5 6/6] cgroup/cpuset: Support multiple source/destination cpusets for cpuset_*attach()
From: Waiman Long @ 2026-06-24 23:06 UTC (permalink / raw)
To: Michal Koutný
Cc: Tejun Heo, Johannes Weiner, Peter Zijlstra, cgroups, linux-kernel,
Aaron Tomlin, Guopeng Zhang, Ridong Chen
In-Reply-To: <ajutWBoJqkhktkvX@localhost.localdomain>
On 6/24/26 11:45 AM, Michal Koutný wrote:
> Hello Waiman.
>
> On Mon, Jun 01, 2026 at 10:32:03PM -0400, Waiman Long <longman@redhat.com> wrote:
>> This problem is less an issue when enabling the cpuset controller as all
>> the newly created child cpusets will have exactly the same set of CPUs
>> and memory nodes except when deadline tasks are involved in migration
>> as the deadline task accounting data can be off.
>>
>> It can be more problematic when the cpuset controller is disabled as
>> their set of CPUs and memory nodes may differ from their parent or with
>> the moving of multi-threaded process from different threaded cgroups.
> When I generalize that it can be an issue for any threaded controller
> that somehow relies on the _difference_ between old and new thread
> membership.
>
> So I checked some: pids and perf_events look alright (no
> diff-dependency) but I noticed the very same issue is tackled in
> sched_change_group/scx_cgroup_move_task and that there is a member
> inside task_struct allocated for this state tracking already:
> task_struct::scx::cgrp_moving_from
>
>> Fix that by tracking the set of source (old) and destination cpusets
>> in singly linked lists and iterating them all to properly update the
>> internal data. Also keep the current cs and oldcs variables up-to-date
>> with the css and task iterators.
> So there would be more than a single use for something conceptually
> like:
>
> diff --git a/include/linux/sched.h b/include/linux/sched.h
> index 004e6d56a499a..740c02f220c75 100644
> --- a/include/linux/sched.h
> +++ b/include/linux/sched.h
> @@ -1326,6 +1326,9 @@ struct task_struct {
> #ifdef CONFIG_PREEMPT_RT
> struct llist_node cg_dead_lnode;
> #endif /* CONFIG_PREEMPT_RT */
> +#ifdef CONFIG_CGROUPS_MOVING_FROM
> + struct cgroup *cgrp_moving_from;
> +#endif
> #endif /* CONFIG_CGROUPS */
> #ifdef CONFIG_X86_CPU_RESCTRL
> u32 closid;
> diff --git a/include/linux/sched/ext.h b/include/linux/sched/ext.h
> index 1a3af2ea2a794..5b63afe83f333 100644
> --- a/include/linux/sched/ext.h
> +++ b/include/linux/sched/ext.h
> @@ -240,9 +240,6 @@ struct sched_ext_entity {
> bool disallow; /* reject switching into SCX */
>
> /* cold fields */
> -#ifdef CONFIG_EXT_GROUP_SCHED
> - struct cgroup *cgrp_moving_from;
> -#endif
> struct list_head tasks_node;
> };
>
> diff --git a/init/Kconfig b/init/Kconfig
> index 2937c4d308aec..d7e7d4477f862 100644
> --- a/init/Kconfig
> +++ b/init/Kconfig
> @@ -1186,6 +1186,7 @@ config EXT_GROUP_SCHED
> depends on SCHED_CLASS_EXT && CGROUP_SCHED
> select GROUP_SCHED_WEIGHT
> select GROUP_SCHED_BANDWIDTH
> + select CGROUPS_MOVING_FROM
> default y
>
> endif #CGROUP_SCHED
> @@ -1288,6 +1289,7 @@ config CPUSETS
> depends on SMP
> select UNION_FIND
> select CPU_ISOLATION
> + select CGROUPS_MOVING_FROM
> help
> This option will let you create and manage CPUSETs which
> allow dynamically partitioning a system into sets of CPUs and
>
> I think this could simplify the before-after state tracking generally,
> WDYT?
I had actually introduced a new task_struct field in an early version to
track the old cpuset to handle memory migration. However, Chen Ridong
had shown me that we may not really need such granular detail. So I drop
it in the newer versions. Also sharing a common field between cpuset and
sched_ext can introduce complication as we have to make sure that we
won't step into each other.
Thank for the suggestion anyway and I will reconsider it in case it is
found that we really need such information to do the right thing.
Cheers,
Longman
^ permalink raw reply
* Re: [PATCH 2/3] dt-bindings: hwmon: pmbus: Support for onsemi's FD5121
From: Guenter Roeck @ 2026-06-24 23:05 UTC (permalink / raw)
To: Selvamani Rajagopal, Conor Dooley
Cc: Jonathan Corbet, Shuah Khan, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, linux-hwmon@vger.kernel.org,
linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org,
devicetree@vger.kernel.org
In-Reply-To: <CYYPR02MB9828EECB3F6AFDD2A7BD3E9B83ED2@CYYPR02MB9828.namprd02.prod.outlook.com>
On 6/24/26 15:36, Selvamani Rajagopal wrote:
>> -----Original Message-----
>> From: Conor Dooley <conor@kernel.org>
>> Subject: Re: [PATCH 2/3] dt-bindings: hwmon: pmbus: Support for onsemi's FD5121
>>
>>
>> My point is that what's actually being controlled is missing. Maybe it
>> is obvious to you, but it is not to me. Your nodename in your example is
>
>
> You are right. This chip may not be a "controller" in the traditional sense as it doesn't control anything.
> We can change node naming to sensor or regulator so that it aligns with the convention.
>
One of the problems here is that the chip datasheet is not public,
so we can not verify what this actually is. The only available
public document appears to be the "onsemi FD512x Ax Digital Controller
User Manual" which describes the chip as follows.
"The FD512x Digital Controller is a programmable device designed
for machine vendors to configure their equipment at the factory."
That really does not explain anything at all, and actually looks like
an AI generated summary with the AI not understanding what it is talking
about. According to the onsemi web page, the chip does not exist,
and it appears that it is not available to buy from any distributors
either.
Guenter
>
>>> + fd5121@50 {
>> which doesn't comply with node naming requirements and I wanted to come
>> up with a suggestion for what it should be.
>> I am assuming that its power or voltage that you're controlling so
>> either it should be hwmon@ or regulator@.
>>
>
^ permalink raw reply
* Re: [PATCH v8 23/46] KVM: TDX: Make source page optional for KVM_TDX_INIT_MEM_REGION
From: Ackerley Tng @ 2026-06-24 23:00 UTC (permalink / raw)
To: Sean Christopherson, Yan Zhao
Cc: aik, andrew.jones, binbin.wu, brauner, chao.p.peng, david,
jmattson, jthoughton, michael.roth, oupton, pankaj.gupta, qperret,
rick.p.edgecombe, rientjes, shivankg, steven.price, tabba, willy,
wyihan, forkloop, pratyush, suzuki.poulose, aneesh.kumar, liam,
Paolo Bonzini, Thomas Gleixner, Ingo Molnar, Borislav Petkov,
Dave Hansen, x86, H. Peter Anvin, Steven Rostedt,
Masami Hiramatsu, Mathieu Desnoyers, Jonathan Corbet, Shuah Khan,
Shuah Khan, Vishal Annapurve, Andrew Morton, Chris Li,
Kairui Song, Kemeng Shi, Nhat Pham, Barry Song, Axel Rasmussen,
Yuanchu Xie, Wei Xu, Youngjun Park, Qi Zheng, Shakeel Butt,
Kiryl Shutsemau, Baoquan He, Jason Gunthorpe, Vlastimil Babka,
kvm, linux-kernel, linux-trace-kernel, linux-doc, linux-kselftest,
linux-mm, linux-coco
In-Reply-To: <ajxasFBzp_9KnQLq@google.com>
Sean Christopherson <seanjc@google.com> writes:
> On Tue, Jun 23, 2026, Yan Zhao wrote:
>> On Tue, Jun 23, 2026 at 01:16:14PM +0800, Yan Zhao wrote:
>> > On Mon, Jun 22, 2026 at 06:22:45PM -0700, Sean Christopherson wrote:
>> > > On Mon, Jun 22, 2026, Yan Zhao wrote:
>> > > > On Thu, Jun 18, 2026 at 05:32:00PM -0700, Ackerley Tng via B4 Relay wrote:
>> > > > > diff --git a/arch/x86/kvm/vmx/tdx.c b/arch/x86/kvm/vmx/tdx.c
>> > > > > index ffe9d0db58c59..56d10333c61a7 100644
>> > > > > --- a/arch/x86/kvm/vmx/tdx.c
>> > > > > +++ b/arch/x86/kvm/vmx/tdx.c
>> > > > > @@ -3198,8 +3198,12 @@ static int tdx_gmem_post_populate(struct kvm *kvm, gfn_t gfn, kvm_pfn_t pfn,
>> > > > > if (KVM_BUG_ON(kvm_tdx->page_add_src, kvm))
>> > > > > return -EIO;
>> > > > >
>> > > > > - if (!src_page)
>> > > > > - return -EOPNOTSUPP;
>> > > > > + if (!src_page) {
>> > > > > + if (!gmem_in_place_conversion)
>> > > > When userspace turns on gmem_in_place_conversion while creating guest_memfd
>> > > > without the MMAP flag, the absence of src_page should still be treated as an
>> > > > error.
>> > >
>> > > Why MMAP?
>> > Hmm, I was showing a scenario that in-place conversion couldn't occur.
>> > I didn't mean that with the MMAP flag, mmap() and user write must occur.
>> >
>> > > Shouldn't this be a general "if (!src_page && !up-to-date)"? Just
>> > > because userspace _can_ mmap() the memory doesn't mean userspace _has_ mmap()'d
>> > > and written memory. And when write() lands, MMAP wouldn't be necessary to
>> > > initialize the memory.
>> > Do you mean using up-to-date flag as below?
>
> Yes? I didn't actually look at the implementation details.
>
>> > if (!src_page) {
>> > src_page = pfn_to_page(pfn);
>> > if (!folio_test_uptodate(page_folio(src_page)))
>> > return -EOPNOTSUPP;
>> > }
Yan is right that with the earlier patch "Zero page while getting pfn",
folio_test_uptodate() here will always return true.
Actually, this is an alternative fix for the issue Sashiko pointed out
on v7 where userspace can do a populate() (either TDX or SNP) without
first allocating the page, with src_address == NULL, and leak
uninitialized memory into the guest.
Advantage of using the uptodate check in populate: if the host never
allocates the page, populate doesn't incur zeroing before writing the
page anyway in populate().
Disadvantage: Both TDX and SNP will have to implement this uptodate
check. guest_memfd can't check centrally because for SNP, for a
PAGE_TYPE_ZERO, !src_page should be allowed with a !uptodate page since
firmware will zero and there's no leakage of uninitialized host memory?
>>
>> Another concern with this fix is that:
>> commit "KVM: guest_memfd: Zero page while getting pfn" [1] always marks the
>> folio uptodate before reaching post_populate().
>>
>> [1] https://lore.kernel.org/all/20260618-gmem-inplace-conversion-v8-21-9d2959357853@google.com/
>>
>> > One concern is that TDX now does not much care about the up-to-date flag since
>> > TDX doesn't rely on the flag to clear pages on conversions.
>> > I'm not sure if the flag can be reliably checked in this case. e.g.,
>> > now the whole folio is marked up-to-date even if only part of it is faulted by
>> > user access.
>> > Ensuring that the up-to-date flag works correctly with huge page support seems
>> > to have more effort than introducing a dedicated flag for TDX.
>> >
>> > > > Additionally, to properly enable in-place copying for the TDX initial memory
>> > > > region, userspace must not only specify source_addr to NULL, but also follow
>> > > > a specific sequence (where steps 1/2/3/7 are required only for in-place copy):
>> > > > 1. create guest_memfd with MMAP flag
>> > > > 2. mmap the guest_memfd.
>> > > > 3. convert the initial memory range to shared.
>> > > > 4. copy initial content to the source page.
>> > > > 5. convert the initial memory range to private
>> > > > 6. invoke ioctl KVM_TDX_INIT_MEM_REGION.
>> > > > 7. do not unmap the source backend.
>> > > >
>> > > > So, would it be reasonable to introduce a dedicated flag that allows userspace
>> > > > to explicitly opt into the in-place copy functionality? e.g.,
>> > >
>> > > Why? It's userspace's responsibility to get the above right. If userspace fails
>> > > to provide a src_page when it doesn't want in-place copy, that's a userspace bug.
Yan, is your concern that userspace forgot to update the code and
forgets to provide a src_page, and if we keep the "Zero page while
getting pfn" patch, ends up with the guest silently having a zero page?
I think that would be found quite early in userspace VMM testing...
>> > I mean if userspace specifies a NULL source_addr by mistake, it's better for
>> > kernel to detect this mistake, similar to how it validates whether source_addr
>> > is PAGE_ALIGNED.
>
> The alignment case is different. If userspace provides an unaligned value, KVM
> *can't* do what userspace is asking because hardware and thus KVM only supports
> converting on page boundaries.
>
> For a NULL source, KVM can still do what userspace is asking. Rejecting userspace's
> request would then be making assumptions about what userspace wants.
>
Also, +1 on this, what if userspace, knowing that pages are zeroed on
allocation, actually wants to rely on that to get a zero page in the guest?
>> > Since userspace already needs to perform additional steps to enable in-place
>> > copy, specifying a dedicated flag to indicate that the NULL source_addr is
>> > intentional seems like a reasonable burden.
>
> I don't see how it adds any value. I wouldn't be at all surprised if most VMMs
> just wen up with code that does:
>
> if (in-place) {
> src = NULL;
> flags |= KVM_TDX_IN_PLACE_COPY_INITIAL_MEMORY_REGION;
> }
^ permalink raw reply
* ✓ CI.KUnit: success for drm/xe: Wait for HW clearance before issuing the next TLB inval.
From: Patchwork @ 2026-06-24 23:00 UTC (permalink / raw)
To: fei.yang; +Cc: intel-xe
In-Reply-To: <20260624225105.2355641-1-fei.yang@intel.com>
== Series Details ==
Series: drm/xe: Wait for HW clearance before issuing the next TLB inval.
URL : https://patchwork.freedesktop.org/series/169123/
State : success
== Summary ==
+ trap cleanup EXIT
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/xe/.kunitconfig
[22:59:08] Configuring KUnit Kernel ...
Generating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[22:59:13] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[22:59:44] Starting KUnit Kernel (1/1)...
[22:59:44] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[22:59:44] ================== guc_buf (11 subtests) ===================
[22:59:44] [PASSED] test_smallest
[22:59:44] [PASSED] test_largest
[22:59:44] [PASSED] test_granular
[22:59:44] [PASSED] test_unique
[22:59:44] [PASSED] test_overlap
[22:59:44] [PASSED] test_reusable
[22:59:44] [PASSED] test_too_big
[22:59:44] [PASSED] test_flush
[22:59:44] [PASSED] test_lookup
[22:59:44] [PASSED] test_data
[22:59:44] [PASSED] test_class
[22:59:44] ===================== [PASSED] guc_buf =====================
[22:59:44] =================== guc_dbm (7 subtests) ===================
[22:59:44] [PASSED] test_empty
[22:59:44] [PASSED] test_default
[22:59:44] ======================== test_size ========================
[22:59:44] [PASSED] 4
[22:59:44] [PASSED] 8
[22:59:44] [PASSED] 32
[22:59:44] [PASSED] 256
[22:59:44] ==================== [PASSED] test_size ====================
[22:59:44] ======================= test_reuse ========================
[22:59:44] [PASSED] 4
[22:59:44] [PASSED] 8
[22:59:44] [PASSED] 32
[22:59:44] [PASSED] 256
[22:59:44] =================== [PASSED] test_reuse ====================
[22:59:44] =================== test_range_overlap ====================
[22:59:44] [PASSED] 4
[22:59:44] [PASSED] 8
[22:59:44] [PASSED] 32
[22:59:44] [PASSED] 256
[22:59:44] =============== [PASSED] test_range_overlap ================
[22:59:44] =================== test_range_compact ====================
[22:59:44] [PASSED] 4
[22:59:44] [PASSED] 8
[22:59:44] [PASSED] 32
[22:59:44] [PASSED] 256
[22:59:44] =============== [PASSED] test_range_compact ================
[22:59:44] ==================== test_range_spare =====================
[22:59:44] [PASSED] 4
[22:59:44] [PASSED] 8
[22:59:44] [PASSED] 32
[22:59:44] [PASSED] 256
[22:59:44] ================ [PASSED] test_range_spare =================
[22:59:44] ===================== [PASSED] guc_dbm =====================
[22:59:44] =================== guc_idm (6 subtests) ===================
[22:59:44] [PASSED] bad_init
[22:59:44] [PASSED] no_init
[22:59:44] [PASSED] init_fini
[22:59:44] [PASSED] check_used
[22:59:44] [PASSED] check_quota
[22:59:44] [PASSED] check_all
[22:59:44] ===================== [PASSED] guc_idm =====================
[22:59:44] ================== no_relay (3 subtests) ===================
[22:59:44] [PASSED] xe_drops_guc2pf_if_not_ready
[22:59:44] [PASSED] xe_drops_guc2vf_if_not_ready
[22:59:44] [PASSED] xe_rejects_send_if_not_ready
[22:59:44] ==================== [PASSED] no_relay =====================
[22:59:44] ================== pf_relay (14 subtests) ==================
[22:59:44] [PASSED] pf_rejects_guc2pf_too_short
[22:59:44] [PASSED] pf_rejects_guc2pf_too_long
[22:59:44] [PASSED] pf_rejects_guc2pf_no_payload
[22:59:44] [PASSED] pf_fails_no_payload
[22:59:44] [PASSED] pf_fails_bad_origin
[22:59:44] [PASSED] pf_fails_bad_type
[22:59:44] [PASSED] pf_txn_reports_error
[22:59:44] [PASSED] pf_txn_sends_pf2guc
[22:59:44] [PASSED] pf_sends_pf2guc
[22:59:44] [SKIPPED] pf_loopback_nop
[22:59:44] [SKIPPED] pf_loopback_echo
[22:59:45] [SKIPPED] pf_loopback_fail
[22:59:45] [SKIPPED] pf_loopback_busy
[22:59:45] [SKIPPED] pf_loopback_retry
[22:59:45] ==================== [PASSED] pf_relay =====================
[22:59:45] ================== vf_relay (3 subtests) ===================
[22:59:45] [PASSED] vf_rejects_guc2vf_too_short
[22:59:45] [PASSED] vf_rejects_guc2vf_too_long
[22:59:45] [PASSED] vf_rejects_guc2vf_no_payload
[22:59:45] ==================== [PASSED] vf_relay =====================
[22:59:45] ================ pf_gt_config (9 subtests) =================
[22:59:45] [PASSED] fair_contexts_1vf
[22:59:45] [PASSED] fair_doorbells_1vf
[22:59:45] [PASSED] fair_ggtt_1vf
[22:59:45] ====================== fair_vram_1vf ======================
[22:59:45] [PASSED] 3.50 GiB
[22:59:45] [PASSED] 11.5 GiB
[22:59:45] [PASSED] 15.5 GiB
[22:59:45] [PASSED] 31.5 GiB
[22:59:45] [PASSED] 63.5 GiB
[22:59:45] [PASSED] 1.91 GiB
[22:59:45] ================== [PASSED] fair_vram_1vf ==================
[22:59:45] ================ fair_vram_1vf_admin_only =================
[22:59:45] [PASSED] 3.50 GiB
[22:59:45] [PASSED] 11.5 GiB
[22:59:45] [PASSED] 15.5 GiB
[22:59:45] [PASSED] 31.5 GiB
[22:59:45] [PASSED] 63.5 GiB
[22:59:45] [PASSED] 1.91 GiB
[22:59:45] ============ [PASSED] fair_vram_1vf_admin_only =============
[22:59:45] ====================== fair_contexts ======================
[22:59:45] [PASSED] 1 VF
[22:59:45] [PASSED] 2 VFs
[22:59:45] [PASSED] 3 VFs
[22:59:45] [PASSED] 4 VFs
[22:59:45] [PASSED] 5 VFs
[22:59:45] [PASSED] 6 VFs
[22:59:45] [PASSED] 7 VFs
[22:59:45] [PASSED] 8 VFs
[22:59:45] [PASSED] 9 VFs
[22:59:45] [PASSED] 10 VFs
[22:59:45] [PASSED] 11 VFs
[22:59:45] [PASSED] 12 VFs
[22:59:45] [PASSED] 13 VFs
[22:59:45] [PASSED] 14 VFs
[22:59:45] [PASSED] 15 VFs
[22:59:45] [PASSED] 16 VFs
[22:59:45] [PASSED] 17 VFs
[22:59:45] [PASSED] 18 VFs
[22:59:45] [PASSED] 19 VFs
[22:59:45] [PASSED] 20 VFs
[22:59:45] [PASSED] 21 VFs
[22:59:45] [PASSED] 22 VFs
[22:59:45] [PASSED] 23 VFs
[22:59:45] [PASSED] 24 VFs
[22:59:45] [PASSED] 25 VFs
[22:59:45] [PASSED] 26 VFs
[22:59:45] [PASSED] 27 VFs
[22:59:45] [PASSED] 28 VFs
[22:59:45] [PASSED] 29 VFs
[22:59:45] [PASSED] 30 VFs
[22:59:45] [PASSED] 31 VFs
[22:59:45] [PASSED] 32 VFs
[22:59:45] [PASSED] 33 VFs
[22:59:45] [PASSED] 34 VFs
[22:59:45] [PASSED] 35 VFs
[22:59:45] [PASSED] 36 VFs
[22:59:45] [PASSED] 37 VFs
[22:59:45] [PASSED] 38 VFs
[22:59:45] [PASSED] 39 VFs
[22:59:45] [PASSED] 40 VFs
[22:59:45] [PASSED] 41 VFs
[22:59:45] [PASSED] 42 VFs
[22:59:45] [PASSED] 43 VFs
[22:59:45] [PASSED] 44 VFs
[22:59:45] [PASSED] 45 VFs
[22:59:45] [PASSED] 46 VFs
[22:59:45] [PASSED] 47 VFs
[22:59:45] [PASSED] 48 VFs
[22:59:45] [PASSED] 49 VFs
[22:59:45] [PASSED] 50 VFs
[22:59:45] [PASSED] 51 VFs
[22:59:45] [PASSED] 52 VFs
[22:59:45] [PASSED] 53 VFs
[22:59:45] [PASSED] 54 VFs
[22:59:45] [PASSED] 55 VFs
[22:59:45] [PASSED] 56 VFs
[22:59:45] [PASSED] 57 VFs
[22:59:45] [PASSED] 58 VFs
[22:59:45] [PASSED] 59 VFs
[22:59:45] [PASSED] 60 VFs
[22:59:45] [PASSED] 61 VFs
[22:59:45] [PASSED] 62 VFs
[22:59:45] [PASSED] 63 VFs
[22:59:45] ================== [PASSED] fair_contexts ==================
[22:59:45] ===================== fair_doorbells ======================
[22:59:45] [PASSED] 1 VF
[22:59:45] [PASSED] 2 VFs
[22:59:45] [PASSED] 3 VFs
[22:59:45] [PASSED] 4 VFs
[22:59:45] [PASSED] 5 VFs
[22:59:45] [PASSED] 6 VFs
[22:59:45] [PASSED] 7 VFs
[22:59:45] [PASSED] 8 VFs
[22:59:45] [PASSED] 9 VFs
[22:59:45] [PASSED] 10 VFs
[22:59:45] [PASSED] 11 VFs
[22:59:45] [PASSED] 12 VFs
[22:59:45] [PASSED] 13 VFs
[22:59:45] [PASSED] 14 VFs
[22:59:45] [PASSED] 15 VFs
[22:59:45] [PASSED] 16 VFs
[22:59:45] [PASSED] 17 VFs
[22:59:45] [PASSED] 18 VFs
[22:59:45] [PASSED] 19 VFs
[22:59:45] [PASSED] 20 VFs
[22:59:45] [PASSED] 21 VFs
[22:59:45] [PASSED] 22 VFs
[22:59:45] [PASSED] 23 VFs
[22:59:45] [PASSED] 24 VFs
[22:59:45] [PASSED] 25 VFs
[22:59:45] [PASSED] 26 VFs
[22:59:45] [PASSED] 27 VFs
[22:59:45] [PASSED] 28 VFs
[22:59:45] [PASSED] 29 VFs
[22:59:45] [PASSED] 30 VFs
[22:59:45] [PASSED] 31 VFs
[22:59:45] [PASSED] 32 VFs
[22:59:45] [PASSED] 33 VFs
[22:59:45] [PASSED] 34 VFs
[22:59:45] [PASSED] 35 VFs
[22:59:45] [PASSED] 36 VFs
[22:59:45] [PASSED] 37 VFs
[22:59:45] [PASSED] 38 VFs
[22:59:45] [PASSED] 39 VFs
[22:59:45] [PASSED] 40 VFs
[22:59:45] [PASSED] 41 VFs
[22:59:45] [PASSED] 42 VFs
[22:59:45] [PASSED] 43 VFs
[22:59:45] [PASSED] 44 VFs
[22:59:45] [PASSED] 45 VFs
[22:59:45] [PASSED] 46 VFs
[22:59:45] [PASSED] 47 VFs
[22:59:45] [PASSED] 48 VFs
[22:59:45] [PASSED] 49 VFs
[22:59:45] [PASSED] 50 VFs
[22:59:45] [PASSED] 51 VFs
[22:59:45] [PASSED] 52 VFs
[22:59:45] [PASSED] 53 VFs
[22:59:45] [PASSED] 54 VFs
[22:59:45] [PASSED] 55 VFs
[22:59:45] [PASSED] 56 VFs
[22:59:45] [PASSED] 57 VFs
[22:59:45] [PASSED] 58 VFs
[22:59:45] [PASSED] 59 VFs
[22:59:45] [PASSED] 60 VFs
[22:59:45] [PASSED] 61 VFs
[22:59:45] [PASSED] 62 VFs
[22:59:45] [PASSED] 63 VFs
[22:59:45] ================= [PASSED] fair_doorbells ==================
[22:59:45] ======================== fair_ggtt ========================
[22:59:45] [PASSED] 1 VF
[22:59:45] [PASSED] 2 VFs
[22:59:45] [PASSED] 3 VFs
[22:59:45] [PASSED] 4 VFs
[22:59:45] [PASSED] 5 VFs
[22:59:45] [PASSED] 6 VFs
[22:59:45] [PASSED] 7 VFs
[22:59:45] [PASSED] 8 VFs
[22:59:45] [PASSED] 9 VFs
[22:59:45] [PASSED] 10 VFs
[22:59:45] [PASSED] 11 VFs
[22:59:45] [PASSED] 12 VFs
[22:59:45] [PASSED] 13 VFs
[22:59:45] [PASSED] 14 VFs
[22:59:45] [PASSED] 15 VFs
[22:59:45] [PASSED] 16 VFs
[22:59:45] [PASSED] 17 VFs
[22:59:45] [PASSED] 18 VFs
[22:59:45] [PASSED] 19 VFs
[22:59:45] [PASSED] 20 VFs
[22:59:45] [PASSED] 21 VFs
[22:59:45] [PASSED] 22 VFs
[22:59:45] [PASSED] 23 VFs
[22:59:45] [PASSED] 24 VFs
[22:59:45] [PASSED] 25 VFs
[22:59:45] [PASSED] 26 VFs
[22:59:45] [PASSED] 27 VFs
[22:59:45] [PASSED] 28 VFs
[22:59:45] [PASSED] 29 VFs
[22:59:45] [PASSED] 30 VFs
[22:59:45] [PASSED] 31 VFs
[22:59:45] [PASSED] 32 VFs
[22:59:45] [PASSED] 33 VFs
[22:59:45] [PASSED] 34 VFs
[22:59:45] [PASSED] 35 VFs
[22:59:45] [PASSED] 36 VFs
[22:59:45] [PASSED] 37 VFs
[22:59:45] [PASSED] 38 VFs
[22:59:45] [PASSED] 39 VFs
[22:59:45] [PASSED] 40 VFs
[22:59:45] [PASSED] 41 VFs
[22:59:45] [PASSED] 42 VFs
[22:59:45] [PASSED] 43 VFs
[22:59:45] [PASSED] 44 VFs
[22:59:45] [PASSED] 45 VFs
[22:59:45] [PASSED] 46 VFs
[22:59:45] [PASSED] 47 VFs
[22:59:45] [PASSED] 48 VFs
[22:59:45] [PASSED] 49 VFs
[22:59:45] [PASSED] 50 VFs
[22:59:45] [PASSED] 51 VFs
[22:59:45] [PASSED] 52 VFs
[22:59:45] [PASSED] 53 VFs
[22:59:45] [PASSED] 54 VFs
[22:59:45] [PASSED] 55 VFs
[22:59:45] [PASSED] 56 VFs
[22:59:45] [PASSED] 57 VFs
[22:59:45] [PASSED] 58 VFs
[22:59:45] [PASSED] 59 VFs
[22:59:45] [PASSED] 60 VFs
[22:59:45] [PASSED] 61 VFs
[22:59:45] [PASSED] 62 VFs
[22:59:45] [PASSED] 63 VFs
[22:59:45] ==================== [PASSED] fair_ggtt ====================
[22:59:45] ======================== fair_vram ========================
[22:59:45] [PASSED] 1 VF
[22:59:45] [PASSED] 2 VFs
[22:59:45] [PASSED] 3 VFs
[22:59:45] [PASSED] 4 VFs
[22:59:45] [PASSED] 5 VFs
[22:59:45] [PASSED] 6 VFs
[22:59:45] [PASSED] 7 VFs
[22:59:45] [PASSED] 8 VFs
[22:59:45] [PASSED] 9 VFs
[22:59:45] [PASSED] 10 VFs
[22:59:45] [PASSED] 11 VFs
[22:59:45] [PASSED] 12 VFs
[22:59:45] [PASSED] 13 VFs
[22:59:45] [PASSED] 14 VFs
[22:59:45] [PASSED] 15 VFs
[22:59:45] [PASSED] 16 VFs
[22:59:45] [PASSED] 17 VFs
[22:59:45] [PASSED] 18 VFs
[22:59:45] [PASSED] 19 VFs
[22:59:45] [PASSED] 20 VFs
[22:59:45] [PASSED] 21 VFs
[22:59:45] [PASSED] 22 VFs
[22:59:45] [PASSED] 23 VFs
[22:59:45] [PASSED] 24 VFs
[22:59:45] [PASSED] 25 VFs
[22:59:45] [PASSED] 26 VFs
[22:59:45] [PASSED] 27 VFs
[22:59:45] [PASSED] 28 VFs
[22:59:45] [PASSED] 29 VFs
[22:59:45] [PASSED] 30 VFs
[22:59:45] [PASSED] 31 VFs
[22:59:45] [PASSED] 32 VFs
[22:59:45] [PASSED] 33 VFs
[22:59:45] [PASSED] 34 VFs
[22:59:45] [PASSED] 35 VFs
[22:59:45] [PASSED] 36 VFs
[22:59:45] [PASSED] 37 VFs
[22:59:45] [PASSED] 38 VFs
[22:59:45] [PASSED] 39 VFs
[22:59:45] [PASSED] 40 VFs
[22:59:45] [PASSED] 41 VFs
[22:59:45] [PASSED] 42 VFs
[22:59:45] [PASSED] 43 VFs
[22:59:45] [PASSED] 44 VFs
[22:59:45] [PASSED] 45 VFs
[22:59:45] [PASSED] 46 VFs
[22:59:45] [PASSED] 47 VFs
[22:59:45] [PASSED] 48 VFs
[22:59:45] [PASSED] 49 VFs
[22:59:45] [PASSED] 50 VFs
[22:59:45] [PASSED] 51 VFs
[22:59:45] [PASSED] 52 VFs
[22:59:45] [PASSED] 53 VFs
[22:59:45] [PASSED] 54 VFs
[22:59:45] [PASSED] 55 VFs
[22:59:45] [PASSED] 56 VFs
[22:59:45] [PASSED] 57 VFs
[22:59:45] [PASSED] 58 VFs
[22:59:45] [PASSED] 59 VFs
[22:59:45] [PASSED] 60 VFs
[22:59:45] [PASSED] 61 VFs
[22:59:45] [PASSED] 62 VFs
[22:59:45] [PASSED] 63 VFs
[22:59:45] ==================== [PASSED] fair_vram ====================
[22:59:45] ================== [PASSED] pf_gt_config ===================
[22:59:45] ===================== lmtt (1 subtest) =====================
[22:59:45] ======================== test_ops =========================
[22:59:45] [PASSED] 2-level
[22:59:45] [PASSED] multi-level
[22:59:45] ==================== [PASSED] test_ops =====================
[22:59:45] ====================== [PASSED] lmtt =======================
[22:59:45] ================= pf_service (11 subtests) =================
[22:59:45] [PASSED] pf_negotiate_any
[22:59:45] [PASSED] pf_negotiate_base_match
[22:59:45] [PASSED] pf_negotiate_base_newer
[22:59:45] [PASSED] pf_negotiate_base_next
[22:59:45] [SKIPPED] pf_negotiate_base_older
[22:59:45] [PASSED] pf_negotiate_base_prev
[22:59:45] [PASSED] pf_negotiate_latest_match
[22:59:45] [PASSED] pf_negotiate_latest_newer
[22:59:45] [PASSED] pf_negotiate_latest_next
[22:59:45] [SKIPPED] pf_negotiate_latest_older
[22:59:45] [SKIPPED] pf_negotiate_latest_prev
[22:59:45] =================== [PASSED] pf_service ====================
[22:59:45] ================= xe_guc_g2g (2 subtests) ==================
[22:59:45] ============== xe_live_guc_g2g_kunit_default ==============
[22:59:45] ========= [SKIPPED] xe_live_guc_g2g_kunit_default ==========
[22:59:45] ============== xe_live_guc_g2g_kunit_allmem ===============
[22:59:45] ========== [SKIPPED] xe_live_guc_g2g_kunit_allmem ==========
[22:59:45] =================== [SKIPPED] xe_guc_g2g ===================
[22:59:45] =================== xe_mocs (2 subtests) ===================
[22:59:45] ================ xe_live_mocs_kernel_kunit ================
[22:59:45] =========== [SKIPPED] xe_live_mocs_kernel_kunit ============
[22:59:45] ================ xe_live_mocs_reset_kunit =================
[22:59:45] ============ [SKIPPED] xe_live_mocs_reset_kunit ============
[22:59:45] ==================== [SKIPPED] xe_mocs =====================
[22:59:45] ================= xe_migrate (2 subtests) ==================
[22:59:45] ================= xe_migrate_sanity_kunit =================
[22:59:45] ============ [SKIPPED] xe_migrate_sanity_kunit =============
[22:59:45] ================== xe_validate_ccs_kunit ==================
[22:59:45] ============= [SKIPPED] xe_validate_ccs_kunit ==============
[22:59:45] =================== [SKIPPED] xe_migrate ===================
[22:59:45] ================== xe_dma_buf (1 subtest) ==================
[22:59:45] ==================== xe_dma_buf_kunit =====================
[22:59:45] ================ [SKIPPED] xe_dma_buf_kunit ================
[22:59:45] =================== [SKIPPED] xe_dma_buf ===================
[22:59:45] ================= xe_bo_shrink (1 subtest) =================
[22:59:45] =================== xe_bo_shrink_kunit ====================
[22:59:45] =============== [SKIPPED] xe_bo_shrink_kunit ===============
[22:59:45] ================== [SKIPPED] xe_bo_shrink ==================
[22:59:45] ==================== xe_bo (2 subtests) ====================
[22:59:45] ================== xe_ccs_migrate_kunit ===================
[22:59:45] ============== [SKIPPED] xe_ccs_migrate_kunit ==============
[22:59:45] ==================== xe_bo_evict_kunit ====================
[22:59:45] =============== [SKIPPED] xe_bo_evict_kunit ================
[22:59:45] ===================== [SKIPPED] xe_bo ======================
[22:59:45] ==================== args (13 subtests) ====================
[22:59:45] [PASSED] count_args_test
[22:59:45] [PASSED] call_args_example
[22:59:45] [PASSED] call_args_test
[22:59:45] [PASSED] drop_first_arg_example
[22:59:45] [PASSED] drop_first_arg_test
[22:59:45] [PASSED] first_arg_example
[22:59:45] [PASSED] first_arg_test
[22:59:45] [PASSED] last_arg_example
[22:59:45] [PASSED] last_arg_test
[22:59:45] [PASSED] pick_arg_example
[22:59:45] [PASSED] if_args_example
[22:59:45] [PASSED] if_args_test
[22:59:45] [PASSED] sep_comma_example
[22:59:45] ====================== [PASSED] args =======================
[22:59:45] =================== xe_pci (3 subtests) ====================
[22:59:45] ==================== check_graphics_ip ====================
[22:59:45] [PASSED] 12.00 Xe_LP
[22:59:45] [PASSED] 12.10 Xe_LP+
[22:59:45] [PASSED] 12.55 Xe_HPG
[22:59:45] [PASSED] 12.60 Xe_HPC
[22:59:45] [PASSED] 12.70 Xe_LPG
[22:59:45] [PASSED] 12.71 Xe_LPG
[22:59:45] [PASSED] 12.74 Xe_LPG+
[22:59:45] [PASSED] 20.01 Xe2_HPG
[22:59:45] [PASSED] 20.02 Xe2_HPG
[22:59:45] [PASSED] 20.04 Xe2_LPG
[22:59:45] [PASSED] 30.00 Xe3_LPG
[22:59:45] [PASSED] 30.01 Xe3_LPG
[22:59:45] [PASSED] 30.03 Xe3_LPG
[22:59:45] [PASSED] 30.04 Xe3_LPG
[22:59:45] [PASSED] 30.05 Xe3_LPG
[22:59:45] [PASSED] 35.10 Xe3p_LPG
[22:59:45] [PASSED] 35.11 Xe3p_XPC
[22:59:45] ================ [PASSED] check_graphics_ip ================
[22:59:45] ===================== check_media_ip ======================
[22:59:45] [PASSED] 12.00 Xe_M
[22:59:45] [PASSED] 12.55 Xe_HPM
[22:59:45] [PASSED] 13.00 Xe_LPM+
[22:59:45] [PASSED] 13.01 Xe2_HPM
[22:59:45] [PASSED] 20.00 Xe2_LPM
[22:59:45] [PASSED] 30.00 Xe3_LPM
[22:59:45] [PASSED] 30.02 Xe3_LPM
[22:59:45] [PASSED] 35.00 Xe3p_LPM
[22:59:45] [PASSED] 35.03 Xe3p_HPM
[22:59:45] ================= [PASSED] check_media_ip ==================
[22:59:45] =================== check_platform_desc ===================
[22:59:45] [PASSED] 0x9A60 (TIGERLAKE)
[22:59:45] [PASSED] 0x9A68 (TIGERLAKE)
[22:59:45] [PASSED] 0x9A70 (TIGERLAKE)
[22:59:45] [PASSED] 0x9A40 (TIGERLAKE)
[22:59:45] [PASSED] 0x9A49 (TIGERLAKE)
[22:59:45] [PASSED] 0x9A59 (TIGERLAKE)
[22:59:45] [PASSED] 0x9A78 (TIGERLAKE)
[22:59:45] [PASSED] 0x9AC0 (TIGERLAKE)
[22:59:45] [PASSED] 0x9AC9 (TIGERLAKE)
[22:59:45] [PASSED] 0x9AD9 (TIGERLAKE)
[22:59:45] [PASSED] 0x9AF8 (TIGERLAKE)
[22:59:45] [PASSED] 0x4C80 (ROCKETLAKE)
[22:59:45] [PASSED] 0x4C8A (ROCKETLAKE)
[22:59:45] [PASSED] 0x4C8B (ROCKETLAKE)
[22:59:45] [PASSED] 0x4C8C (ROCKETLAKE)
[22:59:45] [PASSED] 0x4C90 (ROCKETLAKE)
[22:59:45] [PASSED] 0x4C9A (ROCKETLAKE)
[22:59:45] [PASSED] 0x4680 (ALDERLAKE_S)
[22:59:45] [PASSED] 0x4682 (ALDERLAKE_S)
[22:59:45] [PASSED] 0x4688 (ALDERLAKE_S)
[22:59:45] [PASSED] 0x468A (ALDERLAKE_S)
[22:59:45] [PASSED] 0x468B (ALDERLAKE_S)
[22:59:45] [PASSED] 0x4690 (ALDERLAKE_S)
[22:59:45] [PASSED] 0x4692 (ALDERLAKE_S)
[22:59:45] [PASSED] 0x4693 (ALDERLAKE_S)
[22:59:45] [PASSED] 0x46A0 (ALDERLAKE_P)
[22:59:45] [PASSED] 0x46A1 (ALDERLAKE_P)
[22:59:45] [PASSED] 0x46A2 (ALDERLAKE_P)
[22:59:45] [PASSED] 0x46A3 (ALDERLAKE_P)
[22:59:45] [PASSED] 0x46A6 (ALDERLAKE_P)
[22:59:45] [PASSED] 0x46A8 (ALDERLAKE_P)
[22:59:45] [PASSED] 0x46AA (ALDERLAKE_P)
[22:59:45] [PASSED] 0x462A (ALDERLAKE_P)
[22:59:45] [PASSED] 0x4626 (ALDERLAKE_P)
[22:59:45] [PASSED] 0x4628 (ALDERLAKE_P)
[22:59:45] [PASSED] 0x46B0 (ALDERLAKE_P)
[22:59:45] [PASSED] 0x46B1 (ALDERLAKE_P)
[22:59:45] [PASSED] 0x46B2 (ALDERLAKE_P)
[22:59:45] [PASSED] 0x46B3 (ALDERLAKE_P)
[22:59:45] [PASSED] 0x46C0 (ALDERLAKE_P)
[22:59:45] [PASSED] 0x46C1 (ALDERLAKE_P)
[22:59:45] [PASSED] 0x46C2 (ALDERLAKE_P)
[22:59:45] [PASSED] 0x46C3 (ALDERLAKE_P)
[22:59:45] [PASSED] 0x46D0 (ALDERLAKE_N)
[22:59:45] [PASSED] 0x46D1 (ALDERLAKE_N)
[22:59:45] [PASSED] 0x46D2 (ALDERLAKE_N)
[22:59:45] [PASSED] 0x46D3 (ALDERLAKE_N)
[22:59:45] [PASSED] 0x46D4 (ALDERLAKE_N)
[22:59:45] [PASSED] 0xA721 (ALDERLAKE_P)
[22:59:45] [PASSED] 0xA7A1 (ALDERLAKE_P)
[22:59:45] [PASSED] 0xA7A9 (ALDERLAKE_P)
[22:59:45] [PASSED] 0xA7AC (ALDERLAKE_P)
[22:59:45] [PASSED] 0xA7AD (ALDERLAKE_P)
[22:59:45] [PASSED] 0xA720 (ALDERLAKE_P)
[22:59:45] [PASSED] 0xA7A0 (ALDERLAKE_P)
[22:59:45] [PASSED] 0xA7A8 (ALDERLAKE_P)
[22:59:45] [PASSED] 0xA7AA (ALDERLAKE_P)
[22:59:45] [PASSED] 0xA7AB (ALDERLAKE_P)
[22:59:45] [PASSED] 0xA780 (ALDERLAKE_S)
[22:59:45] [PASSED] 0xA781 (ALDERLAKE_S)
[22:59:45] [PASSED] 0xA782 (ALDERLAKE_S)
[22:59:45] [PASSED] 0xA783 (ALDERLAKE_S)
[22:59:45] [PASSED] 0xA788 (ALDERLAKE_S)
[22:59:45] [PASSED] 0xA789 (ALDERLAKE_S)
[22:59:45] [PASSED] 0xA78A (ALDERLAKE_S)
[22:59:45] [PASSED] 0xA78B (ALDERLAKE_S)
[22:59:45] [PASSED] 0x4905 (DG1)
[22:59:45] [PASSED] 0x4906 (DG1)
[22:59:45] [PASSED] 0x4907 (DG1)
[22:59:45] [PASSED] 0x4908 (DG1)
[22:59:45] [PASSED] 0x4909 (DG1)
[22:59:45] [PASSED] 0x56C0 (DG2)
[22:59:45] [PASSED] 0x56C2 (DG2)
[22:59:45] [PASSED] 0x56C1 (DG2)
[22:59:45] [PASSED] 0x7D51 (METEORLAKE)
[22:59:45] [PASSED] 0x7DD1 (METEORLAKE)
[22:59:45] [PASSED] 0x7D41 (METEORLAKE)
[22:59:45] [PASSED] 0x7D67 (METEORLAKE)
[22:59:45] [PASSED] 0xB640 (METEORLAKE)
[22:59:45] [PASSED] 0x56A0 (DG2)
[22:59:45] [PASSED] 0x56A1 (DG2)
[22:59:45] [PASSED] 0x56A2 (DG2)
[22:59:45] [PASSED] 0x56BE (DG2)
[22:59:45] [PASSED] 0x56BF (DG2)
[22:59:45] [PASSED] 0x5690 (DG2)
[22:59:45] [PASSED] 0x5691 (DG2)
[22:59:45] [PASSED] 0x5692 (DG2)
[22:59:45] [PASSED] 0x56A5 (DG2)
[22:59:45] [PASSED] 0x56A6 (DG2)
[22:59:45] [PASSED] 0x56B0 (DG2)
[22:59:45] [PASSED] 0x56B1 (DG2)
[22:59:45] [PASSED] 0x56BA (DG2)
[22:59:45] [PASSED] 0x56BB (DG2)
[22:59:45] [PASSED] 0x56BC (DG2)
[22:59:45] [PASSED] 0x56BD (DG2)
[22:59:45] [PASSED] 0x5693 (DG2)
[22:59:45] [PASSED] 0x5694 (DG2)
[22:59:45] [PASSED] 0x5695 (DG2)
[22:59:45] [PASSED] 0x56A3 (DG2)
[22:59:45] [PASSED] 0x56A4 (DG2)
[22:59:45] [PASSED] 0x56B2 (DG2)
[22:59:45] [PASSED] 0x56B3 (DG2)
[22:59:45] [PASSED] 0x5696 (DG2)
[22:59:45] [PASSED] 0x5697 (DG2)
[22:59:45] [PASSED] 0xB69 (PVC)
[22:59:45] [PASSED] 0xB6E (PVC)
[22:59:45] [PASSED] 0xBD4 (PVC)
[22:59:45] [PASSED] 0xBD5 (PVC)
[22:59:45] [PASSED] 0xBD6 (PVC)
[22:59:45] [PASSED] 0xBD7 (PVC)
[22:59:45] [PASSED] 0xBD8 (PVC)
[22:59:45] [PASSED] 0xBD9 (PVC)
[22:59:45] [PASSED] 0xBDA (PVC)
[22:59:45] [PASSED] 0xBDB (PVC)
[22:59:45] [PASSED] 0xBE0 (PVC)
[22:59:45] [PASSED] 0xBE1 (PVC)
[22:59:45] [PASSED] 0xBE5 (PVC)
[22:59:45] [PASSED] 0x7D40 (METEORLAKE)
[22:59:45] [PASSED] 0x7D45 (METEORLAKE)
[22:59:45] [PASSED] 0x7D55 (METEORLAKE)
[22:59:45] [PASSED] 0x7D60 (METEORLAKE)
[22:59:45] [PASSED] 0x7DD5 (METEORLAKE)
[22:59:45] [PASSED] 0x6420 (LUNARLAKE)
[22:59:45] [PASSED] 0x64A0 (LUNARLAKE)
[22:59:45] [PASSED] 0x64B0 (LUNARLAKE)
[22:59:45] [PASSED] 0xE202 (BATTLEMAGE)
[22:59:45] [PASSED] 0xE209 (BATTLEMAGE)
[22:59:45] [PASSED] 0xE20B (BATTLEMAGE)
[22:59:45] [PASSED] 0xE20C (BATTLEMAGE)
[22:59:45] [PASSED] 0xE20D (BATTLEMAGE)
[22:59:45] [PASSED] 0xE210 (BATTLEMAGE)
[22:59:45] [PASSED] 0xE211 (BATTLEMAGE)
[22:59:45] [PASSED] 0xE212 (BATTLEMAGE)
[22:59:45] [PASSED] 0xE216 (BATTLEMAGE)
[22:59:45] [PASSED] 0xE220 (BATTLEMAGE)
[22:59:45] [PASSED] 0xE221 (BATTLEMAGE)
[22:59:45] [PASSED] 0xE222 (BATTLEMAGE)
[22:59:45] [PASSED] 0xE223 (BATTLEMAGE)
[22:59:45] [PASSED] 0xB080 (PANTHERLAKE)
[22:59:45] [PASSED] 0xB081 (PANTHERLAKE)
[22:59:45] [PASSED] 0xB082 (PANTHERLAKE)
[22:59:45] [PASSED] 0xB083 (PANTHERLAKE)
[22:59:45] [PASSED] 0xB084 (PANTHERLAKE)
[22:59:45] [PASSED] 0xB085 (PANTHERLAKE)
[22:59:45] [PASSED] 0xB086 (PANTHERLAKE)
[22:59:45] [PASSED] 0xB087 (PANTHERLAKE)
[22:59:45] [PASSED] 0xB08F (PANTHERLAKE)
[22:59:45] [PASSED] 0xB090 (PANTHERLAKE)
[22:59:45] [PASSED] 0xB0A0 (PANTHERLAKE)
[22:59:45] [PASSED] 0xB0B0 (PANTHERLAKE)
[22:59:45] [PASSED] 0xFD80 (PANTHERLAKE)
[22:59:45] [PASSED] 0xFD81 (PANTHERLAKE)
[22:59:45] [PASSED] 0xD740 (NOVALAKE_S)
[22:59:45] [PASSED] 0xD741 (NOVALAKE_S)
[22:59:45] [PASSED] 0xD742 (NOVALAKE_S)
[22:59:45] [PASSED] 0xD743 (NOVALAKE_S)
[22:59:45] [PASSED] 0xD745 (NOVALAKE_S)
[22:59:45] [PASSED] 0xD74A (NOVALAKE_S)
[22:59:45] [PASSED] 0xD74B (NOVALAKE_S)
[22:59:45] [PASSED] 0x674C (CRESCENTISLAND)
[22:59:45] [PASSED] 0x674D (CRESCENTISLAND)
[22:59:45] [PASSED] 0x674E (CRESCENTISLAND)
[22:59:45] [PASSED] 0x674F (CRESCENTISLAND)
[22:59:45] [PASSED] 0x6750 (CRESCENTISLAND)
[22:59:45] [PASSED] 0xD750 (NOVALAKE_P)
[22:59:45] [PASSED] 0xD751 (NOVALAKE_P)
[22:59:45] [PASSED] 0xD752 (NOVALAKE_P)
[22:59:45] [PASSED] 0xD753 (NOVALAKE_P)
[22:59:45] [PASSED] 0xD754 (NOVALAKE_P)
[22:59:45] [PASSED] 0xD755 (NOVALAKE_P)
[22:59:45] [PASSED] 0xD756 (NOVALAKE_P)
[22:59:45] [PASSED] 0xD757 (NOVALAKE_P)
[22:59:45] [PASSED] 0xD75F (NOVALAKE_P)
[22:59:45] =============== [PASSED] check_platform_desc ===============
[22:59:45] ===================== [PASSED] xe_pci ======================
[22:59:45] ============= xe_rtp_tables_test (4 subtests) ==============
[22:59:45] ================== xe_rtp_table_gt_test ===================
[22:59:45] [PASSED] gt_was/14011060649
[22:59:45] [PASSED] gt_was/14011059788
[22:59:45] [PASSED] gt_was/14015795083
[22:59:45] [PASSED] gt_was/16021867713
[22:59:45] [PASSED] gt_was/14019449301
[22:59:45] [PASSED] gt_was/16028005424
[22:59:45] [PASSED] gt_was/14026578760
[22:59:45] [PASSED] gt_was/1409420604
[22:59:45] [PASSED] gt_was/1408615072
[22:59:45] [PASSED] gt_was/22010523718
[22:59:45] [PASSED] gt_was/14011006942
[22:59:45] [PASSED] gt_was/14014830051
[22:59:45] [PASSED] gt_was/18018781329
[22:59:45] [PASSED] gt_was/1509235366
[22:59:45] [PASSED] gt_was/18018781329
[22:59:45] [PASSED] gt_was/16016694945
[22:59:45] [PASSED] gt_was/14018575942
[22:59:45] [PASSED] gt_was/22016670082
[22:59:45] [PASSED] gt_was/22016670082
[22:59:45] [PASSED] gt_was/14017421178
[22:59:45] [PASSED] gt_was/16025250150
[22:59:45] [PASSED] gt_was/14021871409
[22:59:45] [PASSED] gt_was/16021865536
[22:59:45] [PASSED] gt_was/14021486841
[22:59:45] [PASSED] gt_was/14025160223
[22:59:45] [PASSED] gt_was/14026144927, 16029437861, 14026127056
[22:59:45] [PASSED] gt_was/14025635424
[22:59:45] [PASSED] gt_was/16028005424
[22:59:45] ============== [PASSED] xe_rtp_table_gt_test ===============
[22:59:45] ================== xe_rtp_table_gt_test ===================
[22:59:45] [PASSED] gt_tunings/Tuning: Blend Fill Caching Optimization Disable
[22:59:45] [PASSED] gt_tunings/Tuning: 32B Access Enable
[22:59:45] [PASSED] gt_tunings/Tuning: L3 cache
[22:59:45] [PASSED] gt_tunings/Tuning: L3 cache - media
[22:59:45] [PASSED] gt_tunings/Tuning: Compression Overfetch
[22:59:45] [PASSED] gt_tunings/Tuning: Compression Overfetch - media
[22:59:45] [PASSED] gt_tunings/Tuning: Enable compressible partial write overfetch in L3
[22:59:45] [PASSED] gt_tunings/Tuning: Enable compressible partial write overfetch in L3 - media
[22:59:45] [PASSED] gt_tunings/Tuning: L2 Overfetch Compressible Only
[22:59:45] [PASSED] gt_tunings/Tuning: L2 Overfetch Compressible Only - media
[22:59:45] [PASSED] gt_tunings/Tuning: Stateless compression control
[22:59:45] [PASSED] gt_tunings/Tuning: Stateless compression control - media
[22:59:45] [PASSED] gt_tunings/Tuning: L3 RW flush all Cache
[22:59:45] [PASSED] gt_tunings/Tuning: L3 RW flush all cache - media
[22:59:45] [PASSED] gt_tunings/Tuning: Set STLB Bank Hash Mode to 4KB
[22:59:45] ============== [PASSED] xe_rtp_table_gt_test ===============
[22:59:45] ================== xe_rtp_table_oob_test ==================
[22:59:45] [PASSED] oob_was/1607983814
[22:59:45] [PASSED] oob_was/16010904313
[22:59:45] [PASSED] oob_was/18022495364
[22:59:45] [PASSED] oob_was/22012773006
[22:59:45] [PASSED] oob_was/14014475959
[22:59:45] [PASSED] oob_was/22011391025
[22:59:45] [PASSED] oob_was/22012727170
[22:59:45] [PASSED] oob_was/22012727685
[22:59:45] [PASSED] oob_was/22016596838
[22:59:45] [PASSED] oob_was/18020744125
[22:59:45] [PASSED] oob_was/1409600907
[22:59:45] [PASSED] oob_was/22014953428
[22:59:45] [PASSED] oob_was/16017236439
[22:59:45] [PASSED] oob_was/14019821291
[22:59:45] [PASSED] oob_was/14015076503
[22:59:45] [PASSED] oob_was/14018913170
[22:59:45] [PASSED] oob_was/14018094691
[22:59:45] [PASSED] oob_was/18024947630
[22:59:45] [PASSED] oob_was/16022287689
[22:59:45] [PASSED] oob_was/13011645652
[22:59:45] [PASSED] oob_was/14022293748
[22:59:45] [PASSED] oob_was/22019794406
[22:59:45] [PASSED] oob_was/22019338487
[22:59:45] [PASSED] oob_was/16023588340
[22:59:45] [PASSED] oob_was/14019789679
[22:59:45] [PASSED] oob_was/14022866841
[22:59:45] [PASSED] oob_was/16021333562
[22:59:45] [PASSED] oob_was/14016712196
[22:59:45] [PASSED] oob_was/14015568240
[22:59:45] [PASSED] oob_was/18013179988
[22:59:45] [PASSED] oob_was/1508761755
[22:59:45] [PASSED] oob_was/16023105232
[22:59:45] [PASSED] oob_was/16026508708
[22:59:45] [PASSED] oob_was/14020001231
[22:59:45] [PASSED] oob_was/16023683509
[22:59:45] [PASSED] oob_was/14025515070
[22:59:45] [PASSED] oob_was/15015404425_disable
[22:59:45] [PASSED] oob_was/16026007364
[22:59:45] [PASSED] oob_was/14020316580
[22:59:45] [PASSED] oob_was/14025883347
[22:59:45] [PASSED] oob_was/16029380221
[22:59:45] ============== [PASSED] xe_rtp_table_oob_test ==============
[22:59:45] ================ xe_rtp_table_dev_oob_test ================
[22:59:45] [PASSED] device_oob_was/22010954014
[22:59:45] [PASSED] device_oob_was/15015404425
[22:59:45] [PASSED] device_oob_was/22019338487_display
[22:59:45] [PASSED] device_oob_was/14022085890
[22:59:45] [PASSED] device_oob_was/14026539277
[22:59:45] [PASSED] device_oob_was/14026633728
[22:59:45] [PASSED] device_oob_was/14026746987
[22:59:45] [PASSED] device_oob_was/14026779378
[22:59:45] ============ [PASSED] xe_rtp_table_dev_oob_test ============
[22:59:45] =============== [PASSED] xe_rtp_tables_test ================
[22:59:45] =================== xe_rtp (3 subtests) ====================
[22:59:45] =================== xe_rtp_rules_tests ====================
[22:59:45] [PASSED] no
[22:59:45] [PASSED] yes
[22:59:45] [PASSED] no-and-no
[22:59:45] [PASSED] no-and-yes
[22:59:45] [PASSED] yes-and-no
[22:59:45] [PASSED] yes-and-yes
[22:59:45] [PASSED] no-or-no
[22:59:45] [PASSED] no-or-yes
[22:59:45] [PASSED] yes-or-no
[22:59:45] [PASSED] yes-or-yes
[22:59:45] [PASSED] no-yes-or-yes-no
[22:59:45] [PASSED] no-yes-or-yes-yes
[22:59:45] [PASSED] yes-yes-or-no-yes
[22:59:45] [PASSED] yes-yes-or-yes-yes
[22:59:45] [PASSED] no-no-or-yes-or-no
[22:59:45] [PASSED] or
[22:59:45] [PASSED] or-yes
[22:59:45] [PASSED] or-no
[22:59:45] [PASSED] yes-or
[22:59:45] [PASSED] no-or
[22:59:45] [PASSED] no-or-or-yes
[22:59:45] [PASSED] yes-or-or-no
[22:59:45] [PASSED] no-or-or-no
[22:59:45] [PASSED] missing-context-engine-class
[22:59:45] [PASSED] missing-context-engine-class-or-yes
[22:59:45] [PASSED] missing-context-engine-class-or-or-yes
[22:59:45] =============== [PASSED] xe_rtp_rules_tests ================
[22:59:45] =============== xe_rtp_process_to_sr_tests ================
[22:59:45] [PASSED] coalesce-same-reg
[22:59:45] [PASSED] coalesce-same-reg-literal-and-func
[22:59:45] [PASSED] no-match-no-add
[22:59:45] [PASSED] two-regs-two-entries
[22:59:45] [PASSED] clr-one-set-other
[22:59:45] [PASSED] set-field
[22:59:45] [PASSED] conflict-duplicate
[22:59:45] [PASSED] conflict-not-disjoint
[22:59:45] [PASSED] conflict-not-disjoint-literal-and-func
[22:59:45] [PASSED] conflict-reg-type
[22:59:45] [PASSED] bad-mcr-reg-forced-to-regular
[22:59:45] [PASSED] bad-regular-reg-forced-to-mcr
[22:59:45] =========== [PASSED] xe_rtp_process_to_sr_tests ============
[22:59:45] ================== xe_rtp_process_tests ===================
[22:59:45] [PASSED] active1
[22:59:45] [PASSED] active2
[22:59:45] [PASSED] active-inactive
[22:59:45] [PASSED] inactive-active
[22:59:45] [PASSED] inactive-active-inactive
[22:59:45] [PASSED] inactive-inactive-inactive
[22:59:45] ============== [PASSED] xe_rtp_process_tests ===============
[22:59:45] ===================== [PASSED] xe_rtp ======================
[22:59:45] ==================== xe_wa (1 subtest) =====================
[22:59:45] ======================== xe_wa_gt =========================
[22:59:45] [PASSED] TIGERLAKE B0
[22:59:45] [PASSED] DG1 A0
[22:59:45] [PASSED] DG1 B0
[22:59:45] [PASSED] ALDERLAKE_S A0
[22:59:45] [PASSED] ALDERLAKE_S B0
[22:59:45] [PASSED] ALDERLAKE_S C0
[22:59:45] [PASSED] ALDERLAKE_S D0
[22:59:45] [PASSED] ALDERLAKE_P A0
[22:59:45] [PASSED] ALDERLAKE_P B0
[22:59:45] [PASSED] ALDERLAKE_P C0
[22:59:45] [PASSED] ALDERLAKE_S RPLS D0
[22:59:45] [PASSED] ALDERLAKE_P RPLU E0
[22:59:45] [PASSED] DG2 G10 C0
[22:59:45] [PASSED] DG2 G11 B1
[22:59:45] [PASSED] DG2 G12 A1
[22:59:45] [PASSED] METEORLAKE 12.70(Xe_LPG) A0 13.00(Xe_LPM+) A0
[22:59:45] [PASSED] METEORLAKE 12.71(Xe_LPG) A0 13.00(Xe_LPM+) A0
[22:59:45] [PASSED] METEORLAKE 12.74(Xe_LPG+) A0 13.00(Xe_LPM+) A0
[22:59:45] [PASSED] LUNARLAKE 20.04(Xe2_LPG) A0 20.00(Xe2_LPM) A0
[22:59:45] [PASSED] LUNARLAKE 20.04(Xe2_LPG) B0 20.00(Xe2_LPM) A0
[22:59:45] [PASSED] BATTLEMAGE 20.01(Xe2_HPG) A0 13.01(Xe2_HPM) A1
[22:59:45] [PASSED] PANTHERLAKE 30.00(Xe3_LPG) A0 30.00(Xe3_LPM) A0
[22:59:45] ==================== [PASSED] xe_wa_gt =====================
[22:59:45] ====================== [PASSED] xe_wa ======================
[22:59:45] ============================================================
[22:59:45] Testing complete. Ran 719 tests: passed: 701, skipped: 18
[22:59:45] Elapsed time: 36.421s total, 4.291s configuring, 31.464s building, 0.638s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/tests/.kunitconfig
[22:59:45] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[22:59:47] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[23:00:11] Starting KUnit Kernel (1/1)...
[23:00:11] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[23:00:11] ============ drm_test_pick_cmdline (2 subtests) ============
[23:00:11] [PASSED] drm_test_pick_cmdline_res_1920_1080_60
[23:00:11] =============== drm_test_pick_cmdline_named ===============
[23:00:11] [PASSED] NTSC
[23:00:11] [PASSED] NTSC-J
[23:00:11] [PASSED] PAL
[23:00:11] [PASSED] PAL-M
[23:00:11] =========== [PASSED] drm_test_pick_cmdline_named ===========
[23:00:11] ============== [PASSED] drm_test_pick_cmdline ==============
[23:00:11] == drm_test_atomic_get_connector_for_encoder (1 subtest) ===
[23:00:11] [PASSED] drm_test_drm_atomic_get_connector_for_encoder
[23:00:11] ==== [PASSED] drm_test_atomic_get_connector_for_encoder ====
[23:00:11] =========== drm_validate_clone_mode (2 subtests) ===========
[23:00:11] ============== drm_test_check_in_clone_mode ===============
[23:00:11] [PASSED] in_clone_mode
[23:00:11] [PASSED] not_in_clone_mode
[23:00:11] ========== [PASSED] drm_test_check_in_clone_mode ===========
[23:00:11] =============== drm_test_check_valid_clones ===============
[23:00:11] [PASSED] not_in_clone_mode
[23:00:11] [PASSED] valid_clone
[23:00:11] [PASSED] invalid_clone
[23:00:11] =========== [PASSED] drm_test_check_valid_clones ===========
[23:00:11] ============= [PASSED] drm_validate_clone_mode =============
[23:00:11] ============= drm_validate_modeset (1 subtest) =============
[23:00:11] [PASSED] drm_test_check_connector_changed_modeset
[23:00:11] ============== [PASSED] drm_validate_modeset ===============
[23:00:11] ====== drm_test_bridge_get_current_state (2 subtests) ======
[23:00:11] [PASSED] drm_test_drm_bridge_get_current_state_atomic
[23:00:11] [PASSED] drm_test_drm_bridge_get_current_state_legacy
[23:00:11] ======== [PASSED] drm_test_bridge_get_current_state ========
[23:00:11] ====== drm_test_bridge_helper_reset_crtc (4 subtests) ======
[23:00:11] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic
[23:00:11] [PASSED] drm_test_drm_bridge_helper_reset_crtc_atomic_disabled
[23:00:11] [PASSED] drm_test_drm_bridge_helper_reset_crtc_legacy
[23:00:11] [PASSED] drm_test_drm_bridge_helper_hdmi_output_bus_fmts
[23:00:11] ======== [PASSED] drm_test_bridge_helper_reset_crtc ========
[23:00:11] ============== drm_bridge_alloc (2 subtests) ===============
[23:00:11] [PASSED] drm_test_drm_bridge_alloc_basic
[23:00:11] [PASSED] drm_test_drm_bridge_alloc_get_put
[23:00:11] ================ [PASSED] drm_bridge_alloc =================
[23:00:11] ============= drm_bridge_bus_fmt (5 subtests) ==============
[23:00:11] [PASSED] drm_test_bridge_rgb_yuv_rgb
[23:00:11] [PASSED] drm_test_bridge_must_convert_to_yuv444
[23:00:11] [PASSED] drm_test_bridge_hdmi_auto_rgb
[23:00:11] [PASSED] drm_test_bridge_auto_first
[23:00:11] [PASSED] drm_test_bridge_rgb_yuv_no_path
[23:00:11] =============== [PASSED] drm_bridge_bus_fmt ================
[23:00:11] ============= drm_cmdline_parser (40 subtests) =============
[23:00:11] [PASSED] drm_test_cmdline_force_d_only
[23:00:11] [PASSED] drm_test_cmdline_force_D_only_dvi
[23:00:11] [PASSED] drm_test_cmdline_force_D_only_hdmi
[23:00:11] [PASSED] drm_test_cmdline_force_D_only_not_digital
[23:00:11] [PASSED] drm_test_cmdline_force_e_only
[23:00:11] [PASSED] drm_test_cmdline_res
[23:00:11] [PASSED] drm_test_cmdline_res_vesa
[23:00:11] [PASSED] drm_test_cmdline_res_vesa_rblank
[23:00:11] [PASSED] drm_test_cmdline_res_rblank
[23:00:11] [PASSED] drm_test_cmdline_res_bpp
[23:00:11] [PASSED] drm_test_cmdline_res_refresh
[23:00:11] [PASSED] drm_test_cmdline_res_bpp_refresh
[23:00:11] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced
[23:00:11] [PASSED] drm_test_cmdline_res_bpp_refresh_margins
[23:00:11] [PASSED] drm_test_cmdline_res_bpp_refresh_force_off
[23:00:11] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on
[23:00:11] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_analog
[23:00:11] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_digital
[23:00:11] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced_margins_force_on
[23:00:11] [PASSED] drm_test_cmdline_res_margins_force_on
[23:00:11] [PASSED] drm_test_cmdline_res_vesa_margins
[23:00:11] [PASSED] drm_test_cmdline_name
[23:00:11] [PASSED] drm_test_cmdline_name_bpp
[23:00:11] [PASSED] drm_test_cmdline_name_option
[23:00:11] [PASSED] drm_test_cmdline_name_bpp_option
[23:00:11] [PASSED] drm_test_cmdline_rotate_0
[23:00:11] [PASSED] drm_test_cmdline_rotate_90
[23:00:11] [PASSED] drm_test_cmdline_rotate_180
[23:00:11] [PASSED] drm_test_cmdline_rotate_270
[23:00:11] [PASSED] drm_test_cmdline_hmirror
[23:00:11] [PASSED] drm_test_cmdline_vmirror
[23:00:11] [PASSED] drm_test_cmdline_margin_options
[23:00:11] [PASSED] drm_test_cmdline_multiple_options
[23:00:11] [PASSED] drm_test_cmdline_bpp_extra_and_option
[23:00:11] [PASSED] drm_test_cmdline_extra_and_option
[23:00:11] [PASSED] drm_test_cmdline_freestanding_options
[23:00:11] [PASSED] drm_test_cmdline_freestanding_force_e_and_options
[23:00:11] [PASSED] drm_test_cmdline_panel_orientation
[23:00:11] ================ drm_test_cmdline_invalid =================
[23:00:11] [PASSED] margin_only
[23:00:11] [PASSED] interlace_only
[23:00:11] [PASSED] res_missing_x
[23:00:11] [PASSED] res_missing_y
[23:00:11] [PASSED] res_bad_y
[23:00:11] [PASSED] res_missing_y_bpp
[23:00:11] [PASSED] res_bad_bpp
[23:00:11] [PASSED] res_bad_refresh
[23:00:11] [PASSED] res_bpp_refresh_force_on_off
[23:00:11] [PASSED] res_invalid_mode
[23:00:11] [PASSED] res_bpp_wrong_place_mode
[23:00:11] [PASSED] name_bpp_refresh
[23:00:11] [PASSED] name_refresh
[23:00:11] [PASSED] name_refresh_wrong_mode
[23:00:11] [PASSED] name_refresh_invalid_mode
[23:00:11] [PASSED] rotate_multiple
[23:00:11] [PASSED] rotate_invalid_val
[23:00:11] [PASSED] rotate_truncated
[23:00:11] [PASSED] invalid_option
[23:00:11] [PASSED] invalid_tv_option
[23:00:11] [PASSED] truncated_tv_option
[23:00:11] ============ [PASSED] drm_test_cmdline_invalid =============
[23:00:11] =============== drm_test_cmdline_tv_options ===============
[23:00:11] [PASSED] NTSC
[23:00:11] [PASSED] NTSC_443
[23:00:11] [PASSED] NTSC_J
[23:00:11] [PASSED] PAL
[23:00:11] [PASSED] PAL_M
[23:00:11] [PASSED] PAL_N
[23:00:11] [PASSED] SECAM
[23:00:11] [PASSED] MONO_525
[23:00:11] [PASSED] MONO_625
[23:00:11] =========== [PASSED] drm_test_cmdline_tv_options ===========
[23:00:11] =============== [PASSED] drm_cmdline_parser ================
[23:00:11] ========== drmm_connector_hdmi_init (20 subtests) ==========
[23:00:11] [PASSED] drm_test_connector_hdmi_init_valid
[23:00:11] [PASSED] drm_test_connector_hdmi_init_bpc_8
[23:00:11] [PASSED] drm_test_connector_hdmi_init_bpc_10
[23:00:11] [PASSED] drm_test_connector_hdmi_init_bpc_12
[23:00:11] [PASSED] drm_test_connector_hdmi_init_bpc_invalid
[23:00:11] [PASSED] drm_test_connector_hdmi_init_bpc_null
[23:00:11] [PASSED] drm_test_connector_hdmi_init_formats_empty
[23:00:11] [PASSED] drm_test_connector_hdmi_init_formats_no_rgb
[23:00:11] === drm_test_connector_hdmi_init_formats_yuv420_allowed ===
[23:00:11] [PASSED] supported_formats=0x9 yuv420_allowed=1
[23:00:11] [PASSED] supported_formats=0x9 yuv420_allowed=0
[23:00:11] [PASSED] supported_formats=0x5 yuv420_allowed=1
[23:00:11] [PASSED] supported_formats=0x5 yuv420_allowed=0
[23:00:11] === [PASSED] drm_test_connector_hdmi_init_formats_yuv420_allowed ===
[23:00:11] [PASSED] drm_test_connector_hdmi_init_null_ddc
[23:00:11] [PASSED] drm_test_connector_hdmi_init_null_product
[23:00:11] [PASSED] drm_test_connector_hdmi_init_null_vendor
[23:00:11] [PASSED] drm_test_connector_hdmi_init_product_length_exact
[23:00:11] [PASSED] drm_test_connector_hdmi_init_product_length_too_long
[23:00:11] [PASSED] drm_test_connector_hdmi_init_product_valid
[23:00:11] [PASSED] drm_test_connector_hdmi_init_vendor_length_exact
[23:00:11] [PASSED] drm_test_connector_hdmi_init_vendor_length_too_long
[23:00:11] [PASSED] drm_test_connector_hdmi_init_vendor_valid
[23:00:11] ========= drm_test_connector_hdmi_init_type_valid =========
[23:00:11] [PASSED] HDMI-A
[23:00:11] [PASSED] HDMI-B
[23:00:11] ===== [PASSED] drm_test_connector_hdmi_init_type_valid =====
[23:00:11] ======== drm_test_connector_hdmi_init_type_invalid ========
[23:00:11] [PASSED] Unknown
[23:00:11] [PASSED] VGA
[23:00:11] [PASSED] DVI-I
[23:00:11] [PASSED] DVI-D
[23:00:11] [PASSED] DVI-A
[23:00:11] [PASSED] Composite
[23:00:11] [PASSED] SVIDEO
[23:00:11] [PASSED] LVDS
[23:00:11] [PASSED] Component
[23:00:11] [PASSED] DIN
[23:00:11] [PASSED] DP
[23:00:11] [PASSED] TV
[23:00:11] [PASSED] eDP
[23:00:11] [PASSED] Virtual
[23:00:11] [PASSED] DSI
[23:00:11] [PASSED] DPI
[23:00:11] [PASSED] Writeback
[23:00:11] [PASSED] SPI
[23:00:11] [PASSED] USB
[23:00:11] ==== [PASSED] drm_test_connector_hdmi_init_type_invalid ====
[23:00:11] ============ [PASSED] drmm_connector_hdmi_init =============
[23:00:11] ============= drmm_connector_init (3 subtests) =============
[23:00:11] [PASSED] drm_test_drmm_connector_init
[23:00:11] [PASSED] drm_test_drmm_connector_init_null_ddc
[23:00:11] ========= drm_test_drmm_connector_init_type_valid =========
[23:00:11] [PASSED] Unknown
[23:00:11] [PASSED] VGA
[23:00:11] [PASSED] DVI-I
[23:00:11] [PASSED] DVI-D
[23:00:11] [PASSED] DVI-A
[23:00:11] [PASSED] Composite
[23:00:11] [PASSED] SVIDEO
[23:00:11] [PASSED] LVDS
[23:00:11] [PASSED] Component
[23:00:11] [PASSED] DIN
[23:00:11] [PASSED] DP
[23:00:11] [PASSED] HDMI-A
[23:00:11] [PASSED] HDMI-B
[23:00:11] [PASSED] TV
[23:00:11] [PASSED] eDP
[23:00:11] [PASSED] Virtual
[23:00:11] [PASSED] DSI
[23:00:11] [PASSED] DPI
[23:00:11] [PASSED] Writeback
[23:00:11] [PASSED] SPI
[23:00:11] [PASSED] USB
[23:00:11] ===== [PASSED] drm_test_drmm_connector_init_type_valid =====
[23:00:11] =============== [PASSED] drmm_connector_init ===============
[23:00:11] ========= drm_connector_dynamic_init (6 subtests) ==========
[23:00:11] [PASSED] drm_test_drm_connector_dynamic_init
[23:00:11] [PASSED] drm_test_drm_connector_dynamic_init_null_ddc
[23:00:11] [PASSED] drm_test_drm_connector_dynamic_init_not_added
[23:00:11] [PASSED] drm_test_drm_connector_dynamic_init_properties
[23:00:11] ===== drm_test_drm_connector_dynamic_init_type_valid ======
[23:00:11] [PASSED] Unknown
[23:00:11] [PASSED] VGA
[23:00:11] [PASSED] DVI-I
[23:00:11] [PASSED] DVI-D
[23:00:11] [PASSED] DVI-A
[23:00:11] [PASSED] Composite
[23:00:11] [PASSED] SVIDEO
[23:00:11] [PASSED] LVDS
[23:00:11] [PASSED] Component
[23:00:11] [PASSED] DIN
[23:00:11] [PASSED] DP
[23:00:11] [PASSED] HDMI-A
[23:00:11] [PASSED] HDMI-B
[23:00:11] [PASSED] TV
[23:00:11] [PASSED] eDP
[23:00:11] [PASSED] Virtual
[23:00:11] [PASSED] DSI
[23:00:11] [PASSED] DPI
[23:00:11] [PASSED] Writeback
[23:00:11] [PASSED] SPI
[23:00:11] [PASSED] USB
[23:00:11] = [PASSED] drm_test_drm_connector_dynamic_init_type_valid ==
[23:00:11] ======== drm_test_drm_connector_dynamic_init_name =========
[23:00:11] [PASSED] Unknown
[23:00:11] [PASSED] VGA
[23:00:11] [PASSED] DVI-I
[23:00:11] [PASSED] DVI-D
[23:00:11] [PASSED] DVI-A
[23:00:11] [PASSED] Composite
[23:00:11] [PASSED] SVIDEO
[23:00:11] [PASSED] LVDS
[23:00:11] [PASSED] Component
[23:00:11] [PASSED] DIN
[23:00:11] [PASSED] DP
[23:00:11] [PASSED] HDMI-A
[23:00:11] [PASSED] HDMI-B
[23:00:11] [PASSED] TV
[23:00:11] [PASSED] eDP
[23:00:11] [PASSED] Virtual
[23:00:11] [PASSED] DSI
[23:00:11] [PASSED] DPI
[23:00:11] [PASSED] Writeback
[23:00:11] [PASSED] SPI
[23:00:11] [PASSED] USB
[23:00:11] ==== [PASSED] drm_test_drm_connector_dynamic_init_name =====
[23:00:11] =========== [PASSED] drm_connector_dynamic_init ============
[23:00:11] ==== drm_connector_dynamic_register_early (4 subtests) =====
[23:00:11] [PASSED] drm_test_drm_connector_dynamic_register_early_on_list
[23:00:11] [PASSED] drm_test_drm_connector_dynamic_register_early_defer
[23:00:11] [PASSED] drm_test_drm_connector_dynamic_register_early_no_init
[23:00:11] [PASSED] drm_test_drm_connector_dynamic_register_early_no_mode_object
[23:00:11] ====== [PASSED] drm_connector_dynamic_register_early =======
[23:00:11] ======= drm_connector_dynamic_register (7 subtests) ========
[23:00:11] [PASSED] drm_test_drm_connector_dynamic_register_on_list
[23:00:11] [PASSED] drm_test_drm_connector_dynamic_register_no_defer
[23:00:11] [PASSED] drm_test_drm_connector_dynamic_register_no_init
[23:00:11] [PASSED] drm_test_drm_connector_dynamic_register_mode_object
[23:00:11] [PASSED] drm_test_drm_connector_dynamic_register_sysfs
[23:00:11] [PASSED] drm_test_drm_connector_dynamic_register_sysfs_name
[23:00:11] [PASSED] drm_test_drm_connector_dynamic_register_debugfs
[23:00:11] ========= [PASSED] drm_connector_dynamic_register ==========
[23:00:11] = drm_connector_attach_broadcast_rgb_property (2 subtests) =
[23:00:11] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property
[23:00:11] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property_hdmi_connector
[23:00:11] === [PASSED] drm_connector_attach_broadcast_rgb_property ===
[23:00:11] ========== drm_get_tv_mode_from_name (2 subtests) ==========
[23:00:11] ========== drm_test_get_tv_mode_from_name_valid ===========
[23:00:11] [PASSED] NTSC
[23:00:11] [PASSED] NTSC-443
[23:00:11] [PASSED] NTSC-J
[23:00:11] [PASSED] PAL
[23:00:11] [PASSED] PAL-M
[23:00:11] [PASSED] PAL-N
[23:00:11] [PASSED] SECAM
[23:00:11] [PASSED] Mono
[23:00:11] ====== [PASSED] drm_test_get_tv_mode_from_name_valid =======
[23:00:11] [PASSED] drm_test_get_tv_mode_from_name_truncated
[23:00:11] ============ [PASSED] drm_get_tv_mode_from_name ============
[23:00:11] = drm_test_connector_hdmi_compute_mode_clock (12 subtests) =
[23:00:11] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb
[23:00:11] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc
[23:00:11] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc_vic_1
[23:00:11] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc
[23:00:11] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc_vic_1
[23:00:11] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_double
[23:00:11] = drm_test_connector_hdmi_compute_mode_clock_yuv420_valid =
[23:00:11] [PASSED] VIC 96
[23:00:11] [PASSED] VIC 97
[23:00:11] [PASSED] VIC 101
[23:00:11] [PASSED] VIC 102
[23:00:11] [PASSED] VIC 106
[23:00:11] [PASSED] VIC 107
[23:00:11] === [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_valid ===
[23:00:11] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_10_bpc
[23:00:11] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_12_bpc
[23:00:11] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_8_bpc
[23:00:11] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_10_bpc
[23:00:11] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_12_bpc
[23:00:11] === [PASSED] drm_test_connector_hdmi_compute_mode_clock ====
[23:00:11] == drm_hdmi_connector_get_broadcast_rgb_name (2 subtests) ==
[23:00:11] === drm_test_drm_hdmi_connector_get_broadcast_rgb_name ====
[23:00:11] [PASSED] Automatic
[23:00:11] [PASSED] Full
[23:00:11] [PASSED] Limited 16:235
[23:00:11] === [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name ===
[23:00:11] [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name_invalid
[23:00:11] ==== [PASSED] drm_hdmi_connector_get_broadcast_rgb_name ====
[23:00:11] == drm_hdmi_connector_get_output_format_name (2 subtests) ==
[23:00:11] === drm_test_drm_hdmi_connector_get_output_format_name ====
[23:00:11] [PASSED] RGB
[23:00:11] [PASSED] YUV 4:2:0
[23:00:11] [PASSED] YUV 4:2:2
[23:00:11] [PASSED] YUV 4:4:4
[23:00:11] === [PASSED] drm_test_drm_hdmi_connector_get_output_format_name ===
[23:00:11] [PASSED] drm_test_drm_hdmi_connector_get_output_format_name_invalid
[23:00:11] ==== [PASSED] drm_hdmi_connector_get_output_format_name ====
[23:00:11] ============= drm_damage_helper (21 subtests) ==============
[23:00:11] [PASSED] drm_test_damage_iter_no_damage
[23:00:11] [PASSED] drm_test_damage_iter_no_damage_fractional_src
[23:00:11] [PASSED] drm_test_damage_iter_no_damage_src_moved
[23:00:11] [PASSED] drm_test_damage_iter_no_damage_fractional_src_moved
[23:00:11] [PASSED] drm_test_damage_iter_no_damage_not_visible
[23:00:11] [PASSED] drm_test_damage_iter_no_damage_no_crtc
[23:00:11] [PASSED] drm_test_damage_iter_no_damage_no_fb
[23:00:11] [PASSED] drm_test_damage_iter_simple_damage
[23:00:11] [PASSED] drm_test_damage_iter_single_damage
[23:00:11] [PASSED] drm_test_damage_iter_single_damage_intersect_src
[23:00:11] [PASSED] drm_test_damage_iter_single_damage_outside_src
[23:00:11] [PASSED] drm_test_damage_iter_single_damage_fractional_src
[23:00:11] [PASSED] drm_test_damage_iter_single_damage_intersect_fractional_src
[23:00:11] [PASSED] drm_test_damage_iter_single_damage_outside_fractional_src
[23:00:11] [PASSED] drm_test_damage_iter_single_damage_src_moved
[23:00:11] [PASSED] drm_test_damage_iter_single_damage_fractional_src_moved
[23:00:11] [PASSED] drm_test_damage_iter_damage
[23:00:11] [PASSED] drm_test_damage_iter_damage_one_intersect
[23:00:11] [PASSED] drm_test_damage_iter_damage_one_outside
[23:00:11] [PASSED] drm_test_damage_iter_damage_src_moved
[23:00:11] [PASSED] drm_test_damage_iter_damage_not_visible
[23:00:11] ================ [PASSED] drm_damage_helper ================
[23:00:11] ============== drm_dp_mst_helper (3 subtests) ==============
[23:00:11] ============== drm_test_dp_mst_calc_pbn_mode ==============
[23:00:11] [PASSED] Clock 154000 BPP 30 DSC disabled
[23:00:11] [PASSED] Clock 234000 BPP 30 DSC disabled
[23:00:11] [PASSED] Clock 297000 BPP 24 DSC disabled
[23:00:11] [PASSED] Clock 332880 BPP 24 DSC enabled
[23:00:11] [PASSED] Clock 324540 BPP 24 DSC enabled
[23:00:11] ========== [PASSED] drm_test_dp_mst_calc_pbn_mode ==========
[23:00:11] ============== drm_test_dp_mst_calc_pbn_div ===============
[23:00:11] [PASSED] Link rate 2000000 lane count 4
[23:00:11] [PASSED] Link rate 2000000 lane count 2
[23:00:11] [PASSED] Link rate 2000000 lane count 1
[23:00:11] [PASSED] Link rate 1350000 lane count 4
[23:00:11] [PASSED] Link rate 1350000 lane count 2
[23:00:11] [PASSED] Link rate 1350000 lane count 1
[23:00:11] [PASSED] Link rate 1000000 lane count 4
[23:00:11] [PASSED] Link rate 1000000 lane count 2
[23:00:11] [PASSED] Link rate 1000000 lane count 1
[23:00:11] [PASSED] Link rate 810000 lane count 4
[23:00:11] [PASSED] Link rate 810000 lane count 2
[23:00:11] [PASSED] Link rate 810000 lane count 1
[23:00:11] [PASSED] Link rate 540000 lane count 4
[23:00:11] [PASSED] Link rate 540000 lane count 2
[23:00:11] [PASSED] Link rate 540000 lane count 1
[23:00:11] [PASSED] Link rate 270000 lane count 4
[23:00:11] [PASSED] Link rate 270000 lane count 2
[23:00:11] [PASSED] Link rate 270000 lane count 1
[23:00:11] [PASSED] Link rate 162000 lane count 4
[23:00:11] [PASSED] Link rate 162000 lane count 2
[23:00:11] [PASSED] Link rate 162000 lane count 1
[23:00:11] ========== [PASSED] drm_test_dp_mst_calc_pbn_div ===========
[23:00:11] ========= drm_test_dp_mst_sideband_msg_req_decode =========
[23:00:11] [PASSED] DP_ENUM_PATH_RESOURCES with port number
[23:00:11] [PASSED] DP_POWER_UP_PHY with port number
[23:00:11] [PASSED] DP_POWER_DOWN_PHY with port number
[23:00:11] [PASSED] DP_ALLOCATE_PAYLOAD with SDP stream sinks
[23:00:11] [PASSED] DP_ALLOCATE_PAYLOAD with port number
[23:00:11] [PASSED] DP_ALLOCATE_PAYLOAD with VCPI
[23:00:11] [PASSED] DP_ALLOCATE_PAYLOAD with PBN
[23:00:11] [PASSED] DP_QUERY_PAYLOAD with port number
[23:00:11] [PASSED] DP_QUERY_PAYLOAD with VCPI
[23:00:11] [PASSED] DP_REMOTE_DPCD_READ with port number
[23:00:11] [PASSED] DP_REMOTE_DPCD_READ with DPCD address
[23:00:11] [PASSED] DP_REMOTE_DPCD_READ with max number of bytes
[23:00:11] [PASSED] DP_REMOTE_DPCD_WRITE with port number
[23:00:11] [PASSED] DP_REMOTE_DPCD_WRITE with DPCD address
[23:00:11] [PASSED] DP_REMOTE_DPCD_WRITE with data array
[23:00:11] [PASSED] DP_REMOTE_I2C_READ with port number
[23:00:11] [PASSED] DP_REMOTE_I2C_READ with I2C device ID
[23:00:11] [PASSED] DP_REMOTE_I2C_READ with transactions array
[23:00:11] [PASSED] DP_REMOTE_I2C_WRITE with port number
[23:00:11] [PASSED] DP_REMOTE_I2C_WRITE with I2C device ID
[23:00:11] [PASSED] DP_REMOTE_I2C_WRITE with data array
[23:00:11] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream ID
[23:00:11] [PASSED] DP_QUERY_STREAM_ENC_STATUS with client ID
[23:00:11] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream event
[23:00:11] [PASSED] DP_QUERY_STREAM_ENC_STATUS with valid stream event
[23:00:11] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream behavior
[23:00:11] [PASSED] DP_QUERY_STREAM_ENC_STATUS with a valid stream behavior
[23:00:11] ===== [PASSED] drm_test_dp_mst_sideband_msg_req_decode =====
[23:00:11] ================ [PASSED] drm_dp_mst_helper ================
[23:00:11] ================== drm_exec (7 subtests) ===================
[23:00:11] [PASSED] sanitycheck
[23:00:11] [PASSED] test_lock
[23:00:11] [PASSED] test_lock_unlock
[23:00:11] [PASSED] test_duplicates
[23:00:11] [PASSED] test_prepare
[23:00:11] [PASSED] test_prepare_array
[23:00:11] [PASSED] test_multiple_loops
[23:00:11] ==================== [PASSED] drm_exec =====================
[23:00:11] =========== drm_format_helper_test (17 subtests) ===========
[23:00:11] ============== drm_test_fb_xrgb8888_to_gray8 ==============
[23:00:11] [PASSED] single_pixel_source_buffer
[23:00:11] [PASSED] single_pixel_clip_rectangle
[23:00:11] [PASSED] well_known_colors
[23:00:11] [PASSED] destination_pitch
[23:00:11] ========== [PASSED] drm_test_fb_xrgb8888_to_gray8 ==========
[23:00:11] ============= drm_test_fb_xrgb8888_to_rgb332 ==============
[23:00:11] [PASSED] single_pixel_source_buffer
[23:00:11] [PASSED] single_pixel_clip_rectangle
[23:00:11] [PASSED] well_known_colors
[23:00:11] [PASSED] destination_pitch
[23:00:11] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb332 ==========
[23:00:11] ============= drm_test_fb_xrgb8888_to_rgb565 ==============
[23:00:11] [PASSED] single_pixel_source_buffer
[23:00:11] [PASSED] single_pixel_clip_rectangle
[23:00:11] [PASSED] well_known_colors
[23:00:11] [PASSED] destination_pitch
[23:00:11] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb565 ==========
[23:00:11] ============ drm_test_fb_xrgb8888_to_xrgb1555 =============
[23:00:11] [PASSED] single_pixel_source_buffer
[23:00:11] [PASSED] single_pixel_clip_rectangle
[23:00:11] [PASSED] well_known_colors
[23:00:11] [PASSED] destination_pitch
[23:00:11] ======== [PASSED] drm_test_fb_xrgb8888_to_xrgb1555 =========
[23:00:11] ============ drm_test_fb_xrgb8888_to_argb1555 =============
[23:00:11] [PASSED] single_pixel_source_buffer
[23:00:11] [PASSED] single_pixel_clip_rectangle
[23:00:11] [PASSED] well_known_colors
[23:00:11] [PASSED] destination_pitch
[23:00:11] ======== [PASSED] drm_test_fb_xrgb8888_to_argb1555 =========
[23:00:11] ============ drm_test_fb_xrgb8888_to_rgba5551 =============
[23:00:11] [PASSED] single_pixel_source_buffer
[23:00:11] [PASSED] single_pixel_clip_rectangle
[23:00:11] [PASSED] well_known_colors
[23:00:11] [PASSED] destination_pitch
[23:00:11] ======== [PASSED] drm_test_fb_xrgb8888_to_rgba5551 =========
[23:00:11] ============= drm_test_fb_xrgb8888_to_rgb888 ==============
[23:00:11] [PASSED] single_pixel_source_buffer
[23:00:11] [PASSED] single_pixel_clip_rectangle
[23:00:11] [PASSED] well_known_colors
[23:00:11] [PASSED] destination_pitch
[23:00:11] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb888 ==========
[23:00:11] ============= drm_test_fb_xrgb8888_to_bgr888 ==============
[23:00:11] [PASSED] single_pixel_source_buffer
[23:00:11] [PASSED] single_pixel_clip_rectangle
[23:00:11] [PASSED] well_known_colors
[23:00:11] [PASSED] destination_pitch
[23:00:11] ========= [PASSED] drm_test_fb_xrgb8888_to_bgr888 ==========
[23:00:11] ============ drm_test_fb_xrgb8888_to_argb8888 =============
[23:00:11] [PASSED] single_pixel_source_buffer
[23:00:11] [PASSED] single_pixel_clip_rectangle
[23:00:11] [PASSED] well_known_colors
[23:00:11] [PASSED] destination_pitch
[23:00:11] ======== [PASSED] drm_test_fb_xrgb8888_to_argb8888 =========
[23:00:11] =========== drm_test_fb_xrgb8888_to_xrgb2101010 ===========
[23:00:11] [PASSED] single_pixel_source_buffer
[23:00:11] [PASSED] single_pixel_clip_rectangle
[23:00:11] [PASSED] well_known_colors
[23:00:11] [PASSED] destination_pitch
[23:00:11] ======= [PASSED] drm_test_fb_xrgb8888_to_xrgb2101010 =======
[23:00:11] =========== drm_test_fb_xrgb8888_to_argb2101010 ===========
[23:00:11] [PASSED] single_pixel_source_buffer
[23:00:11] [PASSED] single_pixel_clip_rectangle
[23:00:11] [PASSED] well_known_colors
[23:00:11] [PASSED] destination_pitch
[23:00:11] ======= [PASSED] drm_test_fb_xrgb8888_to_argb2101010 =======
[23:00:11] ============== drm_test_fb_xrgb8888_to_mono ===============
[23:00:11] [PASSED] single_pixel_source_buffer
[23:00:11] [PASSED] single_pixel_clip_rectangle
[23:00:11] [PASSED] well_known_colors
[23:00:11] [PASSED] destination_pitch
[23:00:11] ========== [PASSED] drm_test_fb_xrgb8888_to_mono ===========
[23:00:11] ==================== drm_test_fb_swab =====================
[23:00:11] [PASSED] single_pixel_source_buffer
[23:00:11] [PASSED] single_pixel_clip_rectangle
[23:00:11] [PASSED] well_known_colors
[23:00:11] [PASSED] destination_pitch
[23:00:11] ================ [PASSED] drm_test_fb_swab =================
[23:00:11] ============ drm_test_fb_xrgb8888_to_xbgr8888 =============
[23:00:11] [PASSED] single_pixel_source_buffer
[23:00:11] [PASSED] single_pixel_clip_rectangle
[23:00:11] [PASSED] well_known_colors
[23:00:11] [PASSED] destination_pitch
[23:00:11] ======== [PASSED] drm_test_fb_xrgb8888_to_xbgr8888 =========
[23:00:11] ============ drm_test_fb_xrgb8888_to_abgr8888 =============
[23:00:11] [PASSED] single_pixel_source_buffer
[23:00:11] [PASSED] single_pixel_clip_rectangle
[23:00:11] [PASSED] well_known_colors
[23:00:11] [PASSED] destination_pitch
[23:00:11] ======== [PASSED] drm_test_fb_xrgb8888_to_abgr8888 =========
[23:00:11] ================= drm_test_fb_clip_offset =================
[23:00:11] [PASSED] pass through
[23:00:11] [PASSED] horizontal offset
[23:00:11] [PASSED] vertical offset
[23:00:11] [PASSED] horizontal and vertical offset
[23:00:11] [PASSED] horizontal offset (custom pitch)
[23:00:11] [PASSED] vertical offset (custom pitch)
[23:00:11] [PASSED] horizontal and vertical offset (custom pitch)
[23:00:11] ============= [PASSED] drm_test_fb_clip_offset =============
[23:00:11] =================== drm_test_fb_memcpy ====================
[23:00:11] [PASSED] single_pixel_source_buffer: XR24 little-endian (0x34325258)
[23:00:11] [PASSED] single_pixel_source_buffer: XRA8 little-endian (0x38415258)
[23:00:11] [PASSED] single_pixel_source_buffer: YU24 little-endian (0x34325559)
[23:00:11] [PASSED] single_pixel_clip_rectangle: XB24 little-endian (0x34324258)
[23:00:11] [PASSED] single_pixel_clip_rectangle: XRA8 little-endian (0x38415258)
[23:00:11] [PASSED] single_pixel_clip_rectangle: YU24 little-endian (0x34325559)
[23:00:11] [PASSED] well_known_colors: XB24 little-endian (0x34324258)
[23:00:11] [PASSED] well_known_colors: XRA8 little-endian (0x38415258)
[23:00:11] [PASSED] well_known_colors: YU24 little-endian (0x34325559)
[23:00:11] [PASSED] destination_pitch: XB24 little-endian (0x34324258)
[23:00:11] [PASSED] destination_pitch: XRA8 little-endian (0x38415258)
[23:00:11] [PASSED] destination_pitch: YU24 little-endian (0x34325559)
[23:00:11] =============== [PASSED] drm_test_fb_memcpy ================
[23:00:11] ============= [PASSED] drm_format_helper_test ==============
[23:00:11] ================= drm_format (18 subtests) =================
[23:00:11] [PASSED] drm_test_format_block_width_invalid
[23:00:11] [PASSED] drm_test_format_block_width_one_plane
[23:00:11] [PASSED] drm_test_format_block_width_two_plane
[23:00:11] [PASSED] drm_test_format_block_width_three_plane
[23:00:11] [PASSED] drm_test_format_block_width_tiled
[23:00:11] [PASSED] drm_test_format_block_height_invalid
[23:00:11] [PASSED] drm_test_format_block_height_one_plane
[23:00:11] [PASSED] drm_test_format_block_height_two_plane
[23:00:11] [PASSED] drm_test_format_block_height_three_plane
[23:00:11] [PASSED] drm_test_format_block_height_tiled
[23:00:11] [PASSED] drm_test_format_min_pitch_invalid
[23:00:11] [PASSED] drm_test_format_min_pitch_one_plane_8bpp
[23:00:11] [PASSED] drm_test_format_min_pitch_one_plane_16bpp
[23:00:11] [PASSED] drm_test_format_min_pitch_one_plane_24bpp
[23:00:11] [PASSED] drm_test_format_min_pitch_one_plane_32bpp
[23:00:11] [PASSED] drm_test_format_min_pitch_two_plane
[23:00:11] [PASSED] drm_test_format_min_pitch_three_plane_8bpp
[23:00:11] [PASSED] drm_test_format_min_pitch_tiled
[23:00:11] =================== [PASSED] drm_format ====================
[23:00:11] ============== drm_framebuffer (10 subtests) ===============
[23:00:11] ========== drm_test_framebuffer_check_src_coords ==========
[23:00:11] [PASSED] Success: source fits into fb
[23:00:11] [PASSED] Fail: overflowing fb with x-axis coordinate
[23:00:11] [PASSED] Fail: overflowing fb with y-axis coordinate
[23:00:11] [PASSED] Fail: overflowing fb with source width
[23:00:11] [PASSED] Fail: overflowing fb with source height
[23:00:11] ====== [PASSED] drm_test_framebuffer_check_src_coords ======
[23:00:11] [PASSED] drm_test_framebuffer_cleanup
[23:00:11] =============== drm_test_framebuffer_create ===============
[23:00:11] [PASSED] ABGR8888 normal sizes
[23:00:11] [PASSED] ABGR8888 max sizes
[23:00:11] [PASSED] ABGR8888 pitch greater than min required
[23:00:11] [PASSED] ABGR8888 pitch less than min required
[23:00:11] [PASSED] ABGR8888 Invalid width
[23:00:11] [PASSED] ABGR8888 Invalid buffer handle
[23:00:11] [PASSED] No pixel format
[23:00:11] [PASSED] ABGR8888 Width 0
[23:00:11] [PASSED] ABGR8888 Height 0
[23:00:11] [PASSED] ABGR8888 Out of bound height * pitch combination
[23:00:11] [PASSED] ABGR8888 Large buffer offset
[23:00:11] [PASSED] ABGR8888 Buffer offset for inexistent plane
[23:00:11] [PASSED] ABGR8888 Invalid flag
[23:00:11] [PASSED] ABGR8888 Set DRM_MODE_FB_MODIFIERS without modifiers
[23:00:11] [PASSED] ABGR8888 Valid buffer modifier
[23:00:11] [PASSED] ABGR8888 Invalid buffer modifier(DRM_FORMAT_MOD_SAMSUNG_64_32_TILE)
[23:00:11] [PASSED] ABGR8888 Extra pitches without DRM_MODE_FB_MODIFIERS
[23:00:11] [PASSED] ABGR8888 Extra pitches with DRM_MODE_FB_MODIFIERS
[23:00:11] [PASSED] NV12 Normal sizes
[23:00:11] [PASSED] NV12 Max sizes
[23:00:11] [PASSED] NV12 Invalid pitch
[23:00:11] [PASSED] NV12 Invalid modifier/missing DRM_MODE_FB_MODIFIERS flag
[23:00:11] [PASSED] NV12 different modifier per-plane
[23:00:11] [PASSED] NV12 with DRM_FORMAT_MOD_SAMSUNG_64_32_TILE
[23:00:11] [PASSED] NV12 Valid modifiers without DRM_MODE_FB_MODIFIERS
[23:00:11] [PASSED] NV12 Modifier for inexistent plane
[23:00:11] [PASSED] NV12 Handle for inexistent plane
[23:00:11] [PASSED] NV12 Handle for inexistent plane without DRM_MODE_FB_MODIFIERS
[23:00:11] [PASSED] YVU420 DRM_MODE_FB_MODIFIERS set without modifier
[23:00:11] [PASSED] YVU420 Normal sizes
[23:00:11] [PASSED] YVU420 Max sizes
[23:00:11] [PASSED] YVU420 Invalid pitch
[23:00:11] [PASSED] YVU420 Different pitches
[23:00:11] [PASSED] YVU420 Different buffer offsets/pitches
[23:00:11] [PASSED] YVU420 Modifier set just for plane 0, without DRM_MODE_FB_MODIFIERS
[23:00:11] [PASSED] YVU420 Modifier set just for planes 0, 1, without DRM_MODE_FB_MODIFIERS
[23:00:11] [PASSED] YVU420 Modifier set just for plane 0, 1, with DRM_MODE_FB_MODIFIERS
[23:00:11] [PASSED] YVU420 Valid modifier
[23:00:11] [PASSED] YVU420 Different modifiers per plane
[23:00:11] [PASSED] YVU420 Modifier for inexistent plane
[23:00:11] [PASSED] YUV420_10BIT Invalid modifier(DRM_FORMAT_MOD_LINEAR)
[23:00:11] [PASSED] X0L2 Normal sizes
[23:00:11] [PASSED] X0L2 Max sizes
[23:00:11] [PASSED] X0L2 Invalid pitch
[23:00:11] [PASSED] X0L2 Pitch greater than minimum required
[23:00:11] [PASSED] X0L2 Handle for inexistent plane
[23:00:11] [PASSED] X0L2 Offset for inexistent plane, without DRM_MODE_FB_MODIFIERS set
[23:00:11] [PASSED] X0L2 Modifier without DRM_MODE_FB_MODIFIERS set
[23:00:11] [PASSED] X0L2 Valid modifier
[23:00:11] [PASSED] X0L2 Modifier for inexistent plane
[23:00:11] =========== [PASSED] drm_test_framebuffer_create ===========
[23:00:11] [PASSED] drm_test_framebuffer_free
[23:00:11] [PASSED] drm_test_framebuffer_init
[23:00:11] [PASSED] drm_test_framebuffer_init_bad_format
[23:00:11] [PASSED] drm_test_framebuffer_init_dev_mismatch
[23:00:11] [PASSED] drm_test_framebuffer_lookup
[23:00:11] [PASSED] drm_test_framebuffer_lookup_inexistent
[23:00:11] [PASSED] drm_test_framebuffer_modifiers_not_supported
[23:00:11] ================= [PASSED] drm_framebuffer =================
[23:00:11] ================ drm_gem_shmem (8 subtests) ================
[23:00:11] [PASSED] drm_gem_shmem_test_obj_create
[23:00:11] [PASSED] drm_gem_shmem_test_obj_create_private
[23:00:11] [PASSED] drm_gem_shmem_test_pin_pages
[23:00:11] [PASSED] drm_gem_shmem_test_vmap
[23:00:11] [PASSED] drm_gem_shmem_test_get_sg_table
[23:00:11] [PASSED] drm_gem_shmem_test_get_pages_sgt
[23:00:11] [PASSED] drm_gem_shmem_test_madvise
[23:00:11] [PASSED] drm_gem_shmem_test_purge
[23:00:11] ================== [PASSED] drm_gem_shmem ==================
[23:00:11] === drm_atomic_helper_connector_hdmi_check (29 subtests) ===
[23:00:11] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode
[23:00:11] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode_vic_1
[23:00:11] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode
[23:00:11] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode_vic_1
[23:00:11] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode
[23:00:11] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode_vic_1
[23:00:11] ====== drm_test_check_broadcast_rgb_cea_mode_yuv420 =======
[23:00:11] [PASSED] Automatic
[23:00:11] [PASSED] Full
[23:00:11] [PASSED] Limited 16:235
[23:00:11] == [PASSED] drm_test_check_broadcast_rgb_cea_mode_yuv420 ===
[23:00:11] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_changed
[23:00:11] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_not_changed
[23:00:11] [PASSED] drm_test_check_disable_connector
[23:00:11] [PASSED] drm_test_check_hdmi_funcs_reject_rate
[23:00:11] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_rgb
[23:00:11] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_yuv420
[23:00:11] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv422
[23:00:11] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback_ignore_yuv420
[23:00:11] [PASSED] drm_test_check_driver_unsupported_fallback_yuv420
[23:00:11] [PASSED] drm_test_check_output_bpc_crtc_mode_changed
[23:00:11] [PASSED] drm_test_check_output_bpc_crtc_mode_not_changed
[23:00:11] [PASSED] drm_test_check_output_bpc_dvi
[23:00:11] [PASSED] drm_test_check_output_bpc_format_vic_1
[23:00:11] [PASSED] drm_test_check_output_bpc_format_display_8bpc_only
[23:00:11] [PASSED] drm_test_check_output_bpc_format_display_rgb_only
[23:00:11] [PASSED] drm_test_check_output_bpc_format_driver_8bpc_only
[23:00:11] [PASSED] drm_test_check_output_bpc_format_driver_rgb_only
[23:00:11] [PASSED] drm_test_check_tmds_char_rate_rgb_8bpc
[23:00:11] [PASSED] drm_test_check_tmds_char_rate_rgb_10bpc
[23:00:11] [PASSED] drm_test_check_tmds_char_rate_rgb_12bpc
[23:00:11] ============ drm_test_check_hdmi_color_format =============
[23:00:11] [PASSED] AUTO -> RGB
[23:00:11] [PASSED] YCBCR422 -> YUV422
[23:00:11] [PASSED] YCBCR420 -> YUV420
[23:00:11] [PASSED] YCBCR444 -> YUV444
[23:00:11] [PASSED] RGB -> RGB
[23:00:11] ======== [PASSED] drm_test_check_hdmi_color_format =========
[23:00:11] ======== drm_test_check_hdmi_color_format_420_only ========
[23:00:11] [PASSED] RGB should fail
[23:00:11] [PASSED] YUV444 should fail
[23:00:11] [PASSED] YUV422 should fail
[23:00:11] [PASSED] YUV420 should work
[23:00:11] ==== [PASSED] drm_test_check_hdmi_color_format_420_only ====
[23:00:11] ===== [PASSED] drm_atomic_helper_connector_hdmi_check ======
[23:00:11] === drm_atomic_helper_connector_hdmi_reset (6 subtests) ====
[23:00:11] [PASSED] drm_test_check_broadcast_rgb_value
[23:00:11] [PASSED] drm_test_check_bpc_8_value
[23:00:11] [PASSED] drm_test_check_bpc_10_value
[23:00:11] [PASSED] drm_test_check_bpc_12_value
[23:00:11] [PASSED] drm_test_check_format_value
[23:00:11] [PASSED] drm_test_check_tmds_char_value
[23:00:11] ===== [PASSED] drm_atomic_helper_connector_hdmi_reset ======
[23:00:11] = drm_atomic_helper_connector_hdmi_mode_valid (7 subtests) =
[23:00:11] [PASSED] drm_test_check_mode_valid
[23:00:11] [PASSED] drm_test_check_mode_valid_reject
[23:00:11] [PASSED] drm_test_check_mode_valid_reject_rate
[23:00:11] [PASSED] drm_test_check_mode_valid_reject_max_clock
[23:00:11] [PASSED] drm_test_check_mode_valid_yuv420_only_max_clock
[23:00:11] [PASSED] drm_test_check_mode_valid_reject_yuv420_only_connector
[23:00:11] [PASSED] drm_test_check_mode_valid_accept_yuv420_also_connector_rgb
[23:00:11] === [PASSED] drm_atomic_helper_connector_hdmi_mode_valid ===
[23:00:11] = drm_atomic_helper_connector_hdmi_infoframes (5 subtests) =
[23:00:11] [PASSED] drm_test_check_infoframes
[23:00:11] [PASSED] drm_test_check_reject_avi_infoframe
[23:00:11] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_8
[23:00:11] [PASSED] drm_test_check_reject_hdr_infoframe_bpc_10
[23:00:11] [PASSED] drm_test_check_reject_audio_infoframe
[23:00:11] === [PASSED] drm_atomic_helper_connector_hdmi_infoframes ===
[23:00:11] ================= drm_managed (2 subtests) =================
[23:00:11] [PASSED] drm_test_managed_release_action
[23:00:11] [PASSED] drm_test_managed_run_action
[23:00:11] =================== [PASSED] drm_managed ===================
[23:00:11] =================== drm_mm (6 subtests) ====================
[23:00:11] [PASSED] drm_test_mm_init
[23:00:11] [PASSED] drm_test_mm_debug
[23:00:11] [PASSED] drm_test_mm_align32
[23:00:11] [PASSED] drm_test_mm_align64
[23:00:11] [PASSED] drm_test_mm_lowest
[23:00:11] [PASSED] drm_test_mm_highest
[23:00:11] ===================== [PASSED] drm_mm ======================
[23:00:11] ============= drm_modes_analog_tv (5 subtests) =============
[23:00:11] [PASSED] drm_test_modes_analog_tv_mono_576i
[23:00:11] [PASSED] drm_test_modes_analog_tv_ntsc_480i
[23:00:11] [PASSED] drm_test_modes_analog_tv_ntsc_480i_inlined
[23:00:11] [PASSED] drm_test_modes_analog_tv_pal_576i
[23:00:11] [PASSED] drm_test_modes_analog_tv_pal_576i_inlined
[23:00:11] =============== [PASSED] drm_modes_analog_tv ===============
[23:00:11] ============== drm_plane_helper (2 subtests) ===============
[23:00:11] =============== drm_test_check_plane_state ================
[23:00:11] [PASSED] clipping_simple
[23:00:11] [PASSED] clipping_rotate_reflect
[23:00:11] [PASSED] positioning_simple
[23:00:11] [PASSED] upscaling
[23:00:11] [PASSED] downscaling
[23:00:11] [PASSED] rounding1
[23:00:11] [PASSED] rounding2
[23:00:11] [PASSED] rounding3
[23:00:11] [PASSED] rounding4
[23:00:11] =========== [PASSED] drm_test_check_plane_state ============
[23:00:11] =========== drm_test_check_invalid_plane_state ============
[23:00:11] [PASSED] positioning_invalid
[23:00:11] [PASSED] upscaling_invalid
[23:00:11] [PASSED] downscaling_invalid
[23:00:11] ======= [PASSED] drm_test_check_invalid_plane_state ========
[23:00:11] ================ [PASSED] drm_plane_helper =================
[23:00:11] ====== drm_connector_helper_tv_get_modes (1 subtest) =======
[23:00:11] ====== drm_test_connector_helper_tv_get_modes_check =======
[23:00:11] [PASSED] None
[23:00:11] [PASSED] PAL
[23:00:11] [PASSED] NTSC
[23:00:11] [PASSED] Both, NTSC Default
[23:00:11] [PASSED] Both, PAL Default
[23:00:11] [PASSED] Both, NTSC Default, with PAL on command-line
[23:00:11] [PASSED] Both, PAL Default, with NTSC on command-line
[23:00:11] == [PASSED] drm_test_connector_helper_tv_get_modes_check ===
[23:00:11] ======== [PASSED] drm_connector_helper_tv_get_modes ========
[23:00:11] ================== drm_rect (9 subtests) ===================
[23:00:11] [PASSED] drm_test_rect_clip_scaled_div_by_zero
[23:00:11] [PASSED] drm_test_rect_clip_scaled_not_clipped
[23:00:11] [PASSED] drm_test_rect_clip_scaled_clipped
[23:00:11] [PASSED] drm_test_rect_clip_scaled_signed_vs_unsigned
[23:00:11] ================= drm_test_rect_intersect =================
[23:00:11] [PASSED] top-left x bottom-right: 2x2+1+1 x 2x2+0+0
[23:00:11] [PASSED] top-right x bottom-left: 2x2+0+0 x 2x2+1-1
[23:00:11] [PASSED] bottom-left x top-right: 2x2+1-1 x 2x2+0+0
[23:00:11] [PASSED] bottom-right x top-left: 2x2+0+0 x 2x2+1+1
[23:00:11] [PASSED] right x left: 2x1+0+0 x 3x1+1+0
[23:00:11] [PASSED] left x right: 3x1+1+0 x 2x1+0+0
[23:00:11] [PASSED] up x bottom: 1x2+0+0 x 1x3+0-1
[23:00:11] [PASSED] bottom x up: 1x3+0-1 x 1x2+0+0
[23:00:11] [PASSED] touching corner: 1x1+0+0 x 2x2+1+1
[23:00:11] [PASSED] touching side: 1x1+0+0 x 1x1+1+0
[23:00:11] [PASSED] equal rects: 2x2+0+0 x 2x2+0+0
[23:00:11] [PASSED] inside another: 2x2+0+0 x 1x1+1+1
[23:00:11] [PASSED] far away: 1x1+0+0 x 1x1+3+6
[23:00:11] [PASSED] points intersecting: 0x0+5+10 x 0x0+5+10
[23:00:11] [PASSED] points not intersecting: 0x0+0+0 x 0x0+5+10
[23:00:11] ============= [PASSED] drm_test_rect_intersect =============
[23:00:11] ================ drm_test_rect_calc_hscale ================
[23:00:11] [PASSED] normal use
[23:00:11] [PASSED] out of max range
[23:00:11] [PASSED] out of min range
[23:00:11] [PASSED] zero dst
[23:00:11] [PASSED] negative src
[23:00:11] [PASSED] negative dst
[23:00:11] ============ [PASSED] drm_test_rect_calc_hscale ============
[23:00:11] ================ drm_test_rect_calc_vscale ================
[23:00:11] [PASSED] normal use
[23:00:11] [PASSED] out of max range
[23:00:11] [PASSED] out of min range
[23:00:11] [PASSED] zero dst
[23:00:11] [PASSED] negative src
[23:00:11] [PASSED] negative dst
[23:00:11] ============ [PASSED] drm_test_rect_calc_vscale ============
[23:00:11] ================== drm_test_rect_rotate ===================
[23:00:11] [PASSED] reflect-x
[23:00:11] [PASSED] reflect-y
[23:00:11] [PASSED] rotate-0
[23:00:11] [PASSED] rotate-90
[23:00:11] [PASSED] rotate-180
[23:00:11] [PASSED] rotate-270
[23:00:11] ============== [PASSED] drm_test_rect_rotate ===============
[23:00:11] ================ drm_test_rect_rotate_inv =================
[23:00:11] [PASSED] reflect-x
[23:00:11] [PASSED] reflect-y
[23:00:11] [PASSED] rotate-0
[23:00:11] [PASSED] rotate-90
[23:00:11] [PASSED] rotate-180
[23:00:11] [PASSED] rotate-270
[23:00:11] ============ [PASSED] drm_test_rect_rotate_inv =============
[23:00:11] ==================== [PASSED] drm_rect =====================
[23:00:11] ============ drm_sysfb_modeset_test (1 subtest) ============
[23:00:11] ============ drm_test_sysfb_build_fourcc_list =============
[23:00:11] [PASSED] no native formats
[23:00:11] [PASSED] XRGB8888 as native format
[23:00:11] [PASSED] remove duplicates
[23:00:11] [PASSED] convert alpha formats
[23:00:11] [PASSED] random formats
[23:00:11] ======== [PASSED] drm_test_sysfb_build_fourcc_list =========
[23:00:11] ============= [PASSED] drm_sysfb_modeset_test ==============
[23:00:11] ================== drm_fixp (2 subtests) ===================
[23:00:11] [PASSED] drm_test_int2fixp
[23:00:11] [PASSED] drm_test_sm2fixp
[23:00:11] ==================== [PASSED] drm_fixp =====================
[23:00:11] ============================================================
[23:00:11] Testing complete. Ran 639 tests: passed: 639
[23:00:11] Elapsed time: 26.244s total, 1.747s configuring, 24.281s building, 0.195s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/ttm/tests/.kunitconfig
[23:00:11] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[23:00:13] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make all compile_commands.json scripts_gdb ARCH=um O=.kunit --jobs=48
[23:00:23] Starting KUnit Kernel (1/1)...
[23:00:23] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[23:00:23] ================= ttm_device (5 subtests) ==================
[23:00:23] [PASSED] ttm_device_init_basic
[23:00:23] [PASSED] ttm_device_init_multiple
[23:00:23] [PASSED] ttm_device_fini_basic
[23:00:23] [PASSED] ttm_device_init_no_vma_man
[23:00:23] ================== ttm_device_init_pools ==================
[23:00:23] [PASSED] No DMA allocations, no DMA32 required
[23:00:23] [PASSED] DMA allocations, DMA32 required
[23:00:23] [PASSED] No DMA allocations, DMA32 required
[23:00:23] [PASSED] DMA allocations, no DMA32 required
[23:00:23] ============== [PASSED] ttm_device_init_pools ==============
[23:00:23] =================== [PASSED] ttm_device ====================
[23:00:23] ================== ttm_pool (8 subtests) ===================
[23:00:23] ================== ttm_pool_alloc_basic ===================
[23:00:23] [PASSED] One page
[23:00:23] [PASSED] More than one page
[23:00:23] [PASSED] Above the allocation limit
[23:00:23] [PASSED] One page, with coherent DMA mappings enabled
[23:00:23] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[23:00:23] ============== [PASSED] ttm_pool_alloc_basic ===============
[23:00:23] ============== ttm_pool_alloc_basic_dma_addr ==============
[23:00:23] [PASSED] One page
[23:00:23] [PASSED] More than one page
[23:00:23] [PASSED] Above the allocation limit
[23:00:23] [PASSED] One page, with coherent DMA mappings enabled
[23:00:23] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[23:00:23] ========== [PASSED] ttm_pool_alloc_basic_dma_addr ==========
[23:00:23] [PASSED] ttm_pool_alloc_order_caching_match
[23:00:23] [PASSED] ttm_pool_alloc_caching_mismatch
[23:00:23] [PASSED] ttm_pool_alloc_order_mismatch
[23:00:23] [PASSED] ttm_pool_free_dma_alloc
[23:00:23] [PASSED] ttm_pool_free_no_dma_alloc
[23:00:23] [PASSED] ttm_pool_fini_basic
[23:00:23] ==================== [PASSED] ttm_pool =====================
[23:00:23] ================ ttm_resource (8 subtests) =================
[23:00:23] ================= ttm_resource_init_basic =================
[23:00:23] [PASSED] Init resource in TTM_PL_SYSTEM
[23:00:23] [PASSED] Init resource in TTM_PL_VRAM
[23:00:23] [PASSED] Init resource in a private placement
[23:00:23] [PASSED] Init resource in TTM_PL_SYSTEM, set placement flags
[23:00:23] ============= [PASSED] ttm_resource_init_basic =============
[23:00:23] [PASSED] ttm_resource_init_pinned
[23:00:23] [PASSED] ttm_resource_fini_basic
[23:00:23] [PASSED] ttm_resource_manager_init_basic
[23:00:23] [PASSED] ttm_resource_manager_usage_basic
[23:00:23] [PASSED] ttm_resource_manager_set_used_basic
[23:00:23] [PASSED] ttm_sys_man_alloc_basic
[23:00:23] [PASSED] ttm_sys_man_free_basic
[23:00:23] ================== [PASSED] ttm_resource ===================
[23:00:23] =================== ttm_tt (15 subtests) ===================
[23:00:23] ==================== ttm_tt_init_basic ====================
[23:00:23] [PASSED] Page-aligned size
[23:00:23] [PASSED] Extra pages requested
[23:00:23] ================ [PASSED] ttm_tt_init_basic ================
[23:00:23] [PASSED] ttm_tt_init_misaligned
[23:00:23] [PASSED] ttm_tt_fini_basic
[23:00:23] [PASSED] ttm_tt_fini_sg
[23:00:23] [PASSED] ttm_tt_fini_shmem
[23:00:23] [PASSED] ttm_tt_create_basic
[23:00:23] [PASSED] ttm_tt_create_invalid_bo_type
[23:00:23] [PASSED] ttm_tt_create_ttm_exists
[23:00:23] [PASSED] ttm_tt_create_failed
[23:00:23] [PASSED] ttm_tt_destroy_basic
[23:00:23] [PASSED] ttm_tt_populate_null_ttm
[23:00:23] [PASSED] ttm_tt_populate_populated_ttm
[23:00:23] [PASSED] ttm_tt_unpopulate_basic
[23:00:23] [PASSED] ttm_tt_unpopulate_empty_ttm
[23:00:23] [PASSED] ttm_tt_swapin_basic
[23:00:23] ===================== [PASSED] ttm_tt ======================
[23:00:23] =================== ttm_bo (14 subtests) ===================
[23:00:23] =========== ttm_bo_reserve_optimistic_no_ticket ===========
[23:00:23] [PASSED] Cannot be interrupted and sleeps
[23:00:23] [PASSED] Cannot be interrupted, locks straight away
[23:00:23] [PASSED] Can be interrupted, sleeps
[23:00:23] ======= [PASSED] ttm_bo_reserve_optimistic_no_ticket =======
[23:00:23] [PASSED] ttm_bo_reserve_locked_no_sleep
[23:00:23] [PASSED] ttm_bo_reserve_no_wait_ticket
[23:00:23] [PASSED] ttm_bo_reserve_double_resv
[23:00:23] [PASSED] ttm_bo_reserve_interrupted
[23:00:23] [PASSED] ttm_bo_reserve_deadlock
[23:00:23] [PASSED] ttm_bo_unreserve_basic
[23:00:23] [PASSED] ttm_bo_unreserve_pinned
[23:00:23] [PASSED] ttm_bo_unreserve_bulk
[23:00:23] [PASSED] ttm_bo_fini_basic
[23:00:23] [PASSED] ttm_bo_fini_shared_resv
[23:00:23] [PASSED] ttm_bo_pin_basic
[23:00:23] [PASSED] ttm_bo_pin_unpin_resource
[23:00:23] [PASSED] ttm_bo_multiple_pin_one_unpin
[23:00:23] ===================== [PASSED] ttm_bo ======================
[23:00:23] ============== ttm_bo_validate (22 subtests) ===============
[23:00:23] ============== ttm_bo_init_reserved_sys_man ===============
[23:00:23] [PASSED] Buffer object for userspace
[23:00:23] [PASSED] Kernel buffer object
[23:00:23] [PASSED] Shared buffer object
[23:00:23] ========== [PASSED] ttm_bo_init_reserved_sys_man ===========
[23:00:23] ============== ttm_bo_init_reserved_mock_man ==============
[23:00:23] [PASSED] Buffer object for userspace
[23:00:23] [PASSED] Kernel buffer object
[23:00:23] [PASSED] Shared buffer object
[23:00:23] ========== [PASSED] ttm_bo_init_reserved_mock_man ==========
[23:00:23] [PASSED] ttm_bo_init_reserved_resv
[23:00:23] ================== ttm_bo_validate_basic ==================
[23:00:23] [PASSED] Buffer object for userspace
[23:00:23] [PASSED] Kernel buffer object
[23:00:23] [PASSED] Shared buffer object
[23:00:23] ============== [PASSED] ttm_bo_validate_basic ==============
[23:00:23] [PASSED] ttm_bo_validate_invalid_placement
[23:00:23] ============= ttm_bo_validate_same_placement ==============
[23:00:23] [PASSED] System manager
[23:00:23] [PASSED] VRAM manager
[23:00:23] ========= [PASSED] ttm_bo_validate_same_placement ==========
[23:00:23] [PASSED] ttm_bo_validate_failed_alloc
[23:00:23] [PASSED] ttm_bo_validate_pinned
[23:00:23] [PASSED] ttm_bo_validate_busy_placement
[23:00:23] ================ ttm_bo_validate_multihop =================
[23:00:23] [PASSED] Buffer object for userspace
[23:00:23] [PASSED] Kernel buffer object
[23:00:23] [PASSED] Shared buffer object
[23:00:23] ============ [PASSED] ttm_bo_validate_multihop =============
[23:00:23] ========== ttm_bo_validate_no_placement_signaled ==========
[23:00:23] [PASSED] Buffer object in system domain, no page vector
[23:00:23] [PASSED] Buffer object in system domain with an existing page vector
[23:00:23] ====== [PASSED] ttm_bo_validate_no_placement_signaled ======
[23:00:23] ======== ttm_bo_validate_no_placement_not_signaled ========
[23:00:23] [PASSED] Buffer object for userspace
[23:00:23] [PASSED] Kernel buffer object
[23:00:23] [PASSED] Shared buffer object
[23:00:23] ==== [PASSED] ttm_bo_validate_no_placement_not_signaled ====
[23:00:23] [PASSED] ttm_bo_validate_move_fence_signaled
[23:00:23] ========= ttm_bo_validate_move_fence_not_signaled =========
[23:00:23] [PASSED] Waits for GPU
[23:00:23] [PASSED] Tries to lock straight away
[23:00:23] ===== [PASSED] ttm_bo_validate_move_fence_not_signaled =====
[23:00:23] [PASSED] ttm_bo_validate_swapout
[23:00:23] [PASSED] ttm_bo_validate_happy_evict
[23:00:23] [PASSED] ttm_bo_validate_all_pinned_evict
[23:00:23] [PASSED] ttm_bo_validate_allowed_only_evict
[23:00:23] [PASSED] ttm_bo_validate_deleted_evict
[23:00:23] [PASSED] ttm_bo_validate_busy_domain_evict
[23:00:23] [PASSED] ttm_bo_validate_evict_gutting
[23:00:23] [PASSED] ttm_bo_validate_recrusive_evict
[23:00:23] ================= [PASSED] ttm_bo_validate =================
[23:00:23] ============================================================
[23:00:23] Testing complete. Ran 102 tests: passed: 102
[23:00:23] Elapsed time: 11.583s total, 1.720s configuring, 9.648s building, 0.185s running
+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel
^ permalink raw reply
* [GIT PULL] Kbuild updates for 7.2 #2
From: Nathan Chancellor @ 2026-06-24 22:57 UTC (permalink / raw)
To: Linus Torvalds; +Cc: linux-kernel, Nicolas Schier, linux-kbuild
Hi Linus,
Please pull this second round of Kbuild changes for 7.2. It has all been
in next for at least a few cycles. If there are any problems, please let
me know.
Cheers,
Nathan
The following changes since commit 1a1e62a5a48494cdf33e3bfb82fb8f408da7c4cc:
kconfig: tests: fix typo in comment (2026-06-09 16:28:46 -0700)
are available in the Git repository at:
https://git.kernel.org/pub/scm/linux/kernel/git/kbuild/linux.git tags/kbuild-7.2-2
for you to fetch changes up to 645323a7f4e55bb3abb0cb003b6b9dc715c8dc21:
kconfig: add optional warnings for changed input values (2026-06-18 11:46:32 -0700)
----------------------------------------------------------------
Second round of Kbuild changes for 7.2
- Link host programs with ld.lld when $(LLVM) is set to match user's
expectations that LLVM will be used exclusively during the build
process
- Fix modpost warnings from static variable name promotion that can
happen more aggressively with the recently merged distributed ThinLTO
support
- Add an optional warning for user-supplied Kconfig values that changed
after processing, such as out of range values or options that have
incorrect / missing dependencies
Signed-off-by: Nathan Chancellor <nathan@kernel.org>
----------------------------------------------------------------
Nathan Chancellor (1):
kbuild: Use ld.lld for linking host programs when LLVM is set
Pengpeng Hou (1):
kconfig: add optional warnings for changed input values
Rong Xu (1):
modpost: Ignore Clang LTO suffixes in symbol matching
Documentation/kbuild/kconfig.rst | 5 +
Makefile | 3 +
scripts/kconfig/confdata.c | 106 ++++++++++++++++++++-
scripts/kconfig/tests/conftest.py | 8 +-
scripts/kconfig/tests/warn_changed_input/Kconfig | 40 ++++++++
.../kconfig/tests/warn_changed_input/__init__.py | 33 +++++++
scripts/kconfig/tests/warn_changed_input/config | 3 +
.../tests/warn_changed_input/expected_config | 6 ++
.../tests/warn_changed_input/expected_defconfig | 1 +
.../tests/warn_changed_input/expected_stderr | 4 +
scripts/mod/modpost.c | 2 +-
11 files changed, 204 insertions(+), 7 deletions(-)
create mode 100644 scripts/kconfig/tests/warn_changed_input/Kconfig
create mode 100644 scripts/kconfig/tests/warn_changed_input/__init__.py
create mode 100644 scripts/kconfig/tests/warn_changed_input/config
create mode 100644 scripts/kconfig/tests/warn_changed_input/expected_config
create mode 100644 scripts/kconfig/tests/warn_changed_input/expected_defconfig
create mode 100644 scripts/kconfig/tests/warn_changed_input/expected_stderr
^ permalink raw reply
* Re: [PATCH 7/7] i2c: nomadik: add support for I2C_XFER_V2 - detailed fault reporting
From: Linus Walleij @ 2026-06-24 22:56 UTC (permalink / raw)
To: Dmitry Guzman
Cc: Andi Shyti, Steven Rostedt, Masami Hiramatsu, Mathieu Desnoyers,
linux-i2c, linux-kernel, linux-trace-kernel, linux-arm-kernel
In-Reply-To: <20260623-i2c-fault-reporting-v1-7-6db1a8aabf18@mobileye.com>
On Tue, Jun 23, 2026 at 6:32 PM Dmitry Guzman
<Dmitry.Guzman@mobileye.com> wrote:
> I2C_XFER_V2 is a new API that allows I2C clients to get the detailed
> report in case of transmission failure. Previously, the only information
> returned by I2C bus controller was the error code; there was no way to
> find out how many messages or bytes in a certain message have been sent
> or received until the fault condition occurred.
>
> This commit introduces support of this feature in i2c-nomadik driver.
>
> Signed-off-by: Dmitry Guzman <Dmitry.Guzman@mobileye.com>
I don't fully understand patch 1 but if that is fine, this is fine:
Acked-by: Linus Walleij <linusw@kernel.org>
Yours,
Linus Walleij
^ permalink raw reply
* Re: [PATCH 6/7] i2c: nomadik: add quirks max_len=2047 and no_zero_len_read
From: Linus Walleij @ 2026-06-24 22:55 UTC (permalink / raw)
To: Dmitry Guzman
Cc: Andi Shyti, Steven Rostedt, Masami Hiramatsu, Mathieu Desnoyers,
linux-i2c, linux-kernel, linux-trace-kernel, linux-arm-kernel
In-Reply-To: <20260623-i2c-fault-reporting-v1-6-6db1a8aabf18@mobileye.com>
On Tue, Jun 23, 2026 at 6:32 PM Dmitry Guzman
<Dmitry.Guzman@mobileye.com> wrote:
> In Nomadik I2c controller, register I2C_MCR has 11-bit wide LENGTH
> field. Its maximum value is 2047, so this is the maximum length of a
> single message. It is less than the common maximum I2C message length in
> I2C subsystem (8192), so define a quirk in order to report the
> unsupported message without any attempt to transfer it.
>
> Zero length reading doesn't work properly on this controller, so add
> `I2C_AQ_NO_ZERO_LEN_READ` quirk flag.
>
> Signed-off-by: Dmitry Guzman <Dmitry.Guzman@mobileye.com>
Excellent improvements, almost a Fixes: patch.
Reviewed-by: Linus Walleij <linusw@kernel.org>
Yours,
Linus Walleij
^ permalink raw reply
* Re: [PATCH 5/7] i2c: nomadik: change print level for fault messages to debug
From: Linus Walleij @ 2026-06-24 22:54 UTC (permalink / raw)
To: Dmitry Guzman
Cc: Andi Shyti, Steven Rostedt, Masami Hiramatsu, Mathieu Desnoyers,
linux-i2c, linux-kernel, linux-trace-kernel, linux-arm-kernel
In-Reply-To: <20260623-i2c-fault-reporting-v1-5-6db1a8aabf18@mobileye.com>
On Tue, Jun 23, 2026 at 6:32 PM Dmitry Guzman
<Dmitry.Guzman@mobileye.com> wrote:
> i2c-nomadik driver prints error message on every faulted message. This
> is not a good practice, because in I2C a fault not always is an error,
> sometimes it is the expected result. For example, scanning bus with
> `i2cdetects` prints over 100 messages in dmesg (two messages per each
> target address).
>
> To avoid excessive prints in the log, change the print level from err to
> debug.
>
> Signed-off-by: Dmitry Guzman <Dmitry.Guzman@mobileye.com>
Reviewed-by: Linus Walleij <linusw@kernel.org>
Yours,
Linus Walleij
^ permalink raw reply
* Re: [PATCH 4/7] i2c: nomadik: return proper fault codes
From: Linus Walleij @ 2026-06-24 22:53 UTC (permalink / raw)
To: Dmitry Guzman
Cc: Andi Shyti, Steven Rostedt, Masami Hiramatsu, Mathieu Desnoyers,
linux-i2c, linux-kernel, linux-trace-kernel, linux-arm-kernel
In-Reply-To: <20260623-i2c-fault-reporting-v1-4-6db1a8aabf18@mobileye.com>
On Tue, Jun 23, 2026 at 6:32 PM Dmitry Guzman
<Dmitry.Guzman@mobileye.com> wrote:
> I2C documentation Documentation/i2c/fault-codes.rst defines fault codes
> for different negative results in I2C transmittion. Previously,
> i2c-nomadik driver didn't implement them properly - it returned
> ETIMEDOUT on most errors and EIO on master arbitration lost.
>
> To comply with the documentation, return the proper fault codes for
> different conditions, namely:
>
> - EAGAIN if arbitration lost
> - EOVERFLOW if message is too long (>2047 bytes)
> - ENXIO if target address is not acknowledged
> - EIO on other errors detected by controller (for example, NACK on data)
> - ETIMEDOUT if driver gets timeout waiting for message completion
> without any fault condition detected by the controller (for example,
> too long message, or SDA/SCL line stuck on 0).
>
> Signed-off-by: Dmitry Guzman <Dmitry.Guzman@mobileye.com>
Reviewed-by: Linus Walleij <linusw@kernel.org>
Yours,
Linus Walleij
^ permalink raw reply
* [PATCH net v3] sctp: add INIT verification after cookie unpacking
From: Xin Long @ 2026-06-24 22:53 UTC (permalink / raw)
To: network dev, linux-sctp
Cc: davem, kuba, Eric Dumazet, Paolo Abeni, Simon Horman,
Marcelo Ricardo Leitner
In SCTP handshake, the INIT chunk is initially processed by the server
and embedded into the cookie carried in INIT-ACK. The client then
returns this cookie via COOKIE-ECHO, where the server unpacks it and
reconstructs the original INIT chunk.
When cookie authentication is enabled, the cookie contents are protected
against tampering, so reusing the unpacked INIT without re-verification
is safe.
However, when cookie authentication is disabled, the reconstructed INIT
can no longer be trusted. In this case, the INIT must be explicitly
validated after unpacking to avoid processing potentially tampered data.
Add sctp_verify_init() checks after cookie unpacking in COOKIE-ECHO
processing paths (sctp_sf_do_5_1D_ce() and sctp_sf_do_5_2_4_dupcook())
when cookie_auth_enable is disabled. On failure, the new association is
freed and the packet is discarded.
Also tighten cookie validation in sctp_unpack_cookie() by verifying the
embedded chunk type is SCTP_CID_INIT before treating it as an INIT
chunk.
Finally, update sctp_verify_init() to validate parameter bounds using
the actual embedded INIT length instead of chunk->chunk_end, since the
INIT stored in COOKIE-ECHO may not span the entire chunk buffer.
Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
Signed-off-by: Xin Long <lucien.xin@gmail.com>
---
v2:
- Because of sctp_abort_on_init_err() param change in patch 1/2,
pass cid and not chunk.
- Use SCTP_PAD4() around ntohs(peer_init->chunk_hdr.length) when
checking param.v in sctp_verify_init() to make Sashiko happy.
v3:
- Validate the embedded INIT chunk type in sctp_unpack_cookie(), as
noted by Sashiko.
- Discard the packet if embedded INIT chunk validation fails,
consistent with malformed cookie handling.
---
net/sctp/sm_make_chunk.c | 5 ++++-
net/sctp/sm_statefuns.c | 36 +++++++++++++++++++++++++++++++++---
2 files changed, 37 insertions(+), 4 deletions(-)
diff --git a/net/sctp/sm_make_chunk.c b/net/sctp/sm_make_chunk.c
index 41958b8e59fd..8adac9e0cd66 100644
--- a/net/sctp/sm_make_chunk.c
+++ b/net/sctp/sm_make_chunk.c
@@ -1761,6 +1761,8 @@ struct sctp_association *sctp_unpack_cookie(
bear_cookie = &cookie->c;
ch = (struct sctp_chunkhdr *)(bear_cookie + 1);
+ if (ch->type != SCTP_CID_INIT)
+ goto malformed;
chlen = ntohs(ch->length);
if (chlen < sizeof(struct sctp_init_chunk))
goto malformed;
@@ -2298,7 +2300,8 @@ int sctp_verify_init(struct net *net, const struct sctp_endpoint *ep,
* VIOLATION error. We build the ERROR chunk here and let the normal
* error handling code build and send the packet.
*/
- if (param.v != (void *)chunk->chunk_end)
+ if (param.v != (void *)peer_init +
+ SCTP_PAD4(ntohs(peer_init->chunk_hdr.length)))
return sctp_process_inv_paramlength(asoc, param.p, chunk, errp);
/* The only missing mandatory param possible today is
diff --git a/net/sctp/sm_statefuns.c b/net/sctp/sm_statefuns.c
index 8e920cef0858..d23d935e128e 100644
--- a/net/sctp/sm_statefuns.c
+++ b/net/sctp/sm_statefuns.c
@@ -707,11 +707,12 @@ enum sctp_disposition sctp_sf_do_5_1D_ce(struct net *net,
struct sctp_cmd_seq *commands)
{
struct sctp_ulpevent *ev, *ai_ev = NULL, *auth_ev = NULL;
+ struct sctp_chunk *err_chk_p = NULL;
struct sctp_association *new_asoc;
struct sctp_init_chunk *peer_init;
struct sctp_chunk *chunk = arg;
- struct sctp_chunk *err_chk_p;
struct sctp_chunk *repl;
+ enum sctp_cid cid;
struct sock *sk;
int error = 0;
@@ -785,6 +786,19 @@ enum sctp_disposition sctp_sf_do_5_1D_ce(struct net *net,
}
}
+ peer_init = (struct sctp_init_chunk *)(chunk->subh.cookie_hdr + 1);
+ cid = peer_init->chunk_hdr.type;
+ if (!sctp_sk(sk)->cookie_auth_enable &&
+ !sctp_verify_init(net, ep, asoc, cid, peer_init, chunk,
+ &err_chk_p)) {
+ sctp_association_free(new_asoc);
+ if (err_chk_p)
+ sctp_chunk_free(err_chk_p);
+ return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands);
+ }
+ if (err_chk_p)
+ sctp_chunk_free(err_chk_p);
+
if (security_sctp_assoc_request(new_asoc, chunk->head_skb ?: chunk->skb)) {
sctp_association_free(new_asoc);
return sctp_sf_pdiscard(net, ep, asoc, type, arg, commands);
@@ -798,7 +812,6 @@ enum sctp_disposition sctp_sf_do_5_1D_ce(struct net *net,
/* This is a brand-new association, so these are not yet side
* effects--it is safe to run them here.
*/
- peer_init = (struct sctp_init_chunk *)(chunk->subh.cookie_hdr + 1);
if (!sctp_process_init(new_asoc, chunk,
&chunk->subh.cookie_hdr->c.peer_addr,
peer_init, GFP_ATOMIC))
@@ -2215,10 +2228,12 @@ enum sctp_disposition sctp_sf_do_5_2_4_dupcook(
void *arg,
struct sctp_cmd_seq *commands)
{
+ struct sctp_chunk *err_chk_p = NULL;
struct sctp_association *new_asoc;
+ struct sctp_init_chunk *peer_init;
struct sctp_chunk *chunk = arg;
enum sctp_disposition retval;
- struct sctp_chunk *err_chk_p;
+ enum sctp_cid cid;
int error = 0;
char action;
@@ -2287,6 +2302,21 @@ enum sctp_disposition sctp_sf_do_5_2_4_dupcook(
switch (action) {
case 'A': /* Association restart. */
case 'B': /* Collision case B. */
+ peer_init = (struct sctp_init_chunk *)
+ (chunk->subh.cookie_hdr + 1);
+ cid = peer_init->chunk_hdr.type;
+ if (!sctp_sk(ep->base.sk)->cookie_auth_enable &&
+ !sctp_verify_init(net, ep, asoc, cid, peer_init, chunk,
+ &err_chk_p)) {
+ sctp_association_free(new_asoc);
+ if (err_chk_p)
+ sctp_chunk_free(err_chk_p);
+ return sctp_sf_pdiscard(net, ep, asoc, type, arg,
+ commands);
+ }
+ if (err_chk_p)
+ sctp_chunk_free(err_chk_p);
+ fallthrough;
case 'D': /* Collision case D. */
/* Update socket peer label if first association. */
if (security_sctp_assoc_request((struct sctp_association *)asoc,
--
2.47.1
^ permalink raw reply related
* Re: [moderation/CI] Re: Data in direntry (dirdata) feature
From: Pimyn Girgis @ 2026-06-24 22:52 UTC (permalink / raw)
To: syzbot ci; +Cc: syzkaller-upstream-moderation, syzbot
In-Reply-To: <6a3c1cda.bd346d9a.250aae.0005.GAE@google.com>
#syz upstream
On Wed, Jun 24, 2026 at 8:07 PM syzbot ci
<syzbot+ci1e5a0e2f4d024743@syzkaller.appspotmail.com> wrote:
>
> syzbot ci has tested the following series
>
> [v4] Data in direntry (dirdata) feature
> https://lore.kernel.org/all/20260624133642.18438-1-ablagodarenko@thelustrecollective.com
> * [PATCH v4 01/11] ext4: validate count against limit in ext4_dx_csum_verify/_set
> * [PATCH v4 02/11] ext4: replace ext4_dir_entry with ext4_dir_entry_2
> * [PATCH v4 03/11] ext4: add ext4_dir_entry_is_tail()
> * [PATCH v4 04/11] ext4: refactor dx_root to support variable dirent sizes
> * [PATCH v4 05/11] ext4: add dirdata format definitions and access helpers
> * [PATCH v4 06/11] ext4: preserve dirdata bits in get_dtype()
> * [PATCH v4 07/11] ext4: add ext4_dir_entry_len() and harden dirdata parsing
> * [PATCH v4 08/11] ext4: rename ext4_dir_rec_len() and clarify dirdata usage
> * [PATCH v4 09/11] ext4: dirdata feature
> * [PATCH v4 10/11] ext4: add dirdata set/get helpers
> * [PATCH v4 11/11] ext4: Add EXT4_IOC_SET_LUFID ioctl for setting LUFID on directory entries
>
> and found the following issues:
> * KASAN: slab-use-after-free Read in ext4_inlinedir_to_tree
> * KASAN: use-after-free Read in ext4_inlinedir_to_tree
>
> Full report is available here:
> https://ci.syzbot.org/series/7075f9f8-5dad-4e13-83ee-2f76e1e06dcf
>
> ***
>
> KASAN: slab-use-after-free Read in ext4_inlinedir_to_tree
>
> tree: torvalds
> URL: https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux
> base: 840ef6c78e6a2f694b578ecb9063241c992aaa9e
> arch: amd64
> compiler: Debian clang version 22.1.6 (++20260514074242+fc4aad7b5db3-1~exp1~20260514074407.73), Debian LLD 22.1.6
> config: https://ci.syzbot.org/builds/c9c607fc-012f-4e4c-88e7-89d5bade9f75/config
> syz repro: https://ci.syzbot.org/findings/3badb95c-16ec-4f87-adf6-da2aca94c39c/syz_repro
>
> EXT4-fs (loop1): mounted filesystem 00000000-0000-0000-0000-000000000000 r/w without journal. Quota mode: none.
> ==================================================================
> BUG: KASAN: slab-use-after-free in ext4_dirent_get_data_len fs/ext4/ext4.h:4156 [inline]
> BUG: KASAN: slab-use-after-free in ext4_dir_entry_len fs/ext4/ext4.h:4189 [inline]
> BUG: KASAN: slab-use-after-free in ext4_inlinedir_to_tree+0x864/0x1030 fs/ext4/inline.c:1339
> Read of size 1 at addr ffff888108ff7c19 by task syz.1.18/5891
>
> CPU: 0 UID: 0 PID: 5891 Comm: syz.1.18 Not tainted syzkaller #0 PREEMPT(full)
> Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.2-debian-1.16.2-1 04/01/2014
> Call Trace:
> <TASK>
> dump_stack_lvl+0xe8/0x150 lib/dump_stack.c:120
> print_address_description+0x55/0x1e0 mm/kasan/report.c:378
> print_report+0x58/0x70 mm/kasan/report.c:482
> kasan_report+0x117/0x150 mm/kasan/report.c:595
> ext4_dirent_get_data_len fs/ext4/ext4.h:4156 [inline]
> ext4_dir_entry_len fs/ext4/ext4.h:4189 [inline]
> ext4_inlinedir_to_tree+0x864/0x1030 fs/ext4/inline.c:1339
> ext4_htree_fill_tree+0x4b9/0x2140 fs/ext4/namei.c:1206
> ext4_dx_readdir fs/ext4/dir.c:600 [inline]
> ext4_readdir+0x2e2a/0x3720 fs/ext4/dir.c:146
> iterate_dir+0x2e2/0x4d0 fs/readdir.c:110
> ovl_dir_read+0x141/0x4a0 fs/overlayfs/readdir.c:388
> ovl_check_d_type_supported+0xc5/0x150 fs/overlayfs/readdir.c:1167
> ovl_make_workdir fs/overlayfs/super.c:695 [inline]
> ovl_get_workdir fs/overlayfs/super.c:836 [inline]
> ovl_fill_super_creds fs/overlayfs/super.c:1449 [inline]
> ovl_fill_super+0x3a43/0x5d40 fs/overlayfs/super.c:1560
> vfs_get_super fs/super.c:1267 [inline]
> get_tree_nodev+0xbb/0x150 fs/super.c:1286
> vfs_get_tree+0x92/0x2a0 fs/super.c:1694
> fc_mount fs/namespace.c:1198 [inline]
> do_new_mount_fc fs/namespace.c:3765 [inline]
> do_new_mount+0x319/0xdc0 fs/namespace.c:3841
> do_mount fs/namespace.c:4174 [inline]
> __do_sys_mount fs/namespace.c:4390 [inline]
> __se_sys_mount+0x31d/0x420 fs/namespace.c:4367
> do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
> do_syscall_64+0x174/0x580 arch/x86/entry/syscall_64.c:94
> entry_SYSCALL_64_after_hwframe+0x77/0x7f
> RIP: 0033:0x7f09e159ce59
> Code: ff c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 e8 ff ff ff f7 d8 64 89 01 48
> RSP: 002b:00007f09e24a9028 EFLAGS: 00000246 ORIG_RAX: 00000000000000a5
> RAX: ffffffffffffffda RBX: 00007f09e1815fa0 RCX: 00007f09e159ce59
> RDX: 0000200000000000 RSI: 0000200000000100 RDI: 0000000000000000
> RBP: 00007f09e1632e6f R08: 00002000000000c0 R09: 0000000000000000
> R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
> R13: 00007f09e1816038 R14: 00007f09e1815fa0 R15: 00007fff17222ac8
> </TASK>
>
> Allocated by task 5642:
> kasan_save_stack mm/kasan/common.c:57 [inline]
> kasan_save_track+0x3e/0x80 mm/kasan/common.c:78
> poison_kmalloc_redzone mm/kasan/common.c:398 [inline]
> __kasan_kmalloc+0x93/0xb0 mm/kasan/common.c:415
> kasan_kmalloc include/linux/kasan.h:263 [inline]
> __do_kmalloc_node mm/slub.c:5362 [inline]
> __kmalloc_node_track_caller_noprof+0x4c3/0x730 mm/slub.c:5497
> kmemdup_noprof+0x2b/0x70 mm/util.c:138
> kmemdup_noprof include/linux/fortify-string.h:715 [inline]
> xfrm6_net_sysctl_init net/ipv6/xfrm6_policy.c:206 [inline]
> xfrm6_net_init+0x86/0x180 net/ipv6/xfrm6_policy.c:261
> ops_init+0x35d/0x5d0 net/core/net_namespace.c:137
> setup_net+0x118/0x350 net/core/net_namespace.c:446
> copy_net_ns+0x4f9/0x720 net/core/net_namespace.c:579
> create_new_namespaces+0x3f0/0x6b0 kernel/nsproxy.c:132
> unshare_nsproxy_namespaces+0x149/0x190 kernel/nsproxy.c:234
> ksys_unshare+0x57d/0xa00 kernel/fork.c:3267
> __do_sys_unshare kernel/fork.c:3341 [inline]
> __se_sys_unshare kernel/fork.c:3339 [inline]
> __x64_sys_unshare+0x38/0x50 kernel/fork.c:3339
> do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
> do_syscall_64+0x174/0x580 arch/x86/entry/syscall_64.c:94
> entry_SYSCALL_64_after_hwframe+0x77/0x7f
>
> Freed by task 12:
> kasan_save_stack mm/kasan/common.c:57 [inline]
> kasan_save_track+0x3e/0x80 mm/kasan/common.c:78
> kasan_save_free_info+0x40/0x50 mm/kasan/generic.c:584
> poison_slab_object mm/kasan/common.c:253 [inline]
> __kasan_slab_free+0x5c/0x80 mm/kasan/common.c:285
> kasan_slab_free include/linux/kasan.h:235 [inline]
> slab_free_hook mm/slub.c:2705 [inline]
> slab_free mm/slub.c:6405 [inline]
> kfree+0x1c5/0x640 mm/slub.c:6720
> xfrm6_net_sysctl_exit net/ipv6/xfrm6_policy.c:238 [inline]
> xfrm6_net_exit+0x79/0xa0 net/ipv6/xfrm6_policy.c:270
> ops_exit_list net/core/net_namespace.c:199 [inline]
> ops_undo_list+0x43d/0x8d0 net/core/net_namespace.c:252
> cleanup_net+0x572/0x810 net/core/net_namespace.c:702
> process_one_work kernel/workqueue.c:3322 [inline]
> process_scheduled_works+0xa8e/0x14e0 kernel/workqueue.c:3405
> worker_thread+0xa47/0xfb0 kernel/workqueue.c:3486
> kthread+0x388/0x470 kernel/kthread.c:436
> ret_from_fork+0x514/0xb70 arch/x86/kernel/process.c:158
> ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:245
>
> The buggy address belongs to the object at ffff888108ff7c00
> which belongs to the cache kmalloc-64 of size 64
> The buggy address is located 25 bytes inside of
> freed 64-byte region [ffff888108ff7c00, ffff888108ff7c40)
>
> The buggy address belongs to the physical page:
> page: refcount:0 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x108ff7
> flags: 0x17ff00000000000(node=0|zone=2|lastcpupid=0x7ff)
> page_type: f5(slab)
> raw: 017ff00000000000 ffff8881000418c0 dead000000000100 dead000000000122
> raw: 0000000000000000 0000000800200020 00000000f5000000 0000000000000000
> page dumped because: kasan: bad access detected
> page_owner tracks the page as allocated
> page last allocated via order 0, migratetype Unmovable, gfp_mask 0xd2cc0(GFP_KERNEL|__GFP_NOWARN|__GFP_NORETRY|__GFP_COMP|__GFP_NOMEMALLOC), pid 1, tgid 1 (swapper/0), ts 14581267674, free_ts 0
> set_page_owner include/linux/page_owner.h:32 [inline]
> post_alloc_hook+0x1f9/0x250 mm/page_alloc.c:1859
> prep_new_page mm/page_alloc.c:1867 [inline]
> get_page_from_freelist+0x21fa/0x2270 mm/page_alloc.c:3946
> __alloc_frozen_pages_noprof+0x18d/0x380 mm/page_alloc.c:5304
> alloc_slab_page mm/slub.c:3294 [inline]
> allocate_slab+0x79/0x5e0 mm/slub.c:3408
> new_slab mm/slub.c:3454 [inline]
> refill_objects+0x2d5/0x350 mm/slub.c:7338
> refill_sheaf mm/slub.c:2832 [inline]
> __pcs_replace_empty_main+0x2bf/0x6b0 mm/slub.c:4703
> alloc_from_pcs mm/slub.c:4801 [inline]
> slab_alloc_node mm/slub.c:4933 [inline]
> __do_kmalloc_node mm/slub.c:5361 [inline]
> __kmalloc_noprof+0x485/0x720 mm/slub.c:5387
> _kmalloc_noprof include/linux/slab.h:973 [inline]
> _kzalloc_noprof include/linux/slab.h:1290 [inline]
> kobject_get_path+0xc5/0x2f0 lib/kobject.c:161
> kobject_uevent_env+0x29e/0x9e0 lib/kobject_uevent.c:548
> device_add+0x544/0xb80 drivers/base/core.c:3738
> device_create_groups_vargs drivers/base/core.c:4454 [inline]
> device_create+0x269/0x300 drivers/base/core.c:4493
> mon_bin_add+0xb6/0x130 drivers/usb/mon/mon_bin.c:1371
> mon_bus_init+0x162/0x2a0 drivers/usb/mon/mon_main.c:291
> mon_bus_add drivers/usb/mon/mon_main.c:188 [inline]
> mon_notify+0x10c/0x3f0 drivers/usb/mon/mon_main.c:219
> notifier_call_chain+0x1a5/0x3d0 kernel/notifier.c:85
> blocking_notifier_call_chain+0x6a/0x90 kernel/notifier.c:380
> page_owner free stack trace missing
>
> Memory state around the buggy address:
> ffff888108ff7b00: 00 00 00 00 00 00 00 04 fc fc fc fc fc fc fc fc
> ffff888108ff7b80: fa fb fb fb fb fb fb fb fc fc fc fc fc fc fc fc
> >ffff888108ff7c00: fa fb fb fb fb fb fb fb fc fc fc fc fc fc fc fc
> ^
> ffff888108ff7c80: 00 00 00 00 00 00 00 fc fc fc fc fc fc fc fc fc
> ffff888108ff7d00: 00 00 00 00 00 00 fc fc fc fc fc fc fc fc fc fc
> ==================================================================
>
>
> ***
>
> KASAN: use-after-free Read in ext4_inlinedir_to_tree
>
> tree: torvalds
> URL: https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux
> base: 840ef6c78e6a2f694b578ecb9063241c992aaa9e
> arch: amd64
> compiler: Debian clang version 22.1.6 (++20260514074242+fc4aad7b5db3-1~exp1~20260514074407.73), Debian LLD 22.1.6
> config: https://ci.syzbot.org/builds/c9c607fc-012f-4e4c-88e7-89d5bade9f75/config
> syz repro: https://ci.syzbot.org/findings/560b0247-7e29-4a4c-91b8-c73d275cb34f/syz_repro
>
> loop0: lost filesystem error report for type 5 error -117
> EXT4-fs (loop0): mounted filesystem 00000000-0000-0000-0000-000000000000 r/w without journal. Quota mode: none.
> ==================================================================
> BUG: KASAN: use-after-free in ext4_dirent_get_data_len fs/ext4/ext4.h:4156 [inline]
> BUG: KASAN: use-after-free in ext4_dir_entry_len fs/ext4/ext4.h:4189 [inline]
> BUG: KASAN: use-after-free in ext4_inlinedir_to_tree+0x864/0x1030 fs/ext4/inline.c:1339
> Read of size 1 at addr ffff888113752019 by task syz.0.17/5794
>
> CPU: 0 UID: 0 PID: 5794 Comm: syz.0.17 Not tainted syzkaller #0 PREEMPT(full)
> Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.2-debian-1.16.2-1 04/01/2014
> Call Trace:
> <TASK>
> dump_stack_lvl+0xe8/0x150 lib/dump_stack.c:120
> print_address_description+0x55/0x1e0 mm/kasan/report.c:378
> print_report+0x58/0x70 mm/kasan/report.c:482
> kasan_report+0x117/0x150 mm/kasan/report.c:595
> ext4_dirent_get_data_len fs/ext4/ext4.h:4156 [inline]
> ext4_dir_entry_len fs/ext4/ext4.h:4189 [inline]
> ext4_inlinedir_to_tree+0x864/0x1030 fs/ext4/inline.c:1339
> ext4_htree_fill_tree+0x4b9/0x2140 fs/ext4/namei.c:1206
> ext4_dx_readdir fs/ext4/dir.c:600 [inline]
> ext4_readdir+0x2e2a/0x3720 fs/ext4/dir.c:146
> iterate_dir+0x2e2/0x4d0 fs/readdir.c:110
> ovl_dir_read+0x141/0x4a0 fs/overlayfs/readdir.c:388
> ovl_check_d_type_supported+0xc5/0x150 fs/overlayfs/readdir.c:1167
> ovl_make_workdir fs/overlayfs/super.c:695 [inline]
> ovl_get_workdir fs/overlayfs/super.c:836 [inline]
> ovl_fill_super_creds fs/overlayfs/super.c:1449 [inline]
> ovl_fill_super+0x3a43/0x5d40 fs/overlayfs/super.c:1560
> vfs_get_super fs/super.c:1267 [inline]
> get_tree_nodev+0xbb/0x150 fs/super.c:1286
> vfs_get_tree+0x92/0x2a0 fs/super.c:1694
> fc_mount fs/namespace.c:1198 [inline]
> do_new_mount_fc fs/namespace.c:3765 [inline]
> do_new_mount+0x319/0xdc0 fs/namespace.c:3841
> do_mount fs/namespace.c:4174 [inline]
> __do_sys_mount fs/namespace.c:4390 [inline]
> __se_sys_mount+0x31d/0x420 fs/namespace.c:4367
> do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
> do_syscall_64+0x174/0x580 arch/x86/entry/syscall_64.c:94
> entry_SYSCALL_64_after_hwframe+0x77/0x7f
> RIP: 0033:0x7f427399ce59
> Code: ff c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 e8 ff ff ff f7 d8 64 89 01 48
> RSP: 002b:00007ffce99c0f38 EFLAGS: 00000246 ORIG_RAX: 00000000000000a5
> RAX: ffffffffffffffda RBX: 00007f4273c15fa0 RCX: 00007f427399ce59
> RDX: 0000200000000000 RSI: 0000200000000100 RDI: 0000000000000000
> RBP: 00007f4273a32e6f R08: 00002000000000c0 R09: 0000000000000000
> R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
> R13: 00007f4273c15fac R14: 00007f4273c15fa0 R15: 00007f4273c15fa0
> </TASK>
>
> The buggy address belongs to the physical page:
> page: refcount:0 mapcount:0 mapping:0000000000000000 index:0xffff888113752e00 pfn:0x113752
> flags: 0x17ff00000000000(node=0|zone=2|lastcpupid=0x7ff)
> raw: 017ff00000000000 ffffea0004296d08 ffffea0004501b08 0000000000000000
> raw: ffff888113752e00 0000000000000000 00000000ffffffff 0000000000000000
> page dumped because: kasan: bad access detected
> page_owner tracks the page as freed
> page last allocated via order 1, migratetype Unmovable, gfp_mask 0xd20c0(__GFP_IO|__GFP_FS|__GFP_NOWARN|__GFP_NORETRY|__GFP_COMP|__GFP_NOMEMALLOC), pid 5462, tgid 5462 (rm), ts 46014589837, free_ts 77936825094
> set_page_owner include/linux/page_owner.h:32 [inline]
> post_alloc_hook+0x1f9/0x250 mm/page_alloc.c:1859
> prep_new_page mm/page_alloc.c:1867 [inline]
> get_page_from_freelist+0x21fa/0x2270 mm/page_alloc.c:3946
> __alloc_frozen_pages_noprof+0x18d/0x380 mm/page_alloc.c:5304
> alloc_slab_page mm/slub.c:3294 [inline]
> allocate_slab+0x79/0x5e0 mm/slub.c:3408
> new_slab mm/slub.c:3454 [inline]
> refill_objects+0x2d5/0x350 mm/slub.c:7338
> refill_sheaf mm/slub.c:2832 [inline]
> __prefill_sheaf_pfmemalloc mm/slub.c:5035 [inline]
> kmem_cache_prefill_sheaf+0x2fb/0x550 mm/slub.c:5123
> mt_get_sheaf lib/maple_tree.c:154 [inline]
> mas_alloc_nodes+0x1c2/0x350 lib/maple_tree.c:1119
> mas_preallocate+0x2cf/0x630 lib/maple_tree.c:4961
> vma_iter_prealloc mm/vma.h:577 [inline]
> __split_vma+0x318/0xa50 mm/vma.c:529
> vms_gather_munmap_vmas+0x322/0x1370 mm/vma.c:1427
> __mmap_setup mm/vma.c:2439 [inline]
> __mmap_region mm/vma.c:2756 [inline]
> mmap_region+0x8f9/0x2310 mm/vma.c:2860
> do_mmap+0xc3b/0x10c0 mm/mmap.c:560
> vm_mmap_pgoff+0x272/0x4e0 mm/util.c:581
> ksys_mmap_pgoff+0x4dc/0x760 mm/mmap.c:606
> do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
> do_syscall_64+0x174/0x580 arch/x86/entry/syscall_64.c:94
> entry_SYSCALL_64_after_hwframe+0x77/0x7f
> page last free pid 5736 tgid 5736 stack trace:
> reset_page_owner include/linux/page_owner.h:25 [inline]
> __free_pages_prepare mm/page_alloc.c:1406 [inline]
> __free_frozen_pages+0xc1e/0xd10 mm/page_alloc.c:2950
> __slab_free+0x274/0x2c0 mm/slub.c:5767
> qlink_free mm/kasan/quarantine.c:163 [inline]
> qlist_free_all+0x99/0x100 mm/kasan/quarantine.c:179
> kasan_quarantine_reduce+0x148/0x160 mm/kasan/quarantine.c:286
> __kasan_slab_alloc+0x22/0x80 mm/kasan/common.c:350
> kasan_slab_alloc include/linux/kasan.h:253 [inline]
> slab_post_alloc_hook mm/slub.c:4612 [inline]
> slab_alloc_node mm/slub.c:4945 [inline]
> __kmalloc_cache_noprof+0x2ab/0x660 mm/slub.c:5511
> _kmalloc_noprof include/linux/slab.h:969 [inline]
> _kzalloc_noprof include/linux/slab.h:1290 [inline]
> ref_tracker_alloc+0x15b/0x4b0 lib/ref_tracker.c:270
> __netdev_tracker_alloc include/linux/netdevice.h:4489 [inline]
> netdev_hold include/linux/netdevice.h:4518 [inline]
> rx_queue_add_kobject net/core/net-sysfs.c:1236 [inline]
> net_rx_queue_update_kobjects+0x1c4/0x780 net/core/net-sysfs.c:1301
> register_queue_kobjects net/core/net-sysfs.c:2093 [inline]
> netdev_register_kobject+0x21f/0x310 net/core/net-sysfs.c:2341
> register_netdevice+0x1433/0x1eb0 net/core/dev.c:11439
> ipvlan_link_new+0x3e3/0xa90 drivers/net/ipvlan/ipvlan_main.c:593
> rtnl_newlink_create+0x310/0xb00 net/core/rtnetlink.c:3905
> __rtnl_newlink net/core/rtnetlink.c:4036 [inline]
> rtnl_newlink+0x167f/0x1bd0 net/core/rtnetlink.c:4151
> rtnetlink_rcv_msg+0x802/0xc00 net/core/rtnetlink.c:7068
> netlink_rcv_skb+0x226/0x4a0 net/netlink/af_netlink.c:2556
> netlink_unicast_kernel net/netlink/af_netlink.c:1319 [inline]
> netlink_unicast+0x7bb/0x940 net/netlink/af_netlink.c:1345
>
> Memory state around the buggy address:
> ffff888113751f00: 00 00 00 00 00 00 00 04 fc fc fc fc fc fc fc fc
> ffff888113751f80: fa fb fb fb fb fb fb fb fc fc fc fc fc fc fc fc
> >ffff888113752000: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
> ^
> ffff888113752080: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
> ffff888113752100: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
> ==================================================================
>
>
> ***
>
> If these findings have caused you to resend the series or submit a
> separate fix, please add the following tag to your commit message:
> Tested-by: syzbot@syzkaller.appspotmail.com
>
> ---
> This report is generated by a bot. It may contain errors.
> syzbot ci engineers can be reached at syzkaller@googlegroups.com.
>
> To test a patch for this bug, please reply with `#syz test`
> (should be on a separate line).
>
> The patch should be attached to the email.
> Note: arguments like custom git repos and branches are not supported.
>
> The email will later be sent to:
> [ablagodarenko@thelustrecollective.com adilger.kernel@dilger.ca adilger@dilger.ca adilger@diliger.ca artem.blagodarenko@gmail.com linux-ext4@vger.kernel.org pravin.shelar@sun.com xiaowu.417@qq.com]
>
> If the report looks fine to you, reply with:
> #syz upstream
>
> If the report is a false positive, reply with
> #syz invalid
>
> --
> You received this message because you are subscribed to the Google Groups "syzkaller-upstream-moderation" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to syzkaller-upstream-moderation+unsubscribe@googlegroups.com.
> To view this discussion visit https://groups.google.com/d/msgid/syzkaller-upstream-moderation/6a3c1cda.bd346d9a.250aae.0005.GAE%40google.com.
--
Ⲡⲟⲓⲙⲏⲛ Ⲅⲉⲱⲣⲅⲓⲟⲥ - Pimyn Girgis
Software Engineer
Kernel Dynamic Analysis
pimyn@google.com
^ permalink raw reply
* [RFC] Null Namespaces
From: John Ericson @ 2026-06-24 22:51 UTC (permalink / raw)
To: Li Chen, Cong Wang, Christian Brauner, linux-arch
Cc: linux-kernel, linux-fsdevel, linux-api, Arnd Bergmann,
Andy Lutomirski, Thomas Gleixner, Ingo Molnar, Borislav Petkov,
Dave Hansen, H. Peter Anvin, Jan Kara, Jonathan Corbet,
Shuah Khan, Alexander Viro, Kees Cook, Sergei Zimmerman,
Farid Zakaria
Hello, I am hoping to discuss an idea I've had for a while, that I am
calling "null namespaces" that has become more relevant with some recent
other discussions. First I'll discuss null namespaces in general terms,
and then I'll link those recent discussions and relate null namespaces
to them.
### Null namespaces
The essence of null namespaces is trying to give processes as little
ambient authority as possible, so they are lighter weight and allowed to
do even less than fully unshared processes today.
Namespaces as they exist today are frequently described as an isolation
mechanism, but I think this is the conflation of two different things.
*Removing* a new process from its parent's namespaces unquestionably is
increasing isolation --- no disagreement there. But putting the process
in new namespaces is something else; I would call it supporting
"delusions of grandeur" of that process. For example, namespaces allow a
process to do mounts, have `CAP_SYS_ADMIN`, create network interfaces,
look up other processes by PID, etc.
Conceptually, to remove a process from one ambient authority scope (the
very name "namespaces" indicates they are about ambient authority)
should not require putting it in some ambient authority scope. Just
because, for example, the process cannot see one mount tree, doesn't
mean it needs to see another.
Here's what I am thinking would happen concretely:
First, the simpler cases:
#### Null mount namespace
- requires:
- null root file system: absolute paths don't work.
- null current working directory: relative paths with traditional,
non-`*at` system calls (and `*at` ones using `AT_FDCWD`) don't work.
- All operations relating to the "ambient" mount tree don't work.
- `*at` operations with a file descriptor do work.
- The new fd-based mount APIs with detached mounts do work, modulo
the calling process having enough permissions (as usual).
#### Null network namespace
- No network interfaces
- No abstract Unix sockets
#### Null IPC namespace
- cannot create or look up either type of message queue
#### Null UTS namespace
- no hostname or domainname: `uname`, `gethostname`/`sethostname`, and the
related `/proc/sys/kernel` sysctls all fail.
#### Null user namespace
- Process has no user or group ids
- All uid/gid-based authorization lookups return "denied"
- -1 / "nobody" IDs for operations we don't want to fail (like `fstat`)
can be used.
Note how in each of these, the notion of there "existing" a "single"
null namespace or not is degenerate --- every process with a null
namespace field is as isolated from one another (in terms of the axis
that namespace regulates) as they are from processes that are in other
namespaces. It is truly a minimal permission level, and (as we shall
see) cheap too, because it is just a null pointer in `task_struct`.
Then for the nested ones --- PID and cgroup --- we cannot have quite a
null namespace in the same sense, because it is an important property
that these namespaces are hierarchical up to the root namespaces.
Instead of having a disjoint null namespace, we need a null namespace
with a parent.
#### Null PID namespace
- cannot look up other processes by PID
- current process ID lookup fails
- current process's parent process ID lookup fails
- current process still assigned IDs in parent PID namespaces, per usual
#### Null cgroup namespace
- Process still can have resources restricted according to parent cgroup
- Process unaware of cgroup hierarchy though --- blind to who/how it is
constrained
In these cases, we cannot just implement with a null pointer, because we
still need a valid parent namespace. However, we shouldn't need any info
*but* the parent namespace. A pair of a pointer and a bool indicating
null namespace with parent namespace or actual namespace membership,
with some sort of helper to get the parent namespace in either case
(since the actual namespace has its parent), should implement this.
Finally there is the time namespace. Conceptually a null time namespace
is simple enough --- you cannot look up the time! --- but the
implementation is a bit more complex to get right because of the vDSO
for certain timing operations.
### General Motivation
Why am I so interested in this stuff?
Firstly it is because I have always been interested in a more strictly
object-capability-based userland, and projects like
Capsicum/CloudABI/WASI. I think going all in on file descriptors is
generally the direction that Linux has been going in, and it creates a
genuinely better programming model than the traditional Unix one with
all its ambient authority, and the TOCTOU and other issues that attend
it.
Today's container idioms and the "delusions of grandeur" that namespaces
provide are great for retrofitting existing software to run in a more
isolated environment. But I don't want that to be the ceiling of our
ambitions. Especially in this age of LLM refactoring, it is very easy to
get both new and existing software to abide by the more limited set of
allowed operations that null-namespace processes allow. And the
modifications that that entails (more `openat`, more socket activation,
etc.) make that software (in my view) simply *better* --- I would want
it to work that way with or without these constraints forcing the issue.
Secondly, and more concretely/imminently as a Nix developer, I am very
interested in the performance and overhead of process isolation. It is
very much my ambition to move Nix into the Bazel/Buck space of ever more
numerous and fine-grained atomic build steps (i.e. small compilation
units, not "packages"), but to do this *without* sacrificing Nix's
strong sandboxing guarantees that make our build plans so self-contained
and thus the ease of onboarding new Nix users.
I think this "null namespace" sandboxing will likely be simpler and more
performant than creating and destroying a bunch of regular namespaces
for each compilation unit. And while it will no doubt take some compiler
/ other tool patching to fix up any assumptions that get in the way of
running processes with so few permissions, I am happy to take a stab at
that too. Nix is, after all, for "tool-assisted yak shaves" as one put
it --- patching GCC / Clang / whatever and then rebuilding the world is
something we are quite good at.
Lastly, I'll add that the traditional way people have thought about
things like Capsicum/CloudABI is custom personalities/seccomp rules, but
IMO trying to tackle the massive UAPI surface area so shallowly is ugly
and unmaintainable. Nulling out namespace fields in `task_struct`,
conversely, attacks the problem at its core, much more elegantly, and
makes it easy to handle both current *and future* syscalls in a
minimally invasive and maintainable manner.
### Null namespaces and process spawning
Why bring this up now?
Recently [1], Li Chen took a stab at the venerable old goal of making a
better process spawning UAPI than fork/clone + exec. I am quite excited
to see this happen, as it generally dovetails very nicely with the
object capability goals I have above. (E.g. making it performant and
idiomatic to opt-in, rather than opt-out of sharing file descriptors
with a child process is very good for a world where all
resource/privilege sharing is done with file descriptors.)
One problem with clone that didn't yet come up is that its defaults are
not good from a security perspective: sharing by default, and unsharing
as the opt in means that one must remember and take active measures to
ensure that child processes get *less* privileges. This is very bad ---
secure practices mean that the "lazy programmer" and the "smallest
program" must always err on the side of giving the child process *less*
privileges. This is the only way economics and the "principle of least
privilege" will work together, rather than against each other (and
economics is quite likely to win when they are working against each
other).
The reason that clone *doesn't* work that way is, of course,
performance: it would be wasteful to unshare and create new namespaces
when they are just going to be thrown away because the user wants to
share after all.
Null namespaces I think elegantly work around this performance/security
trade-off, while also avoiding the need for gazillion-parameter syscalls
like clone. This is because, as the most secure option, and a cheap
option, they are the rightful default for a new process creation API.
1. When an "embryonic" (under construction, not yet ready to be
scheduled) task is first created, it should have all null namespaces.
2. Separate syscalls (`io_uring` exists for batching, we don't need to
reinvent an ad-hoc batch solution) can exist for setting the
namespaces on the process, where either "sharing" (use parent process
namespace) or "unsharing" (use fresh namespace, usually derived from
the parent process namespace but perhaps derived from a different
one) are choices that can be opted into instead of the null namespace
default.
3. After all state is initialized (arguments, environment variables,
file descriptors, namespaces, etc.), the process can be "birthed",
and submitted as ready to be scheduled.
This design is very natural to me, but its full naturality is *only*
available with the null namespace option. Otherwise we are stuck in a
place of no good defaults, and the "builder pattern" seems more awkward.
Also in [2], I bring up a design for unix sockets without the file
system or the "abstract" socket namespace, and how I want to avoid both
in order to firmly rule out TOCTOU and other ambient authority issues. I
think those arguments stand on their own, but the possibility of a null
network namespace sharpens the issue: it forces the `O_PATH` FD stuff I
discuss to be the only viable option.
### Implementation
I've "LLM'd" out some draft patches [3] for this. I'm not submitting
them because I still need to review and test them, and I don't want
(currently, pre those steps) low-quality slop to tarnish this proposal.
What this initial exploration did, however, confirm for me is that these
changes should be quite lightweight to implement. (Also, what I propose
is slightly different from my implementation draft in a few cases where
I think the design I proposed here is better than my draft
implementation.)
If the discussion here starts moving towards consensus, I'll clean up
and rework those patches along the lines of the consensus. Ideally I
would submit them one at a time, I figure, since the implementations for
different namespaces are necessarily changes to different subsystems.
Cheers!
John
[1]: https://lore.kernel.org/all/20260528095235.2491226-1-me@linux.beauty/
[2]: https://lore.kernel.org/all/455281ec-3ee1-4f27-989b-c239f0690d8b@app.fastmail.com/
[3]: https://github.com/Ericson2314/linux/commits/null-namespace
^ permalink raw reply
* Re: [PATCH 3/7] i2c: nomadik: do not try to retransmit I2C message series on errors
From: Linus Walleij @ 2026-06-24 22:51 UTC (permalink / raw)
To: Dmitry Guzman
Cc: Andi Shyti, Steven Rostedt, Masami Hiramatsu, Mathieu Desnoyers,
linux-i2c, linux-kernel, linux-trace-kernel, linux-arm-kernel
In-Reply-To: <20260623-i2c-fault-reporting-v1-3-6db1a8aabf18@mobileye.com>
On Tue, Jun 23, 2026 at 6:32 PM Dmitry Guzman
<Dmitry.Guzman@mobileye.com> wrote:
> i2c-nomadik driver of I2C bus controller in `xfer` callback retransmits
> the whole message series in cause of any fault, and returns fault only
> after third failed attempt. This behavior contradicts with API because
> not only it hides hardware faults, but also re-sends messages, while
> they are not guaranteed to be idempotent.
>
> Remove the triple attempt to send messages in `xfer` callback.
>
> Signed-off-by: Dmitry Guzman <Dmitry.Guzman@mobileye.com>
This originally came from:
commit ebd10e0783d9fb92a147e60902e22c2d3f3ad69d
Author: Virupax Sadashivpetimath <virupax.sadashivpetimath@stericsson.com>
Date: Fri May 13 12:30:23 2011 +0200
i2c-nomadik: add code to retry on timeout failure
It is seen that i2c-nomadik controller randomly stops generating the
interrupts leading to a i2c timeout. As a workaround to this problem,
add retries to the on going transfer on failure.
Signed-off-by: Virupax Sadashivpetimath
<virupax.sadashivpetimath@stericsson.com>
Reviewed-by: Jonas ABERG <jonas.aberg@stericsson.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Ben Dooks <ben-linux@fluff.org>
At that time the code looked very different:
for (j = 0; j < 3; j++) {
if (status || (dev->result)) {
(...)
break;
}
udelay(I2C_DELAY);
}
if (status == 0)
break;
We would only spin here if both status and dev->result
(the number of sent bytes) was 0. This doesn't seem to be
at all the case anymore!
I suppose it's a bit dubious code, so:
Reviewed-by: Linus Walleij <linusw@kernel.org>
Yours,
Linus Walleij
^ permalink raw reply
* RE: [EXTERNAL] Re: [PATCH net] net: mana: Sync page pool RX frags for CPU
From: Dexuan Cui @ 2026-06-24 22:50 UTC (permalink / raw)
To: Simon Horman
Cc: KY Srinivasan, Haiyang Zhang, wei.liu@kernel.org, Long Li,
andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com,
kuba@kernel.org, pabeni@redhat.com, Konstantin Taranov,
ernis@linux.microsoft.com, dipayanroy@linux.microsoft.com,
kees@kernel.org, jacob.e.keller@intel.com,
ssengar@linux.microsoft.com, linux-hyperv@vger.kernel.org,
netdev@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-rdma@vger.kernel.org, stable@vger.kernel.org
In-Reply-To: <20260619090514.GT827683@horms.kernel.org>
> From: Simon Horman <horms@kernel.org>
> Sent: Friday, June 19, 2026 2:05 AM
> > ...
> > Also validate the packet length reported in the RX CQE before using it as
> > a DMA sync length or passing it to skb processing. The CQE is supplied
> > by the device and should not be blindly trusted by Confidential VMs.
>
> I think this last part warrants being split out into a separate patch.
Sorry for the late reply. I split v1 into 2 patches of v2, which I just posted:
https://lwn.net/ml/linux-kernel/20260624222605.1794719-1-decui@microsoft.com/
Thanks,
Dexuan
^ permalink raw reply
* [arnd-playground:abi-test 6/34] ./usr/include/linux/uhid.h:197:2: error: padding struct size to alignment boundary
From: kernel test robot @ 2026-06-24 22:49 UTC (permalink / raw)
To: oe-kbuild; +Cc: lkp
::::::
:::::: Manual check reason: "only suspicious fbc files changed"
::::::
BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
TO: Arnd Bergmann <arnd@arndb.de>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/arnd/playground.git abi-test
head: 741e95c4b46803e113402223592189848b0ac9c8
commit: 3dfdb63c0bf9cefe7e3d914f595429779695f95f [6/34] kbuild: uapi: check for -Wpadded errors
:::::: branch date: 14 hours ago
:::::: commit date: 2 days ago
config: riscv-randconfig-002-20260625 (https://download.01.org/0day-ci/archive/20260625/202606250658.5BXbDOV2-lkp@intel.com/config)
compiler: riscv64-linux-gcc (GCC) 8.5.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260625/202606250658.5BXbDOV2-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/r/202606250658.5BXbDOV2-lkp@intel.com/
All errors (new ones prefixed by >>):
In file included from ./usr/include/linux/uhid.h:23,
from <command-line>:31:
usr/include/linux/input.h:413:8: error: padding struct to align 'custom_len' [-Werror=padded]
__u32 custom_len;
^~~~~~~~~~
usr/include/linux/input.h:443:8: error: padding struct to align 'intensity' [-Werror=padded]
__u16 intensity;
^~~~~~~~~
usr/include/linux/input.h:485:4: error: padding struct to align 'u' [-Werror=padded]
} u;
^
In file included from <command-line>:31:
>> ./usr/include/linux/uhid.h:197:2: error: padding struct size to alignment boundary [-Werror=padded]
} u;
^
cc1: all warnings being treated as errors
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply
* Re: [PATCH V9 03/17] iothread: tracking iothread users with holder name
From: Zhang Chen @ 2026-06-24 22:48 UTC (permalink / raw)
To: Stefan Hajnoczi
Cc: qemu-devel, Dr . David Alan Gilbert, Eric Blake,
Markus Armbruster, Michael S . Tsirkin, Paolo Bonzini, Kevin Wolf,
Jason Wang, Fam Zheng
In-Reply-To: <20260624171008.GB109308@fedora>
On Thu, Jun 25, 2026 at 2:33 AM Stefan Hajnoczi <stefanha@redhat.com> wrote:
>
> On Wed, Jun 24, 2026 at 03:08:37PM +0800, Zhang Chen wrote:
> > @@ -70,6 +71,9 @@ DECLARE_INSTANCE_CHECKER(IOThread, IOTHREAD,
> > char *iothread_get_id(IOThread *iothread);
> > IOThread *iothread_by_id(const char *id);
> > AioContext *iothread_get_aio_context(IOThread *iothread);
> > +AioContext *iothread_ref_and_get_aio_context(IOThread *iothread,
> > + const IOThreadHolder *holder);
> > +void iothread_put_aio_context(IOThread *iothread, const IOThreadHolder *holder);
>
> There should be doc comments for these new APIs. One constraint that
> should be documented is that these APIs are not thread-safe and must be
> called under the Big QEMU Lock (BQL) (this is necessary both to avoid
> holders list race conditions and because object_unref() can invoke
> finalize callbacks that expect to run under the BQL).
OK, I will add comments like this in next version:
+ /*
+ * The iothread_get_aio_context() and iothread_put_aio_context() are not
+ * thread-safe and must be called under the Big QEMU Lock (BQL).
+ */
Thanks
Chen
^ permalink raw reply
* Re: [PATCH V9 04/17] iothread: introduce iothread_unsafe_get_aio_context()
From: Zhang Chen @ 2026-06-24 22:47 UTC (permalink / raw)
To: Stefan Hajnoczi
Cc: qemu-devel, Dr . David Alan Gilbert, Eric Blake,
Markus Armbruster, Michael S . Tsirkin, Paolo Bonzini, Kevin Wolf,
Jason Wang, Fam Zheng
In-Reply-To: <20260624171941.GC109308@fedora>
On Thu, Jun 25, 2026 at 2:33 AM Stefan Hajnoczi <stefanha@redhat.com> wrote:
>
> On Wed, Jun 24, 2026 at 03:08:38PM +0800, Zhang Chen wrote:
> > diff --git a/include/system/iothread.h b/include/system/iothread.h
> > index b483bbfab3..064c05e78d 100644
> > --- a/include/system/iothread.h
> > +++ b/include/system/iothread.h
> > @@ -71,6 +71,12 @@ DECLARE_INSTANCE_CHECKER(IOThread, IOTHREAD,
> > char *iothread_get_id(IOThread *iothread);
> > IOThread *iothread_by_id(const char *id);
> > AioContext *iothread_get_aio_context(IOThread *iothread);
> > +/*
> > + * The iothread_unsafe_get_aio_context() is a low-level unsafe way of getting
> > + * the AioContext, recommend migrating to the new API with IOThreadHolder
> > + * as much as possible.
>
> This should describe the safety concerns and when it is okay to use this
> API. Something like:
>
> Normally the IOThread's AioContext is fetched using
> iothread_ref_and_get_aio_context(), but there are legacy callers
> without a clear ref/unref lifecycle. They cannot unref (e.g. because
> they do not have an IOThread pointer), so provide an unsafe way to
> fetch the AioContext without holding a reference count. This unsafe
> API serves legacy callers - do not use it in new code.
Looks better~ will change it in next version.
Thanks
Chen
>
> > + */
> > +AioContext *iothread_unsafe_get_aio_context(IOThread *iothread);
> > AioContext *iothread_ref_and_get_aio_context(IOThread *iothread,
> > const IOThreadHolder *holder);
> > void iothread_put_aio_context(IOThread *iothread, const IOThreadHolder *holder);
^ permalink raw reply
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.