mirror of
https://github.com/genodelabs/genode.git
synced 2024-12-19 21:57:55 +00:00
nova: construct pager name out of client name
Ease debugging to find out which client is dying actually.
This commit is contained in:
parent
c374f294c8
commit
5380c09c6f
@ -64,7 +64,11 @@ void Pager_object::_page_fault_handler()
|
|||||||
|
|
||||||
if (ret) {
|
if (ret) {
|
||||||
if (obj->client_recall() != Nova::NOVA_OK) {
|
if (obj->client_recall() != Nova::NOVA_OK) {
|
||||||
PERR("recall failed");
|
char client_name[Context::NAME_LEN];
|
||||||
|
myself->name(client_name, sizeof(client_name));
|
||||||
|
|
||||||
|
PWRN("unresolvable page fault since recall failed, '%s'",
|
||||||
|
client_name);
|
||||||
|
|
||||||
Native_capability pager_obj = obj->Object_pool<Pager_object>::Entry::cap();
|
Native_capability pager_obj = obj->Object_pool<Pager_object>::Entry::cap();
|
||||||
revoke(pager_obj.dst(), true);
|
revoke(pager_obj.dst(), true);
|
||||||
@ -96,8 +100,11 @@ void Pager_object::_exception_handler(addr_t portal_id)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
PWRN("unresolvable exception at ip 0x%lx, exception portal 0x%lx",
|
char client_name[Context::NAME_LEN];
|
||||||
fault_ip, portal_id);
|
myself->name(client_name, sizeof(client_name));
|
||||||
|
|
||||||
|
PWRN("unresolvable exception at ip 0x%lx, exception portal 0x%lx, "
|
||||||
|
"'%s'", fault_ip, portal_id, client_name);
|
||||||
|
|
||||||
Nova::revoke(Obj_crd(portal_id, 0));
|
Nova::revoke(Obj_crd(portal_id, 0));
|
||||||
obj->_state.dead = true;
|
obj->_state.dead = true;
|
||||||
@ -235,11 +242,15 @@ void Pager_object::cleanup_call()
|
|||||||
|
|
||||||
|
|
||||||
Pager_object::Pager_object(unsigned long badge)
|
Pager_object::Pager_object(unsigned long badge)
|
||||||
: Thread_base("pager", PF_HANDLER_STACK_SIZE), _badge(badge)
|
: Thread_base("pager:", PF_HANDLER_STACK_SIZE), _badge(badge)
|
||||||
{
|
{
|
||||||
class Create_exception_pt_failed { };
|
class Create_exception_pt_failed { };
|
||||||
uint8_t res;
|
uint8_t res;
|
||||||
|
|
||||||
|
/* construct pager name out of client name */
|
||||||
|
strncpy(_context->name + 6, reinterpret_cast<char const *>(badge),
|
||||||
|
sizeof(_context->name) - 6);
|
||||||
|
|
||||||
addr_t pd_sel = __core_pd_sel;
|
addr_t pd_sel = __core_pd_sel;
|
||||||
_pt_cleanup = cap_selector_allocator()->alloc();
|
_pt_cleanup = cap_selector_allocator()->alloc();
|
||||||
_sm_state_notify = cap_selector_allocator()->alloc();
|
_sm_state_notify = cap_selector_allocator()->alloc();
|
||||||
|
@ -36,6 +36,7 @@ namespace Genode {
|
|||||||
unsigned _cpu_no;
|
unsigned _cpu_no;
|
||||||
bool _is_main_thread;
|
bool _is_main_thread;
|
||||||
bool _is_vcpu;
|
bool _is_vcpu;
|
||||||
|
char _name[Thread_base::Context::NAME_LEN];
|
||||||
|
|
||||||
addr_t _sel_ec() { return _id_base; }
|
addr_t _sel_ec() { return _id_base; }
|
||||||
addr_t _sel_sc() { return _id_base + 1; }
|
addr_t _sel_sc() { return _id_base + 1; }
|
||||||
|
@ -305,7 +305,7 @@ void Platform_thread::single_step(bool on)
|
|||||||
|
|
||||||
unsigned long Platform_thread::pager_object_badge() const
|
unsigned long Platform_thread::pager_object_badge() const
|
||||||
{
|
{
|
||||||
return Native_thread::INVALID_INDEX;
|
return reinterpret_cast<unsigned long>(_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -314,7 +314,9 @@ Platform_thread::Platform_thread(const char *name, unsigned, int thread_id)
|
|||||||
_pd(0), _pager(0), _id_base(cap_selector_allocator()->alloc(1)),
|
_pd(0), _pager(0), _id_base(cap_selector_allocator()->alloc(1)),
|
||||||
_sel_exc_base(Native_thread::INVALID_INDEX), _cpu_no(0),
|
_sel_exc_base(Native_thread::INVALID_INDEX), _cpu_no(0),
|
||||||
_is_main_thread(false), _is_vcpu(false)
|
_is_main_thread(false), _is_vcpu(false)
|
||||||
{ }
|
{
|
||||||
|
strncpy(_name, name, sizeof(_name));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
Platform_thread::~Platform_thread()
|
Platform_thread::~Platform_thread()
|
||||||
|
Loading…
Reference in New Issue
Block a user