1.1 --- a/libexec/lib/src/segment.cc Sun May 22 22:55:53 2022 +0200 1.2 +++ b/libexec/lib/src/segment.cc Sun May 22 23:46:17 2022 +0200 1.3 @@ -96,7 +96,7 @@ 1.4 1.5 /* Provide the exposed file contents in a masked memory mapped region. */ 1.6 1.7 - _buf = (char *) client_mmap(file, _file_offset - _region_offset, _region_size, 0, _flags); 1.8 + _buf = (char *) client_mmap(file, _file_offset - _region_offset, _region_size, 0, 0, _flags); 1.9 1.10 if (_buf == NULL) 1.11 return -L4_EIO;
2.1 --- a/libfsclient/include/fsclient/client.h Sun May 22 22:55:53 2022 +0200 2.2 +++ b/libfsclient/include/fsclient/client.h Sun May 22 23:46:17 2022 +0200 2.3 @@ -64,7 +64,8 @@ 2.4 /* File and region operations. */ 2.5 2.6 long client_flush(file_t *file); 2.7 -void *client_mmap(file_t *file, offset_t position, offset_t length, int masked, 2.8 +void *client_mmap(file_t *file, offset_t position, offset_t length, 2.9 + offset_t start_visible, offset_t end_visible, 2.10 l4re_rm_flags_t region_flags); 2.11 l4re_rm_flags_t client_region_flags(prot_t prot, flags_t flags); 2.12
3.1 --- a/libfsclient/include/fsclient/file.h Sun May 22 22:55:53 2022 +0200 3.2 +++ b/libfsclient/include/fsclient/file.h Sun May 22 23:46:17 2022 +0200 3.3 @@ -109,7 +109,8 @@ 3.4 /* File and region operations. */ 3.5 3.6 long file_flush(file_t *file); 3.7 -long file_mmap(file_t *file, offset_t position, offset_t length, int masked, 3.8 +long file_mmap(file_t *file, offset_t position, offset_t length, 3.9 + offset_t start_visible, offset_t end_visible, 3.10 l4re_rm_flags_t region_flags); 3.11 l4re_rm_flags_t file_region_flags(flags_t flags); 3.12 long file_resize(file_t *file, offset_t size);
4.1 --- a/libfsclient/lib/src/client.cc Sun May 22 22:55:53 2022 +0200 4.2 +++ b/libfsclient/lib/src/client.cc Sun May 22 23:46:17 2022 +0200 4.3 @@ -81,7 +81,7 @@ 4.4 4.5 if ((position < file->start_pos) || (position >= file->end_pos)) 4.6 { 4.7 - if (file_mmap(file, position, file_span(file), 0, 4.8 + if (file_mmap(file, position, file_span(file), 0, 0, 4.9 file_region_flags(file->flags))) 4.10 return -L4_EIO; 4.11 } 4.12 @@ -191,7 +191,7 @@ 4.13 if (file->memory == NULL) 4.14 { 4.15 if (file->object_flags & OBJECT_SUPPORTS_MMAP) 4.16 - return client_mmap(file, client_tell(file), count, 0, 4.17 + return client_mmap(file, client_tell(file), count, 0, 0, 4.18 file_region_flags(file->flags)); 4.19 else if (pipe_current(file)) 4.20 return NULL; 4.21 @@ -487,10 +487,12 @@ 4.22 4.23 /* Map a memory region to a file. */ 4.24 4.25 -void *client_mmap(file_t *file, offset_t position, offset_t length, int masked, 4.26 +void *client_mmap(file_t *file, offset_t position, offset_t length, 4.27 + offset_t start_visible, offset_t end_visible, 4.28 l4re_rm_flags_t region_flags) 4.29 { 4.30 - if ((file == NULL) || file_mmap(file, position, length, masked, region_flags)) 4.31 + if ((file == NULL) || file_mmap(file, position, length, start_visible, 4.32 + end_visible, region_flags)) 4.33 return NULL; 4.34 4.35 return file->memory;
5.1 --- a/libfsclient/lib/src/file.cc Sun May 22 22:55:53 2022 +0200 5.2 +++ b/libfsclient/lib/src/file.cc Sun May 22 23:46:17 2022 +0200 5.3 @@ -351,13 +351,14 @@ 5.4 /* Map a region of the given file to a memory region, obtaining an updated file 5.5 size and populated data details. Unmap any previously mapped region. */ 5.6 5.7 -long file_mmap(file_t *file, offset_t position, offset_t length, int masked, 5.8 +long file_mmap(file_t *file, offset_t position, offset_t length, 5.9 + offset_t start_visible, offset_t end_visible, 5.10 l4re_rm_flags_t region_flags) 5.11 { 5.12 char *memory = file->memory; 5.13 client_MappedFile mapped_file(file->ref); 5.14 - long err = mapped_file.mmap(position, length, masked, &file->start_pos, 5.15 - &file->end_pos, &file->size); 5.16 + long err = mapped_file.mmap(position, length, start_visible, end_visible, 5.17 + &file->start_pos, &file->end_pos, &file->size); 5.18 5.19 if (err) 5.20 return err;
6.1 --- a/libfsserver/include/fsserver/file_pager.h Sun May 22 22:55:53 2022 +0200 6.2 +++ b/libfsserver/include/fsserver/file_pager.h Sun May 22 23:46:17 2022 +0200 6.3 @@ -69,7 +69,8 @@ 6.4 virtual long map(offset_t offset, address_t hot_spot, map_flags_t flags, 6.5 l4_snd_fpage_t *region); 6.6 6.7 - virtual long mmap(offset_t position, offset_t length, int masked, 6.8 + virtual long mmap(offset_t position, offset_t length, 6.9 + offset_t start_visible, offset_t end_visible, 6.10 offset_t *start_pos, offset_t *end_pos, offset_t *size); 6.11 6.12 /* Notification methods. */
7.1 --- a/libfsserver/include/fsserver/pager.h Sun May 22 22:55:53 2022 +0200 7.2 +++ b/libfsserver/include/fsserver/pager.h Sun May 22 23:46:17 2022 +0200 7.3 @@ -74,7 +74,8 @@ 7.4 7.5 /* Mapped file methods. */ 7.6 7.7 - virtual long mmap(offset_t position, offset_t length, int masked, 7.8 + virtual long mmap(offset_t position, offset_t length, 7.9 + offset_t start_visible, offset_t end_visible, 7.10 offset_t *start_pos, offset_t *end_pos, offset_t *size); 7.11 }; 7.12
8.1 --- a/libfsserver/lib/files/file_pager.cc Sun May 22 22:55:53 2022 +0200 8.2 +++ b/libfsserver/lib/files/file_pager.cc Sun May 22 23:46:17 2022 +0200 8.3 @@ -1,7 +1,7 @@ 8.4 /* 8.5 * File-specific pager functionality. 8.6 * 8.7 - * Copyright (C) 2021 Paul Boddie <paul@boddie.org.uk> 8.8 + * Copyright (C) 2021, 2022 Paul Boddie <paul@boddie.org.uk> 8.9 * 8.10 * This program is free software; you can redistribute it and/or 8.11 * modify it under the terms of the GNU General Public License as 8.12 @@ -90,12 +90,14 @@ 8.13 return err; 8.14 } 8.15 8.16 -long FilePager::mmap(offset_t position, offset_t length, int masked, 8.17 +long FilePager::mmap(offset_t position, offset_t length, 8.18 + offset_t start_visible, offset_t end_visible, 8.19 offset_t *start_pos, offset_t *end_pos, offset_t *size) 8.20 { 8.21 /* Set the limits of the paged region. */ 8.22 8.23 - return Pager::mmap(position, length, masked, start_pos, end_pos, size); 8.24 + return Pager::mmap(position, length, start_visible, end_visible, start_pos, 8.25 + end_pos, size); 8.26 } 8.27 8.28
9.1 --- a/libfsserver/lib/generic/pager.cc Sun May 22 22:55:53 2022 +0200 9.2 +++ b/libfsserver/lib/generic/pager.cc Sun May 22 23:46:17 2022 +0200 9.3 @@ -64,7 +64,8 @@ 9.4 9.5 /* Expose a region of the file. */ 9.6 9.7 -long Pager::mmap(offset_t position, offset_t length, int masked, 9.8 +long Pager::mmap(offset_t position, offset_t length, 9.9 + offset_t start_visible, offset_t end_visible, 9.10 offset_t *start_pos, offset_t *end_pos, offset_t *size) 9.11 { 9.12 /* Define region characteristics. */ 9.13 @@ -80,10 +81,10 @@ 9.14 9.15 /* Permit masking of mapped regions. */ 9.16 9.17 - if (masked) 9.18 + if (start_visible || end_visible) 9.19 { 9.20 - _start_visible = position; 9.21 - _end_visible = position + length; 9.22 + _start_visible = start_visible; 9.23 + _end_visible = end_visible; 9.24 _is_masked = (*start_pos != _start_visible) || (*end_pos != _end_visible); 9.25 } 9.26 else
10.1 --- a/libsystypes/idl/mapped_file.idl Sun May 22 22:55:53 2022 +0200 10.2 +++ b/libsystypes/idl/mapped_file.idl Sun May 22 23:46:17 2022 +0200 10.3 @@ -4,12 +4,12 @@ 10.4 10.5 interface MappedFile 10.6 { 10.7 - /* Memory-map a file for the given file position and length, masking out of 10.8 - range regions if indicated, obtaining the limits of the mapped region and 10.9 - the size of the file. */ 10.10 + /* Memory-map a file for the given file position and length, masking regions 10.11 + beyond any visible range if indicated, obtaining the limits of the mapped 10.12 + region and the size of the file. */ 10.13 10.14 [opcode(7)] void mmap(in offset_t position, in offset_t length, 10.15 - in int masked, 10.16 + in offset_t start_visible, in offset_t end_visible, 10.17 out offset_t start_pos, out offset_t end_pos, 10.18 out offset_t size); 10.19 };
11.1 --- a/tests/dstest_block_client.cc Sun May 22 22:55:53 2022 +0200 11.2 +++ b/tests/dstest_block_client.cc Sun May 22 23:46:17 2022 +0200 11.3 @@ -98,7 +98,7 @@ 11.4 /* A region of the file is mapped. Here, the start and length will not provide 11.5 page-aligned offsets, but the region is nevertheless not masked. */ 11.6 11.7 - err = file_mmap(&file, 10, 290, 0, file_region_flags(file.flags)); 11.8 + err = file_mmap(&file, 10, 290, 0, 0, file_region_flags(file.flags)); 11.9 11.10 if (err) 11.11 { 11.12 @@ -115,7 +115,7 @@ 11.13 /* A region of the file is mapped. Here, the resulting offsets will be used to 11.14 define a masked region. */ 11.15 11.16 - err = file_mmap(&file, 10, 290, 1, file_region_flags(file.flags)); 11.17 + err = file_mmap(&file, 10, 290, 10, 290, file_region_flags(file.flags)); 11.18 11.19 if (err) 11.20 { 11.21 @@ -150,7 +150,7 @@ 11.22 11.23 /* Re-map to avoid masking the region. */ 11.24 11.25 - err = file_mmap(&file, 10, new_size - 20, 0, file_region_flags(file.flags)); 11.26 + err = file_mmap(&file, 10, new_size - 20, 0, 0, file_region_flags(file.flags)); 11.27 11.28 if (err) 11.29 { 11.30 @@ -178,7 +178,7 @@ 11.31 11.32 /* Re-map to mask the region again. */ 11.33 11.34 - err = file_mmap(&file, 10, new_size - 20, 1, file_region_flags(file.flags)); 11.35 + err = file_mmap(&file, 0, new_size, 10, new_size - 20, file_region_flags(file.flags)); 11.36 11.37 if (err) 11.38 {
12.1 --- a/tests/dstest_host_client.cc Sun May 22 22:55:53 2022 +0200 12.2 +++ b/tests/dstest_host_client.cc Sun May 22 23:46:17 2022 +0200 12.3 @@ -68,7 +68,7 @@ 12.4 12.5 /* A region of the file is mapped. */ 12.6 12.7 - err = file_mmap(&file, 0, page(10), 0, file_region_flags(file.flags)); 12.8 + err = file_mmap(&file, 0, page(10), 0, 0, file_region_flags(file.flags)); 12.9 12.10 if (err) 12.11 {
13.1 --- a/tests/dstest_test_client.cc Sun May 22 22:55:53 2022 +0200 13.2 +++ b/tests/dstest_test_client.cc Sun May 22 23:46:17 2022 +0200 13.3 @@ -77,7 +77,7 @@ 13.4 13.5 /* A region of the file is mapped. */ 13.6 13.7 - err = file_mmap(&file, page(start_page), page(MAP_PAGES), 0, file_region_flags(file.flags)); 13.8 + err = file_mmap(&file, page(start_page), page(MAP_PAGES), 0, 0, file_region_flags(file.flags)); 13.9 13.10 if (err) 13.11 {