genode/repos/base-nova/src/core
Alexander Boettcher ceb04d3c11 nova: avoid race in pager_object destruction
Don't skip the cleanup call if a pager object is marked as blocked.

It happens that the pager_object is in destruction but it is also used
concurrently by the pager thread. The pager thread handling code may set the
pager object to blocked but still uses the pointer to the pager object. Avoid
locking at the state of the pager object and make the cleanup call everytime.

Error output looks like this, where the pf_ip is within

  void Pager_object::_page_fault_handler(addr_t pager_obj)

method and the pf_addr is the stale pointer to the already released pager_object.

no RM attachment (READ pf_addr=xxx pf_ip=xxx from 00 <NULL>)
static void Genode::Pager_object::_page_fault_handler(Genode::addr_t): page fault, thread '<NULL>', cpu x, ip=xxx, fault address=xxx

PAGE-FAULT IN CORE (READ pf_addr=b10e0090 pf_ip=132dbc from 00 <NULL>)
2015-10-28 15:06:22 +01:00
..
include nova: interpret write page fault correctly 2015-10-09 16:38:48 +02:00
spec base: remove pager code from public API 2015-07-01 14:46:15 +02:00
bios_data_area.cc base: use BDA header in base-nova like base-hw 2015-07-21 09:30:12 +02:00
core_rm_session.cc nova: use remote revoke 2015-10-09 16:38:48 +02:00
core.ld Introduce 'spec' subdirectories to outline aspects 2015-09-16 13:58:50 +02:00
cpu_session_extension.cc base: redesign object pool using lambda interface 2015-09-09 15:14:28 +02:00
cpu_session_support.cc CPU session: apply quota via relative weightings 2015-05-06 10:55:16 +02:00
echo.cc nova: support write combining 2015-08-31 09:09:22 +02:00
io_mem_session_support.cc nova: use remote revoke 2015-10-09 16:38:48 +02:00
ipc_pager.cc nova: interpret write page fault correctly 2015-10-09 16:38:48 +02:00
irq_session_component.cc nova: use signals with irqs in core 2015-05-26 09:39:51 +02:00
pager.cc nova: avoid race in pager_object destruction 2015-10-28 15:06:22 +01:00
pd_session_extension.cc Move repositories to 'repos/' subdirectory 2014-05-14 16:08:00 +02:00
platform_pd.cc nova: use remote revoke 2015-10-09 16:38:48 +02:00
platform_thread.cc nova: sanitize priority parameters 2015-10-09 16:38:47 +02:00
platform.cc nova: avoid race in pager_object destruction 2015-10-28 15:06:22 +01:00
ram_session_support.cc nova: use remote revoke 2015-10-09 16:38:48 +02:00
rm_session_support.cc nova: use remote revoke 2015-10-09 16:38:48 +02:00
signal_session_component.cc core: do not destroy in object pool's apply scope 2015-09-30 12:20:40 +02:00
target.inc Introduce 'spec' subdirectories to outline aspects 2015-09-16 13:58:50 +02:00
target.mk Introduce 'spec' subdirectories to outline aspects 2015-09-16 13:58:50 +02:00
thread_start.cc nova: use in core one pager per CPU 2015-02-27 11:40:58 +01:00