On Mon, 2026-07-13 at 10:58 +0200, Jiri Slaby wrote:
> Hi,
>
> On 20. 01. 26, 11:54, Christian König wrote:
> > Some driver use fence->ops to test if a fence was initialized or not.
> > The problem is that this utilizes internal behavior of the dma_fence
> > implementation.
> >
> > So better abstract that into a function.
> >
> > v2: use a flag instead of testing fence->ops, rename the function, move
> > to the beginning of the patch set.
> ...
> > --- a/drivers/gpu/drm/qxl/qxl_release.c
> > +++ b/drivers/gpu/drm/qxl/qxl_release.c
> > @@ -146,7 +146,7 @@ qxl_release_free(struct qxl_device *qdev,
> > idr_remove(&qdev->release_idr, release->id);
> > spin_unlock(&qdev->release_idr_lock);
> >
> > - if (release->base.ops) {
> > + if (dma_fence_was_initialized(&release->base)) {
Could you verify the cause with sth like
if (release->base.ops && dma_fence_was_initialized(…)) {
?
> > WARN_ON(list_empty(&release->bos));
> > qxl_release_free_list(release);
> >
>
> This likely breaks qxl:
> https://bugzilla.suse.com/show_bug.cgi?id=1271081
>
> > refcount_t: underflow; use-after-free.
> > WARNING: lib/refcount.c:28 at refcount_warn_saturate+0x59/0x90,
> CPU#0: kworker/0:0/1534
> > Modules linked in: af_packet nft_fib_inet ...
> > CPU: 0 UID: 0 PID: 1534 Comm: kworker/0:0 Not tainted 7.1.3-1-default
> #1 PREEMPT(full) openSUSE Tumbleweed
> b041a6527f6e58424f4cd3de0fade8d408b378fd
> > Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS
> rel-1.16.3-2-gc13ff2cd-prebuilt.qemu.org 04/01/2014
> > Workqueue: events qxl_gc_work [qxl]
> > RIP: 0010:refcount_warn_saturate+0x59/0x90
> > Code: 44 48 8d 3d a9 72 b7 01 67 48 0f b9 3a c3 cc cc cc cc 48 8d 3d
> a8 72 b7 01 67 48 0f b9 3a c3 cc cc cc cc 48 8d 3d a7 72 b7 01 <67> 48
> 0f b9 3a c3 cc cc cc cc 48 8d 3d a6 72 b7 01 67 48 0f b9 3a
> > RSP: 0018:ffffce09019efe00 EFLAGS: 00010246
> > RAX: 0000000000000000 RBX: ffff8b5a56f819c0 RCX: 0000000000000017
> > RDX: 0000000000011696 RSI: 0000000000000003 RDI: ffffffffbc953b70
> > RBP: ffff8b5a4a314000 R08: 0000000000000001 R09: ffffffffc07d488a
> > R10: fffffa6fc4787d80 R11: ffff8b5a40044000 R12: 0000000000000004
> > R13: 0000000000000003 R14: ffffce09003f1434 R15: ffff8b5a410c4640
> > FS: 0000000000000000(0000) GS:ffff8b5afe954000(0000)
> knlGS:0000000000000000
> > CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> > CR2: 00007ff463d65000 CR3: 000000012b476004 CR4: 0000000000772ef0
> > PKRU: 55555554
> > Call Trace:
> > <TASK>
> > qxl_release_free+0xee/0xf0 [qxl
> d93e9381353e619799d56790f5f8dda6cce491f6]
> > qxl_garbage_collect+0xd1/0x1b0 [qxl
> d93e9381353e619799d56790f5f8dda6cce491f6]
> > process_one_work+0x19e/0x3a0
> > ...
>
> The function does now:
>
> > void
> > qxl_release_free(struct qxl_device *qdev,
> > struct qxl_release *release)
> > {
> > ...
> > if (dma_fence_was_initialized(&release->base)) {
> > WARN_ON(list_empty(&release->bos));
>
> > qxl_release_free_list(release);
>
> >
>
> > dma_fence_signal(&release->base);
>
> > dma_fence_put(&release->base);
>
>
>
> refcount_dec_and_test() in kref_put() in this ^^ crashes. Apparently,
> the reference count was not increased anywhere. QXL does not call
> dma_fence_get() -- who is supposed to increase the refcount.
>
dma_fence_init() initializes the refcount to 1. So since there is only
one place with dma_fence_put(), it probably aims at countering that.
> And why it
> did not fail before?
My guess would be that base->ops was used as a boolean to see whether
qxl_release contains a valid fence. It seems qxl_release_free() is
intended as some sort of universal function; it is called at many
places. So I would suppose it is sometimes being called without the
fence being initialized.
Should most certainly have been documented. Anyways, verifying the
issue would probably be cool
Cheers,
P.
>
>
> > } else {
>
> > qxl_release_free_list(release);
>
> > kfree(release);
>
> > }
>
> > atomic_dec(&qdev->release_count);
>
> > }
>
> thanks,
Hi Robert,
> Subject: Re: [RFC PATCH 1/2] dma-buf/udmabuf: Introduce
> CONFIG_UDMABUF_SIZE_LIMIT_MBYTES
>
> Hi,
>
> On 13.07.26 11:12, Christian König wrote:
> > On 7/11/26 16:48, Robert Mader wrote:
> >> As udmabuf increasingly enjoys popularity - being used in projects
> like
> >> libcamera, Gstreamer, Mesa and KWin - users more frequently
> encounter
> >> cases where the current default size limit of 64MB is too low.
> Examples
> >> include allocating video buffers at a 8K resolution - and even 4K is
> >> affected when using non-subsampled video formats or high bit
> depths.
> >>
> >> While the limit can already be changed via the kernel command line,
> >> exposing it as a kernel config makes that easier and more
> discoverable
> >> for distros. Thus let's do that.
> > Well config options are usually only useful if the value can't be
> changed on runtime through a module parameter, but that is clearly
> not the case here.
> >
> > On the other hand I do see your problem. I would just vote to disable
> the limit by default, there is nothing preventing userspace from
> allocating multiple uDMA-bufs so it doesn't seem to prevent any
> security issue or similar.
>
> I fully agree and would prefer that as well. If there is no resistance /
> concerns from anybody I'll send a corresponding patch at the end of the
> week.
AFAIU, the main motivation behind the limits was to ensure that there are
some kind of guardrails. I am not opposed to their removal but I think it
would now allow users to pin large arbitrary amounts of memory and I
feel like there needs to be a way to prevent users from doing that.
Early RFC versions of udmabuf had mlock accounting to address this issue
but not sure why it was dropped eventually. I am wondering if it makes
sense to bring that back.
Thanks,
Vivek
>
> Thanks,
>
> Robert
>
> >
> > Regards,
> > Christian.
> >
> >
> >> Signed-off-by: Robert Mader <robert.mader(a)collabora.com>
> >> ---
> >> drivers/dma-buf/Kconfig | 6 ++++++
> >> drivers/dma-buf/udmabuf.c | 4 ++++
> >> 2 files changed, 10 insertions(+)
> >>
> >> diff --git a/drivers/dma-buf/Kconfig b/drivers/dma-buf/Kconfig
> >> index 7efc0f0d0712..35f0779cdc80 100644
> >> --- a/drivers/dma-buf/Kconfig
> >> +++ b/drivers/dma-buf/Kconfig
> >> @@ -40,6 +40,12 @@ config UDMABUF
> >> A driver to let userspace turn memfd regions into dma-bufs.
> >> Qemu can use this to create host dmabufs for guest
> framebuffers.
> >>
> >> +config UDMABUF_SIZE_LIMIT_MBYTES
> >> + int "Size limit in Mega Bytes"
> >> + default 64
> >> + help
> >> + Maximum size of a udmabuf, in megabytes. Default is 64.
> >> +
> >> config DMABUF_DEBUG
> >> bool "DMA-BUF debug checks"
> >> depends on DMA_SHARED_BUFFER
> >> diff --git a/drivers/dma-buf/udmabuf.c b/drivers/dma-buf/udmabuf.c
> >> index bced421c0d65..a83153326362 100644
> >> --- a/drivers/dma-buf/udmabuf.c
> >> +++ b/drivers/dma-buf/udmabuf.c
> >> @@ -20,7 +20,11 @@ static int list_limit = 1024;
> >> module_param(list_limit, int, 0644);
> >> MODULE_PARM_DESC(list_limit, "udmabuf_create_list->count limit.
> Default is 1024.");
> >>
> >> +#ifdef CONFIG_UDMABUF_SIZE_LIMIT_MBYTES
> >> +static int size_limit_mb = CONFIG_UDMABUF_SIZE_LIMIT_MBYTES;
> >> +#else
> >> static int size_limit_mb = 64;
> >> +#endif
> >> module_param(size_limit_mb, int, 0644);
> >> MODULE_PARM_DESC(size_limit_mb, "Max size of a dmabuf, in
> megabytes. Default is 64.");
> >>
> >> --
> >> 2.55.0
> >>
On Mon, Jul 13, 2026 at 08:08:14PM +0100, Fuad Tabba wrote:
> On Sun, 12 Jul 2026 at 02:02, Ackerley Tng <ackerleytng(a)google.com> wrote:
> >
> > Jason Gunthorpe <jgg(a)nvidia.com> writes:
> >
> > > On Thu, May 29, 2025 at 01:34:53PM +0800, Xu Yilun wrote:
> > >> Export vfio dma-buf specific info by attaching vfio_dma_buf_data in
> > >> struct dma_buf::priv. Provide a helper vfio_dma_buf_get_data() for
> > >> importers to fetch these data. Exporters identify VFIO dma-buf by
> > >> successfully getting these data.
> > >>
> > >> VFIO dma-buf supports disabling host access to these exported MMIO
> > >> regions when the device is converted to private. Exporters like KVM
> > >> need to identify this type of dma-buf to decide if it is good to use.
> > >> KVM only allows host unaccessible MMIO regions been mapped in private
> > >> roots.
> > >>
> > >> Export struct kvm * handler attached to the vfio device. This
> > >> allows KVM to do another sanity check. MMIO should only be assigned to
> > >> a CoCo VM if its owner device is already assigned to the same VM.
> > >
> > > This doesn't seem right, it should be encapsulated into the standard
> > > DMABUF API in some way.
> > >
> >
> > I'd like to propose an alternative. I've been working on guest_memfd and
> > new to the world of IO, please help me along! :)
> >
> > It seems like using dmabufs are used a little awkwardly here. IIUC
> > dmabufs were originally meant to expose memory of one device to another
> > device, mostly meant to share memory. Dmabufs do expose MMIO too, for
> > device to device communications. Without virtualization, userspace MMIO
> > would be done by mmap()-ing a VFIO fd and having the userspace program
> > write to the userspace addresses.
> >
> > Before CoCo, device passthrough (MMIO) is mostly handled by mmap()-ing a
> > VFIO fd and setting up the userspace address in a KVM memslot for the
> > guest.
> >
> > With CoCo, is the problem we're solving that we want KVM to know what
> > pfns to set up in stage 2 page tables, but not via userspace addresses?
> >
> > guest_memfd already does that for regular host memory, tracks the
> > private/shared-ness of the memory, tracks which struct kvm the memory
> > belongs to.
> >
> > guest_memfd functions as KVM's bridge to host memory. KVM already can
> > ask guest_memfd for the pfn to map into stage 2 page tables, and already
> > asks guest_memfd for the shared/private state of the memory. guest_memfd
> > already also blocks the host from faulting guest private memory
> > (mmap()-ing is always allowed).
> >
> >
> > Instead of using dmabuf as the intermediary between the MMIO PFNs and
> > KVM, why not use guest_memfd?
> >
> > What if we make guest_memfd accept a VFIO fd, or a dmabuf fd?
>
> This is interesting for pKVM too, provided it covers more than MMIO.
>
> We need guest_memfd to be backable by a dmabuf for ordinary guest memory, not
> only for device MMIO. There is mobile hardware that doesn't tolerate scattered
> private memory (DMA engines that can't gather, IOMMU page-table size
> constraints), and a CMA-backed dmabuf heap is the practical way to get
> contiguous memory at runtime.
Why can't guestmemfd allocate directly from CMA? Allocating struct
page memory through dmabuf just to put it back in a guestmemfd sounds
very ugly to me.
> HugeTLB doesn't help, it wants boot-time
> reservation. Those pages are struct-page backed, so it's a different problem
> from the non-struct-page MMIO case, and the shared parts still need to be
> GUP-able.
Isn't dmabuf pretty allergic to mmaping refcounted struct page backed
memory since that wrecks its lifetime model?
> More important for the API shape: conversions have to work on subsets of such a
> region, at page granularity. A pKVM guest doesn't know what backs its memory, so
> it will issue share/unshare hypercalls over arbitrary ranges of whatever it was
> given. If a dmabuf-backed guest_memfd can only be converted as a whole, we can't
> use it for memory, and the guest can't be taught to care.
More reasons not to involve DMABUF since guestmemfd already does all
of this...
Jason
+234816 658 0486 #LOOKING FOR HOW TO JOIN A SECRET BROTHERHOOD FOR SUCCESS, WEALTH, FAME, PROTECTION AND POWER. CONTACT THE TEMPLE GRANDMASTER TO BE FREE FROM POVERTY AND STRUGGLING. ZEDICHORAH BROTHERHOOD OCCULT IS A SACRED FRATERNITY WITH A GRAND LODGE TEMPLE SITUATED IN NIGERIA, #AFRICA. BUT CAN GET YOU INITIATED INTO THE BROTHERHOOD FROM ALL OF THE WORLD #ITALY, #GERMANY, #USA, #LONDON, #CANADA, #SAUDI ARABIA, #MALAYSIA, #EUROPE, #GHANA, #CAMEROON, #ZAMBIA, #LIBYA, #LIBERIA. #DUBAI, #Nigeria, #Italy, #Switzerland, #Canada, #Zimbabwe, #United Arab Emirates (Dubai), #Sweden, #Germany, #Malaysia #India, #Egypt, #California, #South Africa, #Kuwait, #Turkey, #Belgium, #Saudi Arabia, #Johannesburg, #Lebanon, #Zambia, #USA, #Kenya, #Dallas, #Spain, #Jamaica, #St Lucia, #Brazil, #Austria,#Vancouver, #Denmark, #Hong Kong, #China, #Pretoria, #Durban, #Wales, #France, #Harare, #Cairo, #Philippines, #Norway, #Sweden, #Cameroon, #Botswana, #Capetown, #Namibia, #Tanzania, #Northern Cape, #New York, #Limpopo, #London, #Venezuela, #Chile, #Sweden, #Denmark, #Rwanda, #Oman, #Qatar, #Dubai, #Poland, *Lesotho, #England #United Kingdom, #Ghana and more.
HERE IN THIS GREAT ILLUMINATI AND HONORABLE OCCULT OUR NUMBER ONE OBLIGATION IS TO MAKE EVERY INITIATE MEMBER HERE RICH AND FAMOUS IN OTHER TO PRAISE THE POWERS THE LORD SPIRITUAL GUARDIANS OF AGE.
SEARCHING ON HOW TO JOIN THE ZEDICHORAH BROTHERHOOD MONEY RITUAL OCCULT IS NOT THE PROBLEM BUT MAKE SURE YOU"VE THOUGHT ABOUT IT VERY WELL BEFORE REACHING US HERE BECAUSE NOT EVERYONE HAS THE HEART TO DO WHAT IT TAKES TO BECOME ONE OF US HERE, BUT IF YOU THINK YOU"RE SERIOUS MINDED AND READY TO RUN THE SPIRITUAL RACE OF LIFE IN OTHER TO ACQUIRE ALL YOU NEED HERE ON EARTH CONTACT SPIRITUAL GRANDMASTER NOW FOR INQUIRY +234816 658 0486
+234816 658 0486 OFTEN MANY HAS VENTURED INTO SPIRITUAL MEANS OF ACQUIRING LUXURY BUT ONLY FEW GET TO THE PEAK WHEN IT COMES TO SPIRITUAL WEALTH AND LUXURY NOT BECAUSE THEY ARE SPIRITUALLY INFECTED OR UNWORTHY BUT IT"S ON CLEARER VIEW TO THE HUMAN WORLD NOW TO ACTUALLY KNOW THAT IT TAKES A GREAT SACRIFICE AND OFFERING TO PIERCE THE HEART OF THE SPIRITUAL WORLD IN ORDER TO MAKE A REQUEST NOT JUST TO MAKE A REQUEST BUT TO GET ANSWERS AND POSITIVE RESPONSE FROM THE SPIRITUAL GUARDIANS OF AGE. WE THE INITIATE MEMBERS OF ZEDICHORAH. BROTHERHOOD HAVE BEEN ABLE TO GAIN A SPIRITUAL CLOSE GUARDED SECRET OF ACQUIRING WEALTH POWER & PROTECTION FROM THE GUARDIANS OF AGE THROUGH THE ORDERS OF THE TEMPLE GRANDMASTER AND OTHER SPIRITUAL LEADERS OF THE GRAND LODGE TEMPLE. +234816 658 0486
WE KNOW VERY WELL THAT EVERYONE THINKS THEY HAVE ALL IT TAKES TO BE RICH AND FAMOUS NOT MINDING THE FACT THAT ONLY FEW HAS THE ABILITY AND GRACE TO BE WEALTHY, BECAUSE IF MAKING WEALTH WAS THAT EASY EVERYONE SHOULD HAVE BEEN WEALTHY BY NOW. MAKING ENQUIRIES TO JOIN US HERE MIGHT BE OPEN FOR EVERYONE BUT NOT EVERYONE IS ACCEPTED AT THE END OF THE DAY. ZEDICHORAH BROTHERHOOD OCCULT IS NOT FOR THE RICH OR POOR BUT FOR THE “DESTINED TO BE RICH” IT DOESN'T MATTER WHERE YOU ARE COMING FROM OR WHO YOU THINK YOU"RE, ONCE YOUR DESTINY MATCHES WITH THE SPIRITUAL HEART OF THIS HONORABLE OCCULT YOU "RE CERTAIN TO BE ACCEPTED AND TRANSFORMED FROM POOR TO RICH OR RICH TO RICHER & POWERFUL. ALL ZEDICHORAH BROTHERHOOD INITIATE MEMBERS ARE ENTITLED TO EVERYTHING THAT MAKES LIFE WORTH LIVING NO MATTER HOW EXPENSIVE IT MIGHT BE, CARS, HOUSES, LUXURIOUS LIFE BUT ONE THING YOU MUST PUT FIRST IS COURAGE AND BRAVERY BECAUSE THOSE ARE THE KEYS TO UNLOCK TO ONES FORTUNE, AND BEFORE ANY MAN/WOMAN CAN BE ACCEPTED HERE HE OR SHE IS EXPECTED TO HAVE MADE UP HIS OR HER MIND KNOWING THE TASK AHEAD, THOUGH WE DO NOT USE HUMAN BLOOD FOR SACRIFICE BUT DO NOT BE DECEIVED THAT MAKING MONAY DOES"NT REQUIRED"S SACRIFICE"S. WE USE SOME SPECIAL ANIMAL BLOOD AND SERIES OF OTHER RITUAL MATERIALS TO PLEASE THE LORD SPIRITUAL GUARDIANS OF AGE, TO ACCEPT YOU AFTER WHICH YOU"LL BE ENDOWED WITH RICHES AND LUXURY BUT KNOW THAT THERE"SA GRAND PRIZE TO PAY WHICH IS YOU OFFERING YOUR SOUL TO THE LORD LUCIFER AT CERTAIN STAGE {75YRS} NOTHING ELSE WILL BE REQUIRED UNTIL YOUR LAST SACRIFICIAL RITE AND MONEY WILL NOT BE YOUR PROBLEM AGAIN UNTIL YOU DIE.
THERE 7 SACRED RULES GUIDING THIS SACRED OCCULT WHICH MAKES IT EASY AND THE BEST FRATERNITY TO BELONG TO, THIS RULES CAN ONLY BE DISCLOSED TO AN ALREADY INITIATED MEMBER, STRICT MEASURES ARE APPLIED IN TERMS OF KEEPING THE SECRETS OF THIS GREAT OCCULT WHICH IS INSTANT DEATH , SO IF YOU KNOW YOU CAN"T KEEP SHUT WHEN THE CLOSE GUARDED SECRETS ARE BEEN GIVING TO YOU DURING YOUR INITIATION RITUAL; DO YOURSELF GOOD BY STAYING AWAY OTHER THAN BRINGING CALAMITY UPON YOURSELF AND HOUSEHOLD. THE ZEDICHORAH BROTHERHOOD WAS FOUNDED IN INDIA BY AFRICAN BROTHERS WHO TOOK DECISION TO CHANGE THE COURSE OF NATURE IN OTHER FOR LIFE TO BE EASY IN THE EARLY DAYS OF ALLAQUATHAMIN, THERE BY MAKING THE HOME OF THE LORD ZEDICHORAH BROTHERHOOD TO BE IN AFRICA, WE HAVE OUR TEMPLES HERE IN AFRICA OF WHICH THE GRAND LODGE TEMPLE HQ IS SITUATED IN A HIDDEN LOCATION IN PORT HARCOURT RIVER"S STATE NIGERIA.
MANY INDIVIDUALS HAS TAKEN THE RISK OF ATTEMPTING #I_WANT_TO_JOIN_ILLUMINATI #I_WANT-TO-JOIN_THE_FREE_ MASONS #I_WANT_TO_JOIN_ODD_FELLOWS AND MANY OTHER SEARCH REQUESTS; THOUGH THERE"RE OTHER FRATERNITIES LIKE MENTIONED ABOVE BUT THE BAD NEWS IS YOU CAN NEVER BE LINKED TO ANY OF THIS OCCULTS BY ANYONE UNLESS THEY WANT TO GIVE YOU FALSE HOPES THEREBY EXTORTING FROM YOU. BECAUSE THE ILLUMINATI, FREE MASONS, ODD FELLOWS AND OTHERS WILL COME FOR YOU ONLY WHEN YOU"RE RICH AND FAMOUS, IN OTHER TO USE YOUR INFLUENCE TO GET TO MORE FAMOUS AND WEALTHY INDIVIDUALS AND SECONDLY THESE FRATERNITIES HAS THERE COUNTRIES AND CONTINENT WHERE THEY ACCEPT PEOPLE …EG EUROPE, ASIAN, NORTH-AMERICA. ETC
AFRICA IS BELIEVED TO BE THE BLACK SHEEP OF THE CONTINENT THERE BY DISREGARDING WHATEVER CONCERNS AFRICA APART FROM EXTORTION AND ILLEGAL EXPORTATIONS OF MAMA AFRICA'S MINERAL RESOURCES; THE ZEDICHORAH BROTHERHOOD OCCULT ACCEPTS ANYONE HENCE YOU"RE HUMAN AND YOUR DESTINY MATCHES WITH THE SECRET HEART OF THIS BROTHERHOOD, IN ADDITION YOU"VE GOT TO HAVE THE HEART TO DO WHATEVER IT TAKES TO BECOME ONE OF US NOT MINDING YOUR ANXIETY & FEARS. BECAUSE OF FRAUDULENT ACTIVITIES WE,VE SEALED EVERY ONLINE ENQUIRIES THROUGH FALSE AGENTS OR FALSE CONTACTS PRETENDING TO BE COMING FROM THE ZEDICHORAH BROTHERHOOD TEMPLE MEDIA, FOR THIS REASON IT'S NOW ON THE DECISIONS OF THE TEMPLE GRANDMASTER TO ACCEPT, CONFIRM & CERTIFY ANY INTERESTED INDIVIDUAL WHO HAVE DECIDED TO JOIN THIS BROTHERHOOD UNDER THE SPIRITUAL GUARDIANS OF THE {SGM LS. HIGH CHIEF UCHEMBA CHRIS}
IF YOU'RE STILL OUT THERE THINKING ON #HOW #TO #JOIN #OCCULT #FOR #MONEY #RITUAL, FOR WORK-PROMOTION, BUSINESS-GROWTH, JOB-PROMOTION, FAME, POWER, WEALTH, POLITICAL APPOINTMENT AND OTHER GOOD THINGS OF LIFE CONTACT TEMPLE GRANDMASTER TODAY FOR ENQUIRIES TO KNOW IF YOUR DESTINY WILL BE ACCEPTED HERE, CALL NOW +2348166580486
HAVE YOU BEEN LOOKING FOR A WAY TO END POVERTY IN YOUR LIFE AND YOU HAVE GONE MANY PLACES FOR SPIRITUAL HELP WITH NO GOOD RESULT, THIS IS THE FINAL STAGE OF YOUR STRUGGLING IN LIFE JUST CONTACT THE ZEDICHORAH BROTHERHOOD THE HOME OF WEALTH TODAY AND HAVE YOUR FINANCIAL BREAKTHROUGH. THIS IS A GREAT OPPORTUNITY GIVEN TO THE WISE PEOPLE IN AFRICA, ARE YOU FRUSTRATED IN LIFE.
+234816 658 0486 WELCOME TO ZEDICHORAH BROTHERHOOD OF MONEY AND FAME WE ARE HERE TO EDUCATE EVERYONE WHO ARE INTERESTED IN BECOMING A MEMBER OF AN SECRET SOCIETY FOR ENDLESS WEALTH AND POWER, WE ARE HERE TO REDUCE THE LEVEL OF POVERTY IN THE WORLD, IF YOU WANT TO BE LIKE @E-MONEY, @ALHAJI DANGOTE, @CHIEF IFEANYI UBA, @CHIEF AMAECHI AND ALL OTHER RICH MEN ALL OVER THE WORLD. JOIN ZEDICHORAH BROTHERHOOD OCCULT NOW FOR THIS GREAT OPPORTUNITY TO LIBERATE YOUR FAMILY FROM THE SHACKLES OF POVERTY YOU FOUND YOURSELF AND TURN INTO LIGHT TODAY, WE ARE HERE TO MAKE THE POOR TO BECOME RICH AND THE RICH ONES TO BECOME RICHER. WE ARE SORRY ABOUT WHAT IS HAPPENING ONLINE BE CAREFUL ILLUMINATI IS NOT AFRICAN TRADITION IS MADE FOR THE RICH ONES AND THE FAMOUS THIS IS FOR THOSE OF YOU TALKING OF ILLUMINATI, CALL OUR SPIRITUAL GRAND MASTER FOR MORE INQUIRERS +234816 658 0486
#I WANT TO JOIN OCCULT #I WANT TO JOIN OCCULT TO BE RICH AND FAMOUS #I WANT TO JOIN SECRET SOCIETY IN AFRICA #I WANT TO JOIN OCCULT IN GHANA #I WANT TO JOIN OCCULT TO BE FREE FROM MY ENEMY #I WANT TO BELONG TO RICH FAMILY #I WANT TO JOIN OCCULT FOR PROTECTION #I WANT TO JOIN OCCULT TO BE WEALTHY LIFE #I WANT TO JOIN TO MAKE MY DREAMS TO COME TO PASS #I WANT TO JOIN OCCULT FOR MONEY RITUAL #I WANT TO JOIN OCCULT FRATERNITY #I WANT TO JOIN OCCULT GROUP FOR SUCCESS #I WANT TO JOIN OCCULT TEMPLE TO MAKE REAL MONEY #I WANT TO JOIN REAL OCCULT FOR PROMOTION IN MY BUSINESS, SEND {EMAIL} zedichorah80(a)gmail.com I WANT TO BELONG TO THE RICH AND WEALTHY OCCULT SOCIETY ONLINE TO BE RICH INSTANTLY ZEDICHORAH BROTHERHOOD OCCULT IS HERE TO TO SHOW YOU THE EASY AND SHUTTER WAY OF MAKE MONEY TO LIVE A LUXURY LIFE.
+234816 658 0486 I WANT TO JOIN SECRET BROTHERHOOD OCCULT TO BE AMONG THE RICHEST MEN IN THE WORD, JOIN ZEDICHORAH BROTHERHOOD OCCULT WITHOUT HUMAN SACRIFICE, WHAT WE USE HERE IS ONLY SPECIAL ANIMAL BLOODS AND SERIES OF OTHER SACRIFICIAL ITEMS WE USE THEM TO TALK TO THE LORD SPIRITUAL, THE GUARDIANS OF AGE, AND EVERY OF YOUR REQUEST WILL BE GRANTED. JOIN US TODAY AND BE WEALTHY AND FAMOUS AND SHAKE HANDS WITH OUR LORD LUCIFER THE POWER OF WEALTH AND RICHES. FOR MORE INFORMATION AND ENQUIRIES CALL +234816 658 0486
OUR MAIN AIM AND MISSION IS TO HELP ALL AFRICAN YOUTHS TO LIVE THE LIFE OF THEIR DREAMS, JOIN OCCULT FOR WEALTH/MONEY, FAME, POWER, PROTECTION,INSTANT RICE AND LUCK YOUR CLIENT THEM STAY FOR LIFE.
If you've been living in hardship all through your life time– here is the opportunity to change the course of nature for the betterment of your future, join Zedichorah occult the billionaire's club to reshape your dreams and live a fulfilled destiny in your life time, won't you allow yourself to finally relax? enjoy life and live to your expectations don't miss this greatest opportunity you may never see it again. Zedichorah Brotherhood is an organization whose activities and inner functioning are concealed for non-members. Zedichorah Brotherhood is an organized conspiracy working in secret to achieve a hidden agenda. Members use secrecy to protect themselves and their movement. Critics view as malevolent organizations working against the general will of mankind, Members may be required to conceal or deny their membership, and they are often sworn to hold the sacred secret of this Brotherhood occult by an oath. Violating the oath may result in the application of severe sanctions. Like the most successful forgeries, We are not suppose to be on the internet but because of this comments: 'i want to join occult in nigeria' 'i want to join real occult in ghana' 'i want to join occult in africa to be rich' 'i want to join good occult fraternity in nigeria' 'i want to join great illuminati in nigeria to be rich' 'i want to join illuminati occult in nigeria/africa' 'i want to join illuminati brotherhood in nigeria' we are now here for only interested one's. We have received several emails regarding our stories in the media about joining the Zedichorah brotherhood occult. Most people have asked how they can join, while others simply wanted to understand the phenomenon further. Today, we look at how to join this secret society. According to the rules and regulations on how to join The family, the promise of wealth, success, power and domination simply by joining Zedichorah occult is heresy. Powerful, Influential, intelligent, entrepreneurial, successful and wealthy individuals make up the brotherhood order. In order to join the billionaire's occult Hello!! What challenges are you facing in life today, is it poverty/frustrations, Are you through with your education and no job employment? Are you a marketer no improvement You have tried all you can to make sure you are successful, famous, rich, powerful but nothing have work out for you, right now a great opportunity is giving to you to change your life for good, contact temple grandmaster +234816658 0486
Why not start today to build that happiness, prosperity, inner power and peace by joining the Zedichorah Brotherhood? @We don't share or sell your details to third parties, your details are secured without fear, because we have pastors, imams, musicians, politicians, students, lawyers and other individuals. We accept everyone who is interested in becoming one of us despite your religion don't worry about your details. Call now to make more inquiry +234816 658 0486
WE HAVE OUR GRAND LODGE TEMPLE SITUATED HERE IN GRA PHASE 1 PORT HARCOURT RIVERS STATE NIGERIA. CALL +234816 658 0486
The patch set allows to register a dmabuf to an io_uring instance for
a specified file and use it with io_uring read / write requests. The
infrastructure is not tied to io_uring and there could be more users
in the future. A similar idea was attempted some years ago by Keith [1],
from where I borrowed a good number of changes, and later was brough up
by Tushar and Vishal from Intel.
It's an opt-in feature for files, and they need to implement a new
file operation to use it. Only NVMe block devices are supported in this
series. The user API is built on top of io_uring's "registered buffers",
where a dmabuf is registered in a special way, but after it can be used
as any other "registered buffer" with IORING_OP_{READ,WRITE}_FIXED
requests. It's created via a new file operation and the resulted map is
then passed through the I/O stack in a new iterator type. There is some
additional infrastructure to bind it all, which also counts requests
using a dmabuf map and managing lifetimes, which is used to implement
map invalidation.
It was tested for GPU <-> NVMe transfers. Also, as it maintains a
long-term dma mapping, it helps with the IOMMU cost. The numbers
below are for udmabuf reads previously run by Anuj for different
IOMMU modes:
- STRICT: before = 570 KIOPS, after = 5.01 MIOPS
- LAZY: before = 1.93 MIOPS, after = 5.01 MIOPS
- PASSTHROUGH: before = 5.01 MIOPS, after = 5.01 MIOPS
There are some liburing tests that can serve as an example:
git: https://github.com/isilence/liburing.git rw-dmabuf-tests-v3
url: https://github.com/isilence/liburing/tree/rw-dmabuf-tests-v3
[1] https://lore.kernel.org/io-uring/20220805162444.3985535-1-kbusch@fb.com/
v3: - Rework io_uring registration
- Move token/map infrastructure code out of blk-mq
- Simplify callbacks: remove a separate blk-mq table, which was
mostly just forwarding calls (to nvme).
- Don't skip dma sync depending on request direction
- Fix a couple of hangs
- Rename s/dma/dmabuf/
- Other small changes
v2: - Don't pass raw dma addresses, wrap it into a driver specific object
- Split into two objects: token and map
- Implement move_notify
Pavel Begunkov (10):
file: add callback for creating long-term dmabuf maps
iov_iter: add iterator type for dmabuf maps
block: move bvec init into __bio_clone
block: introduce dma map backed bio type
lib: add dmabuf token infrastructure
block: forward create_dmabuf_token to drivers
nvme-pci: implement dma_token backed requests
io_uring/rsrc: introduce buf registration structure
io_uring/rsrc: extend buffer update
io_uring/rsrc: add dmabuf backed registered buffers
block/bio.c | 28 +++-
block/blk-merge.c | 14 ++
block/blk.h | 3 +-
block/fops.c | 16 ++
drivers/nvme/host/pci.c | 282 ++++++++++++++++++++++++++++++++
include/linux/bio.h | 19 ++-
include/linux/blk-mq.h | 9 +
include/linux/blk_types.h | 8 +-
include/linux/fs.h | 2 +
include/linux/io_dmabuf_token.h | 92 +++++++++++
include/linux/io_uring_types.h | 5 +
include/linux/uio.h | 11 ++
include/uapi/linux/io_uring.h | 31 +++-
io_uring/io_uring.c | 3 +-
io_uring/rsrc.c | 266 +++++++++++++++++++++++++-----
io_uring/rsrc.h | 30 +++-
io_uring/rw.c | 4 +-
lib/Kconfig | 4 +
lib/Makefile | 2 +
lib/io_dmabuf_token.c | 272 ++++++++++++++++++++++++++++++
lib/iov_iter.c | 29 +++-
21 files changed, 1071 insertions(+), 59 deletions(-)
create mode 100644 include/linux/io_dmabuf_token.h
create mode 100644 lib/io_dmabuf_token.c
--
2.53.0
We sale good quality Heavy water caluanie oxidize made in US.
Buy Caluanie Oxidize online usa
Where to buy Caluanie Oxide online usa
Wholesale Caluanie Oxide online.
Caluanie Muelear Oxidize For sale. Chemicals are widely used across various manufacturing industries for a wide range of purposes. Caluaine Oxidize is one of the most demanded products in the metal or chemical processing sector. Some of its core applications include:
CALUANIE MUELEAR OXIDIZE
Caluanie Muelear Oxidize for sale
Caluanie is widely used in the chemical, paint industry as a substitute hygroscopic agent.
It is widely applicable to the coatings, inks, plastics and printing inks industries.
Available Packaging: 5L & bulk packaging as from 20L, 50L, 100L or as per buyer’s request.
Caluanie Muelear Oxidize Parteurized (Heavy Water)
Contact us now
WhatsApp(+44 7397 620325)
WhatsApp(+44 7397 620325)
{{Telegram @Frink002 }}
Email.( caluanieoxidized(a)gmail.com )
We're a Premium wholesaler & Retailer of Pure Red Mercury Online. We supply Pure Red Liquid Mercury of great quality. Our Pure Red Liquid Mercury, is highly demanded by industries world over to products a wide variety of products.
It is high grade & perfectly composed Pure Red Liquid Mercury.WhatsApp(+44 7397620325)
Pure Red Mercury ships worldwide with 100% guarantee of delivering your product on time. PACKAGING : 10gram of Red liquid mercury Red liquid mercury The red liquid mercury is a semi-liquid material cherry-red. The intensity of red liquid mercury is very high 20.2 g/ cm3. This Hg2 Sb207+O liquid is the Military Labs Material: Red liquid mercury Other name: Cherry Red liquid mercury Formula: Sb2O7Hg2+O Appearance: Cherry Red metal liquid Application: Mainly used in rocket, missile, military prospecting areas.WhatsApp(+44 7397620325)
WhatsApp(+44 7397620325)
{{Telegram @Frink002 }}
Email.( caluanieoxidized(a)gmail.com )
On 7/11/26 16:48, Robert Mader wrote:
> As udmabuf increasingly enjoys popularity - being used in projects like
> libcamera, Gstreamer, Mesa and KWin - users more frequently encounter
> cases where the current default size limit of 64MB is too low. Examples
> include allocating video buffers at a 8K resolution - and even 4K is
> affected when using non-subsampled video formats or high bit depths.
>
> While the limit can already be changed via the kernel command line,
> exposing it as a kernel config makes that easier and more discoverable
> for distros. Thus let's do that.
Well config options are usually only useful if the value can't be changed on runtime through a module parameter, but that is clearly not the case here.
On the other hand I do see your problem. I would just vote to disable the limit by default, there is nothing preventing userspace from allocating multiple uDMA-bufs so it doesn't seem to prevent any security issue or similar.
Regards,
Christian.
>
> Signed-off-by: Robert Mader <robert.mader(a)collabora.com>
> ---
> drivers/dma-buf/Kconfig | 6 ++++++
> drivers/dma-buf/udmabuf.c | 4 ++++
> 2 files changed, 10 insertions(+)
>
> diff --git a/drivers/dma-buf/Kconfig b/drivers/dma-buf/Kconfig
> index 7efc0f0d0712..35f0779cdc80 100644
> --- a/drivers/dma-buf/Kconfig
> +++ b/drivers/dma-buf/Kconfig
> @@ -40,6 +40,12 @@ config UDMABUF
> A driver to let userspace turn memfd regions into dma-bufs.
> Qemu can use this to create host dmabufs for guest framebuffers.
>
> +config UDMABUF_SIZE_LIMIT_MBYTES
> + int "Size limit in Mega Bytes"
> + default 64
> + help
> + Maximum size of a udmabuf, in megabytes. Default is 64.
> +
> config DMABUF_DEBUG
> bool "DMA-BUF debug checks"
> depends on DMA_SHARED_BUFFER
> diff --git a/drivers/dma-buf/udmabuf.c b/drivers/dma-buf/udmabuf.c
> index bced421c0d65..a83153326362 100644
> --- a/drivers/dma-buf/udmabuf.c
> +++ b/drivers/dma-buf/udmabuf.c
> @@ -20,7 +20,11 @@ static int list_limit = 1024;
> module_param(list_limit, int, 0644);
> MODULE_PARM_DESC(list_limit, "udmabuf_create_list->count limit. Default is 1024.");
>
> +#ifdef CONFIG_UDMABUF_SIZE_LIMIT_MBYTES
> +static int size_limit_mb = CONFIG_UDMABUF_SIZE_LIMIT_MBYTES;
> +#else
> static int size_limit_mb = 64;
> +#endif
> module_param(size_limit_mb, int, 0644);
> MODULE_PARM_DESC(size_limit_mb, "Max size of a dmabuf, in megabytes. Default is 64.");
>
> --
> 2.55.0
>
Discover Why Pips NYT Has Become a Daily Favorite
Pips NYT has become one of the most interesting daily word and logic challenges for puzzle enthusiasts. Every new puzzle presents a fresh opportunity to test observation, reasoning, and pattern recognition. Many players enjoy adding Pips NYT to a morning routine because each challenge takes only a few minutes while delivering a satisfying mental workout. https://pipsly.io/
Unlike many traditional puzzle games, Pips NYT encourages careful thinking instead of random guessing. Every move matters, and every clue contributes to a complete solution. This balance between simplicity and challenge has helped the game attract both beginners and experienced puzzle fans.
Daily puzzle games continue to gain popularity because they provide entertainment while improving cognitive skills. Pips NYT stands out by offering an engaging experience that rewards patience, logic, and attention to detail.
What Is Pips NYT?
Pips NYT is a daily puzzle game that focuses on identifying patterns, analyzing clues, and reaching accurate conclusions. Every puzzle follows a structured format, allowing players to develop strategies while still encountering fresh challenges each day.
Each new puzzle introduces unique combinations that require logical thinking rather than memorization. Success depends on understanding relationships between clues and making informed decisions throughout the solving process.
Many players appreciate the accessibility of Pips NYT because anyone can begin without extensive preparation. A few minutes of practice often leads to noticeable improvement, making every completed puzzle feel rewarding.
Simple Rules Create Meaningful Challenges
One reason behind the growing popularity of Pips NYT is the straightforward learning curve. Basic rules remain consistent, allowing players to focus on solving rather than learning new mechanics every day.
Although each puzzle starts with limited information, careful analysis gradually reveals the correct solution. This progression keeps every session interesting while encouraging logical reasoning.
Every Puzzle Feels Different
Randomized puzzle layouts ensure that no two daily challenges feel exactly the same. Different clue arrangements require flexible thinking and prevent repetitive gameplay.
This variety keeps players motivated to return each day for another unique experience.
Why Pips NYT Has Become So Popular
Several factors contribute to the increasing popularity of Pips NYT among puzzle enthusiasts around the world.
Daily challenges encourage consistent participation without requiring a large time commitment. Most puzzles can be completed during a coffee break, lunch break, or commute.
Balanced difficulty keeps beginners engaged while providing enough complexity for experienced players. Every solved puzzle delivers a satisfying sense of accomplishment.
A growing online community shares solving techniques, discusses strategies, and celebrates successful completions. Friendly competition encourages continuous improvement while making every puzzle more enjoyable.
Benefits of Playing Pips NYT Every Day
Regular puzzle solving provides more than simple entertainment. Many players notice improvements in several important cognitive skills after making Pips NYT part of a daily routine.
Stronger Logical Thinking
Each puzzle encourages players to evaluate evidence carefully before making decisions. Logical reasoning becomes stronger through repeated practice.
Better Pattern Recognition
Recognizing recurring structures becomes easier with experience. Faster identification of meaningful patterns often leads to quicker solutions.
Improved Concentration
Completing a puzzle requires sustained attention. Daily practice helps strengthen focus while reducing careless mistakes.
Enhanced Problem Solving
Players gradually learn how to divide larger challenges into smaller steps. This structured approach can support problem solving in many everyday situations.
Relaxing Mental Exercise
Many players enjoy the calm, focused experience that Pips NYT provides. Solving puzzles offers a productive break from busy schedules while keeping the mind active.
Effective Strategies for Solving Pips NYT
Developing consistent habits can significantly improve solving accuracy and efficiency.
Study Every Clue Carefully
Reading every clue before making the first move provides valuable context. Early observations often reveal relationships that become important later.
Avoid Rushing
Quick guesses may create unnecessary confusion. Careful analysis usually produces better results than moving too quickly.
Eliminate Impossible Options
Removing incorrect possibilities narrows available choices and makes the remaining solution easier to identify.
Review Previous Decisions
Occasionally revisiting earlier conclusions helps identify overlooked details or incorrect assumptions before they become larger problems.
Practice Consistently
Daily practice gradually builds confidence and improves recognition of common puzzle structures. Even short sessions contribute to long-term improvement.
Common Mistakes While Playing Pips NYT
Many beginners encounter similar obstacles during early attempts.
Ignoring small clues often leads to incorrect conclusions because seemingly minor details may connect multiple parts of the puzzle.
Guessing without sufficient evidence increases the likelihood of mistakes and creates unnecessary complications later.
Rushing through difficult sections frequently causes players to overlook valuable information that could simplify the solution.
Giving up too early prevents valuable learning opportunities. Every completed puzzle helps develop stronger analytical skills for future challenges.
How Beginners Can Improve Faster
New players can accelerate progress by approaching each puzzle methodically.
Start with the most obvious clues before tackling more complicated sections. Building confidence through small successes creates momentum for solving the remaining puzzle.
Review completed puzzles whenever possible. Understanding previous solutions helps reinforce effective strategies and improve future performance.
Maintain patience throughout the solving process. Improvement comes naturally through regular practice rather than speed alone.
Comparing different solving approaches can also reveal new techniques that make future puzzles easier to complete.
Why Pips NYT Continues to Grow
Daily puzzle games continue attracting new audiences because they combine entertainment with meaningful mental exercise. Pips NYT fits naturally into busy lifestyles by offering engaging challenges without requiring lengthy play sessions.
Regular updates keep gameplay fresh while encouraging long-term participation. Consistent puzzle quality helps maintain player interest throughout the year.
As more people discover the enjoyment of logical puzzle solving, Pips NYT continues building a loyal community that values curiosity, critical thinking, and continuous learning.
Final Thoughts
Pips NYT offers an enjoyable combination of logic, observation, and daily mental exercise. Straightforward rules make every puzzle accessible, while carefully designed challenges provide lasting satisfaction for players of all experience levels.
Whether the goal is improving problem-solving skills, sharpening concentration, or simply enjoying a few relaxing minutes each day, Pips NYT delivers a rewarding experience that continues to attract puzzle enthusiasts worldwide. Regular practice, thoughtful analysis, and patience remain the most effective tools for mastering every new challenge.
Hi Linus and folks,
DEPT(DEPendency Tracker) is a runtime deadlock detection framework that
sees what lockdep cannot.
I'm thrilled to share that DEPT has moved beyond theory and is now
catching real deadlocks in the wild:
https://lore.kernel.org/lkml/6383cde5-cf4b-facf-6e07-1378a485657d@I-love.SA…https://lore.kernel.org/lkml/1674268856-31807-1-git-send-email-byungchul.pa…https://lore.kernel.org/all/b6e00e77-4a8c-4e05-ab79-266bf05fcc2d@igalia.com/
I've added comprehensive documentation explaining DEPT's design and usage.
Getting started is as simple as enabling CONFIG_DEPT and watching dmesg.
THE PROBLEM LOCKDEP CANNOT SOLVE
--------------------------------
Lockdep has been our trusted deadlock detector for two decades, but it
has a fundamental blind spot: it tracks lock acquisition order, not the
actual waits and events that cause deadlocks. This means lockdep misses:
* Deadlocks involving folio locks (not released within the context)
* Cross-context synchronization like wait_for_completion()/complete()
* DMA fence waits, RCU waits, and general waitqueue patterns
* Any synchronization primitive outside the classic lock/unlock model
Consider this real deadlock pattern that lockdep cannot detect:
context X context Y context Z
mutex_lock A
folio_lock B
folio_lock B <- DEADLOCK
mutex_lock A <- DEADLOCK
folio_unlock B
folio_unlock B
mutex_unlock A
mutex_unlock A
Lockdep sees lock acquisitions. DEPT sees the actual dependency:
"mutex_unlock A in context Y cannot happen until folio_lock B is
awakened by the owner's folio_unlock B, and vice versa in context Z."
It's a circular dependency that means deadlock.
THE DEPT APPROACH
-----------------
DEPT asks a simpler question: "What is this context waiting for, and
what event will wake it up?"
Every deadlock is fundamentally about unreachable events. DEPT tracks:
[S] Where an event context begins (the code path that will trigger
an event)
[W] Where a wait for another event apears between [S] and [E]
[E] Where the event for [S] occurs
By building a dependency graph of "[E] cannot occur until the event that
[W] waits for occurs", DEPT detects circular dependencies regardless of
the underlying synchronization primitives involved.
WHAT DEPT BRINGS TO THE TABLE
-----------------------------
* Universal coverage: Works with any wait/event-based synchronization,
not just locks
* Correct read-lock handling: No more blind spots for read-side
dependencies
* Continuous operation: Unlike lockdep, DEPT keeps running after
reports, catching multiple deadlocks in a single session
* Clean annotation API: Simple, intuitive interfaces for subsystem
maintainers to refine detection
* Battle-tested: Already catching real deadlocks as the links above
demonstrate
FALSE POSITIVES: THE HONEST CONVERSATION
----------------------------------------
Like any powerful detection tool, DEPT faces the false positive
challenge. This is not unique to DEPT — lockdep spent years building its
annotation infrastructure (lock classes, subclasses, lockdep_map) to
separate real bugs from intentional patterns.
DEPT is on the same journey. We have:
* Event site recovery: Declare when an event has fallback paths
* Subclass-based classification: Distinguish per-CPU, per-device,
and modality-specific waits
* Page usage tracking: Separate block device mappings from regular
file mappings to avoid spurious reports (currently being worked on)
But comprehensive annotation requires subsystem maintainer expertise.
This is where I need your help.
THE PATH TO MAINLINE
--------------------
DEPT is marked EXPERIMENTAL in Kconfig for a reason. Like lockdep, it
will mature through collaboration:
1. Core framework: Stabilized and ready for review
2. Subsystem pilots: Working with maintainers to add annotations
where they matter most (mm, block, drm, networking, ...)
3. Gradual enablement: DEPT and lockdep coexist; DEPT takes over
dependency checking when ready
I am not proposing to replace lockdep. Lockdep's lock usage validation
remains invaluable. The vision is:
LOCKDEP: Validates correct lock usage
|
v
DEPT: Performs dependency checking with full wait/event coverage
WHY MERGE NOW?
--------------
Some might suggest: "Fix all false positives out-of-tree first." But
the affected subsystems span the entire kernel. Like lockdep's
two-decade annotation journey, DEPT needs mainline visibility for:
* Proper annotation placement (maintainers know their code best)
* Real-world testing across configurations and workloads
* Incremental improvement through community feedback
CONFIG_DEPT is opt-in. It won't affect your default kernel build. But
for those debugging complex synchronization issues, DEPT is ready to
help today.
ACKNOWLEDGMENTS
---------------
This work would not be possible without:
Harry Yoo <harry.yoo(a)oracle.com>
Gwan-gyeong Mun <gwan-gyeong.mun(a)intel.com>
Yunseong Kim <ysk(a)kzalloc.com>
Yeoreum Yun <yeoreum.yun(a)arm.com>
And the countless kernel developers whose lockdep annotations over two
decades showed us the path forward.
FAQ
---
Q. Isn't this the cross-release feature that got reverted?
A. Cross-release (commit b09be676e0ff2) attempted to extend lockdep
with wait/event tracking. It found real bugs but introduced false
positives that masked further issues. DEPT learns from that
experience with a cleaner design and flexible reporting that makes
false positives less disruptive.
Q. Why not build DEPT into lockdep?
A. Lockdep is stable, battle-tested code. I chose separation because
while DEPT borrows BFS and hashing ideas, the wait/event model
requires rebuilding from scratch. Lockdep was designed for lock
acquisition order — retrofitting it would risk its stability.
Q. Will DEPT replace lockdep?
A. No. Lockdep validates correct lock usage — that's not going away.
DEPT supersedes only the dependency-checking logic when mature.
Q. Should we merge DEPT now or wait for more annotations out-of-tree?
A. Now. The annotation journey requires mainline collaboration. Lockdep
didn't become useful overnight — it grew through maintainer
contributions. DEPT needs the same path.
Q. What if I enable DEPT and get false positives?
A. That's the point — report them. Work with us to add annotations that
distinguish your intentional patterns from real deadlocks. This is
how lockdep became indispensable, and it's how DEPT will too.
GETTING STARTED
---------------
1. Enable CONFIG_DEPT (EXPERIMENTAL)
2. Boot your kernel
3. Check dmesg for DEPT reports
4. Read Documentation/dev-tools/dept.rst for interpretation
DEPT is a tool for understanding your code's synchronization behavior.
Even if you never see a deadlock report, the visibility it provides
is invaluable.
I look forward to your feedback, patches, and collaboration. Let's make
DEPT as indispensable to kernel developers as lockdep has been.
---
Changes from v18:
1. Rebase on v7.0.
2. Add 'Reviewed-by: Jeff Layton <jlayton(a)kernel.org>' on 37th
patch, 'SUNRPC: relocate struct rcu_head to the first field
of struct rpc_xprt'. (thanks to Jeff Layton)
3. Refine and supplement dept documents and comments, and fix
typos. (feedbacked by Bagas Sanjaya and Yunseong Kim)
4. Add __rust_helper to rust_helper_wait_for_completion().
(feedbacked by Dirk Behme)
5. Remove the part supporting recover events tracking - I will
keep maintaining it out of tree tho - as it unnecessarily
complicates the initial DEPT patchset and significantly
increases the review burden.
6. Get rid of 'extern' keyword with function declarations.
(feedbacked by Petr Pavlu)
Changes from v17:
1. Rebase on the mainline as of 2025 Dec 5.
2. Convert the documents' format from txt to rst. (feedbacked
by Jonathan Corbet and Bagas Sanjaya)
3. Move the documents from 'Documentation/dependency' to
'Documentation/dev-tools'. (feedbakced by Jonathan Corbet)
4. Improve the documentation. (feedbacked by NeilBrown)
5. Use a common function, enter_from_user_mode(), instead of
arch specific code, to notice context switch from user mode.
(feedbacked by Dave Hansen, Mark Rutland, and Mark Brown)
6. Resolve the header dependency issue by using dept's internal
header, instead of relocating 'struct llist_{head,node}' to
another header. (feedbacked by Greg KH)
7. Improve page(or folio) usage type APIs.
8. Add rust helper for wait_for_completion(). (feedbacked by
Guangbo Cui, Boqun Feng, and Danilo Krummrich)
9. Refine some commit messages.
Changes from v16:
1. Rebase on v6.17.
2. Fix a false positive from rcu (by Yunseong Kim)
3. Introduce APIs to set page's usage, dept_set_page_usage() and
dept_reset_page_usage() to avoid false positives.
4. Consider lock_page() as a potential wait unconditionally.
5. Consider folio_lock_killable() as a potential wait
unconditionally.
6. Add support for tracking PG_writeback waits and events.
7. Fix two build errors due to the additional debug information
added by dept. (by Yunseong Kim)
Changes from v15:
1. Fix typo and improve comments and commit messages (feedbacked
by ALOK TIWARI, Waiman Long, and kernel test robot).
2. Do not stop dept on detection of cicular dependency of
recover event, allowing to keep reporting.
3. Add SK hynix to copyright.
4. Consider folio_lock() as a potential wait unconditionally.
5. Fix Kconfig dependency bug (feedbacked by kernel test rebot).
6. Do not suppress reports that involve classes even that have
already involved in other reports, allowing to keep
reporting.
Changes from v14:
1. Rebase on the current latest, v6.15-rc6.
2. Refactor dept code.
3. With multi event sites for a single wait, even if an event
forms a circular dependency, the event can be recovered by
other event(or wake up) paths. Even though informing the
circular dependency is worthy but it should be suppressed
once informing it, if it doesn't lead an actual deadlock. So
introduce APIs to annotate the relationship between event
site and recover site, that are, event_site() and
dept_recover_event().
4. wait_for_completion() worked with dept map embedded in struct
completion. However, it generates a few false positves since
all the waits using the instance of struct completion, share
the map and key. To avoid the false positves, make it not to
share the map and key but each wait_for_completion() caller
have its own key by default. Of course, external maps also
can be used if needed.
5. Fix a bug about hardirq on/off tracing.
6. Implement basic unit test for dept.
7. Add more supports for dma fence synchronization.
8. Add emergency stop of dept e.g. on panic().
9. Fix false positives by mmu_notifier_invalidate_*().
10. Fix recursive call bug by DEPT_WARN_*() and DEPT_STOP().
11. Fix trivial bugs in DEPT_WARN_*() and DEPT_STOP().
12. Fix a bug that a spin lock, dept_pool_spin, is used in
both contexts of irq disabled and enabled without irq
disabled.
13. Suppress reports with classes, any of that already have
been reported, even though they have different chains but
being barely meaningful.
14. Print stacktrace of the wait that an event is now waking up,
not only stacktrace of the event.
15. Make dept aware of lockdep_cmp_fn() that is used to avoid
false positives in lockdep so that dept can also avoid them.
16. Do do_event() only if there are no ecxts have been
delimited.
17. Fix a bug that was not synchronized for stage_m in struct
dept_task, using a spin lock, dept_task()->stage_lock.
18. Fix a bug that dept didn't handle the case that multiple
ttwus for a single waiter can be called at the same time
e.i. a race issue.
19. Distinguish each kernel context from others, not only by
system call but also by user oriented fault so that dept can
work with more accuracy information about kernel context.
That helps to avoid a few false positives.
20. Limit dept's working to x86_64 and arm64.
Changes from v13:
1. Rebase on the current latest version, v6.9-rc7.
2. Add 'dept' documentation describing dept APIs.
Changes from v12:
1. Refine the whole document for dept.
2. Add 'Interpret dept report' section in the document, using a
deadlock report obtained in practice. Hope this version of
document helps guys understand dept better.
https://lore.kernel.org/lkml/6383cde5-cf4b-facf-6e07-1378a485657d@I-love.SA…https://lore.kernel.org/lkml/1674268856-31807-1-git-send-email-byungchul.pa…
Changes from v11:
1. Add 'dept' documentation describing the concept of dept.
2. Rewrite the commit messages of the following commits for
using weaker lockdep annotation, for better description.
fs/jbd2: Use a weaker annotation in journal handling
cpu/hotplug: Use a weaker annotation in AP thread
(feedbacked by Thomas Gleixner)
Changes from v10:
1. Fix noinstr warning when building kernel source.
2. dept has been reporting some false positives due to the folio
lock's unfairness. Reflect it and make dept work based on
dept annotaions instead of just wait and wake up primitives.
3. Remove the support for PG_writeback while working on 2. I
will add the support later if needed.
4. dept didn't print stacktrace for [S] if the participant of a
deadlock is not lock mechanism but general wait and event.
However, it made hard to interpret the report in that case.
So add support to print stacktrace of the requestor who asked
the event context to run - usually a waiter of the event does
it just before going to wait state.
5. Give up tracking raw_local_irq_{disable,enable}() since it
totally messed up dept's irq tracking. So make it work in the
same way as lockdep does. I will consider it once any false
positives by those are observed again.
6. Change the manual rwsem_acquire_read(->j_trans_commit_map)
annotation in fs/jbd2/transaction.c to the try version so
that it works as much as it exactly needs.
7. Remove unnecessary 'inline' keyword in dept.c and add
'__maybe_unused' to a needed place.
Changes from v9:
1. Fix a bug. SDT tracking didn't work well because of my big
mistake that I should've used waiter's map to indentify its
class but it had been working with waker's one. FYI,
PG_locked and PG_writeback weren't affected. They still
worked well. (reported by YoungJun)
Changes from v8:
1. Fix build error by adding EXPORT_SYMBOL(PG_locked_map) and
EXPORT_SYMBOL(PG_writeback_map) for kernel module build -
appologize for that. (reported by kernel test robot)
2. Fix build error by removing header file's circular dependency
that was caused by "atomic.h", "kernel.h" and "irqflags.h",
which I introduced - appolgize for that. (reported by kernel
test robot)
Changes from v7:
1. Fix a bug that cannot track rwlock dependency properly,
introduced in v7. (reported by Boqun and lockdep selftest)
2. Track wait/event of PG_{locked,writeback} more aggressively
assuming that when a bit of PG_{locked,writeback} is cleared
there might be waits on the bit. (reported by Linus, Hillf
and syzbot)
3. Fix and clean bad style code e.i. unnecessarily introduced
a randome pattern and so on. (pointed out by Linux)
4. Clean code for applying dept to wait_for_completion().
Changes from v6:
1. Tie to task scheduler code to track sleep and try_to_wake_up()
assuming sleeps cause waits, try_to_wake_up()s would be the
events that those are waiting for, of course with proper dept
annotations, sdt_might_sleep_weak(), sdt_might_sleep_strong()
and so on. For these cases, class is classified at sleep
entrance rather than the synchronization initialization code.
Which would extremely reduce false alarms.
2. Remove the dept associated instance in each page struct for
tracking dependencies by PG_locked and PG_writeback thanks to
the 1. work above.
3. Introduce CONFIG_dept_AGGRESIVE_TIMEOUT_WAIT to suppress
reports that waits with timeout set are involved, for those
who don't like verbose reporting.
4. Add a mechanism to refill the internal memory pools on
running out so that dept could keep working as long as free
memory is available in the system.
5. Re-enable tracking hashed-waitqueue wait. That's going to no
longer generate false positives because class is classified
at sleep entrance rather than the waitqueue initailization.
6. Refactor to make it easier to port onto each new version of
the kernel.
7. Apply dept to dma fence.
8. Do trivial optimizaitions.
Changes from v5:
1. Use just pr_warn_once() rather than WARN_ONCE() on the lack
of internal resources because WARN_*() printing stacktrace is
too much for informing the lack. (feedback from Ted, Hyeonggon)
2. Fix trivial bugs like missing initializing a struct before
using it.
3. Assign a different class per task when handling onstack
variables for waitqueue or the like. Which makes dept
distinguish between onstack variables of different tasks so
as to prevent false positives. (reported by Hyeonggon)
4. Make dept aware of even raw_local_irq_*() to prevent false
positives. (reported by Hyeonggon)
5. Don't consider dependencies between the events that might be
triggered within __schedule() and the waits that requires
__schedule(), real ones. (reported by Hyeonggon)
6. Unstage the staged wait that has prepare_to_wait_event()'ed
*and* yet to get to __schedule(), if we encounter __schedule()
in-between for another sleep, which is possible if e.g. a
mutex_lock() exists in 'condition' of ___wait_event().
7. Turn on CONFIG_PROVE_LOCKING when CONFIG_DEPT is on, to rely
on the hardirq and softirq entrance tracing to make dept more
portable for now.
Changes from v4:
1. Fix some bugs that produce false alarms.
2. Distinguish each syscall context from another *for arm64*.
3. Make it not warn it but just print it in case dept ring
buffer gets exhausted. (feedback from Hyeonggon)
4. Explicitely describe "EXPERIMENTAL" and "dept might produce
false positive reports" in Kconfig. (feedback from Ted)
Changes from v3:
1. dept shouldn't create dependencies between different depths
of a class that were indicated by *_lock_nested(). dept
normally doesn't but it does once another lock class comes
in. So fixed it. (feedback from Hyeonggon)
2. dept considered a wait as a real wait once getting to
__schedule() even if it has been set to TASK_RUNNING by wake
up sources in advance. Fixed it so that dept doesn't consider
the case as a real wait. (feedback from Jan Kara)
3. Stop tracking dependencies with a map once the event
associated with the map has been handled. dept will start to
work with the map again, on the next sleep.
Changes from v2:
1. Disable dept on bit_wait_table[] in sched/wait_bit.c
reporting a lot of false positives, which is my fault.
Wait/event for bit_wait_table[] should've been tagged in a
higher layer for better work, which is a future work.
(feedback from Jan Kara)
2. Disable dept on crypto_larval's completion to prevent a false
positive.
Changes from v1:
1. Fix coding style and typo. (feedback from Steven)
2. Distinguish each work context from another in workqueue.
3. Skip checking lock acquisition with nest_lock, which is about
correct lock usage that should be checked by lockdep.
Changes from RFC(v0):
1. Prevent adding a wait tag at prepare_to_wait() but __schedule().
(feedback from Linus and Matthew)
2. Use try version at lockdep_acquire_cpus_lock() annotation.
3. Distinguish each syscall context from another.
Byungchul Park (39):
dept: implement DEPT(DEPendency Tracker)
dept: add single event dependency tracker APIs
dept: add lock dependency tracker APIs
dept: tie to lockdep and IRQ tracing
dept: add proc knobs to show stats and dependency graph
dept: distinguish each kernel context from another
dept: distinguish each work from another
dept: add a mechanism to refill the internal memory pools on running
out
dept: record the latest one out of consecutive waits of the same class
dept: apply sdt_might_sleep_{start,end}() to
wait_for_completion()/complete()
dept: apply sdt_might_sleep_{start,end}() to swait
dept: apply sdt_might_sleep_{start,end}() to waitqueue wait
dept: apply sdt_might_sleep_{start,end}() to hashed-waitqueue wait
dept: apply sdt_might_sleep_{start,end}() to dma fence
dept: track timeout waits separately with a new Kconfig
dept: apply timeout consideration to wait_for_completion()/complete()
dept: apply timeout consideration to swait
dept: apply timeout consideration to waitqueue wait
dept: apply timeout consideration to hashed-waitqueue wait
dept: apply timeout consideration to dma fence wait
dept: make dept able to work with an external wgen
dept: track PG_locked with dept
dept: print staged wait's stacktrace on report
locking/lockdep: prevent various lockdep assertions when
lockdep_off()'ed
dept: add documents for dept
cpu/hotplug: use a weaker annotation in AP thread
dept: assign dept map to mmu notifier invalidation synchronization
dept: assign unique dept_key to each distinct dma fence caller
dept: make dept aware of lockdep_set_lock_cmp_fn() annotation
dept: make dept stop from working on debug_locks_off()
dept: assign unique dept_key to each distinct wait_for_completion()
caller
completion, dept: introduce init_completion_dmap() API
dept: call dept_hardirqs_off() in local_irq_*() regardless of irq
state
dept: introduce APIs to set page usage and use subclasses_evt for the
usage
dept: track PG_writeback with dept
SUNRPC: relocate struct rcu_head to the first field of struct rpc_xprt
mm: percpu: increase PERCPU_DYNAMIC_SIZE_SHIFT on DEPT and large
PAGE_SIZE
rust: completion: Add __rust_helper to
rust_helper_wait_for_completion()
dept: implement a basic unit test for dept
Yunseong Kim (1):
rcu/update: fix same dept key collision between various types of RCU
Documentation/dev-tools/dept.rst | 905 ++++++++
Documentation/dev-tools/dept_api.rst | 124 +
Documentation/dev-tools/index.rst | 2 +
drivers/dma-buf/dma-fence.c | 23 +-
include/linux/completion.h | 124 +-
include/linux/dept.h | 267 +++
include/linux/dept_ldt.h | 78 +
include/linux/dept_sdt.h | 68 +
include/linux/dept_unit_test.h | 61 +
include/linux/dma-fence.h | 74 +-
include/linux/hardirq.h | 3 +
include/linux/irq-entry-common.h | 4 +
include/linux/irqflags.h | 21 +-
include/linux/local_lock_internal.h | 1 +
include/linux/lockdep.h | 105 +-
include/linux/lockdep_types.h | 3 +
include/linux/mm_types.h | 4 +
include/linux/mmu_notifier.h | 26 +
include/linux/mutex.h | 1 +
include/linux/page-flags.h | 217 +-
include/linux/pagemap.h | 37 +-
include/linux/percpu-rwsem.h | 2 +-
include/linux/percpu.h | 4 +
include/linux/rcupdate_wait.h | 13 +-
include/linux/rtmutex.h | 1 +
include/linux/rwlock_types.h | 1 +
include/linux/rwsem.h | 1 +
include/linux/sched.h | 111 +
include/linux/seqlock.h | 2 +-
include/linux/spinlock_types_raw.h | 3 +
include/linux/srcu.h | 2 +-
include/linux/sunrpc/xprt.h | 9 +-
include/linux/swait.h | 3 +
include/linux/wait.h | 3 +
include/linux/wait_bit.h | 3 +
init/init_task.c | 2 +
init/main.c | 2 +
kernel/Makefile | 1 +
kernel/cpu.c | 2 +-
kernel/dependency/Makefile | 5 +
kernel/dependency/dept.c | 3222 ++++++++++++++++++++++++++
kernel/dependency/dept_hash.h | 10 +
kernel/dependency/dept_internal.h | 314 +++
kernel/dependency/dept_object.h | 13 +
kernel/dependency/dept_proc.c | 94 +
kernel/dependency/dept_unit_test.c | 149 ++
kernel/exit.c | 1 +
kernel/fork.c | 2 +
kernel/locking/lockdep.c | 33 +
kernel/module/main.c | 2 +
kernel/rcu/rcu.h | 1 +
kernel/rcu/update.c | 5 +-
kernel/sched/completion.c | 62 +-
kernel/sched/core.c | 9 +
kernel/workqueue.c | 3 +
lib/Kconfig.debug | 48 +
lib/debug_locks.c | 2 +
lib/locking-selftest.c | 2 +
mm/filemap.c | 38 +
mm/mm_init.c | 3 +
mm/mmu_notifier.c | 31 +-
rust/helpers/completion.c | 5 +
62 files changed, 6247 insertions(+), 120 deletions(-)
create mode 100644 Documentation/dev-tools/dept.rst
create mode 100644 Documentation/dev-tools/dept_api.rst
create mode 100644 include/linux/dept.h
create mode 100644 include/linux/dept_ldt.h
create mode 100644 include/linux/dept_sdt.h
create mode 100644 include/linux/dept_unit_test.h
create mode 100644 kernel/dependency/Makefile
create mode 100644 kernel/dependency/dept.c
create mode 100644 kernel/dependency/dept_hash.h
create mode 100644 kernel/dependency/dept_internal.h
create mode 100644 kernel/dependency/dept_object.h
create mode 100644 kernel/dependency/dept_proc.c
create mode 100644 kernel/dependency/dept_unit_test.c
base-commit: 028ef9c96e96197026887c0f092424679298aae8
--
2.17.1
On Sat, Jul 11, 2026 at 06:01:31PM -0700, Ackerley Tng wrote:
> In the course of a CoCo guest's operation, will the guest need to
> convert between private/shared MMIO? Will the guest need some pages
> shared and others private? If these are required operations, guest_memfd
> already provides the tracking and is going to have a conversion ioctl
> very soon. Instead of further extending dmabuf to track more things, how
> about letting guest_memfd track it?
Use another FD type was sort of my fallback if we couldn't get DMABUF
into something workable. I'm kind of surprised to see guestmemfd
proposed as the other FD, but I don't know much about its insides.
If VFIO can create one and fill it with MMIO physical addresses then
maybe it is OK?
Jason