Kernel: Pass OpenFileDescription to vmobject_and_memory_type_for_mmap

This is more useful than passing a reference to the Process, which
can be easily obtained with Process::current(). Only KCOVDevice
previously used this argument.
We will need this new argument in the next commit.
This commit is contained in:
Sönke Holz authored and Sönke Holz committed 2026-09-18 17:25:42 +02:00
1 parent 15fcac7f87
commit 38c162aeea
15 files changed
+16 -16

No files matched your search

+1 -1
View File
@@ -33,7 +33,7 @@ DisplayConnector::DisplayConnector(size_t framebuffer_resource_size, Memory::Mem
{
}
ErrorOr<File::VMObjectAndMemoryType> DisplayConnector::vmobject_and_memory_type_for_mmap(Process&, Memory::VirtualRange const&, u64& offset, bool)
ErrorOr<File::VMObjectAndMemoryType> DisplayConnector::vmobject_and_memory_type_for_mmap(OpenFileDescription&, Memory::VirtualRange const&, u64& offset, bool)
{
VERIFY(m_shared_framebuffer_vmobject);
if (offset != 0)
+1 -1
View File
@@ -137,7 +137,7 @@ private:
virtual bool can_write(OpenFileDescription const&, u64) const final override { return true; }
virtual ErrorOr<size_t> read(OpenFileDescription&, u64, UserOrKernelBuffer&, size_t) override final;
virtual ErrorOr<size_t> write(OpenFileDescription&, u64, UserOrKernelBuffer const&, size_t) override final;
virtual ErrorOr<VMObjectAndMemoryType> vmobject_and_memory_type_for_mmap(Process&, Memory::VirtualRange const&, u64&, bool) override final;
virtual ErrorOr<VMObjectAndMemoryType> vmobject_and_memory_type_for_mmap(OpenFileDescription&, Memory::VirtualRange const&, u64&, bool) override final;
virtual ErrorOr<void> ioctl(OpenFileDescription&, unsigned request, Userspace<void*> arg) override final;
virtual StringView class_name() const override final { return "DisplayConnector"sv; }
+1 -1
View File
@@ -38,7 +38,7 @@ ErrorOr<size_t> MemoryDevice::read(OpenFileDescription&, u64 offset, UserOrKerne
return length;
}
ErrorOr<File::VMObjectAndMemoryType> MemoryDevice::vmobject_and_memory_type_for_mmap(Process&, Memory::VirtualRange const& range, u64& offset, bool)
ErrorOr<File::VMObjectAndMemoryType> MemoryDevice::vmobject_and_memory_type_for_mmap(OpenFileDescription&, Memory::VirtualRange const& range, u64& offset, bool)
{
auto viewed_address = PhysicalAddress(offset);
+1 -1
View File
@@ -19,7 +19,7 @@ public:
static NonnullRefPtr<MemoryDevice> must_create();
~MemoryDevice();
virtual ErrorOr<VMObjectAndMemoryType> vmobject_and_memory_type_for_mmap(Process&, Memory::VirtualRange const&, u64& offset, bool shared) override;
virtual ErrorOr<VMObjectAndMemoryType> vmobject_and_memory_type_for_mmap(OpenFileDescription&, Memory::VirtualRange const&, u64& offset, bool shared) override;
private:
MemoryDevice();
+2 -2
View File
@@ -71,9 +71,9 @@ ErrorOr<void> KCOVDevice::ioctl(OpenFileDescription&, unsigned request, Userspac
}
}
ErrorOr<File::VMObjectAndMemoryType> KCOVDevice::vmobject_and_memory_type_for_mmap(Process& process, Memory::VirtualRange const&, u64&, bool)
ErrorOr<File::VMObjectAndMemoryType> KCOVDevice::vmobject_and_memory_type_for_mmap(OpenFileDescription&, Memory::VirtualRange const&, u64&, bool)
{
auto* kcov_instance = process.kcov_instance();
auto* kcov_instance = Process::current().kcov_instance();
VERIFY(kcov_instance != nullptr); // Should have happened on fd open()
if (!kcov_instance->vmobject())
+1 -1
View File
@@ -19,7 +19,7 @@ public:
static void free_process();
// ^File
ErrorOr<VMObjectAndMemoryType> vmobject_and_memory_type_for_mmap(Process&, Memory::VirtualRange const&, u64& offset, bool shared) override;
ErrorOr<VMObjectAndMemoryType> vmobject_and_memory_type_for_mmap(OpenFileDescription&, Memory::VirtualRange const&, u64& offset, bool shared) override;
virtual ErrorOr<NonnullRefPtr<OpenFileDescription>> open(int options) override;
protected:
+1 -1
View File
@@ -17,7 +17,7 @@ AnonymousFile::AnonymousFile(NonnullLockRefPtr<Memory::AnonymousVMObject> vmobje
AnonymousFile::~AnonymousFile() = default;
ErrorOr<File::VMObjectAndMemoryType> AnonymousFile::vmobject_and_memory_type_for_mmap(Process&, Memory::VirtualRange const&, u64& offset, bool)
ErrorOr<File::VMObjectAndMemoryType> AnonymousFile::vmobject_and_memory_type_for_mmap(OpenFileDescription&, Memory::VirtualRange const&, u64& offset, bool)
{
if (offset != 0)
return EINVAL;
+1 -1
View File
@@ -20,7 +20,7 @@ public:
virtual ~AnonymousFile() override;
virtual ErrorOr<VMObjectAndMemoryType> vmobject_and_memory_type_for_mmap(Process&, Memory::VirtualRange const&, u64& offset, bool shared) override;
virtual ErrorOr<VMObjectAndMemoryType> vmobject_and_memory_type_for_mmap(OpenFileDescription&, Memory::VirtualRange const&, u64& offset, bool shared) override;
private:
virtual StringView class_name() const override { return "AnonymousFile"sv; }
+1 -1
View File
@@ -35,7 +35,7 @@ ErrorOr<void> File::ioctl(OpenFileDescription&, unsigned, Userspace<void*>)
return ENOTTY;
}
ErrorOr<File::VMObjectAndMemoryType> File::vmobject_and_memory_type_for_mmap(Process&, Memory::VirtualRange const&, u64&, bool)
ErrorOr<File::VMObjectAndMemoryType> File::vmobject_and_memory_type_for_mmap(OpenFileDescription&, Memory::VirtualRange const&, u64&, bool)
{
return ENODEV;
}
+1 -1
View File
@@ -96,7 +96,7 @@ public:
NonnullLockRefPtr<Memory::VMObject> vmobject;
Memory::MemoryType memory_type;
};
virtual ErrorOr<VMObjectAndMemoryType> vmobject_and_memory_type_for_mmap(Process&, Memory::VirtualRange const&, u64& offset, bool shared);
virtual ErrorOr<VMObjectAndMemoryType> vmobject_and_memory_type_for_mmap(OpenFileDescription&, Memory::VirtualRange const&, u64& offset, bool shared);
// Although this might be better described "name" or "description", these terms already have other meanings.
virtual ErrorOr<NonnullOwnPtr<KString>> pseudo_path(OpenFileDescription const&) const = 0;
+1 -1
View File
@@ -81,7 +81,7 @@ ErrorOr<void> InodeFile::ioctl(OpenFileDescription& description, unsigned reques
}
}
ErrorOr<File::VMObjectAndMemoryType> InodeFile::vmobject_and_memory_type_for_mmap(Process&, Memory::VirtualRange const& range, u64& offset, bool shared)
ErrorOr<File::VMObjectAndMemoryType> InodeFile::vmobject_and_memory_type_for_mmap(OpenFileDescription&, Memory::VirtualRange const& range, u64& offset, bool shared)
{
if (shared) {
return VMObjectAndMemoryType {
+1 -1
View File
@@ -33,7 +33,7 @@ public:
virtual ErrorOr<size_t> read(OpenFileDescription&, u64, UserOrKernelBuffer&, size_t) override;
virtual ErrorOr<size_t> write(OpenFileDescription&, u64, UserOrKernelBuffer const&, size_t) override;
virtual ErrorOr<void> ioctl(OpenFileDescription&, unsigned request, Userspace<void*> arg) override;
virtual ErrorOr<VMObjectAndMemoryType> vmobject_and_memory_type_for_mmap(Process&, Memory::VirtualRange const&, u64& offset, bool shared) override;
virtual ErrorOr<VMObjectAndMemoryType> vmobject_and_memory_type_for_mmap(OpenFileDescription&, Memory::VirtualRange const&, u64& offset, bool shared) override;
virtual ErrorOr<struct stat> stat() const override { return inode().metadata().stat(); }
virtual ErrorOr<NonnullOwnPtr<KString>> pseudo_path(OpenFileDescription const&) const override;
+1 -1
View File
@@ -399,7 +399,7 @@ InodeMetadata OpenFileDescription::metadata() const
return {};
}
ErrorOr<File::VMObjectAndMemoryType> OpenFileDescription::vmobject_for_mmap(Process& process, Memory::VirtualRange const& range, u64& offset, bool shared)
ErrorOr<File::VMObjectAndMemoryType> OpenFileDescription::vmobject_for_mmap(OpenFileDescription& process, Memory::VirtualRange const& range, u64& offset, bool shared)
{
return m_file->vmobject_and_memory_type_for_mmap(process, range, offset, shared);
}
+1 -1
View File
@@ -99,7 +99,7 @@ public:
RefPtr<Custody> custody();
RefPtr<Custody const> custody() const;
ErrorOr<File::VMObjectAndMemoryType> vmobject_for_mmap(Process&, Memory::VirtualRange const&, u64& offset, bool shared);
ErrorOr<File::VMObjectAndMemoryType> vmobject_for_mmap(OpenFileDescription&, Memory::VirtualRange const&, u64& offset, bool shared);
bool is_blocking() const;
void set_blocking(bool b);
+1 -1
View File
@@ -167,7 +167,7 @@ ErrorOr<FlatPtr> Process::sys$mmap(Userspace<Syscall::SC_mmap_params const*> use
if (description->inode())
TRY(validate_inode_mmap_prot(prot, description->is_readable(), description->is_writable(), map_shared));
auto vmobject_and_memory_type = TRY(description->vmobject_for_mmap(*this, requested_range, used_offset, map_shared));
auto vmobject_and_memory_type = TRY(description->vmobject_for_mmap(*description, requested_range, used_offset, map_shared));
vmobject = vmobject_and_memory_type.vmobject;
memory_type = vmobject_and_memory_type.memory_type;
}