1.1 --- a/Makefile Mon Mar 29 00:56:08 2021 +0200
1.2 +++ b/Makefile Wed Mar 31 01:06:22 2021 +0200
1.3 @@ -52,7 +52,7 @@
1.4 PLAIN_SRC_CC_dstest_test_client = dstest_test_client.cc file.cc
1.5
1.6 PLAIN_SRC_CC_common_server = \
1.7 - access_map.cc accessing.cc accessor.cc \
1.8 + access_map.cc accessor.cc \
1.9 flexpage.cc ipc.cc \
1.10 memory/memory_incremental.cc memory/memory_preallocated.cc \
1.11 memory/region.cc \
2.1 --- a/accessing.cc Mon Mar 29 00:56:08 2021 +0200
2.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
2.3 @@ -1,41 +0,0 @@
2.4 -#include "accessing.h"
2.5 -
2.6 -/* Reserve this mapping and return whether 'fileid' is associated with an
2.7 - accessor. */
2.8 -
2.9 -bool Accessing::reserve(fileid_t fileid)
2.10 -{
2.11 - _lock.lock();
2.12 -
2.13 - return _accessors.find(fileid) != _accessors.end();
2.14 -}
2.15 -
2.16 -/* Return the accessor for 'fileid' and release this mapping. */
2.17 -
2.18 -Accessor *Accessing::get(fileid_t fileid)
2.19 -{
2.20 - FileMapping::iterator entry = _accessors.find(fileid);
2.21 - Accessor *accessor;
2.22 -
2.23 - if (entry == _accessors.end())
2.24 - accessor = NULL;
2.25 - else
2.26 - accessor = entry->second;
2.27 -
2.28 - _lock.unlock();
2.29 - return accessor;
2.30 -}
2.31 -
2.32 -/* Associate 'fileid' with the given 'accessor' and release this mapping. */
2.33 -
2.34 -void Accessing::set(fileid_t fileid, Accessor *accessor)
2.35 -{
2.36 - FileMapping::iterator entry = _accessors.find(fileid);
2.37 -
2.38 - if (entry == _accessors.end())
2.39 - _accessors[fileid] = accessor;
2.40 -
2.41 - _lock.unlock();
2.42 -}
2.43 -
2.44 -// vim: tabstop=4 expandtab shiftwidth=4
3.1 --- a/accessing.h Mon Mar 29 00:56:08 2021 +0200
3.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000
3.3 @@ -1,33 +0,0 @@
3.4 -#pragma once
3.5 -
3.6 -#include <map>
3.7 -#include <mutex>
3.8 -
3.9 -#include "accessor.h"
3.10 -
3.11 -
3.12 -
3.13 -/* Mapping type from file identifiers to accessors. */
3.14 -
3.15 -typedef std::map<fileid_t, Accessor *> FileMapping;
3.16 -typedef std::pair<fileid_t, Accessor *> FileMappingEntry;
3.17 -
3.18 -
3.19 -
3.20 -/* A registry of accessors for files. */
3.21 -
3.22 -class Accessing
3.23 -{
3.24 -protected:
3.25 - FileMapping _accessors;
3.26 - std::mutex _lock;
3.27 -
3.28 -public:
3.29 - bool reserve(fileid_t fileid);
3.30 -
3.31 - Accessor *get(fileid_t fileid);
3.32 -
3.33 - void set(fileid_t fileid, Accessor *accessor);
3.34 -};
3.35 -
3.36 -// vim: tabstop=4 expandtab shiftwidth=4
4.1 --- a/dstest_block_server.cc Mon Mar 29 00:56:08 2021 +0200
4.2 +++ b/dstest_block_server.cc Wed Mar 31 01:06:22 2021 +0200
4.3 @@ -26,7 +26,6 @@
4.4 #include <string.h>
4.5 #include <stdlib.h>
4.6
4.7 -#include "accessing.h"
4.8 #include "memory_incremental.h"
4.9 #include "memory_utils.h"
4.10 #include "page_queue_shared.h"
4.11 @@ -44,11 +43,10 @@
4.12 /* Some memory plus infrastructure. */
4.13
4.14 MemoryIncremental mem(MEMORY_PAGES);
4.15 - Accessing accessing;
4.16 Paging paging;
4.17 PageQueueShared queue;
4.18 Pages pages(&mem, &queue);
4.19 - BlockFileOpener opener(&accessing, &paging, &pages);
4.20 + BlockFileOpener opener(&paging, &pages);
4.21
4.22 /* Register a server associating it with the given object. */
4.23
5.1 --- a/dstest_host_server.cc Mon Mar 29 00:56:08 2021 +0200
5.2 +++ b/dstest_host_server.cc Wed Mar 31 01:06:22 2021 +0200
5.3 @@ -26,7 +26,6 @@
5.4 #include <string.h>
5.5 #include <stdlib.h>
5.6
5.7 -#include "accessing.h"
5.8 #include "memory_incremental.h"
5.9 #include "memory_utils.h"
5.10 #include "page_queue_shared.h"
5.11 @@ -44,11 +43,10 @@
5.12 /* Some memory plus infrastructure. */
5.13
5.14 MemoryIncremental mem(MEMORY_PAGES);
5.15 - Accessing accessing;
5.16 Paging paging;
5.17 PageQueueShared queue;
5.18 Pages pages(&mem, &queue);
5.19 - HostFileOpener opener(&accessing, &paging, &pages);
5.20 + HostFileOpener opener(&paging, &pages);
5.21
5.22 /* Register a server associating it with the given object. */
5.23
6.1 --- a/dstest_test_server.cc Mon Mar 29 00:56:08 2021 +0200
6.2 +++ b/dstest_test_server.cc Wed Mar 31 01:06:22 2021 +0200
6.3 @@ -28,7 +28,6 @@
6.4 #include <string.h>
6.5 #include <stdlib.h>
6.6
6.7 -#include "accessing.h"
6.8 #include "memory_incremental.h"
6.9 #include "memory_utils.h"
6.10 #include "page_queue_shared.h"
6.11 @@ -67,11 +66,10 @@
6.12 /* Some memory plus infrastructure. */
6.13
6.14 MemoryIncremental mem(memory_pages, page(REGION_PAGES));
6.15 - Accessing accessing;
6.16 Paging paging;
6.17 PageQueueShared queue;
6.18 Pages pages(&mem, &queue);
6.19 - TestFileOpener opener(&accessing, &paging, &pages, page(FILE_PAGES));
6.20 + TestFileOpener opener(&paging, &pages, page(FILE_PAGES));
6.21
6.22 /* Register a server associating it with the given object. */
6.23
7.1 --- a/files/block_file_opener.h Mon Mar 29 00:56:08 2021 +0200
7.2 +++ b/files/block_file_opener.h Wed Mar 31 01:06:22 2021 +0200
7.3 @@ -14,8 +14,8 @@
7.4 virtual Accessor *make_accessor(fileid_t fileid);
7.5
7.6 public:
7.7 - explicit BlockFileOpener(Accessing *accessing, Paging *paging, Pages *pages)
7.8 - : HostFileOpener(accessing, paging, pages)
7.9 + explicit BlockFileOpener(Paging *paging, Pages *pages)
7.10 + : HostFileOpener(paging, pages)
7.11 {
7.12 }
7.13 };
8.1 --- a/files/file_pager.cc Mon Mar 29 00:56:08 2021 +0200
8.2 +++ b/files/file_pager.cc Wed Mar 31 01:06:22 2021 +0200
8.3 @@ -19,6 +19,10 @@
8.4 return (ipc_server_handler_type) handle_MappedFileObject;
8.5 }
8.6
8.7 +
8.8 +
8.9 +/* File-specific operations. */
8.10 +
8.11 long FilePager::flush(offset_t populated_size, offset_t *size)
8.12 {
8.13 return Pager::flush(populated_size, size);
8.14 @@ -45,6 +49,10 @@
8.15 return L4_EOK;
8.16 }
8.17
8.18 +
8.19 +
8.20 +/* Generic pager operations. */
8.21 +
8.22 long FilePager::map(unsigned long offset, l4_addr_t hot_spot, flags_t flags, l4_snd_fpage_t *region)
8.23 {
8.24 return Pager::map(offset, hot_spot, flags, region);
9.1 --- a/files/host_file_opener.h Mon Mar 29 00:56:08 2021 +0200
9.2 +++ b/files/host_file_opener.h Wed Mar 31 01:06:22 2021 +0200
9.3 @@ -27,8 +27,8 @@
9.4 virtual Accessor *make_accessor(fileid_t fileid);
9.5
9.6 public:
9.7 - explicit HostFileOpener(Accessing *accessing, Paging *paging, Pages *pages)
9.8 - : OpenerResource(accessing, paging, pages)
9.9 + explicit HostFileOpener(Paging *paging, Pages *pages)
9.10 + : OpenerResource(paging, pages)
9.11 {
9.12 }
9.13 };
10.1 --- a/files/opener_resource.cc Mon Mar 29 00:56:08 2021 +0200
10.2 +++ b/files/opener_resource.cc Wed Mar 31 01:06:22 2021 +0200
10.3 @@ -4,8 +4,8 @@
10.4
10.5 /* Support for providing access to files. */
10.6
10.7 -OpenerResource::OpenerResource(Accessing *accessing, Paging *paging, Pages *pages)
10.8 -: _accessing(accessing), _paging(paging), _pages(pages)
10.9 +OpenerResource::OpenerResource(Paging *paging, Pages *pages)
10.10 +: _paging(paging), _pages(pages)
10.11 {
10.12 }
10.13
10.14 @@ -30,42 +30,24 @@
10.15 if (fileid == FILEID_INVALID)
10.16 return NULL;
10.17
10.18 - Accessor *accessor = get_accessor(fileid);
10.19 - PageMapper *mapper = get_mapper(accessor);
10.20 + PageMapper *mapper = get_mapper(fileid);
10.21 return new FilePager(fileid, mapper, flags);
10.22 }
10.23
10.24 -/* Obtain an accessor for the 'fileid' or register a new one in the accessing
10.25 - object. */
10.26 -
10.27 -Accessor *OpenerResource::get_accessor(fileid_t fileid)
10.28 -{
10.29 - Accessor *accessor;
10.30 -
10.31 - if (_accessing->reserve(fileid))
10.32 - accessor = _accessing->get(fileid);
10.33 - else
10.34 - {
10.35 - accessor = make_accessor(fileid);
10.36 - _accessing->set(fileid, accessor);
10.37 - }
10.38 -
10.39 - return accessor;
10.40 -}
10.41 -
10.42 -/* Obtain a page mapper for the 'accessor' or register a new one in the
10.43 +/* Obtain a page mapper for the 'fileid' or register a new one in the
10.44 paging object. */
10.45
10.46 -PageMapper *OpenerResource::get_mapper(Accessor *accessor)
10.47 +PageMapper *OpenerResource::get_mapper(fileid_t fileid)
10.48 {
10.49 PageMapper *mapper;
10.50
10.51 - if (_paging->reserve(accessor))
10.52 - mapper = _paging->get(accessor);
10.53 + if (_paging->reserve(fileid))
10.54 + mapper = _paging->get(fileid);
10.55 else
10.56 {
10.57 + Accessor *accessor = make_accessor(fileid);
10.58 mapper = new PageMapper(accessor, _pages);
10.59 - _paging->set(accessor, mapper);
10.60 + _paging->set(fileid, mapper);
10.61 }
10.62
10.63 return mapper;
11.1 --- a/files/opener_resource.h Mon Mar 29 00:56:08 2021 +0200
11.2 +++ b/files/opener_resource.h Wed Mar 31 01:06:22 2021 +0200
11.3 @@ -2,7 +2,6 @@
11.4
11.5 #include <l4/sys/ipc.h>
11.6
11.7 -#include "accessing.h"
11.8 #include "file_pager.h"
11.9 #include "opener_context_resource.h"
11.10 #include "opener_interface.h"
11.11 @@ -16,15 +15,12 @@
11.12 class OpenerResource : public Resource, public Opener
11.13 {
11.14 protected:
11.15 - Accessing *_accessing;
11.16 Paging *_paging;
11.17 Pages *_pages;
11.18
11.19 /* Convenience methods. */
11.20
11.21 - Accessor *get_accessor(fileid_t fileid);
11.22 -
11.23 - PageMapper *get_mapper(Accessor *accessor);
11.24 + PageMapper *get_mapper(fileid_t fileid);
11.25
11.26 /* Configurable methods. */
11.27
11.28 @@ -33,7 +29,7 @@
11.29 virtual Accessor *make_accessor(fileid_t fileid) = 0;
11.30
11.31 public:
11.32 - explicit OpenerResource(Accessing *accessing, Paging *paging, Pages *pages);
11.33 + explicit OpenerResource(Paging *paging, Pages *pages);
11.34
11.35 /* Server details. */
11.36
12.1 --- a/files/test_file_opener.cc Mon Mar 29 00:56:08 2021 +0200
12.2 +++ b/files/test_file_opener.cc Wed Mar 31 01:06:22 2021 +0200
12.3 @@ -5,9 +5,9 @@
12.4
12.5 /* Support for providing access to files. */
12.6
12.7 -TestFileOpener::TestFileOpener(Accessing *accessing, Paging *paging, Pages *pages,
12.8 +TestFileOpener::TestFileOpener(Paging *paging, Pages *pages,
12.9 offset_t file_size)
12.10 -: OpenerResource(accessing, paging, pages), _file_size(file_size)
12.11 +: OpenerResource(paging, pages), _file_size(file_size)
12.12 {
12.13 }
12.14
13.1 --- a/files/test_file_opener.h Mon Mar 29 00:56:08 2021 +0200
13.2 +++ b/files/test_file_opener.h Wed Mar 31 01:06:22 2021 +0200
13.3 @@ -16,8 +16,7 @@
13.4 virtual Accessor *make_accessor(fileid_t fileid);
13.5
13.6 public:
13.7 - explicit TestFileOpener(Accessing *accessing, Paging *paging, Pages *pages,
13.8 - offset_t file_size=0);
13.9 + explicit TestFileOpener(Paging *paging, Pages *pages, offset_t file_size=0);
13.10 };
13.11
13.12 // vim: tabstop=4 expandtab shiftwidth=4
14.1 --- a/page_mapper.h Mon Mar 29 00:56:08 2021 +0200
14.2 +++ b/page_mapper.h Wed Mar 31 01:06:22 2021 +0200
14.3 @@ -15,6 +15,9 @@
14.4 Accessor *_accessor;
14.5 Pages *_pages;
14.6 unsigned int _attached;
14.7 +
14.8 + /* Serialisation of accesses. */
14.9 +
14.10 std::mutex _lock;
14.11
14.12 /* Internal flexpage retrieval methods. */
14.13 @@ -34,6 +37,9 @@
14.14
14.15 /* Interface for the pager. */
14.16
14.17 + Accessor *accessor()
14.18 + { return _accessor; }
14.19 +
14.20 Flexpage *get(offset_t offset, flags_t flags);
14.21
14.22 void queue(Flexpage *flexpage);
15.1 --- a/paging.cc Mon Mar 29 00:56:08 2021 +0200
15.2 +++ b/paging.cc Wed Mar 31 01:06:22 2021 +0200
15.3 @@ -1,15 +1,15 @@
15.4 #include "paging.h"
15.5
15.6 -bool Paging::reserve(Accessor *accessor)
15.7 +bool Paging::reserve(fileid_t fileid)
15.8 {
15.9 _lock.lock();
15.10
15.11 - return _mappers.find(accessor) != _mappers.end();
15.12 + return _mappers.find(fileid) != _mappers.end();
15.13 }
15.14
15.15 -PageMapper *Paging::get(Accessor *accessor)
15.16 +PageMapper *Paging::get(fileid_t fileid)
15.17 {
15.18 - AccessorMapping::iterator entry = _mappers.find(accessor);
15.19 + FileMapping::iterator entry = _mappers.find(fileid);
15.20 PageMapper *mapper;
15.21
15.22 if (entry == _mappers.end())
15.23 @@ -21,12 +21,12 @@
15.24 return mapper;
15.25 }
15.26
15.27 -void Paging::set(Accessor *accessor, PageMapper *mapper)
15.28 +void Paging::set(fileid_t fileid, PageMapper *mapper)
15.29 {
15.30 - AccessorMapping::iterator entry = _mappers.find(accessor);
15.31 + FileMapping::iterator entry = _mappers.find(fileid);
15.32
15.33 if (entry == _mappers.end())
15.34 - _mappers[accessor] = mapper;
15.35 + _mappers[fileid] = mapper;
15.36
15.37 _lock.unlock();
15.38 }
16.1 --- a/paging.h Mon Mar 29 00:56:08 2021 +0200
16.2 +++ b/paging.h Wed Mar 31 01:06:22 2021 +0200
16.3 @@ -3,15 +3,14 @@
16.4 #include <map>
16.5 #include <mutex>
16.6
16.7 -#include "accessor.h"
16.8 #include "page_mapper.h"
16.9
16.10
16.11
16.12 /* Mapping type from accessors to page mappers. */
16.13
16.14 -typedef std::map<Accessor *, PageMapper *> AccessorMapping;
16.15 -typedef std::pair<Accessor *, PageMapper *> AccessorMappingEntry;
16.16 +typedef std::map<fileid_t, PageMapper *> FileMapping;
16.17 +typedef std::pair<fileid_t, PageMapper *> FileMappingEntry;
16.18
16.19
16.20
16.21 @@ -20,15 +19,15 @@
16.22 class Paging
16.23 {
16.24 protected:
16.25 - AccessorMapping _mappers;
16.26 + FileMapping _mappers;
16.27 std::mutex _lock;
16.28
16.29 public:
16.30 - bool reserve(Accessor *accessor);
16.31 + bool reserve(fileid_t fileid);
16.32
16.33 - PageMapper *get(Accessor *accessor);
16.34 + PageMapper *get(fileid_t fileid);
16.35
16.36 - void set(Accessor *accessor, PageMapper *mapper);
16.37 + void set(fileid_t fileid, PageMapper *mapper);
16.38 };
16.39
16.40 // vim: tabstop=4 expandtab shiftwidth=4