[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v2 05/10] xen/x86: Use ASSERT instead of VIRTUAL_BUG_ON for phys_to_nid
- To: Jan Beulich <jbeulich@xxxxxxxx>
- From: Wei Chen <Wei.Chen@xxxxxxx>
- Date: Tue, 26 Apr 2022 18:59:41 +0800
- Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none
- Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=p3bV0rwMkei3xP2B21Qm5LGLf8dYE6TXpI/IbhNWhMs=; b=NX7LHT5D8cPr5Ianrtq/x+y5b3Y0tAXRkQo3M34o89e/z9nN+hRzNr3aQu1DwtOR5jA7t82i5nywDdO4IbIdmNlAQkdCxkGjXRVlQfhkQpDiohlUJBsi+P9wQCGEVfTx1lReD/s/PLxt/pDkQx8Ecae0bD+M1Kx9RmHsbrC8SwVox++REBFSDZsR6pB8ZfJ0w2a9PW4EpA4kqyy293mMQcJNCsagjhTnrCkdvQT3MUJBHlK03/P6J2BcvpCfNpGHRjcNZJ7JHJMACCFmMLyH11OCiyNtXAGA3dpaCPrZChpTfA0eBb8amOHtMQCb77rG8BoV8lFKnNUOOwkHlBw72Q==
- Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ER0oBGjFfwndL5qkuE56CyJYTE6aw+UKLXs5RjO02bBCE6o1qyUmmRkcWN0WnK//Cyxptm7bibiAIpHux8t1zYCDerOEkB7ZwgW6P9qPcMMojEMCfGiczjDrUjz7s9wP0BCL9RNjqzKNHuec654hIf9tlZsTJjY1FsS5Fm1xaVuZ66UOmOSh4iyDl+loUIlYU7sLPGKzrTbEOnGEQCFmgAlZKLrFtZC0dxSmKJgSPlmE6SRKRpTWHG17qnp+qH6mht/FTjaNyrUC6D4DyO0frxNEgSVT0mEGXIWcgROtS39HoFxcK2Pajz19kSucPGST78qfPLki3ucs1N1EudlxnQ==
- Authentication-results-original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com;
- Cc: nd@xxxxxxx, Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, Roger Pau Monné <roger.pau@xxxxxxxxxx>, Wei Liu <wl@xxxxxxx>, George Dunlap <george.dunlap@xxxxxxxxxx>, Julien Grall <julien@xxxxxxx>, Stefano Stabellini <sstabellini@xxxxxxxxxx>, xen-devel@xxxxxxxxxxxxxxxxxxxx
- Delivery-date: Tue, 26 Apr 2022 11:00:06 +0000
- List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
- Nodisclaimer: true
- Original-authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com;
Hi Jan,
On 2022/4/26 17:02, Jan Beulich wrote:
On 18.04.2022 11:07, Wei Chen wrote:
VIRTUAL_BUG_ON is an empty macro used in phys_to_nid. This
results in two lines of error-checking code in phys_to_nid
that is not actually working and causing two compilation
errors:
1. error: "MAX_NUMNODES" undeclared (first use in this function).
This is because in the common header file, "MAX_NUMNODES" is
defined after the common header file includes the ARCH header
file, where phys_to_nid has attempted to use "MAX_NUMNODES".
This error was resolved when we moved the definition of
"MAX_NUMNODES" to x86 ARCH header file. And we reserve the
"MAX_NUMNODES" definition in common header file through a
conditional compilation for some architectures that don't
need to define "MAX_NUMNODES" in their ARCH header files.
No, that's setting up a trap for someone else to fall into, especially
with the #ifdef around the original definition. Afaict all you need to
do is to move that #define ahead of the #include in xen/numa.h. Unlike
functions, #define-s can reference not-yet-defined identifiers.
I had tried it before. MAX_NUMNODES depends on NODE_SHIFT. But
NODE_SHIFT depends on the definition status in asm/numa.h. If I move
MAX_NUMNODES to before asm/numa.h, then I have to move NODES_SHIFT as
well. But this will break the original design. NODES_SHIFT in xen/numa.h
will always be defined before asm/numa.h. This will be a duplicated
definition error.
How about I move MAX_NUMNODES to arm and x86 asm/numa.h in this patch
at the same time? Because in one of following patches, MAX_NUMNODES and
phys_to_nid will be moved to xen/numa.h at the same time?
2. error: wrong type argument to unary exclamation mark.
This is because, the error-checking code contains !node_data[nid].
But node_data is a data structure variable, it's not a pointer.
So, in this patch, we use ASSERT instead of VIRTUAL_BUG_ON to
enable the two lines of error-checking code. And fix the left
compilation errors by replacing !node_data[nid] to
!node_data[nid].node_spanned_pages.
Because when node_spanned_pages is 0, this node has no memory,
numa_scan_node will print warning message for such kind of nodes:
"Firmware Bug or mis-configured hardware?".
This warning is bogus - nodes can have only processors. Therefore I'd
like to ask that you don't use it for justification. And indeed you
Yes, you're right, node can only has CPUs! I will remove it.
don't need to: phys_to_nid() is about translating an address. The
input address can't be valid if it maps to a node with no memory.
Can I understand your comment:
Any input address is invalid, when node_spanned_pages is zero, because
this node has no memory?
Thanks,
Wei Chen
Jan
|