diff mbox series

[v2,22/29] tools/xenstored: get own domid in stubdom case

Message ID 20231110160804.29021-23-jgross@suse.com (mailing list archive)
State Superseded
Headers show
Series tools: enable xenstore-stubdom to use 9pfs | expand

Commit Message

Jürgen Groß Nov. 10, 2023, 4:07 p.m. UTC
Obtain the own domid from the Xenstore special grant entry when running
as stubdom.

Signed-off-by: Juergen Gross <jgross@suse.com>
---
V2:
- replacement of V1 patch (ANdrew Cooper)
---
 tools/xenstored/core.c   | 1 +
 tools/xenstored/core.h   | 1 +
 tools/xenstored/minios.c | 5 +++++
 3 files changed, 7 insertions(+)

Comments

Julien Grall Nov. 10, 2023, 5:36 p.m. UTC | #1
Hi Juergen,

On 10/11/2023 16:07, Juergen Gross wrote:
> Obtain the own domid from the Xenstore special grant entry when running
> as stubdom.
The commit message says we would use the grant entry but ...

> 
> Signed-off-by: Juergen Gross <jgross@suse.com>
> ---
> V2:
> - replacement of V1 patch (ANdrew Cooper)
> ---
>   tools/xenstored/core.c   | 1 +
>   tools/xenstored/core.h   | 1 +
>   tools/xenstored/minios.c | 5 +++++
>   3 files changed, 7 insertions(+)
> 
> diff --git a/tools/xenstored/core.c b/tools/xenstored/core.c
> index 0c14823fb0..8e271e31f9 100644
> --- a/tools/xenstored/core.c
> +++ b/tools/xenstored/core.c
> @@ -2738,6 +2738,7 @@ static struct option options[] = {
>   int dom0_domid = 0;
>   int dom0_event = 0;
>   int priv_domid = 0;
> +int stub_domid = -1;
>   
>   static unsigned int get_optval_uint(const char *arg)
>   {
> diff --git a/tools/xenstored/core.h b/tools/xenstored/core.h
> index d0ac587f8f..3c28007d11 100644
> --- a/tools/xenstored/core.h
> +++ b/tools/xenstored/core.h
> @@ -361,6 +361,7 @@ do {						\
>   extern int dom0_domid;
>   extern int dom0_event;
>   extern int priv_domid;
> +extern int stub_domid;
>   extern bool keep_orphans;
>   
>   extern unsigned int timeout_watch_event_msec;
> diff --git a/tools/xenstored/minios.c b/tools/xenstored/minios.c
> index 0cdec3ae51..202d70387a 100644
> --- a/tools/xenstored/minios.c
> +++ b/tools/xenstored/minios.c
> @@ -19,6 +19,8 @@
>   #include <sys/mman.h>
>   #include "core.h"
>   #include <xen/grant_table.h>
> +#include <mini-os/events.h>
> +#include <mini-os/gnttab.h>
>   
>   void write_pidfile(const char *pidfile)
>   {
> @@ -56,4 +58,7 @@ void unmap_xenbus(void *interface)
>   
>   void early_init(void)
>   {
> +	stub_domid = evtchn_get_domid();

... the function is called evtchn_*. So the commit message doesn't seem 
to match the code.

Also, you seem to include mini-os/gnttab.h when you don't add any 
function that seems to be related.

Lastly, shouldn't this helper be called get_domain_id() (or similar) 
because the domid is not specific to the event channel subsystem?

Cheers,
Jürgen Groß Nov. 13, 2023, 9:03 a.m. UTC | #2
On 10.11.23 18:36, Julien Grall wrote:
> Hi Juergen,
> 
> On 10/11/2023 16:07, Juergen Gross wrote:
>> Obtain the own domid from the Xenstore special grant entry when running
>> as stubdom.
> The commit message says we would use the grant entry but ...

Sorry, now fixed.

> 
>>
>> Signed-off-by: Juergen Gross <jgross@suse.com>
>> ---
>> V2:
>> - replacement of V1 patch (ANdrew Cooper)
>> ---
>>   tools/xenstored/core.c   | 1 +
>>   tools/xenstored/core.h   | 1 +
>>   tools/xenstored/minios.c | 5 +++++
>>   3 files changed, 7 insertions(+)
>>
>> diff --git a/tools/xenstored/core.c b/tools/xenstored/core.c
>> index 0c14823fb0..8e271e31f9 100644
>> --- a/tools/xenstored/core.c
>> +++ b/tools/xenstored/core.c
>> @@ -2738,6 +2738,7 @@ static struct option options[] = {
>>   int dom0_domid = 0;
>>   int dom0_event = 0;
>>   int priv_domid = 0;
>> +int stub_domid = -1;
>>   static unsigned int get_optval_uint(const char *arg)
>>   {
>> diff --git a/tools/xenstored/core.h b/tools/xenstored/core.h
>> index d0ac587f8f..3c28007d11 100644
>> --- a/tools/xenstored/core.h
>> +++ b/tools/xenstored/core.h
>> @@ -361,6 +361,7 @@ do {                        \
>>   extern int dom0_domid;
>>   extern int dom0_event;
>>   extern int priv_domid;
>> +extern int stub_domid;
>>   extern bool keep_orphans;
>>   extern unsigned int timeout_watch_event_msec;
>> diff --git a/tools/xenstored/minios.c b/tools/xenstored/minios.c
>> index 0cdec3ae51..202d70387a 100644
>> --- a/tools/xenstored/minios.c
>> +++ b/tools/xenstored/minios.c
>> @@ -19,6 +19,8 @@
>>   #include <sys/mman.h>
>>   #include "core.h"
>>   #include <xen/grant_table.h>
>> +#include <mini-os/events.h>
>> +#include <mini-os/gnttab.h>
>>   void write_pidfile(const char *pidfile)
>>   {
>> @@ -56,4 +58,7 @@ void unmap_xenbus(void *interface)
>>   void early_init(void)
>>   {
>> +    stub_domid = evtchn_get_domid();
> 
> ... the function is called evtchn_*. So the commit message doesn't seem to match 
> the code.
> 
> Also, you seem to include mini-os/gnttab.h when you don't add any function that 
> seems to be related.
> 
> Lastly, shouldn't this helper be called get_domain_id() (or similar) because the 
> domid is not specific to the event channel subsystem?

I've named it get_domid() now.


Juergen
Julien Grall Nov. 13, 2023, 9:59 p.m. UTC | #3
Hi Juergen,

On 10/11/2023 16:07, Juergen Gross wrote:
> Obtain the own domid from the Xenstore special grant entry when running
> as stubdom.
> 
> Signed-off-by: Juergen Gross <jgross@suse.com>
> ---
> V2:
> - replacement of V1 patch (ANdrew Cooper)
> ---
>   tools/xenstored/core.c   | 1 +
>   tools/xenstored/core.h   | 1 +
>   tools/xenstored/minios.c | 5 +++++
>   3 files changed, 7 insertions(+)
> 
> diff --git a/tools/xenstored/core.c b/tools/xenstored/core.c
> index 0c14823fb0..8e271e31f9 100644
> --- a/tools/xenstored/core.c
> +++ b/tools/xenstored/core.c
> @@ -2738,6 +2738,7 @@ static struct option options[] = {
>   int dom0_domid = 0;
>   int dom0_event = 0;
>   int priv_domid = 0;
> +int stub_domid = -1;

After looking at partch #25, I feel that it would make more sense if 
stub_domid is a domid_t and initialized to DOMID_INVALID.

At least this makes clearer that initial value is not supported to be a 
valid domid.

Cheers,
Jürgen Groß Nov. 14, 2023, 6:21 a.m. UTC | #4
On 13.11.23 22:59, Julien Grall wrote:
> Hi Juergen,
> 
> On 10/11/2023 16:07, Juergen Gross wrote:
>> Obtain the own domid from the Xenstore special grant entry when running
>> as stubdom.
>>
>> Signed-off-by: Juergen Gross <jgross@suse.com>
>> ---
>> V2:
>> - replacement of V1 patch (ANdrew Cooper)
>> ---
>>   tools/xenstored/core.c   | 1 +
>>   tools/xenstored/core.h   | 1 +
>>   tools/xenstored/minios.c | 5 +++++
>>   3 files changed, 7 insertions(+)
>>
>> diff --git a/tools/xenstored/core.c b/tools/xenstored/core.c
>> index 0c14823fb0..8e271e31f9 100644
>> --- a/tools/xenstored/core.c
>> +++ b/tools/xenstored/core.c
>> @@ -2738,6 +2738,7 @@ static struct option options[] = {
>>   int dom0_domid = 0;
>>   int dom0_event = 0;
>>   int priv_domid = 0;
>> +int stub_domid = -1;
> 
> After looking at partch #25, I feel that it would make more sense if stub_domid 
> is a domid_t and initialized to DOMID_INVALID.
> 
> At least this makes clearer that initial value is not supported to be a valid 
> domid.

Yes, you are right.


Juergen
diff mbox series

Patch

diff --git a/tools/xenstored/core.c b/tools/xenstored/core.c
index 0c14823fb0..8e271e31f9 100644
--- a/tools/xenstored/core.c
+++ b/tools/xenstored/core.c
@@ -2738,6 +2738,7 @@  static struct option options[] = {
 int dom0_domid = 0;
 int dom0_event = 0;
 int priv_domid = 0;
+int stub_domid = -1;
 
 static unsigned int get_optval_uint(const char *arg)
 {
diff --git a/tools/xenstored/core.h b/tools/xenstored/core.h
index d0ac587f8f..3c28007d11 100644
--- a/tools/xenstored/core.h
+++ b/tools/xenstored/core.h
@@ -361,6 +361,7 @@  do {						\
 extern int dom0_domid;
 extern int dom0_event;
 extern int priv_domid;
+extern int stub_domid;
 extern bool keep_orphans;
 
 extern unsigned int timeout_watch_event_msec;
diff --git a/tools/xenstored/minios.c b/tools/xenstored/minios.c
index 0cdec3ae51..202d70387a 100644
--- a/tools/xenstored/minios.c
+++ b/tools/xenstored/minios.c
@@ -19,6 +19,8 @@ 
 #include <sys/mman.h>
 #include "core.h"
 #include <xen/grant_table.h>
+#include <mini-os/events.h>
+#include <mini-os/gnttab.h>
 
 void write_pidfile(const char *pidfile)
 {
@@ -56,4 +58,7 @@  void unmap_xenbus(void *interface)
 
 void early_init(void)
 {
+	stub_domid = evtchn_get_domid();
+	if (stub_domid == DOMID_INVALID)
+		barf("could not get own domid");
 }