[roll] Roll fuchsia [kernel][vm] Fix bug in SupplyPagesLocked The current code for `SupplyPagesLocked` does not correctly handle the case where the PMM returns a `ZX_ERR_SHOULD_WAIT`. Consider the following series of events: 1. `TakePagesLocked` is called on a VMO that has been compressed. 2. The resulting splice list is passed into `SupplyPagesLocked`. 3. `SupplyPagesLocked` starts iterating through the splice list. In doing so, it pops the first page P off the list. 4. Page P is compressed, so `SupplyPagesLocked` invokes `MakePageFromReference`, which attempts to allocate a page from the PMM to hold the decompressed contents. 5. The PMM returns `ZX_ERR_SHOULD_WAIT`, causing `SupplyPagesLocked` to return. Notice that page P is no longer in the splice list. 6. The caller of `SupplyPagesLocked` (`VmObjectPaged::SupplyPages`) notices that `ZX_ERR_SHOULD_WAIT` was returned and therefore waits on the page request populated by the PMM. 7. Once the page request has succeeded, `VmObjectPaged::SupplyPages` calls `VmCowPages::SupplyPagesLocked` with the same splice list again, hoping to resume the operation where it left off. However, page P is no longer in the splice list, so it is skipped. This means that the contents of page P are lost, and all successive pages are inserted at the wrong offset (off by exactly one page). This CL fixes the issue by leaving page P in the splice list until `MakePageFromReference` has succeeded. It does so by "peeking" at the first page in the splice list, determining if it is a reference, and then decompressing it prior to actually popping the page from the list. Original-Bug: 126153 Original-Reviewed-on: https://fuchsia-review.googlesource.com/c/fuchsia/+/950652 Original-Revision: 3e88262dedd3e5495dedadfe808127184d3b337b GitOrigin-RevId: aa985a2fd5e0168083ec165d99c6df7b5d4d45c3 Change-Id: I782f4d89ad722e13ec8dd669da9b2a2b0939d89d
This repository contains Fuchsia's Global Integration manifest files.
All changes should be made to the internal version of this repository. Our infrastructure automatically updates this version when the internal one changes.
Currently all changes must be made by a Google employee. Non-Google employees wishing to make a change can ask for assistance via the IRC channel #fuchsia on Freenode.
First install Jiri.
Next run:
$ jiri init $ jiri import minimal https://fuchsia.googlesource.com/integration $ jiri update
Third party projects should have their own subdirectory in ./third_party.