Disable super-page I/O mappings on FOC and Fiasco

We disable super-page I/O mappings because our unmap code does not flush
local mappings from core and, thus, breaks later re-mappings of
different page size.

Issue #2547
This commit is contained in:
Christian Helmuth 2018-03-26 14:47:17 +02:00
parent 5d1f08d512
commit 6151e1bbb2
2 changed files with 14 additions and 6 deletions

View File

@ -31,9 +31,14 @@ void Io_mem_session_component::_unmap_local(addr_t base, size_t)
} }
static inline bool can_use_super_page(addr_t base, size_t size) { static inline bool can_use_super_page(addr_t, size_t)
return (base & (get_super_page_size() - 1)) == 0 {
&& (size >= get_super_page_size()); } /*
* We disable super-page I/O mappings as unmap does not flush the local
* mapping which breaks later re-mappings of different page size.
*/
return false;
}
addr_t Io_mem_session_component::_map_local(addr_t base, size_t size) addr_t Io_mem_session_component::_map_local(addr_t base, size_t size)

View File

@ -66,10 +66,13 @@ namespace Genode {
} }
static inline bool can_use_super_page(addr_t base, size_t size) static inline bool can_use_super_page(addr_t, size_t)
{ {
return (base & (get_super_page_size() - 1)) == 0 /*
&& (size >= get_super_page_size()); * We disable super-page I/O mappings as unmap does not flush the local
* mapping which breaks later re-mappings of different page size.
*/
return false;
} }