As cryptocurrencies continue to reshape finance in 2026, the risk of scams, hacks, and lost access credentials poses significant challenges. Recovering lost or stolen digital assets requires expert intervention, ChainX Hacker Solution (CHS), accessible via: https://chainxhacksolution.com/ stands out as the best crypto recovery company. With advanced blockchain forensics, Ethical hunting, global partnerships, and a client-centric approach, ChainX Hacker Solutions offers unparalleled solutions to reclaim your assets. This guide highlights the top crypto recovery company services for 2026, with ChainX Hacker Solutions leading the industry, and explores emerging trends and FAQs to guide your recovery journey. They widely recognized as the best crypto recovery company, offers proven solutions to reclaim lost or stolen digital assets.
Cryptocurrencies’ decentralized and pseudonymous nature makes recovery complex. Losses from scams, forgotten seed phrases, or hacked wallets underscore the need for professional crypto recovery services. ChainX Hacker Solutions the best crypto recovery company, specializes in navigating these challenges using cutting-edge technology, ChainX Hacker Solutions exploitation analysis, and legal strategies to recover assets and restore financial security.
Why Crypto Recovery Services Are Essential
Cryptocurrencies decentralized and pseudonymous nature makes recovery complex. Losses from scams, forgotten seed phrases, or hacked wallets underscore the need for professional services. ChainX Hacker Solutions, The best crypto recovery company, specializes in navigating these challenges, using cutting-edge technology and legal strategies to recover assets and restore financial security.
ChainX Hacker Solutions is ideal for victims of scams, lost wallets, or complex cases requiring legal action, from retail investors to institutions.
Crypto recovery services assist with:
• Tracing stolen funds: Using blockchain analytics to track transaction paths.
• Recovering access: Restoring lost private keys or seed phrases.
• Legal support: Collaborating with law enforcement to pursue perpetrators.
• Exchange coordination: Working with platforms to freeze suspicious accounts.
ChainX Hacker Solutions guides clients on filing claims with law enforcement, such as the FBI’s Internet Crime Complaint Center (IC3) or international cybercrime units. They provide pre-filled forms and detailed instructions to streamline the process. ChainX Hacker Solutions partnerships with authorities enhance the likelihood of prompt action, making them the best crypto recovery company for legal coordination.
Other Notable Services
• Crypto Asset Recovery: Specializes in recovering lost seed phrases and inaccessible wallets, with a strong focus on technical expertise.
• Wallet Recovery Service: Focuses on restoring access to crypto wallets, excelling in private key recovery for complex cases.
While these services are reputable, ChainX Hacker Solution’s comprehensive approach and proven success make them the best crypto recovery company for 2026. ChainX Hacker Solutions leads the pack with its proven
ChainX Hacker Solutions is the best crypto recovery company due to its:
• Advanced blockchain forensics & exploit hunting: ChainX Hacker Solutions uses AI-powered tools to trace funds across decentralized exchanges and privacy coins, while identifying exploitable weaknesses that help recover assets quickly.
• Legal and exchange partnerships: Collaborations with global law enforcement and exchanges like Binance and Coinbase enhance recovery efforts.
• Client-centric support: Free consultations, transparent processes, and ongoing updates ensure client trust.
• Global reach: https://chainxhacksolution.com/ international network addresses cross-border fraud, solidifying their status as the best crypto recovery company.
Contact ChainX Hacker Solutions at or call +44 7768 761569 for a free consultation to start your recovery journey.
https://chainxhacksolution.com/
Crypto Asset Recovery: Specializes in recovering lost seed phrases and inaccessible wallets, with a strong focus on technical expertise and ethical assessment. Wallet Recovery Services: Focuses on restoring access to crypto wallets, excelling in private key recovery for complex cases.
While these services are reputable, chainxhackersolutions(a)chainx.co.site comprehensive approach—combining recovery with proactive Ethical Hacking—makes them the best crypto recovery company for 2026.
Through professionalism, innovation, and consistent results, ChainX Hacker Solutions (CHS) has earned its reputation in 2026 as the most reliable crypto recovery expert—restoring not just lost funds, but confidence and peace of mind for scam victims worldwide
ChainX Hacker Solutions follows a structured, transparent process to reclaim your assets, reinforcing their position as the best crypto recovery company:
1. 1 Initial assessment and case evaluation: ChainX Hacker Solutions conducts a free consultation to gather transaction IDs, wallet addresses, and scam details, assessing recovery feasibility.
2. 2 Customized recovery strategy: Using AI-driven blockchain analytics and ethical mapping, ChainX Hacker Solutions traces fund movements and develops a recovery plan, involving legal action or exchange coordination.
3. 3 Execution and monitoring: ChainX Hacker Solutions executes the plan, engaging exchanges and collaborating with authorities, while providing regular updates to clients.
4. 4 Post-recovery support: ChainX Hacker Solutions provides guidance on wallet security, enabling 2FA and preventing future losses.
The Best Crypto Recovery Service
Founded in 2010, ChainX Hacker Solutions (CHS) is the best crypto recovery company, serving clients globally since 2015. Based in London, ChainX Hacker Solutions supports Bitcoin, Ethereum, Multibit, Trezor, MetaMask, and other wallets in 2026 with a 99% success rate. Their comprehensive approach and transparency make them the industry leader.
The crypto recovery landscape is evolving, with trends shaping the industry:
• Enhanced blockchain analysis: Advances in AI and machine learning enable faster and more accurate fund tracing.
• Stronger regulatory collaboration: Increased cooperation with agencies like the FCA and IC3 streamlines legal action.
• Consumer education: Firms like ChainX Hacker Solutions emphasize education, offering resources to prevent scams and identify CHS early.
Prevention is key to safeguarding assets. Follow these practices recommended by ChainX Hacker Solutions, the best crypto recovery company:
• Use hardware wallets like Ledger or Trezor for offline storage.
• Enable multi-factor authentication (MFA) on all accounts.
• Verify platforms and stay informed about emerging scam tactics.
• Schedule regular security assessments to stay ahead of threats.
Q1: Does working with a recovery service guarantee the return of assets? A1: No, recovery is not guaranteed due to blockchain complexity. However, ChainX Hacker Solutions employs advanced tools and legal strategies to maximize recovery chances.
Q2: What types of situations do recovery services help with? A2: ChainX Hacker Solution’s assists with hacked wallets, lost private keys, seed phrase losses, erroneous transactions, crypto scams, and hardware wallet failures.
Q3: How long does it take to recover crypto assets? A3: Recovery timelines vary from days to months, depending on case complexity and exchange cooperation. ChainX Hacker Solution’s rapid response accelerates the process.
Q4: What are the costs associated with crypto recovery services? A4: Costs vary, with some firms charging flat fees and others using a success-based model. ChainX Hacker Solution’s transparent fee structure is outlined during free consultations.
Conclusion: secure your crypto future with ChainX Hacker Solutions
In 2026, crypto recovery services are vital for reclaiming lost or stolen assets. ChainX Hacker Solutions, the best crypto recovery company, leads the industry with its advanced forensics, global partnerships, and client-focused approach. By acting swiftly and engaging ChainX Hacker Solutions, you can navigate the complex recovery process with confidence. Don’t let a scam define your financial future—take action today:
Contact ChainX Hacker Solutions at chainxhackersolutions(a)chainx.co.site or visit https://chainxhacksolution.com/ for a free consultation.
ChainX Hacker Solutions (CHS) stands out as the best crypto recovery company. With advanced blockchain forensics, global partnerships, and a client-centric approach, ChainX Hacker Solutions (CHS offers unparalleled solutions to reclaim your assets
Secure your assets and leverage ChainX Hacker Solution’s expertise to reclaim your cryptocurrency in 2026.
With ChainX Hacker Solution’s proven track record, you can trust the best crypto recovery company to safeguard your digital wealth.
As of 2026, ChainX Hacker Solutions was verified as the best crypto recovery company. ChainX Hacker Solutions has earned a reputation as a legitimate and reliable player in the cryptocurrency recovery space. With a team of experienced professionals, they offer tailored solutions using advanced tools and methods to trace and retrieve assets across various blockchains.
Customers appreciate ChainX Hacker Solutions for its transparent processes, fast response times, and dedicated support throughout the recovery journey. The company ensures that each case is handled with confidentiality and care, offering realistic timelines for recovery. Many users have praised ChainX Hacker Solutions for its effectiveness in restoring lost crypto, making them a top choice for individuals and businesses facing cryptocurrency-related losses.
Overall, ChainX Hacker Solutions stands out for its professionalism, success rate, and commitment to helping crypto investors protect their assets while hunting down exploitability before attackers can exploit them.
ChainX Hacker Solutions is the world’s most legitimate and trusted crypto recovery firm, delivering lawful, ethical, and verified solutions to recover stolen crypto, USDT, and hacked wallets. chainxhacksolution.com
ChainX Hacker Solutions has emerged as the most successful, fully legalized, and highly trusted crypto recovery company in the industry. Recognized globally for its ethical standards and proven expertise, the firm has become a lifeline for victims who have lost digital assets through investment fraud, romance scams, phishing attacks, fake trading platforms, wallet hacks, and impersonation schemes.
What sets ChainX Hacker Solutions apart is its expert-led approach that combines advanced blockchain forensics, transaction tracing, ethical hunting, and legal compliance. Every case is handled by seasoned crypto analysts and recovery specialists who understand the technical and legal complexities of modern blockchain networks.
In an industry crowded with false promises, ChainX Hacker Solutions stands as a legitimate service operating within international legal frameworks. The company prioritizes client trust, data security, and clear communication throughout the recovery process.
Through professionalism, innovation, and consistent results, ChainX Hacker Solutions has earned its reputation in 2026 as the most reliable crypto recovery expert—restoring not just lost funds, but confidence and peace of mind for scam victims worldwide.
Contact us today: Email: chainxhackersolutions(a)chainx.co.site WhatsApp: +44 7768 761569 Website: https://chainxhacksolution.com/
In 2026, crypto recovery services are vital for reclaiming lost or stolen assets. ChainX Hacker Solutions, the best crypto recovery company, leads the industry with its advanced forensics, global partnerships, and client-focused approach. By acting swiftly and engaging ChainX Hacker Solutions, you can navigate the complex recovery process with confidence. Don’t let a scam define your financial future—take action today
Founded in 2010, ChainX Hacker Solutions (CHS) is the best cryptocurrency recovery company, serving clients globally since 2015. Based in London, ChainX Hacker Solutions supports Bitcoin, Ethereum, Multibit, Trezor, MetaMask, and other wallets in 2026 with a 99% success rate. Their comprehensive approach and transparency make them the industry leader.
Founded in 2010, ChainX Hacker Solutions (CHS) is the best cryptocurrency recovery company, serving clients globally since 2015. Based in London, ChainX Hacker Solutions supports Bitcoin, Ethereum, Multibit, Trezor, MetaMask, and other wallets in 2026 with a 99% success rate. Their comprehensive approach and transparency make them the industry leader.
Digital Assets Forensics & Recovery Specialist
I am a dedicated Digital Assets Forensics and Recovery Specialist with a strong commitment to helping individuals, businesses, and organizations navigate the complex world of digital asset investigations and recovery. My professional journey has been built on continuous learning, practical experience, and a deep understanding of blockchain technology, cryptocurrency ecosystems, cybersecurity principles, and digital forensic methodologies.
Over the years, I have developed expertise in blockchain transaction tracing, cryptocurrency wallet analysis, digital asset investigations, forensic evidence collection, cyber fraud assessment, and asset recovery support. My approach combines technical knowledge with meticulous attention to detail, ensuring that every investigation is conducted professionally, ethically, and in compliance with industry standards.
I specialize in analyzing cryptocurrency transactions across multiple blockchain networks, identifying transaction patterns, tracing asset movements, and providing detailed forensic reports that support recovery efforts and dispute resolution. Through the use of advanced analytical techniques and industry-recognized tools, I assist clients in understanding the flow of digital assets and uncovering critical information that may aid in recovery processes.
My services are founded on integrity, transparency, confidentiality, and client-focused solutions. I understand the financial and emotional impact that digital asset losses can have on individuals and organizations, which is why I am committed to delivering thorough investigations, clear communication, and professional guidance throughout every stage of the recovery journey.
As the digital asset landscape continues to evolve, I remain dedicated to staying at the forefront of emerging technologies, blockchain developments, cybersecurity threats, and forensic best practices. My goal is to provide reliable, professional, and results-oriented digital asset forensic services that help clients protect their interests and make informed decisions.
Whether supporting cryptocurrency investigations, forensic analysis, asset tracing, or recovery-related assessments, I bring professionalism, expertise, and a passion for excellence to every engagement. My mission is to contribute to a safer digital financial environment by helping clients navigate complex digital asset challenges with confidence and clarity. Contact us via email: digitalassetforensics(a)usa.com/ whatsapp: +15802059111
Escape Road 2 transforms a simple escape concept into an exciting challenge filled with action and suspense. Its engaging gameplay, evolving difficulty, and urban setting make it a standout choice for players seeking fast-paced entertainment. Whether you're aiming to beat your personal record or simply enjoy the thrill of the chase, Escape Road 2 offers plenty of reasons to get behind the wheel. Many driving games focus solely on speed, but Escape Road 2 combines speed with strategy. The constant pressure of the pursuit, the variety of escape routes, and the progression system work together to create a highly replayable experience.
Every chase tells a different story. Some end in dramatic crashes, while others become legendary escapes that last far longer than expected. This unpredictability is one of the game's greatest strengths. Play https://escaperoad2.io
On Fri, Jun 12, 2026 at 10:17 PM Danilo Krummrich <dakr(a)kernel.org> wrote:
>
> As far as I'm concerned there's no need to do that for things that are not
> rendered anyway. But also feel free to do it anyway of course.
It is not a huge deal if there are gaps here or there, but we use
Markdown in comments too for consistency.
What we don't do is intra-doc links there -- it would have been nice
if `rustdoc` could use those in comments for the source view, but it
doesn't, and while I talked with upstream about it, it isn't likely it
will happen soon if at all...
Cheers,
Miguel
I’ve played a lot of casual browser games over the years. Some lasted a few days before I forgot about them, while others became little habits that I’d revisit whenever I had a few spare minutes. One game that somehow keeps finding its way back into my bookmarks is agario.
Play now: https://agario-free.com
At first glance, it looks ridiculously simple. You control a tiny circle, move around a giant map, eat pellets, grow bigger, and avoid getting eaten by larger players. That's basically it.
But if you've ever spent more than ten minutes playing, you know there's something strangely addictive hiding beneath that simple concept.
I've had moments where I felt unstoppable, moments where I laughed out loud at my own mistakes, and moments where I seriously questioned why I kept clicking "Play Again" after losing everything in three seconds.
And somehow, that's exactly why I love it.
The First Time I Played Agario
The first time I opened agario, I honestly didn't expect much.
The graphics were basic. There was no tutorial. No complicated progression system. No cinematic introduction.
I spawned as a tiny cell and started wandering around collecting colorful dots.
For about thirty seconds, everything felt peaceful.
Then a giant player appeared from nowhere and swallowed me instantly.
Game over.
I remember staring at my screen thinking, "Wait... that's it?"
A few seconds later, I clicked Play Again.
Then again.
Then again.
Before I knew it, an hour had disappeared.
That's when I realized the magic of the game isn't in complexity. It's in the constant cycle of risk, growth, and loss.
Every match feels like a fresh start.
Why Growing Bigger Feels So Satisfying
There's something deeply satisfying about watching your tiny cell slowly become a giant blob.
At the beginning of each game, you're vulnerable.
Everybody looks dangerous.
You spend your time avoiding threats and carefully collecting mass wherever you can find it.
Then something changes.
You start getting bigger.
Suddenly, the players that terrified you a few minutes ago become your targets.
That shift in power creates an incredible feeling of progression, even though nothing carries over between matches.
One of my favorite memories was surviving for nearly twenty minutes and climbing into the top ten players on the server.
I wasn't even trying to be aggressive.
I was just playing carefully, avoiding traps, and picking smart opportunities.
Watching my name slowly rise on the leaderboard felt surprisingly rewarding.
Of course, that success didn't last.
Because this is agario.
Success never lasts forever.
The Funniest Mistakes I've Made
The "Easy Target" Disaster
One thing I've learned is that confidence can be dangerous.
I once spotted a smaller player moving awkwardly near the edge of the map.
They looked trapped.
I thought I had an easy meal.
I rushed toward them without thinking.
The next thing I knew, they split into multiple pieces, baited me into a bad position, and led me directly into a player that was twice my size.
Within two seconds, I went from hunter to lunch.
I couldn't even be mad.
The trap was honestly impressive.
Accidentally Helping My Enemy
Another embarrassing moment happened when I tried to escape from a larger player.
In my panic, I ejected mass in the wrong direction.
Instead of creating distance, I essentially fed the person chasing me.
I made them bigger.
They caught me almost immediately.
It felt like handing a thief the keys to my own house.
The Wall Corner Panic
Every experienced player knows this feeling.
You're trying to escape.
A massive player is gaining on you.
You glance at the map.
And suddenly realize you've backed yourself into a corner.
There is no escape route.
No clever strategy.
No miracle play.
Just acceptance.
Those moments always make me laugh because they feel so avoidable in hindsight.
The Most Frustrating Experience
Getting Huge and Losing Everything
If you've played agario, you've probably experienced this.
You spend fifteen or twenty minutes building your mass.
You're focused.
You're careful.
You're making smart decisions.
You finally reach a size that feels powerful.
Then one tiny mistake destroys everything.
Maybe you split at the wrong moment.
Maybe you get trapped between multiple players.
Maybe a virus launches you into a terrible position.
Whatever the reason, your giant empire disappears in seconds.
I still remember one match where I had my best run of the week.
I was sitting comfortably on the leaderboard and feeling invincible.
Then I got greedy.
I chased a player that wasn't worth the risk.
A larger opponent appeared from off-screen.
Game over.
Twenty minutes of progress vanished instantly.
For about five seconds, I considered quitting.
Then I clicked Play Again.
Surprising Things I Learned From Playing
Patience Beats Aggression
When I first started, I thought the goal was to chase every smaller player I saw.
That strategy rarely worked.
The more I played, the more I realized that patience wins far more games.
Some of my best runs happened when I focused on survival instead of domination.
Avoiding unnecessary risks often leads to bigger rewards later.
Bigger Isn't Always Better
One thing that surprised me was how difficult movement becomes when you're enormous.
A huge cell has power, but it also becomes slower and less flexible.
Sometimes medium-sized players can outmaneuver giants and create opportunities that larger players can't respond to quickly enough.
The game has a surprisingly balanced risk-reward system.
Reading Other Players Matters
Many players develop recognizable habits.
Some are aggressive.
Some are cautious.
Some rely heavily on split attacks.
After enough matches, I started paying attention to player behavior rather than just player size.
That small adjustment improved my survival rate dramatically.
My Personal Tips for New Players
Stay Near Open Space
Getting trapped is one of the most common ways to lose.
Whenever possible, I try to keep multiple escape routes available.
Don't Chase Everything
Not every smaller player is worth pursuing.
Sometimes the safest choice is to continue farming pellets and wait for better opportunities.
Watch the Entire Screen
Tunnel vision is dangerous.
It's easy to focus on a target and forget to monitor surrounding threats.
Many of my worst defeats happened because I ignored what was happening just outside my field of view.
Learn From Every Defeat
This sounds obvious, but it helps.
Whenever I lose a large amount of mass, I try to identify exactly what went wrong.
Most deaths aren't random.
They're usually the result of a decision I made thirty seconds earlier.
Why Agario Still Feels Fresh
What impresses me most about agario is how simple mechanics continue creating unique stories.
Every match feels different.
Some games are calm and strategic.
Others become chaotic battles involving dozens of players.
Sometimes I spend ten minutes surviving against impossible odds.
Other times I get eaten within fifteen seconds.
That unpredictability keeps the experience interesting.
No unlocks are required.
No battle passes.
No complicated systems.
Just pure player interaction creating unexpected moments.
And honestly, that's refreshing.
Final Thoughts
Even after all these years, agario remains one of those games I can launch when I want something quick, competitive, and entertaining.
It's simple enough for anyone to understand within minutes, yet deep enough to produce memorable stories every time you play.
I've laughed at ridiculous mistakes, celebrated unlikely victories, and experienced the heartbreak of losing massive cells after long runs. Somehow, all those emotions are packed into a game built around colorful circles eating each other.
That's probably why I keep coming back.
No matter how many times I get eaten, there's always that feeling that the next run might be the one where everything goes perfectly.
Or at least lasts a little longer.
Have you tried it yet? Share your funniest agario moment, or let me know if you've discovered any other fun games worth checking out!
On Wed, Jun 10, 2026 at 04:43:21PM +0100, Matt Evans wrote:
Hi Matt,
[...]
> + *
> + * With the goal of taking vdev->memory_lock in a world where
> + * vdev might not still exist:
> + *
> + * 1. Take the resv lock on the DMABUF:
> + * - If racing cleanup got in first, the buffer is revoked;
> + * stop/exit if so.
> + * - If we got in first, the buffer is not revoked so vdev is
> + * non-NULL, accessible, and cleanup _has not yet put the
> + * VFIO device registration_. So, the device refcount must
> + * be >0.
> + *
> + * 2. Take vfio_device registration (refcount guaranteed >0
> + * hereafter).
> + *
> + * 3. Unlock the DMABUF's resv lock:
> + * - A racing cleanup can now complete.
> + * - But, the device refcount >0, meaning the vfio_device
> + * (and vfio_pcie_core device vdev) have not yet been
> + * freed. vdev is accessible, even if the DMABUF has been
> + * revoked or cleanup has happened, because
> + * vfio_unregister_group_dev() can't complete.
> + *
> + * 4. Take the vdev->memory_lock
> + * - Either the DMABUF is usable, or has been cleaned up.
> + * Whichever, it can no longer change under us.
> + * - Test the DMABUF revocation status again: if it was
> + * revoked between 1 and 4 return a SIGBUS. Otherwise,
> + * return a PFN.
> + * - It's not necessary to also take the resv lock, because
> + * the status/vdev can't change while memory_lock is held.
> + *
> + * 5. Unlock, done.
> */
> +
> + dma_resv_lock(priv->dmabuf->resv, NULL);
> +
> + if (priv->revoked) {
> + pr_debug_ratelimited("%s VA 0x%lx, pgoff 0x%lx: DMABUF revoked/cleaned up\n",
> + __func__, vmf->address, vma->vm_pgoff);
> + dma_resv_unlock(priv->dmabuf->resv);
> + return VM_FAULT_SIGBUS;
> + }
> +
> + /* If the buffer isn't revoked, vdev is valid */
> vdev = priv->vdev;
>
> + if (!vfio_device_try_get_registration(&vdev->vdev)) {
> + /*
> + * If vdev != NULL (above), the registration should
> + * already be >0 and so this try_get should never
> + * fail.
> + */
> + dev_warn(&vdev->pdev->dev, "%s: Unexpected registration failure\n",
> + __func__);
> + dma_resv_unlock(priv->dmabuf->resv);
> + return VM_FAULT_SIGBUS;
> + }
> + dma_resv_unlock(priv->dmabuf->resv);
> +
> scoped_guard(rwsem_read, &vdev->memory_lock) {
> + /* Revocation status must be re-read, under memory_lock */
> if (!priv->revoked) {
> int pres = vfio_pci_dma_buf_find_pfn(priv, vma,
> vmf->address,
Wait, I noticed that the is_aligned_for_order() check from mainline was
removed here. Was that intentional?
For hugepage faults (order > 0), we must ensure the PFN and address are
properly aligned before calling vfio_pci_vmf_insert_pfn().
In the current upstream code, we have:
if (is_aligned_for_order(vma, addr, pfn, order))
Should we restore that check here?
> @@ -1766,6 +1827,7 @@ static vm_fault_t vfio_pci_mmap_huge_fault(struct vm_fault *vmf,
> __func__, order, pfn, vmf->address,
> vma->vm_pgoff, (unsigned int)ret);
>
> + vfio_device_put_registration(&vdev->vdev);
> return ret;
> }
>
> @@ -1774,7 +1836,7 @@ static vm_fault_t vfio_pci_mmap_page_fault(struct vm_fault *vmf)
> return vfio_pci_mmap_huge_fault(vmf, 0);
> }
>
> -static const struct vm_operations_struct vfio_pci_mmap_ops = {
> +const struct vm_operations_struct vfio_pci_mmap_ops = {
> .fault = vfio_pci_mmap_page_fault,
Nit: Instead of making this global, should we add a helper? E.g.:
void vfio_pci_set_vma_ops(struct vm_area_struct *vma)
{
vma->vm_ops = &vfio_pci_mmap_ops;
}
[...]
> +
> +static int vfio_pci_dma_buf_mmap(struct dma_buf *dmabuf, struct vm_area_struct *vma)
> +{
> + struct vfio_pci_dma_buf *priv = dmabuf->priv;
> +
> + /*
> + * If we observe that the buffer is revoked now then refuse
> + * the mmap(). This is a belt-and-braces early failure to
> + * ease debugging a revoked buffer being used. Userspace
> + * might also race an mmap() against an explicit revocation,
> + * or an action doing a temporary revoke; race scenarios are
> + * still safe because the fault handler ultimately prevents
> + * access to a revoked buffer if it isn't caught here.
> + */
> + if (READ_ONCE(priv->revoked))
> + return -ENODEV;
> + if ((vma->vm_flags & VM_SHARED) == 0)
> + return -EINVAL;
> +
> + /*
> + * dma_buf_mmap_internal() has asserted that the VMA is
> + * contained within the DMABUF size before calling this.
> + */
> +
> + vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
> + vma->vm_page_prot = pgprot_decrypted(vma->vm_page_prot);
> +
> + /* See comments in vfio_pci_core_mmap() re VM_ALLOW_ANY_UNCACHED. */
> + vm_flags_set(vma, VM_ALLOW_ANY_UNCACHED | VM_IO | VM_PFNMAP |
> + VM_DONTEXPAND | VM_DONTDUMP);
> + vma->vm_private_data = priv;
> + vma->vm_ops = &vfio_pci_mmap_ops;
> +
> + return 0;
> +}
> #endif /* CONFIG_VFIO_PCI_DMABUF */
>
Thanks,
Praan
On Fri, Jun 12, 2026 at 04:22:12PM +0100, Matt Evans wrote:
> Hi Pranjal,
>
> On 12/06/2026 11:41, Pranjal Shrivastava wrote:
> > On Wed, Jun 10, 2026 at 04:43:18PM +0100, Matt Evans wrote:
> >> Convert the VFIO device fd fops->mmap to create a DMABUF representing
> >> the BAR mapping, and make the VMA fault handler look up PFNs from the
> >> corresponding DMABUF. This supports future code mmap()ing BAR
> >> DMABUFs, and iommufd work to support Type1 P2P.
> >>
> >> First, vfio_pci_core_mmap() uses the new
> >> vfio_pci_core_mmap_prep_dmabuf() helper to export a DMABUF
> >> representing a single BAR range. Then, the vfio_pci_mmap_huge_fault()
> >> callback is updated to understand revoked buffers, and uses the new
> >> vfio_pci_dma_buf_find_pfn() helper to determine the PFN for a given
> >> fault address.
> >>
> >> Now that the VFIO DMABUFs can be mmap()ed, vfio_pci_dma_buf_move()
> >> zaps PTEs (used on the revocation and cleanup paths).
> >>
> >> CONFIG_VFIO_PCI_CORE now unconditionally depends on
> >> CONFIG_DMA_SHARED_BUFFER and CONFIG_PCI_P2PDMA_CORE. The
> >> CONFIG_VFIO_PCI_DMABUF feature conditionally includes support for
> >> VFIO_DEVICE_FEATURE_DMA_BUF, depending on the availability of
> >> CONFIG_PCI_P2PDMA.
> >>
> >> Signed-off-by: Matt Evans <matt(a)ozlabs.org>
> >> ---
> >> drivers/vfio/pci/Kconfig | 5 +-
> >> drivers/vfio/pci/Makefile | 3 +-
> >> drivers/vfio/pci/vfio_pci_core.c | 75 +++++++++++++++++++-----------
> >> drivers/vfio/pci/vfio_pci_dmabuf.c | 12 +++++
> >> drivers/vfio/pci/vfio_pci_priv.h | 11 +----
> >> 5 files changed, 67 insertions(+), 39 deletions(-)
Hi Matt,
[...]
> >> int vfio_pci_core_mmap_prep_dmabuf(struct vfio_pci_core_device *vdev,
> >> struct vm_area_struct *vma,
> >> @@ -532,6 +538,10 @@ void vfio_pci_dma_buf_move(struct vfio_pci_core_device *vdev, bool revoked)
> >> struct vfio_pci_dma_buf *tmp;
> >>
> >> lockdep_assert_held_write(&vdev->memory_lock);
> >> + /*
> >> + * Holding memory_lock ensures a racing VMA fault observes
> >> + * priv->revoked properly.
> >> + */
> >
> > Nit: This comment should appear before the lockdep_assert_held_write()
> > Also, it is slightly verbose.. (not against it though).
>
> Right, I'll move it. Agree it's wordy but if anyone changes that I want
> them to "think faulthandler".
>
That's fair I guess.
> >> list_for_each_entry_safe(priv, tmp, &vdev->dmabufs, dmabufs_elm) {
> >> if (!get_file_active(&priv->dmabuf->file))
> >> @@ -549,6 +559,8 @@ void vfio_pci_dma_buf_move(struct vfio_pci_core_device *vdev, bool revoked)
> >> if (revoked) {
> >> kref_put(&priv->kref, vfio_pci_dma_buf_done);
> >> wait_for_completion(&priv->comp);
> >> + unmap_mapping_range(priv->dmabuf->file->f_mapping,
> >> + 0, priv->size, 1);
> >
> > Have we run this series with lockdep enabled?
> > I guess it'd be nice to check with lockdep once..
>
> I've (generally) always run testing of this series with lockdep. (No
> issues (anymore).)
That sounds good! Thanks for confirming! :)
Praan
Most of this patch series has already been pushed upstream, this is just
the second half of the patch series that has not been pushed yet + some
additional changes which were required to implement changes requested by
the mailing list. This patch series is originally from Asahi, previously
posted by Daniel Almeida.
The previous version of the patch series can be found here:
https://patchwork.freedesktop.org/series/164580/
Branch with patches applied available here:
https://gitlab.freedesktop.org/lyudess/linux/-/commits/rust/gem-shmem
This patch series applies on top of drm-rust-next
Patch-series wide changes since V15:
* Fix some major rebasing errors I somehow didn't notice :(
* Drop the dependency on LazyInit, use the trick that Alice suggested
instead.
* Fix dependency ordering so that Tyr can get the vmap stuff first
without the other bits.
Patch-series wide changes since V16:
* Fix ordering one more time (SetOnce::reset() doesn't need to come
before adding vmap functions)
* Rebase against the latest DeviceContext changes from me that got
pushed.
Patch-series wide changes since V20:
* Lots of Sashiko fixes, excluding the comments that I couldn't prove
weren't just bogus.
Lyude Paul (4):
rust: drm: gem: shmem: Add DmaResvGuard helper
rust: drm: gem: shmem: Add vmap functions
rust: faux: Allow retrieving a bound Device
rust: drm: gem: Introduce shmem::Object::sg_table()
rust/kernel/drm/gem/shmem.rs | 547 ++++++++++++++++++++++++++++++++++-
rust/kernel/faux.rs | 18 +-
2 files changed, 549 insertions(+), 16 deletions(-)
base-commit: 550dc7536644db2d67c6f8cf525bba682fba08d9
--
2.54.0