1.1 --- a/generic/pager.cc Sun Apr 04 01:19:22 2021 +0200
1.2 +++ b/generic/pager.cc Tue Apr 06 00:14:00 2021 +0200
1.3 @@ -4,6 +4,9 @@
1.4
1.5
1.6
1.7 +/* Initialise the pager with a page mapper and the given flags controlling
1.8 + access to a file. */
1.9 +
1.10 Pager::Pager(PageMapper *mapper, flags_t flags)
1.11 : _start(0), _size(0), _mapper(mapper), _flags(flags)
1.12 {
1.13 @@ -66,7 +69,8 @@
1.14
1.15 /* Issue the flexpage via the IPC system. */
1.16
1.17 - long err = ipc_prepare_flexpage(flexpage, file_offset, max_offset, hot_spot, region);
1.18 + long err = ipc_prepare_flexpage(flexpage, file_offset, max_offset, hot_spot,
1.19 + flags, region);
1.20
1.21 if (!err)
1.22 err = complete_Dataspace_map(*region);
2.1 --- a/generic/simple_pager.cc Sun Apr 04 01:19:22 2021 +0200
2.2 +++ b/generic/simple_pager.cc Tue Apr 06 00:14:00 2021 +0200
2.3 @@ -38,7 +38,8 @@
2.4
2.5 /* Send the flexpage explicitly. */
2.6
2.7 - long err = ipc_prepare_flexpage(&flexpage, offset, _region->size(), hot_spot, region);
2.8 + long err = ipc_prepare_flexpage(&flexpage, offset, _region->size(),
2.9 + hot_spot, flags, region);
2.10
2.11 if (err)
2.12 return err;
3.1 --- a/mapping/flexpage.cc Sun Apr 04 01:19:22 2021 +0200
3.2 +++ b/mapping/flexpage.cc Tue Apr 06 00:14:00 2021 +0200
3.3 @@ -73,6 +73,10 @@
3.4 return (base_offset <= position) && (position < (base_offset + size));
3.5 }
3.6
3.7 +/* Upgrade the flags involved with this flexpage. This is used to track the
3.8 + maximal flags employed by the different pagers, with the result being used in
3.9 + unmap operations. */
3.10 +
3.11 void Flexpage::upgrade(flags_t flags)
3.12 {
3.13 if (flags && (flags != _flags))
3.14 @@ -82,7 +86,8 @@
3.15 /* Return a "send" flexpage for an access to 'offset' by positioning it relative
3.16 to 'hot_spot' for the receive flexpage window. */
3.17
3.18 -SendFlexpage Flexpage::to_send(offset_t offset, offset_t hot_spot, offset_t max_offset)
3.19 +SendFlexpage Flexpage::to_send(offset_t offset, offset_t hot_spot,
3.20 + flags_t flags, offset_t max_offset)
3.21 {
3.22 /* The dataspace offset of the flexpage base is a multiple of the flexpage
3.23 size. */
3.24 @@ -108,7 +113,7 @@
3.25 receive_size = size;
3.26
3.27 if (!receive_size)
3.28 - return SendFlexpage(base_addr, page_order(0), _flags);
3.29 + return SendFlexpage(base_addr, page_order(0), flags);
3.30
3.31 offset_t receive_page_offset = hot_spot % receive_size;
3.32
3.33 @@ -124,7 +129,7 @@
3.34
3.35 offset_t adjustment = page_offset - receive_page_offset;
3.36
3.37 - return SendFlexpage(base_addr + adjustment, page_order(receive_size), _flags);
3.38 + return SendFlexpage(base_addr + adjustment, page_order(receive_size), flags);
3.39 }
3.40
3.41 /* Return a representation of the flexpage for unmapping. */
4.1 --- a/mapping/flexpage.h Sun Apr 04 01:19:22 2021 +0200
4.2 +++ b/mapping/flexpage.h Tue Apr 06 00:14:00 2021 +0200
4.3 @@ -46,7 +46,8 @@
4.4
4.5 void upgrade(flags_t flags);
4.6
4.7 - SendFlexpage to_send(offset_t offset, offset_t hot_spot, offset_t max_offset=0);
4.8 + SendFlexpage to_send(offset_t offset, offset_t hot_spot, flags_t flags,
4.9 + offset_t max_offset=0);
4.10
4.11 SendFlexpage to_unmap();
4.12 };
5.1 --- a/mapping/ipc.cc Sun Apr 04 01:19:22 2021 +0200
5.2 +++ b/mapping/ipc.cc Tue Apr 06 00:14:00 2021 +0200
5.3 @@ -19,9 +19,10 @@
5.4
5.5 long ipc_prepare_flexpage(Flexpage *flexpage, unsigned long offset,
5.6 unsigned long max_offset, l4_addr_t hot_spot,
5.7 - l4_snd_fpage_t *region)
5.8 + flags_t flags, l4_snd_fpage_t *region)
5.9 {
5.10 - SendFlexpage send_flexpage = flexpage->to_send(offset, hot_spot, max_offset);
5.11 + SendFlexpage send_flexpage = flexpage->to_send(offset, hot_spot, flags,
5.12 + max_offset);
5.13
5.14 /* NOTE: Consider l4_fpage_invalid() as the fpage here. */
5.15
6.1 --- a/mapping/ipc.h Sun Apr 04 01:19:22 2021 +0200
6.2 +++ b/mapping/ipc.h Tue Apr 06 00:14:00 2021 +0200
6.3 @@ -8,7 +8,7 @@
6.4
6.5 long ipc_prepare_flexpage(Flexpage *flexpage, unsigned long offset,
6.6 unsigned long max_offset, l4_addr_t hot_spot,
6.7 - l4_snd_fpage_t *region);
6.8 + flags_t flags, l4_snd_fpage_t *region);
6.9
6.10 void ipc_unmap_flexpage(Flexpage *flexpage);
6.11