[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
- To: Jan Beulich <jbeulich@xxxxxxxx>
- From: Oleksii Kurochko <oleksii.kurochko@xxxxxxxxx>
- Date: Thu, 25 Jun 2026 13:19:00 +0200
- Authentication-results: eu.smtp.expurgate.cloud; dkim=pass header.s=20251104 header.d=gmail.com header.i="@gmail.com" header.h="Content-Transfer-Encoding:In-Reply-To:From:Content-Language:References:Cc:To:Subject:User-Agent:MIME-Version:Date:Message-ID"
- Cc: Stefano Stabellini <sstabellini@xxxxxxxxxx>, Julien Grall <julien@xxxxxxx>, Bertrand Marquis <bertrand.marquis@xxxxxxx>, Michal Orzel <michal.orzel@xxxxxxx>, Volodymyr Babchuk <Volodymyr_Babchuk@xxxxxxxx>, Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, Anthony PERARD <anthony.perard@xxxxxxxxxx>, Roger Pau Monné <roger.pau@xxxxxxxxxx>, Teddy Astie <teddy.astie@xxxxxxxxxx>, xen-devel@xxxxxxxxxxxxxxxxxxxx
- Delivery-date: Thu, 25 Jun 2026 11:19:05 +0000
- List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
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
|