[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




 


Rackspace

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