# HG changeset patch # User Paul Boddie # Date 1621461713 -7200 # Node ID 50c9aa47c6ad6c9a262d589de3bb74a2b0d8f9b5 # Parent bee9eb69d257b0fcc1a81b440cf1b34edf4d8bba Introduced distinct flags types for file access, mapping and notification. diff -r bee9eb69d257 -r 50c9aa47c6ad libfsclient/include/fsclient/client.h --- a/libfsclient/include/fsclient/client.h Wed May 19 00:38:36 2021 +0200 +++ b/libfsclient/include/fsclient/client.h Thu May 20 00:01:53 2021 +0200 @@ -57,7 +57,7 @@ /* Notification operations. */ long client_set_blocking(file_t *file, int can_block); -long client_subscribe(file_t *file, flags_t flags); +long client_subscribe(file_t *file, notify_flags_t flags); long client_unsubscribe(file_t *file); long client_wait(file_t *file); diff -r bee9eb69d257 -r 50c9aa47c6ad libfsclient/include/fsclient/file.h --- a/libfsclient/include/fsclient/file.h Wed May 19 00:38:36 2021 +0200 +++ b/libfsclient/include/fsclient/file.h Thu May 20 00:01:53 2021 +0200 @@ -113,7 +113,7 @@ /* Notification functions. */ -long file_notify_subscribe(file_t *file, flags_t flags); +long file_notify_subscribe(file_t *file, notify_flags_t flags); long file_notify_unsubscribe(file_t *file); long file_notify_wait(file_t *file); diff -r bee9eb69d257 -r 50c9aa47c6ad libfsclient/lib/src/client.cc --- a/libfsclient/lib/src/client.cc Wed May 19 00:38:36 2021 +0200 +++ b/libfsclient/lib/src/client.cc Thu May 20 00:01:53 2021 +0200 @@ -424,7 +424,7 @@ /* Subscribe from events concerning a file. */ -long client_subscribe(file_t *file, flags_t flags) +long client_subscribe(file_t *file, notify_flags_t flags) { if (file == NULL) return -L4_EINVAL; diff -r bee9eb69d257 -r 50c9aa47c6ad libfsclient/lib/src/file.cc --- a/libfsclient/lib/src/file.cc Wed May 19 00:38:36 2021 +0200 +++ b/libfsclient/lib/src/file.cc Thu May 20 00:01:53 2021 +0200 @@ -376,7 +376,7 @@ /* Subscribe to notification events on a file. */ -long file_notify_subscribe(file_t *file, flags_t flags) +long file_notify_subscribe(file_t *file, notify_flags_t flags) { client_Notification notify(file->ref); diff -r bee9eb69d257 -r 50c9aa47c6ad libfsserver/include/fsserver/file_pager.h --- a/libfsserver/include/fsserver/file_pager.h Wed May 19 00:38:36 2021 +0200 +++ b/libfsserver/include/fsserver/file_pager.h Thu May 20 00:01:53 2021 +0200 @@ -37,7 +37,7 @@ public: fileid_t fileid; - explicit FilePager(fileid_t fileid, PageMapper *mapper, flags_t flags, + explicit FilePager(fileid_t fileid, PageMapper *mapper, map_flags_t flags, FilePaging *paging); virtual void close(); @@ -59,7 +59,7 @@ /* Pager and mapped file methods. */ - virtual long map(offset_t offset, address_t hot_spot, flags_t flags, + virtual long map(offset_t offset, address_t hot_spot, map_flags_t flags, l4_snd_fpage_t *region); virtual long mmap(offset_t position, offset_t length, offset_t *start_pos, diff -r bee9eb69d257 -r 50c9aa47c6ad libfsserver/include/fsserver/file_paging.h --- a/libfsserver/include/fsserver/file_paging.h Wed May 19 00:38:36 2021 +0200 +++ b/libfsserver/include/fsserver/file_paging.h Thu May 20 00:01:53 2021 +0200 @@ -51,13 +51,13 @@ PageMapper *get_mapper(const char *path, fileid_t fileid); - Pager *get_pager(const char *path, fileid_t fileid, flags_t flags); + Pager *get_pager(const char *path, fileid_t fileid, map_flags_t flags); /* Configurable methods. */ virtual fileid_t get_fileid(const char *path) = 0; - virtual flags_t get_flags(flags_t flags); + virtual map_flags_t get_flags(flags_t flags); virtual Accessor *make_accessor(const char *path, fileid_t fileid) = 0; diff -r bee9eb69d257 -r 50c9aa47c6ad libfsserver/include/fsserver/ipc.h --- a/libfsserver/include/fsserver/ipc.h Wed May 19 00:38:36 2021 +0200 +++ b/libfsserver/include/fsserver/ipc.h Thu May 20 00:01:53 2021 +0200 @@ -29,7 +29,7 @@ long ipc_prepare_flexpage(Flexpage *flexpage, offset_t offset, offset_t max_offset, address_t hot_spot, - flags_t flags, l4_snd_fpage_t *region); + map_flags_t flags, l4_snd_fpage_t *region); void ipc_unmap_flexpage(Flexpage *flexpage); diff -r bee9eb69d257 -r 50c9aa47c6ad libfsserver/include/fsserver/opener_context_resource.h --- a/libfsserver/include/fsserver/opener_context_resource.h Wed May 19 00:38:36 2021 +0200 +++ b/libfsserver/include/fsserver/opener_context_resource.h Thu May 20 00:01:53 2021 +0200 @@ -61,7 +61,7 @@ /* Pager/dataspace methods. */ - long map(unsigned long offset, address_t hot_spot, flags_t flags, + long map(unsigned long offset, address_t hot_spot, map_flags_t flags, l4_snd_fpage_t *region) { return SimplePager::map(offset, hot_spot, flags, region); } diff -r bee9eb69d257 -r 50c9aa47c6ad libfsserver/include/fsserver/page_mapper.h --- a/libfsserver/include/fsserver/page_mapper.h Wed May 19 00:38:36 2021 +0200 +++ b/libfsserver/include/fsserver/page_mapper.h Thu May 20 00:01:53 2021 +0200 @@ -63,7 +63,7 @@ /* Interface for the pager. */ - Flexpage *get(offset_t offset, flags_t flags); + Flexpage *get(offset_t offset, map_flags_t flags); void queue(Flexpage *flexpage); diff -r bee9eb69d257 -r 50c9aa47c6ad libfsserver/include/fsserver/pager.h --- a/libfsserver/include/fsserver/pager.h Wed May 19 00:38:36 2021 +0200 +++ b/libfsserver/include/fsserver/pager.h Thu May 20 00:01:53 2021 +0200 @@ -35,16 +35,16 @@ protected: offset_t _start, _size; PageMapper *_mapper; - flags_t _flags; + map_flags_t _flags; public: - explicit Pager(PageMapper *mapper, flags_t flags); + explicit Pager(PageMapper *mapper, map_flags_t flags); virtual void close(); /* Paging methods. */ - virtual long map(offset_t offset, address_t hot_spot, flags_t flags, + virtual long map(offset_t offset, address_t hot_spot, map_flags_t flags, l4_snd_fpage_t *region); /* Limit methods. */ diff -r bee9eb69d257 -r 50c9aa47c6ad libfsserver/include/fsserver/pipe_pager.h --- a/libfsserver/include/fsserver/pipe_pager.h Wed May 19 00:38:36 2021 +0200 +++ b/libfsserver/include/fsserver/pipe_pager.h Thu May 20 00:01:53 2021 +0200 @@ -60,7 +60,7 @@ /* Pager methods. */ - virtual long map(offset_t offset, address_t hot_spot, flags_t flags, l4_snd_fpage_t *region); + virtual long map(offset_t offset, address_t hot_spot, map_flags_t flags, l4_snd_fpage_t *region); /* Pipe methods. */ @@ -76,7 +76,7 @@ /* Notification methods. */ - virtual long subscribe(flags_t flags, l4_cap_idx_t *irq); + virtual long subscribe(notify_flags_t flags, l4_cap_idx_t *irq); virtual long unsubscribe(); }; diff -r bee9eb69d257 -r 50c9aa47c6ad libfsserver/include/fsserver/simple_pager.h --- a/libfsserver/include/fsserver/simple_pager.h Wed May 19 00:38:36 2021 +0200 +++ b/libfsserver/include/fsserver/simple_pager.h Thu May 20 00:01:53 2021 +0200 @@ -43,9 +43,9 @@ /* Paging methods. */ - long map(offset_t offset, address_t hot_spot, flags_t flags, l4_snd_fpage_t *region); + long map(offset_t offset, address_t hot_spot, map_flags_t flags, l4_snd_fpage_t *region); - long info(offset_t *size, flags_t *flags); + long info(offset_t *size, map_flags_t *flags); }; // vim: tabstop=4 expandtab shiftwidth=4 diff -r bee9eb69d257 -r 50c9aa47c6ad libfsserver/lib/files/file_pager.cc --- a/libfsserver/lib/files/file_pager.cc Wed May 19 00:38:36 2021 +0200 +++ b/libfsserver/lib/files/file_pager.cc Thu May 20 00:01:53 2021 +0200 @@ -27,7 +27,7 @@ /* Initialise a pager for a file with a unique file identifier and shared page mapper for moderating access to loaded pages. */ -FilePager::FilePager(fileid_t fileid, PageMapper *mapper, flags_t flags, +FilePager::FilePager(fileid_t fileid, PageMapper *mapper, map_flags_t flags, FilePaging *paging) : Pager(mapper, flags), _paging(paging), fileid(fileid) { @@ -79,7 +79,7 @@ /* Generic pager operations. */ -long FilePager::map(offset_t offset, address_t hot_spot, flags_t flags, l4_snd_fpage_t *region) +long FilePager::map(offset_t offset, address_t hot_spot, map_flags_t flags, l4_snd_fpage_t *region) { return Pager::map(offset, hot_spot, flags, region); } diff -r bee9eb69d257 -r 50c9aa47c6ad libfsserver/lib/files/file_paging.cc --- a/libfsserver/lib/files/file_paging.cc Wed May 19 00:38:36 2021 +0200 +++ b/libfsserver/lib/files/file_paging.cc Thu May 20 00:01:53 2021 +0200 @@ -76,7 +76,7 @@ /* Convert opening flags to map-compatible paging flags. */ -flags_t FilePaging::get_flags(flags_t flags) +map_flags_t FilePaging::get_flags(flags_t flags) { return flags & (O_WRONLY | O_RDWR) ? L4RE_DS_MAP_FLAG_RW : L4RE_DS_MAP_FLAG_RO; } @@ -113,7 +113,7 @@ /* Return a pager initialised with a page mapper. */ -Pager *FilePaging::get_pager(const char *path, fileid_t fileid, flags_t flags) +Pager *FilePaging::get_pager(const char *path, fileid_t fileid, map_flags_t flags) { std::lock_guard guard(_lock); diff -r bee9eb69d257 -r 50c9aa47c6ad libfsserver/lib/generic/pager.cc --- a/libfsserver/lib/generic/pager.cc Wed May 19 00:38:36 2021 +0200 +++ b/libfsserver/lib/generic/pager.cc Thu May 20 00:01:53 2021 +0200 @@ -28,7 +28,7 @@ /* Initialise the pager with a page mapper and the given flags controlling access to a file. */ -Pager::Pager(PageMapper *mapper, flags_t flags) +Pager::Pager(PageMapper *mapper, map_flags_t flags) : _start(0), _size(0), _mapper(mapper), _flags(flags) { /* Some pagers may not be initialised with a mapper. */ @@ -87,7 +87,7 @@ /* Map a flexpage corresponding to the dataspace 'offset' involving a 'hot_spot' (flexpage offset). */ -long Pager::map(offset_t offset, address_t hot_spot, flags_t flags, +long Pager::map(offset_t offset, address_t hot_spot, map_flags_t flags, l4_snd_fpage_t *region) { offset_t file_offset = _start + offset; diff -r bee9eb69d257 -r 50c9aa47c6ad libfsserver/lib/generic/simple_pager.cc --- a/libfsserver/lib/generic/simple_pager.cc Wed May 19 00:38:36 2021 +0200 +++ b/libfsserver/lib/generic/simple_pager.cc Thu May 20 00:01:53 2021 +0200 @@ -51,7 +51,7 @@ /* Map a flexpage corresponding to the dataspace 'offset' involving a 'hot_spot' (flexpage offset). */ -long SimplePager::map(offset_t offset, address_t hot_spot, flags_t flags, l4_snd_fpage_t *region) +long SimplePager::map(offset_t offset, address_t hot_spot, map_flags_t flags, l4_snd_fpage_t *region) { Flexpage flexpage(_region); @@ -74,7 +74,7 @@ return IPC_MESSAGE_SENT; } -long SimplePager::info(offset_t *size, flags_t *flags) +long SimplePager::info(offset_t *size, map_flags_t *flags) { *size = _region->size(); *flags = L4_FPAGE_RW; diff -r bee9eb69d257 -r 50c9aa47c6ad libfsserver/lib/mapping/ipc.cc --- a/libfsserver/lib/mapping/ipc.cc Wed May 19 00:38:36 2021 +0200 +++ b/libfsserver/lib/mapping/ipc.cc Thu May 20 00:01:53 2021 +0200 @@ -40,7 +40,7 @@ long ipc_prepare_flexpage(Flexpage *flexpage, offset_t offset, offset_t max_offset, address_t hot_spot, - flags_t flags, l4_snd_fpage_t *region) + map_flags_t flags, l4_snd_fpage_t *region) { SendFlexpage send_flexpage = flexpage->to_send(offset, hot_spot, flags, max_offset); diff -r bee9eb69d257 -r 50c9aa47c6ad libfsserver/lib/mapping/page_mapper.cc --- a/libfsserver/lib/mapping/page_mapper.cc Wed May 19 00:38:36 2021 +0200 +++ b/libfsserver/lib/mapping/page_mapper.cc Thu May 20 00:01:53 2021 +0200 @@ -71,7 +71,7 @@ This method locks the mapper to prevent concurrent queries with the same details, with the lock held until the queue operation releases the lock. */ -Flexpage *PageMapper::get(offset_t offset, flags_t flags) +Flexpage *PageMapper::get(offset_t offset, map_flags_t flags) { _lock.lock(); diff -r bee9eb69d257 -r 50c9aa47c6ad libfsserver/lib/pipes/pipe_pager.cc --- a/libfsserver/lib/pipes/pipe_pager.cc Wed May 19 00:38:36 2021 +0200 +++ b/libfsserver/lib/pipes/pipe_pager.cc Thu May 20 00:01:53 2021 +0200 @@ -63,7 +63,7 @@ /* Support paging. */ -long PipePager::map(offset_t offset, address_t hot_spot, flags_t flags, l4_snd_fpage_t *region) +long PipePager::map(offset_t offset, address_t hot_spot, map_flags_t flags, l4_snd_fpage_t *region) { return Pager::map(offset, hot_spot, flags, region); } @@ -162,9 +162,11 @@ /* Subscribe to notifications. */ -long PipePager::subscribe(flags_t flags, l4_cap_idx_t *irq) +long PipePager::subscribe(notify_flags_t flags, l4_cap_idx_t *irq) { // NOTE: Need to interpret flags. + // NOTE: Readers can subscribe to new data (at end), and pipe closed events. + // NOTE: Writers can subscribe to new space and pipe closed events. *irq = _paging->subscribe(_writing); return L4_EOK; diff -r bee9eb69d257 -r 50c9aa47c6ad libmem/include/mem/flexpage.h --- a/libmem/include/mem/flexpage.h Wed May 19 00:38:36 2021 +0200 +++ b/libmem/include/mem/flexpage.h Thu May 20 00:01:53 2021 +0200 @@ -33,7 +33,7 @@ { protected: unsigned int _counter; - flags_t _flags; + map_flags_t _flags; public: Region *region; @@ -65,11 +65,11 @@ bool supports_position(offset_t position); - void upgrade(flags_t flags); + void upgrade(map_flags_t flags); bool modified(); - SendFlexpage to_send(offset_t offset, offset_t hot_spot, flags_t flags, + SendFlexpage to_send(offset_t offset, offset_t hot_spot, map_flags_t flags, offset_t max_offset=0); SendFlexpage to_unmap(); diff -r bee9eb69d257 -r 50c9aa47c6ad libmem/include/mem/send_flexpage.h --- a/libmem/include/mem/send_flexpage.h Wed May 19 00:38:36 2021 +0200 +++ b/libmem/include/mem/send_flexpage.h Thu May 20 00:01:53 2021 +0200 @@ -32,10 +32,10 @@ public: offset_t base_addr; unsigned int order; - flags_t flags; + map_flags_t flags; explicit SendFlexpage(offset_t base_addr, unsigned int order, - flags_t flags) + map_flags_t flags) : base_addr(base_addr), order(order), flags(flags) { } diff -r bee9eb69d257 -r 50c9aa47c6ad libmem/lib/src/flexpage.cc --- a/libmem/lib/src/flexpage.cc Wed May 19 00:38:36 2021 +0200 +++ b/libmem/lib/src/flexpage.cc Thu May 20 00:01:53 2021 +0200 @@ -109,7 +109,7 @@ maximal flags employed by the different pagers, with the result being used in unmap operations. */ -void Flexpage::upgrade(flags_t flags) +void Flexpage::upgrade(map_flags_t flags) { if (flags && (flags != _flags)) _flags |= flags; @@ -127,7 +127,7 @@ to 'hot_spot' for the receive flexpage window. */ SendFlexpage Flexpage::to_send(offset_t offset, offset_t hot_spot, - flags_t flags, offset_t max_offset) + map_flags_t flags, offset_t max_offset) { /* The dataspace offset of the flexpage base is a multiple of the flexpage size. */