summaryrefslogtreecommitdiff
path: root/Kernel/KBuffer.h
AgeCommit message (Collapse)Author
2020-12-23Kernel: Make KBuffer::try_create_with_bytes() actually copy the bytesAndreas Kling
KBuffers created with this API were actually just zero-filled instead of being populated with the provided bytes. Fixes #4493.
2020-12-18Kernel: Add KBuffer::try_create_with_bytes()Andreas Kling
Here's another fallible KBuffer construction API that creates a KBuffer and populates it with a range of bytes.
2020-12-18Kernel: Add KBuffer::try_create_with_size()Andreas Kling
We need to stop assuming that KBuffer allocation always succeeds. This patch adds the following API: - static OwnPtr<KBuffer> KBuffer::create_with_size(size_t); All KBuffer clients should move towards using this (and handling any failures with grace.)
2020-08-11Kernel: Make Inode::read_entire() return a KBuffer (not ByteBuffer)Andreas Kling
ByteBuffer is backed by kmalloc heap memory which is a scarce resource. This fixes an OOM panic when traversing a large directory.
2020-03-23AK: Reduce header dependency graph of String.hAndreas Kling
String.h no longer pulls in StringView.h. We do this by moving a bunch of String functions out-of-line.
2020-03-08Kernel: Add missing #includes now that <AK/StdLibExtras.h> is smallerAndreas Kling
2020-02-23Kernel: Commit the entire region up front in KBuffer::copy()Andreas Kling
Since we know exactly how much physical memory we'll need, we might as well commit it up front instead of letting page faults drive it.
2020-02-21Kernel: Expose the underlying Region of a KBufferAndreas Kling
2020-02-16Kernel: Add forward declaration headerAndreas Kling
2020-02-16Kernel: Move all code into the Kernel namespaceAndreas Kling
2020-01-20Kernel: Allow naming KBuffersAndreas Kling
2020-01-18Meta: Add license header to source filesAndreas Kling
As suggested by Joshua, this commit adds the 2-clause BSD license as a comment block to the top of every source file. For the first pass, I've just added myself for simplicity. I encourage everyone to add themselves as copyright holders of any file they've added or modified in some significant way. If I've added myself in error somewhere, feel free to replace it with the appropriate copyright holder instead. Going forward, all new source files should include a license header.
2019-12-25Kernel: Make kernel memory regions be non-executable by defaultAndreas Kling
From now on, you'll have to request executable memory specifically if you want some.
2019-09-27Kernel: Make Region single-owner instead of ref-countedAndreas Kling
This simplifies the ownership model and makes Region easier to reason about. Userspace Regions are now primarily kept by Process::m_regions. Kernel Regions are kept in various OwnPtr<Regions>'s. Regions now only ever get unmapped when they are destroyed.
2019-08-24KBuffer: capacity() should return internal capacity, not internal sizeAndreas Kling
KBuffer is just meant to be a dumb wrapper around KBufferImpl. With this change, we actually start to see KBuffers with different size and capacity, which allows some reallocation-avoiding optimizations.
2019-08-06Kernel: Make KBuffer lazily populatedAndreas Kling
KBuffers are now zero-filled on demand instead of up front. This means that you can create a huge KBuffer and it will only take up VM, not physical pages (until you access them.)
2019-08-06KBuffer: Add set_size() and LogStream operator<<Andreas Kling
It will be useful to be able to set the "public" size of a KBuffer. It can still have a different amount of memory allocated internally.
2019-08-05Kernel: Use KBuffers for ProcFS and SynthFSAndreas Kling
Instead of generating ByteBuffers and keeping those lying around, have these filesystems generate KBuffers instead. These are way less spooky to leave around for a while. Since FileDescription will keep a generated file buffer around until userspace has read the whole thing, this prevents trivially exhausting the kmalloc heap by opening many files in /proc for example. The code responsible for generating each /proc file is not perfectly efficient and many of them still use ByteBuffers internally but they at least go away when we return now. :^)
2019-08-05Kernel: Add a little comment header about KBufferAndreas Kling
2019-08-05Kernel: Make KBuffer a value-type wrapper around a KBufferImplAndreas Kling
A KBuffer always contains a valid KBufferImpl. If you need a "null" state buffer, use Optional<KBuffer>. This makes KBuffer very easy to work with and pass around, just like ByteBuffer before it.
2019-08-04Kernel: Add KBuffer, a simple byte buffer backed by kernel-only memoryAndreas Kling
This memory is not accessible to userspace and comes from the kernel page allocator, not from the kmalloc heap. This makes it ideal for larger allocations.