base-hw: store Platform_pd pointer in Kernel::Pd

This enables the kernel to print out the label of the program
a thread belongs to.

fix #662
This commit is contained in:
Martin Stein 2013-02-22 10:30:48 +01:00 committed by Norman Feske
parent f3ef943bd8
commit 4b224dd67e
3 changed files with 27 additions and 13 deletions

View File

@ -20,6 +20,7 @@
namespace Genode namespace Genode
{ {
class Platform_thread; class Platform_thread;
class Platform_pd;
class Tlb; class Tlb;
} }
@ -29,6 +30,7 @@ namespace Kernel
typedef Genode::addr_t addr_t; typedef Genode::addr_t addr_t;
typedef Genode::size_t size_t; typedef Genode::size_t size_t;
typedef Genode::Platform_thread Platform_thread; typedef Genode::Platform_thread Platform_thread;
typedef Genode::Platform_pd Platform_pd;
/** /**
* Unique opcodes of all syscalls supported by the kernel * Unique opcodes of all syscalls supported by the kernel
@ -143,6 +145,7 @@ namespace Kernel
* *
* \param dst physical base of an appropriate portion of memory * \param dst physical base of an appropriate portion of memory
* that is thereupon allocated to the kernel * that is thereupon allocated to the kernel
* \param pd core local Platform_pd object
* *
* \retval >0 ID of the new PD * \retval >0 ID of the new PD
* \retval 0 if no new PD was created * \retval 0 if no new PD was created
@ -150,8 +153,8 @@ namespace Kernel
* Restricted to core threads. Regaining of the supplied memory is not * Restricted to core threads. Regaining of the supplied memory is not
* supported by now. * supported by now.
*/ */
inline int new_pd(void * const dst) { inline int new_pd(void * const dst, Platform_pd * const pd) {
return syscall(NEW_PD, (Syscall_arg)dst); } return syscall(NEW_PD, (Syscall_arg)dst, (Syscall_arg)pd); }
/** /**

View File

@ -37,11 +37,11 @@ namespace Genode
*/ */
class Platform_pd : public Address_space class Platform_pd : public Address_space
{ {
unsigned _id; /* ID of our kernel object */ unsigned _id; /* ID of our kernel object */
Native_capability _parent; /* our parent interface */ Native_capability _parent; /* our parent interface */
Native_thread_id _main_thread; /* the first thread that gets Native_thread_id _main_thread; /* the first thread that gets
* executed in this PD */ * executed in this PD */
char const * _label; /* PD-connection label */ char const * const _label; /* PD-connection label */
public: public:
@ -57,7 +57,7 @@ namespace Genode
Kernel::pd_alignm_log2()).is_ok()) Kernel::pd_alignm_log2()).is_ok())
/* create kernel object */ /* create kernel object */
_id = Kernel::new_pd(kernel_pd); _id = Kernel::new_pd(kernel_pd, this);
assert(_id); assert(_id);
} }
@ -102,6 +102,13 @@ namespace Genode
} }
/***************
** Accessors **
***************/
char const * const label() { return _label; }
/***************************** /*****************************
** Address-space interface ** ** Address-space interface **
*****************************/ *****************************/

View File

@ -29,6 +29,7 @@
/* core includes */ /* core includes */
#include <platform_thread.h> #include <platform_thread.h>
#include <platform_pd.h>
#include <tlb.h> #include <tlb.h>
#include <trustzone.h> #include <trustzone.h>
@ -268,7 +269,8 @@ namespace Kernel
*/ */
class Pd : public Object<Pd, MAX_PDS> class Pd : public Object<Pd, MAX_PDS>
{ {
Tlb * const _tlb; Tlb * const _tlb;
Platform_pd * const _platform_pd;
/* keep ready memory for size aligned extra costs at construction */ /* keep ready memory for size aligned extra costs at construction */
enum { EXTRA_SPACE_SIZE = 2*Tlb::MAX_COSTS_PER_TRANSLATION }; enum { EXTRA_SPACE_SIZE = 2*Tlb::MAX_COSTS_PER_TRANSLATION };
@ -279,7 +281,8 @@ namespace Kernel
/** /**
* Constructor * Constructor
*/ */
Pd(Tlb * const t) : _tlb(t) Pd(Tlb * const t, Platform_pd * const platform_pd)
: _tlb(t), _platform_pd(platform_pd)
{ {
/* try to add translation for mode transition region */ /* try to add translation for mode transition region */
Page_flags::access_t const flags = Page_flags::mode_transition(); Page_flags::access_t const flags = Page_flags::mode_transition();
@ -322,7 +325,8 @@ namespace Kernel
** Accessors ** ** Accessors **
***************/ ***************/
Tlb * tlb() { return _tlb; } Tlb * const tlb() { return _tlb; }
Platform_pd * const platform_pd() { return _platform_pd; }
}; };
@ -404,7 +408,7 @@ namespace Kernel
static Pd * core() static Pd * core()
{ {
static Core_tlb tlb; static Core_tlb tlb;
static Pd _pd(&tlb); static Pd _pd(&tlb, 0);
return &_pd; return &_pd;
} }
@ -833,7 +837,7 @@ namespace Kernel
void * dst = (void *)user->user_arg_1(); void * dst = (void *)user->user_arg_1();
Tlb * const tlb = new (dst) Tlb(); Tlb * const tlb = new (dst) Tlb();
dst = (void *)((addr_t)dst + sizeof(Tlb)); dst = (void *)((addr_t)dst + sizeof(Tlb));
Pd * const pd = new (dst) Pd(tlb); Pd * const pd = new (dst) Pd(tlb, (Platform_pd *)user->user_arg_2());
/* return success */ /* return success */
user->user_arg_0(pd->id()); user->user_arg_0(pd->id());