[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v3 2/2] xen: introduce CONFIG_HAS_SHARED_INFO for archs without a shared page





On 6/25/26 1:04 PM, Jan Beulich wrote:
On 25.06.2026 12:50, Oleksii Kurochko wrote:
On 6/17/26 3:26 PM, Jan Beulich wrote:
+#define shared_info(d, field) \
+    (*(typeof(__shared_info(d, (d)->shared_info, field)) 
*)shared_info_absent())
How about the simpler

extern struct shared_info *shared_info_absent;
#define shared_info(d, field) (shared_info_absent->field)

?

This could lead to compilation error:

common/domain.c: In function 'vcpu_info_reset':
common/domain.c:316:20: error: unused variable 'd' [-Werror=unused-variable]
    316 |     struct domain *d = v->domain;
        |                    ^
cc1: all warnings being treated as errors

#define shared_info(d, field) ((void)(d), shared_info_absent->field)

Which it should have been anyway, to make sure the first argument is evaluated.

I expected that as shared_info() is used as an lvalue whose address is taken (&shared_info(d, vcpu_info[...])). To "consume" d we can't just prepend a comma expression as &(comma_expr) is illegal since a comma result isn't an lvalue.

Trying what you suggested leads to:
common/domain.c: In function 'vcpu_info_reset':
common/domain.c:320:26: error: lvalue required as unary '&' operand
  320 |         ? (vcpu_info_t *)&shared_info(d, vcpu_info[v->vcpu_id])

Thereby this option:
  #define shared_info(d, field) (*((void)(d), &shared_info_absent->field))
will be better.

~ Oleksii




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.