# HG changeset patch # User Paul Boddie # Date 1617145582 -7200 # Node ID 1d24a4fff0bd0982859925932cd557f8bb995719 # Parent 158f806252eb0ddeeac17f0d993b75aa27782043 Removed the largely superfluous accessing abstraction. Since each accessor will only employ one page mapper referencing the accessor, a mapping from file identifiers to page mappers can be maintained. diff -r 158f806252eb -r 1d24a4fff0bd Makefile --- a/Makefile Mon Mar 29 00:56:08 2021 +0200 +++ b/Makefile Wed Mar 31 01:06:22 2021 +0200 @@ -52,7 +52,7 @@ PLAIN_SRC_CC_dstest_test_client = dstest_test_client.cc file.cc PLAIN_SRC_CC_common_server = \ - access_map.cc accessing.cc accessor.cc \ + access_map.cc accessor.cc \ flexpage.cc ipc.cc \ memory/memory_incremental.cc memory/memory_preallocated.cc \ memory/region.cc \ diff -r 158f806252eb -r 1d24a4fff0bd accessing.cc --- a/accessing.cc Mon Mar 29 00:56:08 2021 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,41 +0,0 @@ -#include "accessing.h" - -/* Reserve this mapping and return whether 'fileid' is associated with an - accessor. */ - -bool Accessing::reserve(fileid_t fileid) -{ - _lock.lock(); - - return _accessors.find(fileid) != _accessors.end(); -} - -/* Return the accessor for 'fileid' and release this mapping. */ - -Accessor *Accessing::get(fileid_t fileid) -{ - FileMapping::iterator entry = _accessors.find(fileid); - Accessor *accessor; - - if (entry == _accessors.end()) - accessor = NULL; - else - accessor = entry->second; - - _lock.unlock(); - return accessor; -} - -/* Associate 'fileid' with the given 'accessor' and release this mapping. */ - -void Accessing::set(fileid_t fileid, Accessor *accessor) -{ - FileMapping::iterator entry = _accessors.find(fileid); - - if (entry == _accessors.end()) - _accessors[fileid] = accessor; - - _lock.unlock(); -} - -// vim: tabstop=4 expandtab shiftwidth=4 diff -r 158f806252eb -r 1d24a4fff0bd accessing.h --- a/accessing.h Mon Mar 29 00:56:08 2021 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,33 +0,0 @@ -#pragma once - -#include -#include - -#include "accessor.h" - - - -/* Mapping type from file identifiers to accessors. */ - -typedef std::map FileMapping; -typedef std::pair FileMappingEntry; - - - -/* A registry of accessors for files. */ - -class Accessing -{ -protected: - FileMapping _accessors; - std::mutex _lock; - -public: - bool reserve(fileid_t fileid); - - Accessor *get(fileid_t fileid); - - void set(fileid_t fileid, Accessor *accessor); -}; - -// vim: tabstop=4 expandtab shiftwidth=4 diff -r 158f806252eb -r 1d24a4fff0bd dstest_block_server.cc --- a/dstest_block_server.cc Mon Mar 29 00:56:08 2021 +0200 +++ b/dstest_block_server.cc Wed Mar 31 01:06:22 2021 +0200 @@ -26,7 +26,6 @@ #include #include -#include "accessing.h" #include "memory_incremental.h" #include "memory_utils.h" #include "page_queue_shared.h" @@ -44,11 +43,10 @@ /* Some memory plus infrastructure. */ MemoryIncremental mem(MEMORY_PAGES); - Accessing accessing; Paging paging; PageQueueShared queue; Pages pages(&mem, &queue); - BlockFileOpener opener(&accessing, &paging, &pages); + BlockFileOpener opener(&paging, &pages); /* Register a server associating it with the given object. */ diff -r 158f806252eb -r 1d24a4fff0bd dstest_host_server.cc --- a/dstest_host_server.cc Mon Mar 29 00:56:08 2021 +0200 +++ b/dstest_host_server.cc Wed Mar 31 01:06:22 2021 +0200 @@ -26,7 +26,6 @@ #include #include -#include "accessing.h" #include "memory_incremental.h" #include "memory_utils.h" #include "page_queue_shared.h" @@ -44,11 +43,10 @@ /* Some memory plus infrastructure. */ MemoryIncremental mem(MEMORY_PAGES); - Accessing accessing; Paging paging; PageQueueShared queue; Pages pages(&mem, &queue); - HostFileOpener opener(&accessing, &paging, &pages); + HostFileOpener opener(&paging, &pages); /* Register a server associating it with the given object. */ diff -r 158f806252eb -r 1d24a4fff0bd dstest_test_server.cc --- a/dstest_test_server.cc Mon Mar 29 00:56:08 2021 +0200 +++ b/dstest_test_server.cc Wed Mar 31 01:06:22 2021 +0200 @@ -28,7 +28,6 @@ #include #include -#include "accessing.h" #include "memory_incremental.h" #include "memory_utils.h" #include "page_queue_shared.h" @@ -67,11 +66,10 @@ /* Some memory plus infrastructure. */ MemoryIncremental mem(memory_pages, page(REGION_PAGES)); - Accessing accessing; Paging paging; PageQueueShared queue; Pages pages(&mem, &queue); - TestFileOpener opener(&accessing, &paging, &pages, page(FILE_PAGES)); + TestFileOpener opener(&paging, &pages, page(FILE_PAGES)); /* Register a server associating it with the given object. */ diff -r 158f806252eb -r 1d24a4fff0bd files/block_file_opener.h --- a/files/block_file_opener.h Mon Mar 29 00:56:08 2021 +0200 +++ b/files/block_file_opener.h Wed Mar 31 01:06:22 2021 +0200 @@ -14,8 +14,8 @@ virtual Accessor *make_accessor(fileid_t fileid); public: - explicit BlockFileOpener(Accessing *accessing, Paging *paging, Pages *pages) - : HostFileOpener(accessing, paging, pages) + explicit BlockFileOpener(Paging *paging, Pages *pages) + : HostFileOpener(paging, pages) { } }; diff -r 158f806252eb -r 1d24a4fff0bd files/file_pager.cc --- a/files/file_pager.cc Mon Mar 29 00:56:08 2021 +0200 +++ b/files/file_pager.cc Wed Mar 31 01:06:22 2021 +0200 @@ -19,6 +19,10 @@ return (ipc_server_handler_type) handle_MappedFileObject; } + + +/* File-specific operations. */ + long FilePager::flush(offset_t populated_size, offset_t *size) { return Pager::flush(populated_size, size); @@ -45,6 +49,10 @@ return L4_EOK; } + + +/* Generic pager operations. */ + long FilePager::map(unsigned long offset, l4_addr_t hot_spot, flags_t flags, l4_snd_fpage_t *region) { return Pager::map(offset, hot_spot, flags, region); diff -r 158f806252eb -r 1d24a4fff0bd files/host_file_opener.h --- a/files/host_file_opener.h Mon Mar 29 00:56:08 2021 +0200 +++ b/files/host_file_opener.h Wed Mar 31 01:06:22 2021 +0200 @@ -27,8 +27,8 @@ virtual Accessor *make_accessor(fileid_t fileid); public: - explicit HostFileOpener(Accessing *accessing, Paging *paging, Pages *pages) - : OpenerResource(accessing, paging, pages) + explicit HostFileOpener(Paging *paging, Pages *pages) + : OpenerResource(paging, pages) { } }; diff -r 158f806252eb -r 1d24a4fff0bd files/opener_resource.cc --- a/files/opener_resource.cc Mon Mar 29 00:56:08 2021 +0200 +++ b/files/opener_resource.cc Wed Mar 31 01:06:22 2021 +0200 @@ -4,8 +4,8 @@ /* Support for providing access to files. */ -OpenerResource::OpenerResource(Accessing *accessing, Paging *paging, Pages *pages) -: _accessing(accessing), _paging(paging), _pages(pages) +OpenerResource::OpenerResource(Paging *paging, Pages *pages) +: _paging(paging), _pages(pages) { } @@ -30,42 +30,24 @@ if (fileid == FILEID_INVALID) return NULL; - Accessor *accessor = get_accessor(fileid); - PageMapper *mapper = get_mapper(accessor); + PageMapper *mapper = get_mapper(fileid); return new FilePager(fileid, mapper, flags); } -/* Obtain an accessor for the 'fileid' or register a new one in the accessing - object. */ - -Accessor *OpenerResource::get_accessor(fileid_t fileid) -{ - Accessor *accessor; - - if (_accessing->reserve(fileid)) - accessor = _accessing->get(fileid); - else - { - accessor = make_accessor(fileid); - _accessing->set(fileid, accessor); - } - - return accessor; -} - -/* Obtain a page mapper for the 'accessor' or register a new one in the +/* Obtain a page mapper for the 'fileid' or register a new one in the paging object. */ -PageMapper *OpenerResource::get_mapper(Accessor *accessor) +PageMapper *OpenerResource::get_mapper(fileid_t fileid) { PageMapper *mapper; - if (_paging->reserve(accessor)) - mapper = _paging->get(accessor); + if (_paging->reserve(fileid)) + mapper = _paging->get(fileid); else { + Accessor *accessor = make_accessor(fileid); mapper = new PageMapper(accessor, _pages); - _paging->set(accessor, mapper); + _paging->set(fileid, mapper); } return mapper; diff -r 158f806252eb -r 1d24a4fff0bd files/opener_resource.h --- a/files/opener_resource.h Mon Mar 29 00:56:08 2021 +0200 +++ b/files/opener_resource.h Wed Mar 31 01:06:22 2021 +0200 @@ -2,7 +2,6 @@ #include -#include "accessing.h" #include "file_pager.h" #include "opener_context_resource.h" #include "opener_interface.h" @@ -16,15 +15,12 @@ class OpenerResource : public Resource, public Opener { protected: - Accessing *_accessing; Paging *_paging; Pages *_pages; /* Convenience methods. */ - Accessor *get_accessor(fileid_t fileid); - - PageMapper *get_mapper(Accessor *accessor); + PageMapper *get_mapper(fileid_t fileid); /* Configurable methods. */ @@ -33,7 +29,7 @@ virtual Accessor *make_accessor(fileid_t fileid) = 0; public: - explicit OpenerResource(Accessing *accessing, Paging *paging, Pages *pages); + explicit OpenerResource(Paging *paging, Pages *pages); /* Server details. */ diff -r 158f806252eb -r 1d24a4fff0bd files/test_file_opener.cc --- a/files/test_file_opener.cc Mon Mar 29 00:56:08 2021 +0200 +++ b/files/test_file_opener.cc Wed Mar 31 01:06:22 2021 +0200 @@ -5,9 +5,9 @@ /* Support for providing access to files. */ -TestFileOpener::TestFileOpener(Accessing *accessing, Paging *paging, Pages *pages, +TestFileOpener::TestFileOpener(Paging *paging, Pages *pages, offset_t file_size) -: OpenerResource(accessing, paging, pages), _file_size(file_size) +: OpenerResource(paging, pages), _file_size(file_size) { } diff -r 158f806252eb -r 1d24a4fff0bd files/test_file_opener.h --- a/files/test_file_opener.h Mon Mar 29 00:56:08 2021 +0200 +++ b/files/test_file_opener.h Wed Mar 31 01:06:22 2021 +0200 @@ -16,8 +16,7 @@ virtual Accessor *make_accessor(fileid_t fileid); public: - explicit TestFileOpener(Accessing *accessing, Paging *paging, Pages *pages, - offset_t file_size=0); + explicit TestFileOpener(Paging *paging, Pages *pages, offset_t file_size=0); }; // vim: tabstop=4 expandtab shiftwidth=4 diff -r 158f806252eb -r 1d24a4fff0bd page_mapper.h --- a/page_mapper.h Mon Mar 29 00:56:08 2021 +0200 +++ b/page_mapper.h Wed Mar 31 01:06:22 2021 +0200 @@ -15,6 +15,9 @@ Accessor *_accessor; Pages *_pages; unsigned int _attached; + + /* Serialisation of accesses. */ + std::mutex _lock; /* Internal flexpage retrieval methods. */ @@ -34,6 +37,9 @@ /* Interface for the pager. */ + Accessor *accessor() + { return _accessor; } + Flexpage *get(offset_t offset, flags_t flags); void queue(Flexpage *flexpage); diff -r 158f806252eb -r 1d24a4fff0bd paging.cc --- a/paging.cc Mon Mar 29 00:56:08 2021 +0200 +++ b/paging.cc Wed Mar 31 01:06:22 2021 +0200 @@ -1,15 +1,15 @@ #include "paging.h" -bool Paging::reserve(Accessor *accessor) +bool Paging::reserve(fileid_t fileid) { _lock.lock(); - return _mappers.find(accessor) != _mappers.end(); + return _mappers.find(fileid) != _mappers.end(); } -PageMapper *Paging::get(Accessor *accessor) +PageMapper *Paging::get(fileid_t fileid) { - AccessorMapping::iterator entry = _mappers.find(accessor); + FileMapping::iterator entry = _mappers.find(fileid); PageMapper *mapper; if (entry == _mappers.end()) @@ -21,12 +21,12 @@ return mapper; } -void Paging::set(Accessor *accessor, PageMapper *mapper) +void Paging::set(fileid_t fileid, PageMapper *mapper) { - AccessorMapping::iterator entry = _mappers.find(accessor); + FileMapping::iterator entry = _mappers.find(fileid); if (entry == _mappers.end()) - _mappers[accessor] = mapper; + _mappers[fileid] = mapper; _lock.unlock(); } diff -r 158f806252eb -r 1d24a4fff0bd paging.h --- a/paging.h Mon Mar 29 00:56:08 2021 +0200 +++ b/paging.h Wed Mar 31 01:06:22 2021 +0200 @@ -3,15 +3,14 @@ #include #include -#include "accessor.h" #include "page_mapper.h" /* Mapping type from accessors to page mappers. */ -typedef std::map AccessorMapping; -typedef std::pair AccessorMappingEntry; +typedef std::map FileMapping; +typedef std::pair FileMappingEntry; @@ -20,15 +19,15 @@ class Paging { protected: - AccessorMapping _mappers; + FileMapping _mappers; std::mutex _lock; public: - bool reserve(Accessor *accessor); + bool reserve(fileid_t fileid); - PageMapper *get(Accessor *accessor); + PageMapper *get(fileid_t fileid); - void set(Accessor *accessor, PageMapper *mapper); + void set(fileid_t fileid, PageMapper *mapper); }; // vim: tabstop=4 expandtab shiftwidth=4