diff mbox

[2/2] : powerpc/hotplug/mm: Fix hot-add memory node assoc

Message ID 3bb44d92-b2ff-e197-4bdf-ec6d588d6dab@linux.vnet.ibm.com (mailing list archive)
State Superseded, archived
Headers show

Commit Message

Michael Bringmann May 23, 2017, 3:15 p.m. UTC
Removing or adding memory via the PowerPC hotplug interface shows
anomalies in the association between memory and nodes.  The code
was updated to initialize more possible nodes to make them available
to subsequent DLPAR hotplug-memory operations, even if they are not
needed at boot time.

Signed-off-by: Michael Bringmann <mwb@linux.vnet.ibm.com>
---
 arch/powerpc/mm/numa.c |   44 ++++++++++++++++++++++++++++++++------------
 1 file changed, 32 insertions(+), 12 deletions(-)

Comments

Reza Arbab May 23, 2017, 3:52 p.m. UTC | #1
On Tue, May 23, 2017 at 10:15:44AM -0500, Michael Bringmann wrote:
>+static void setup_nodes(void)
>+{
>+	int i, l = 32 /* MAX_NUMNODES */;
>+
>+	for (i = 0; i < l; i++) {
>+		if (!node_possible(i)) {
>+			setup_node_data(i, 0, 0);
>+			node_set(i, node_possible_map);
>+		}
>+	}
>+}

This seems to be a workaround for 3af229f2071f ("powerpc/numa: Reset 
node_possible_map to only node_online_map").

Balbir, you have a patchset which reverts it. Do you think that will be 
getting merged?

http://lkml.kernel.org/r/1479253501-26261-1-git-send-email-bsingharora@gmail.com
(see patch 3/3)
Michael Bringmann May 23, 2017, 8:05 p.m. UTC | #2
On 05/23/2017 10:52 AM, Reza Arbab wrote:
> On Tue, May 23, 2017 at 10:15:44AM -0500, Michael Bringmann wrote:
>> +static void setup_nodes(void)
>> +{
>> +    int i, l = 32 /* MAX_NUMNODES */;
>> +
>> +    for (i = 0; i < l; i++) {
>> +        if (!node_possible(i)) {
>> +            setup_node_data(i, 0, 0);
>> +            node_set(i, node_possible_map);
>> +        }
>> +    }
>> +}
> 
> This seems to be a workaround for 3af229f2071f ("powerpc/numa: Reset node_possible_map to only node_online_map").

They may be related, but that commit is not a replacement.  The above patch ensures that
there are enough of the nodes initialized at startup to allow for memory hot-add into a
node that was not used at boot.  (See 'setup_node_data' function in 'numa.c'.)  That and
recording that the node was initialized.

I didn't see where any part of commit 3af229f2071f would touch the 'node_possible_map'
which is needed by 'numa.c' and 'workqueue.c'.  The nodemask created and updated by
'mem_cgroup_may_update_nodemask()' does not appear to be the same mask.

> 
> Balbir, you have a patchset which reverts it. Do you think that will be getting merged?
> 
> http://lkml.kernel.org/r/1479253501-26261-1-git-send-email-bsingharora@gmail.com
> (see patch 3/3)
>
Reza Arbab May 23, 2017, 9:49 p.m. UTC | #3
On Tue, May 23, 2017 at 03:05:08PM -0500, Michael Bringmann wrote:
>On 05/23/2017 10:52 AM, Reza Arbab wrote:
>> On Tue, May 23, 2017 at 10:15:44AM -0500, Michael Bringmann wrote:
>>> +static void setup_nodes(void)
>>> +{
>>> +    int i, l = 32 /* MAX_NUMNODES */;
>>> +
>>> +    for (i = 0; i < l; i++) {
>>> +        if (!node_possible(i)) {
>>> +            setup_node_data(i, 0, 0);
>>> +            node_set(i, node_possible_map);
>>> +        }
>>> +    }
>>> +}
>>
>> This seems to be a workaround for 3af229f2071f ("powerpc/numa: Reset node_possible_map to only node_online_map").
>
>They may be related, but that commit is not a replacement.  The above patch ensures that
>there are enough of the nodes initialized at startup to allow for memory hot-add into a
>node that was not used at boot.  (See 'setup_node_data' function in 'numa.c'.)  That and
>recording that the node was initialized.

Is it really necessary to preinitialize these empty nodes using 
setup_node_data()? When you do memory hotadd into a node that was not 
used at boot, the node data already gets set up by

add_memory
  add_memory_resource
    hotadd_new_pgdat
      arch_alloc_nodedata <-- allocs the pg_data_t
      ...
      free_area_init_node <-- sets NODE_DATA(nid)->node_id, etc.

Removing setup_node_data() from that loop leaves only the call to 
node_set(). If 3af229f2071f (which reduces node_possible_map) was 
reverted, you wouldn't need to do that either.

>I didn't see where any part of commit 3af229f2071f would touch the 'node_possible_map'
>which is needed by 'numa.c' and 'workqueue.c'.  The nodemask created and updated by
>'mem_cgroup_may_update_nodemask()' does not appear to be the same mask.

Are you sure you're looking at 3af229f2071f? It only adds one line of 
code; the reduction of node_possible_map.
Michael Bringmann May 23, 2017, 10:41 p.m. UTC | #4
On 05/23/2017 04:49 PM, Reza Arbab wrote:
> On Tue, May 23, 2017 at 03:05:08PM -0500, Michael Bringmann wrote:
>> On 05/23/2017 10:52 AM, Reza Arbab wrote:
>>> On Tue, May 23, 2017 at 10:15:44AM -0500, Michael Bringmann wrote:
>>>> +static void setup_nodes(void)
>>>> +{
>>>> +    int i, l = 32 /* MAX_NUMNODES */;
>>>> +
>>>> +    for (i = 0; i < l; i++) {
>>>> +        if (!node_possible(i)) {
>>>> +            setup_node_data(i, 0, 0);
>>>> +            node_set(i, node_possible_map);
>>>> +        }
>>>> +    }
>>>> +}
>>>
>>> This seems to be a workaround for 3af229f2071f ("powerpc/numa: Reset node_possible_map to only node_online_map").
>>
>> They may be related, but that commit is not a replacement.  The above patch ensures that
>> there are enough of the nodes initialized at startup to allow for memory hot-add into a
>> node that was not used at boot.  (See 'setup_node_data' function in 'numa.c'.)  That and
>> recording that the node was initialized.
> 
> Is it really necessary to preinitialize these empty nodes using setup_node_data()? When you do memory hotadd into a node that was not used at boot, the node data already gets set up by
> 
> add_memory
>  add_memory_resource
>    hotadd_new_pgdat
>      arch_alloc_nodedata <-- allocs the pg_data_t
>      ...
>      free_area_init_node <-- sets NODE_DATA(nid)->node_id, etc.

I see that code now, but for some reason it did not work when I hot-added
memory.

> 
> Removing setup_node_data() from that loop leaves only the call to node_set(). If 3af229f2071f (which reduces node_possible_map) was reverted, you wouldn't need to do that either.
> 
>> I didn't see where any part of commit 3af229f2071f would touch the 'node_possible_map'
>> which is needed by 'numa.c' and 'workqueue.c'.  The nodemask created and updated by
>> 'mem_cgroup_may_update_nodemask()' does not appear to be the same mask.
> 
> Are you sure you're looking at 3af229f2071f? It only adds one line of code; the reduction of node_possible_map.
> 

The 3rd file in the patch set removes,

-	nodes_and(node_possible_map, node_possible_map, node_online_map);

I need to add bits to 'node_possible_map' -- bits which may not be used
for the memory at boot, but which would be used when memory is hot-added
later.  I haven't found anything outside of the boot code that adds bits
to the 'possible' mask.
Michael Bringmann May 23, 2017, 10:44 p.m. UTC | #5
On 05/23/2017 04:49 PM, Reza Arbab wrote:
> On Tue, May 23, 2017 at 03:05:08PM -0500, Michael Bringmann wrote:
>> On 05/23/2017 10:52 AM, Reza Arbab wrote:
>>> On Tue, May 23, 2017 at 10:15:44AM -0500, Michael Bringmann wrote:
>>>> +static void setup_nodes(void)
>>>> +{
>>>> +    int i, l = 32 /* MAX_NUMNODES */;
>>>> +
>>>> +    for (i = 0; i < l; i++) {
>>>> +        if (!node_possible(i)) {
>>>> +            setup_node_data(i, 0, 0);
>>>> +            node_set(i, node_possible_map);
>>>> +        }
>>>> +    }
>>>> +}
>>>
>>> This seems to be a workaround for 3af229f2071f ("powerpc/numa: Reset node_possible_map to only node_online_map").
>>
>> They may be related, but that commit is not a replacement.  The above patch ensures that
>> there are enough of the nodes initialized at startup to allow for memory hot-add into a
>> node that was not used at boot.  (See 'setup_node_data' function in 'numa.c'.)  That and
>> recording that the node was initialized.
> 
> Is it really necessary to preinitialize these empty nodes using setup_node_data()? When you do memory hotadd into a node that was not used at boot, the node data already gets set up by
> 
> add_memory
>  add_memory_resource
>    hotadd_new_pgdat
>      arch_alloc_nodedata <-- allocs the pg_data_t
>      ...
>      free_area_init_node <-- sets NODE_DATA(nid)->node_id, etc.
> 
> Removing setup_node_data() from that loop leaves only the call to node_set(). If 3af229f2071f (which reduces node_possible_map) was reverted, you wouldn't need to do that either.

With or without 3af229f2071f, we would still need to add something, somewhere to add new
bits to the 'node_possible_map'.  That is not being done.

> 
>> I didn't see where any part of commit 3af229f2071f would touch the 'node_possible_map'
>> which is needed by 'numa.c' and 'workqueue.c'.  The nodemask created and updated by
>> 'mem_cgroup_may_update_nodemask()' does not appear to be the same mask.
> 
> Are you sure you're looking at 3af229f2071f? It only adds one line of code; the reduction of node_possible_map.
>
Michael Ellerman May 24, 2017, 11:19 a.m. UTC | #6
Michael Bringmann <mwb@linux.vnet.ibm.com> writes:

> On 05/23/2017 04:49 PM, Reza Arbab wrote:
>> On Tue, May 23, 2017 at 03:05:08PM -0500, Michael Bringmann wrote:
>>> On 05/23/2017 10:52 AM, Reza Arbab wrote:
>>>> On Tue, May 23, 2017 at 10:15:44AM -0500, Michael Bringmann wrote:
>>>>> +static void setup_nodes(void)
>>>>> +{
>>>>> +    int i, l = 32 /* MAX_NUMNODES */;
>>>>> +
>>>>> +    for (i = 0; i < l; i++) {
>>>>> +        if (!node_possible(i)) {
>>>>> +            setup_node_data(i, 0, 0);
>>>>> +            node_set(i, node_possible_map);
>>>>> +        }
>>>>> +    }
>>>>> +}
>>>>
>>>> This seems to be a workaround for 3af229f2071f ("powerpc/numa: Reset node_possible_map to only node_online_map").
>>>
>>> They may be related, but that commit is not a replacement.  The above patch ensures that
>>> there are enough of the nodes initialized at startup to allow for memory hot-add into a
>>> node that was not used at boot.  (See 'setup_node_data' function in 'numa.c'.)  That and
>>> recording that the node was initialized.
>> 
>> Is it really necessary to preinitialize these empty nodes using setup_node_data()? When you do memory hotadd into a node that was not used at boot, the node data already gets set up by
>> 
>> add_memory
>>  add_memory_resource
>>    hotadd_new_pgdat
>>      arch_alloc_nodedata <-- allocs the pg_data_t
>>      ...
>>      free_area_init_node <-- sets NODE_DATA(nid)->node_id, etc.
>> 
>> Removing setup_node_data() from that loop leaves only the call to node_set(). If 3af229f2071f (which reduces node_possible_map) was reverted, you wouldn't need to do that either.
>
> With or without 3af229f2071f, we would still need to add something, somewhere to add new
> bits to the 'node_possible_map'.  That is not being done.

You mustn't add bits to the possible map after boot.

That's its purpose, to tell you what nodes could ever *possibly* exist.

cheers
Reza Arbab May 24, 2017, 2:36 p.m. UTC | #7
On Tue, May 23, 2017 at 05:44:23PM -0500, Michael Bringmann wrote:
>On 05/23/2017 04:49 PM, Reza Arbab wrote:
>> On Tue, May 23, 2017 at 03:05:08PM -0500, Michael Bringmann wrote:
>>> On 05/23/2017 10:52 AM, Reza Arbab wrote:
>>>> On Tue, May 23, 2017 at 10:15:44AM -0500, Michael Bringmann wrote:
>>>>> +static void setup_nodes(void)
>>>>> +{
>>>>> +    int i, l = 32 /* MAX_NUMNODES */;
>>>>> +
>>>>> +    for (i = 0; i < l; i++) {
>>>>> +        if (!node_possible(i)) {
>>>>> +            setup_node_data(i, 0, 0);
>>>>> +            node_set(i, node_possible_map);
>>>>> +        }
>>>>> +    }
>>>>> +}
>>>>
>>>> This seems to be a workaround for 3af229f2071f ("powerpc/numa: Reset node_possible_map to only node_online_map").
>>>
>>> They may be related, but that commit is not a replacement.  The above patch ensures that
>>> there are enough of the nodes initialized at startup to allow for memory hot-add into a
>>> node that was not used at boot.  (See 'setup_node_data' function in 'numa.c'.)  That and
>>> recording that the node was initialized.
>>
>> Is it really necessary to preinitialize these empty nodes using setup_node_data()? When you do memory hotadd into a node that was not used at boot, the node data already gets set up by
>>
>> add_memory
>>  add_memory_resource
>>    hotadd_new_pgdat
>>      arch_alloc_nodedata <-- allocs the pg_data_t
>>      ...
>>      free_area_init_node <-- sets NODE_DATA(nid)->node_id, etc.
>>
>> Removing setup_node_data() from that loop leaves only the call to node_set(). If 3af229f2071f (which reduces node_possible_map) was reverted, you wouldn't need to do that either.
>
>With or without 3af229f2071f, we would still need to add something, somewhere to add new
>bits to the 'node_possible_map'.  That is not being done.

Without 3af229f2071f, those bits would already BE set in 
node_possible_map. You wouldn't have to do anything.
Michael Bringmann May 24, 2017, 11:41 p.m. UTC | #8
I will get a log based on the latest 4.12 kernel to show what happens
one way or the other, with this patch removed.

On 05/24/2017 09:36 AM, Reza Arbab wrote:
> On Tue, May 23, 2017 at 05:44:23PM -0500, Michael Bringmann wrote:
>> On 05/23/2017 04:49 PM, Reza Arbab wrote:
>>> On Tue, May 23, 2017 at 03:05:08PM -0500, Michael Bringmann wrote:
>>>> On 05/23/2017 10:52 AM, Reza Arbab wrote:
>>>>> On Tue, May 23, 2017 at 10:15:44AM -0500, Michael Bringmann wrote:
>>>>>> +static void setup_nodes(void)
>>>>>> +{
>>>>>> +    int i, l = 32 /* MAX_NUMNODES */;
>>>>>> +
>>>>>> +    for (i = 0; i < l; i++) {
>>>>>> +        if (!node_possible(i)) {
>>>>>> +            setup_node_data(i, 0, 0);
>>>>>> +            node_set(i, node_possible_map);
>>>>>> +        }
>>>>>> +    }
>>>>>> +}
>>>>>
>>>>> This seems to be a workaround for 3af229f2071f ("powerpc/numa: Reset node_possible_map to only node_online_map").
>>>>
>>>> They may be related, but that commit is not a replacement.  The above patch ensures that
>>>> there are enough of the nodes initialized at startup to allow for memory hot-add into a
>>>> node that was not used at boot.  (See 'setup_node_data' function in 'numa.c'.)  That and
>>>> recording that the node was initialized.
>>>
>>> Is it really necessary to preinitialize these empty nodes using setup_node_data()? When you do memory hotadd into a node that was not used at boot, the node data already gets set up by
>>>
>>> add_memory
>>>  add_memory_resource
>>>    hotadd_new_pgdat
>>>      arch_alloc_nodedata <-- allocs the pg_data_t
>>>      ...
>>>      free_area_init_node <-- sets NODE_DATA(nid)->node_id, etc.
>>>
>>> Removing setup_node_data() from that loop leaves only the call to node_set(). If 3af229f2071f (which reduces node_possible_map) was reverted, you wouldn't need to do that either.
>>
>> With or without 3af229f2071f, we would still need to add something, somewhere to add new
>> bits to the 'node_possible_map'.  That is not being done.
> 
> Without 3af229f2071f, those bits would already BE set in node_possible_map. You wouldn't have to do anything.
>
Michael Bringmann May 24, 2017, 11:55 p.m. UTC | #9
On 05/24/2017 06:19 AM, Michael Ellerman wrote:
> Michael Bringmann <mwb@linux.vnet.ibm.com> writes:
> 
>> On 05/23/2017 04:49 PM, Reza Arbab wrote:
>>> On Tue, May 23, 2017 at 03:05:08PM -0500, Michael Bringmann wrote:
>>>> On 05/23/2017 10:52 AM, Reza Arbab wrote:
>>>>> On Tue, May 23, 2017 at 10:15:44AM -0500, Michael Bringmann wrote:
>>>>>> +static void setup_nodes(void)
>>>>>> +{
>>>>>> +    int i, l = 32 /* MAX_NUMNODES */;
>>>>>> +
>>>>>> +    for (i = 0; i < l; i++) {
>>>>>> +        if (!node_possible(i)) {
>>>>>> +            setup_node_data(i, 0, 0);
>>>>>> +            node_set(i, node_possible_map);
>>>>>> +        }
>>>>>> +    }
>>>>>> +}
>>>>>
>>>>> This seems to be a workaround for 3af229f2071f ("powerpc/numa: Reset node_possible_map to only node_online_map").
>>>>
>>>> They may be related, but that commit is not a replacement.  The above patch ensures that
>>>> there are enough of the nodes initialized at startup to allow for memory hot-add into a
>>>> node that was not used at boot.  (See 'setup_node_data' function in 'numa.c'.)  That and
>>>> recording that the node was initialized.
>>>
>>> Is it really necessary to preinitialize these empty nodes using setup_node_data()? When you do memory hotadd into a node that was not used at boot, the node data already gets set up by
>>>
>>> add_memory
>>>  add_memory_resource
>>>    hotadd_new_pgdat
>>>      arch_alloc_nodedata <-- allocs the pg_data_t
>>>      ...
>>>      free_area_init_node <-- sets NODE_DATA(nid)->node_id, etc.
>>>
>>> Removing setup_node_data() from that loop leaves only the call to node_set(). If 3af229f2071f (which reduces node_possible_map) was reverted, you wouldn't need to do that either.
>>
>> With or without 3af229f2071f, we would still need to add something, somewhere to add new
>> bits to the 'node_possible_map'.  That is not being done.
> 
> You mustn't add bits to the possible map after boot.
> 
> That's its purpose, to tell you what nodes could ever *possibly* exist.

The problem that I have been encountering is that the 'possible map' did *not*
show all of the possible nodes.  Rather, it showed only the nodes that were
assigned memory at boot-up.  If more memory were hot-added to the kernel, it
could be assigned into one of the nodes that were skipped at boot.  However,
nothing was updating the 'node_possible_map' correctly in the kernel memory
code.

Reza pointed out a code change in commit 3af229f2071f that has not made it into
the 4.12 checkout i.e. removing the instruction that reduces the node_possible_map.
This may well be a suitable replacement for the code that I have here, and I
will test it here next.

> 
> cheers
> 
> 
Later.
Michael Ellerman May 25, 2017, 6:19 a.m. UTC | #10
Michael Bringmann <mwb@linux.vnet.ibm.com> writes:

> On 05/24/2017 06:19 AM, Michael Ellerman wrote:
>> Michael Bringmann <mwb@linux.vnet.ibm.com> writes:
>>>
>>> With or without 3af229f2071f, we would still need to add something, somewhere to add new
>>> bits to the 'node_possible_map'.  That is not being done.
>> 
>> You mustn't add bits to the possible map after boot.
>> 
>> That's its purpose, to tell you what nodes could ever *possibly* exist.
>
> The problem that I have been encountering is that the 'possible map' did *not*
> show all of the possible nodes.

OK so how did that happen?

The commit message for 3af229f2071f says:

    In practice, we never see a system with 256 NUMA nodes, and in fact, we
    do not support node hotplug on power in the first place, so the nodes
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    that are online when we come up are the nodes that will be present for
    the lifetime of this kernel.

Is that no longer true?

cheers
Michael Bringmann May 25, 2017, 1:40 p.m. UTC | #11
On 05/25/2017 01:19 AM, Michael Ellerman wrote:
> Michael Bringmann <mwb@linux.vnet.ibm.com> writes:
> 
>> On 05/24/2017 06:19 AM, Michael Ellerman wrote:
>>> Michael Bringmann <mwb@linux.vnet.ibm.com> writes:
>>>>
>>>> With or without 3af229f2071f, we would still need to add something, somewhere to add new
>>>> bits to the 'node_possible_map'.  That is not being done.
>>>
>>> You mustn't add bits to the possible map after boot.
>>>
>>> That's its purpose, to tell you what nodes could ever *possibly* exist.
>>
>> The problem that I have been encountering is that the 'possible map' did *not*
>> show all of the possible nodes.
> 
> OK so how did that happen?
> 
> The commit message for 3af229f2071f says:
> 
>     In practice, we never see a system with 256 NUMA nodes, and in fact, we
>     do not support node hotplug on power in the first place, so the nodes
>     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>     that are online when we come up are the nodes that will be present for
>     the lifetime of this kernel.
> 
> Is that no longer true?

Take a look at the last part of commit 3af229f2071f for file numa.c.  It undoes
a piece of code that restricts the 'node possible map', created earlier, to the
set of online nodes.  That piece of code has not made it into the mainline, at
least not into 4.12.  I am testing to verify whether it is sufficient for my
configuration now.

> 
> cheers
> 
Regards.
Reza Arbab May 25, 2017, 3:10 p.m. UTC | #12
On Thu, May 25, 2017 at 04:19:53PM +1000, Michael Ellerman wrote:
>The commit message for 3af229f2071f says:
>
>    In practice, we never see a system with 256 NUMA nodes, and in fact, we
>    do not support node hotplug on power in the first place, so the nodes
>    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>    that are online when we come up are the nodes that will be present for
>    the lifetime of this kernel.
>
>Is that no longer true?

I don't know what the reasoning behind that statement was at the time, 
but as far as I can tell, the only thing missing for node hotplug now is 
Balbir's patchset [1]. He fixes the resource issue which motivated 
3af229f2071f and reverts it.

With that set, I can instantiate a new numa node just by doing 
add_memory(nid, ...) where nid doesn't currently exist.

[1] https://lkml.kernel.org/r/1479253501-26261-1-git-send-email-bsingharora@gmail.com
Michael Bringmann May 25, 2017, 3:26 p.m. UTC | #13
On 05/25/2017 10:10 AM, Reza Arbab wrote:
> On Thu, May 25, 2017 at 04:19:53PM +1000, Michael Ellerman wrote:
>> The commit message for 3af229f2071f says:
>>
>>    In practice, we never see a system with 256 NUMA nodes, and in fact, we
>>    do not support node hotplug on power in the first place, so the nodes
>>    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>>    that are online when we come up are the nodes that will be present for
>>    the lifetime of this kernel.
>>
>> Is that no longer true?
> 
> I don't know what the reasoning behind that statement was at the time, but as far as I can tell, the only thing missing for node hotplug now is Balbir's patchset [1]. He fixes the resource issue which motivated 3af229f2071f and reverts it.
> 
> With that set, I can instantiate a new numa node just by doing add_memory(nid, ...) where nid doesn't currently exist.
> 
> [1] https://lkml.kernel.org/r/1479253501-26261-1-git-send-email-bsingharora@gmail.com
> 

Yes, the change to 'numa.c' looks to be sufficient for my needs as well.
Balbir Singh May 26, 2017, 3:46 a.m. UTC | #14
On Thu, 25 May 2017 10:10:11 -0500
Reza Arbab <arbab@linux.vnet.ibm.com> wrote:

> On Thu, May 25, 2017 at 04:19:53PM +1000, Michael Ellerman wrote:
> >The commit message for 3af229f2071f says:
> >
> >    In practice, we never see a system with 256 NUMA nodes, and in fact, we
> >    do not support node hotplug on power in the first place, so the nodes
> >    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> >    that are online when we come up are the nodes that will be present for
> >    the lifetime of this kernel.
> >
> >Is that no longer true?  
> 
> I don't know what the reasoning behind that statement was at the time, 
> but as far as I can tell, the only thing missing for node hotplug now is 
> Balbir's patchset [1]. He fixes the resource issue which motivated 
> 3af229f2071f and reverts it.
> 
> With that set, I can instantiate a new numa node just by doing 
> add_memory(nid, ...) where nid doesn't currently exist.
> 
> [1] https://lkml.kernel.org/r/1479253501-26261-1-git-send-email-bsingharora@gmail.com
> 

I guess I should try and revive that patchset. One of the suggestions of
then was to limit maximum possible nodes in firmware, but I'm double checking
to see if we can do that in a well defined manner.

Balbir Singh
Michael Ellerman May 26, 2017, 3:46 a.m. UTC | #15
Reza Arbab <arbab@linux.vnet.ibm.com> writes:

> On Thu, May 25, 2017 at 04:19:53PM +1000, Michael Ellerman wrote:
>>The commit message for 3af229f2071f says:
>>
>>    In practice, we never see a system with 256 NUMA nodes, and in fact, we
>>    do not support node hotplug on power in the first place, so the nodes
>>    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>>    that are online when we come up are the nodes that will be present for
>>    the lifetime of this kernel.
>>
>>Is that no longer true?
>
> I don't know what the reasoning behind that statement was at the time, 
> but as far as I can tell, the only thing missing for node hotplug now is 
> Balbir's patchset [1]. He fixes the resource issue which motivated 
> 3af229f2071f and reverts it.
>
> With that set, I can instantiate a new numa node just by doing 
> add_memory(nid, ...) where nid doesn't currently exist.

But does that actually happen on any real system?

cheers
Michael Bringmann May 26, 2017, 12:31 p.m. UTC | #16
I am running into this problem on PowerPC systems where Balbir's patch set
was targeted.  So, yes, I do need to be able to add/enable a new numa node
during system execution in cases where more resources (memory, virtual
processors) are added to the system dynamically.

On 05/25/2017 10:46 PM, Michael Ellerman wrote:
> Reza Arbab <arbab@linux.vnet.ibm.com> writes:
> 
>> On Thu, May 25, 2017 at 04:19:53PM +1000, Michael Ellerman wrote:
>>> The commit message for 3af229f2071f says:
>>>
>>>    In practice, we never see a system with 256 NUMA nodes, and in fact, we
>>>    do not support node hotplug on power in the first place, so the nodes
>>>    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>>>    that are online when we come up are the nodes that will be present for
>>>    the lifetime of this kernel.
>>>
>>> Is that no longer true?
>>
>> I don't know what the reasoning behind that statement was at the time, 
>> but as far as I can tell, the only thing missing for node hotplug now is 
>> Balbir's patchset [1]. He fixes the resource issue which motivated 
>> 3af229f2071f and reverts it.
>>
>> With that set, I can instantiate a new numa node just by doing 
>> add_memory(nid, ...) where nid doesn't currently exist.
> 
> But does that actually happen on any real system?
> 
> cheers
> 
>
Reza Arbab May 26, 2017, 2:31 p.m. UTC | #17
On Fri, May 26, 2017 at 01:46:58PM +1000, Michael Ellerman wrote:
>Reza Arbab <arbab@linux.vnet.ibm.com> writes:
>
>> On Thu, May 25, 2017 at 04:19:53PM +1000, Michael Ellerman wrote:
>>>The commit message for 3af229f2071f says:
>>>
>>>    In practice, we never see a system with 256 NUMA nodes, and in fact, we
>>>    do not support node hotplug on power in the first place, so the nodes
>>>    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>>>    that are online when we come up are the nodes that will be present for
>>>    the lifetime of this kernel.
>>>
>>>Is that no longer true?
>>
>> I don't know what the reasoning behind that statement was at the time,
>> but as far as I can tell, the only thing missing for node hotplug now is
>> Balbir's patchset [1]. He fixes the resource issue which motivated
>> 3af229f2071f and reverts it.
>>
>> With that set, I can instantiate a new numa node just by doing
>> add_memory(nid, ...) where nid doesn't currently exist.
>
>But does that actually happen on any real system?

I don't know if anything currently tries to do this. My interest in 
having this working is so that in the future, our coherent gpu memory 
could be added as a distinct node by the device driver.
Michael Ellerman May 29, 2017, 5:32 a.m. UTC | #18
Reza Arbab <arbab@linux.vnet.ibm.com> writes:

> On Fri, May 26, 2017 at 01:46:58PM +1000, Michael Ellerman wrote:
>>Reza Arbab <arbab@linux.vnet.ibm.com> writes:
>>
>>> On Thu, May 25, 2017 at 04:19:53PM +1000, Michael Ellerman wrote:
>>>>The commit message for 3af229f2071f says:
>>>>
>>>>    In practice, we never see a system with 256 NUMA nodes, and in fact, we
>>>>    do not support node hotplug on power in the first place, so the nodes
>>>>    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>>>>    that are online when we come up are the nodes that will be present for
>>>>    the lifetime of this kernel.
>>>>
>>>>Is that no longer true?
>>>
>>> I don't know what the reasoning behind that statement was at the time,
>>> but as far as I can tell, the only thing missing for node hotplug now is
>>> Balbir's patchset [1]. He fixes the resource issue which motivated
>>> 3af229f2071f and reverts it.
>>>
>>> With that set, I can instantiate a new numa node just by doing
>>> add_memory(nid, ...) where nid doesn't currently exist.
>>
>>But does that actually happen on any real system?
>
> I don't know if anything currently tries to do this. My interest in 
> having this working is so that in the future, our coherent gpu memory 
> could be added as a distinct node by the device driver.

Sure. If/when that happens, we would hopefully still have some way to
limit the size of the possible map.

That would ideally be a firmware property that tells us the maximum
number of GPUs that might be hot-added, or we punt and cap it at some
"sane" maximum number.

But until that happens it's silly to say we can have up to 256 nodes
when in practice most of our systems have 8 or less.

So I'm still waiting for an explanation from Michael B on how he's
seeing this bug in practice.

cheers
Michael Bringmann May 31, 2017, 2:05 p.m. UTC | #19
On 05/29/2017 12:32 AM, Michael Ellerman wrote:
> Reza Arbab <arbab@linux.vnet.ibm.com> writes:
> 
>> On Fri, May 26, 2017 at 01:46:58PM +1000, Michael Ellerman wrote:
>>> Reza Arbab <arbab@linux.vnet.ibm.com> writes:
>>>
>>>> On Thu, May 25, 2017 at 04:19:53PM +1000, Michael Ellerman wrote:
>>>>> The commit message for 3af229f2071f says:
>>>>>
>>>>>    In practice, we never see a system with 256 NUMA nodes, and in fact, we
>>>>>    do not support node hotplug on power in the first place, so the nodes
>>>>>    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>>>>>    that are online when we come up are the nodes that will be present for
>>>>>    the lifetime of this kernel.
>>>>>
>>>>> Is that no longer true?
>>>>
>>>> I don't know what the reasoning behind that statement was at the time,
>>>> but as far as I can tell, the only thing missing for node hotplug now is
>>>> Balbir's patchset [1]. He fixes the resource issue which motivated
>>>> 3af229f2071f and reverts it.
>>>>
>>>> With that set, I can instantiate a new numa node just by doing
>>>> add_memory(nid, ...) where nid doesn't currently exist.
>>>
>>> But does that actually happen on any real system?
>>
>> I don't know if anything currently tries to do this. My interest in 
>> having this working is so that in the future, our coherent gpu memory 
>> could be added as a distinct node by the device driver.
> 
> Sure. If/when that happens, we would hopefully still have some way to
> limit the size of the possible map.
> 
> That would ideally be a firmware property that tells us the maximum
> number of GPUs that might be hot-added, or we punt and cap it at some
> "sane" maximum number.
> 
> But until that happens it's silly to say we can have up to 256 nodes
> when in practice most of our systems have 8 or less.
> 
> So I'm still waiting for an explanation from Michael B on how he's
> seeing this bug in practice.

I already answered this in an earlier message.  I will give an example.

* Let there be a configuration with nodes (0, 4-5, 8) that boots with 1 VP
  and 10G of memory in a shared processor configuration.
* At boot time, 4 nodes are put into the possible map by the PowerPC boot
  code.
* Subsequently, the NUMA code executes and puts the 10G memory into nodes
  4 & 5.  No memory goes into Node 0.  So we now have 2 nodes in the
  node_online_map.
* The VP and its threads get assigned to Node 4.
* Then when 'initmem_init()' in 'powerpc/numa.c' executes the instruction,
     node_and(node_possible_map, node_possible_map, node_online_map);
  the content of the node_possible_map is reduced to nodes 4-5.
* Later on we hot-add 90G of memory to the system.  It tries to put the
  memory into nodes 0, 4-5, 8 based on the memory association map.  We
  should see memory put into all 4 nodes.  However, since we have reduced
  the 'node_possible_map' to only nodes 4 & 5, we can now only put memory
  into 2 of the configured nodes.

# We want to be able to put memory into all 4 nodes via hot-add operations,
  not only the nodes that 'survive' boot time initialization.  We could
  make a number of changes to ensure that all of the nodes in the initial
  configuration provided by the pHyp can be used, but this one appears to
  be the simplest, only using resources requested by the pHyp at boot --
  even if those resource are not used immediately.

> 
> cheers
> 

Regards,
Michael
Michael Ellerman June 1, 2017, 9:36 a.m. UTC | #20
Michael Bringmann <mwb@linux.vnet.ibm.com> writes:

> On 05/29/2017 12:32 AM, Michael Ellerman wrote:
>> Reza Arbab <arbab@linux.vnet.ibm.com> writes:
>> 
>>> On Fri, May 26, 2017 at 01:46:58PM +1000, Michael Ellerman wrote:
>>>> Reza Arbab <arbab@linux.vnet.ibm.com> writes:
>>>>
>>>>> On Thu, May 25, 2017 at 04:19:53PM +1000, Michael Ellerman wrote:
>>>>>> The commit message for 3af229f2071f says:
>>>>>>
>>>>>>    In practice, we never see a system with 256 NUMA nodes, and in fact, we
>>>>>>    do not support node hotplug on power in the first place, so the nodes
>>>>>>    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>>>>>>    that are online when we come up are the nodes that will be present for
>>>>>>    the lifetime of this kernel.
>>>>>>
>>>>>> Is that no longer true?
>>>>>
>>>>> I don't know what the reasoning behind that statement was at the time,
>>>>> but as far as I can tell, the only thing missing for node hotplug now is
>>>>> Balbir's patchset [1]. He fixes the resource issue which motivated
>>>>> 3af229f2071f and reverts it.
>>>>>
>>>>> With that set, I can instantiate a new numa node just by doing
>>>>> add_memory(nid, ...) where nid doesn't currently exist.
>>>>
>>>> But does that actually happen on any real system?
>>>
>>> I don't know if anything currently tries to do this. My interest in 
>>> having this working is so that in the future, our coherent gpu memory 
>>> could be added as a distinct node by the device driver.
>> 
>> Sure. If/when that happens, we would hopefully still have some way to
>> limit the size of the possible map.
>> 
>> That would ideally be a firmware property that tells us the maximum
>> number of GPUs that might be hot-added, or we punt and cap it at some
>> "sane" maximum number.
>> 
>> But until that happens it's silly to say we can have up to 256 nodes
>> when in practice most of our systems have 8 or less.
>> 
>> So I'm still waiting for an explanation from Michael B on how he's
>> seeing this bug in practice.
>
> I already answered this in an earlier message.

Which one? I must have missed it.

> I will give an example.
>
> * Let there be a configuration with nodes (0, 4-5, 8) that boots with 1 VP
>   and 10G of memory in a shared processor configuration.
> * At boot time, 4 nodes are put into the possible map by the PowerPC boot
>   code.

I'm pretty sure we never add nodes to the possible map, it starts out
with MAX_NUMNODES possible and that's it.

Do you actually see mention of nodes 0 and 8 in the dmesg?

What does it say?

> * Subsequently, the NUMA code executes and puts the 10G memory into nodes
>   4 & 5.  No memory goes into Node 0.  So we now have 2 nodes in the
>   node_online_map.
> * The VP and its threads get assigned to Node 4.
> * Then when 'initmem_init()' in 'powerpc/numa.c' executes the instruction,
>      node_and(node_possible_map, node_possible_map, node_online_map);
>   the content of the node_possible_map is reduced to nodes 4-5.
> * Later on we hot-add 90G of memory to the system.  It tries to put the
>   memory into nodes 0, 4-5, 8 based on the memory association map.  We
>   should see memory put into all 4 nodes.  However, since we have reduced
>   the 'node_possible_map' to only nodes 4 & 5, we can now only put memory
>   into 2 of the configured nodes.

Right. So it's not that you're hot adding memory into a previously
unseen node as you implied in earlier mails.

> # We want to be able to put memory into all 4 nodes via hot-add operations,
>   not only the nodes that 'survive' boot time initialization.  We could
>   make a number of changes to ensure that all of the nodes in the initial
>   configuration provided by the pHyp can be used, but this one appears to
>   be the simplest, only using resources requested by the pHyp at boot --
>   even if those resource are not used immediately.

I don't think that's what the patch does. It just marks 32 (!?) nodes as
online. Or if you're talking about reverting 3af229f2071f that leaves
you with 256 possible nodes. Both of which are wasteful.

The right fix is to make sure any nodes which are present at boot remain
in the possible map, even if they don't have memory/CPUs assigned at
boot.

What does your device tree look like? Can you send us the output of:

 $ lsprop /proc/device-tree


cheers
Michael Bringmann June 2, 2017, 5:24 a.m. UTC | #21
On 06/01/2017 04:36 AM, Michael Ellerman wrote:
> Michael Bringmann <mwb@linux.vnet.ibm.com> writes:
> 
>> On 05/29/2017 12:32 AM, Michael Ellerman wrote:
>>> Reza Arbab <arbab@linux.vnet.ibm.com> writes:
>>>
>>>> On Fri, May 26, 2017 at 01:46:58PM +1000, Michael Ellerman wrote:
>>>>> Reza Arbab <arbab@linux.vnet.ibm.com> writes:
>>>>>
>>>>>> On Thu, May 25, 2017 at 04:19:53PM +1000, Michael Ellerman wrote:
>>>>>>> The commit message for 3af229f2071f says:
>>>>>>>
>>>>>>>    In practice, we never see a system with 256 NUMA nodes, and in fact, we
>>>>>>>    do not support node hotplug on power in the first place, so the nodes
>>>>>>>    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>>>>>>>    that are online when we come up are the nodes that will be present for
>>>>>>>    the lifetime of this kernel.
>>>>>>>
>>>>>>> Is that no longer true?
>>>>>>
>>>>>> I don't know what the reasoning behind that statement was at the time,
>>>>>> but as far as I can tell, the only thing missing for node hotplug now is
>>>>>> Balbir's patchset [1]. He fixes the resource issue which motivated
>>>>>> 3af229f2071f and reverts it.
>>>>>>
>>>>>> With that set, I can instantiate a new numa node just by doing
>>>>>> add_memory(nid, ...) where nid doesn't currently exist.
>>>>>
>>>>> But does that actually happen on any real system?
>>>>
>>>> I don't know if anything currently tries to do this. My interest in 
>>>> having this working is so that in the future, our coherent gpu memory 
>>>> could be added as a distinct node by the device driver.
>>>
>>> Sure. If/when that happens, we would hopefully still have some way to
>>> limit the size of the possible map.
>>>
>>> That would ideally be a firmware property that tells us the maximum
>>> number of GPUs that might be hot-added, or we punt and cap it at some
>>> "sane" maximum number.
>>>
>>> But until that happens it's silly to say we can have up to 256 nodes
>>> when in practice most of our systems have 8 or less.
>>>
>>> So I'm still waiting for an explanation from Michael B on how he's
>>> seeing this bug in practice.
>>
>> I already answered this in an earlier message.
> 
> Which one? I must have missed it.
> 
>> I will give an example.
>>
>> * Let there be a configuration with nodes (0, 4-5, 8) that boots with 1 VP
>>   and 10G of memory in a shared processor configuration.
>> * At boot time, 4 nodes are put into the possible map by the PowerPC boot
>>   code.
> 
> I'm pretty sure we never add nodes to the possible map, it starts out
> with MAX_NUMNODES possible and that's it.

Let me reword that.  It enables the nodes in the possible map.

> 
> Do you actually see mention of nodes 0 and 8 in the dmesg?

When the 'numa.c' code is built with debug messages, and the system was
given that configuration by pHyp, yes, I did.

> 
> What does it say?

The debug message for each core thread would be something like,

    removing cpu 64 from node 0
    adding cpu 64 to node 8

repeated for all 8 threads of the CPU, and usually with the messages
for all of the CPUs coming out intermixed on the console/dmesg log.

> 
>> * Subsequently, the NUMA code executes and puts the 10G memory into nodes
>>   4 & 5.  No memory goes into Node 0.  So we now have 2 nodes in the
>>   node_online_map.
>> * The VP and its threads get assigned to Node 4.
>> * Then when 'initmem_init()' in 'powerpc/numa.c' executes the instruction,
>>      node_and(node_possible_map, node_possible_map, node_online_map);
>>   the content of the node_possible_map is reduced to nodes 4-5.
>> * Later on we hot-add 90G of memory to the system.  It tries to put the
>>   memory into nodes 0, 4-5, 8 based on the memory association map.  We
>>   should see memory put into all 4 nodes.  However, since we have reduced
>>   the 'node_possible_map' to only nodes 4 & 5, we can now only put memory
>>   into 2 of the configured nodes.
> 
> Right. So it's not that you're hot adding memory into a previously
> unseen node as you implied in earlier mails.

In the sense that the nodes were defined in the device tree, that is correct.

In the sense that those nodes are currently deleted from node_possible_map in
'numa.c' by the instruction 'node_and(node_possible_map,node_possible_map,
node_online_map);', the nodes are no longer available to place memory or CPU.

>> # We want to be able to put memory into all 4 nodes via hot-add operations,
>>   not only the nodes that 'survive' boot time initialization.  We could
>>   make a number of changes to ensure that all of the nodes in the initial
>>   configuration provided by the pHyp can be used, but this one appears to
>>   be the simplest, only using resources requested by the pHyp at boot --
>>   even if those resource are not used immediately.
> 
> I don't think that's what the patch does. It just marks 32 (!?) nodes as
> online. Or if you're talking about reverting 3af229f2071f that leaves
> you with 256 possible nodes. Both of which are wasteful> > The right fix is to make sure any nodes which are present at boot remain
> in the possible map, even if they don't have memory/CPUs assigned at
> boot.

Okay, I can try to insert code that extracts all of the nodes from the
ibm,associativity-lookup-arrays property and merge them with the nodes
put into the online map from the CPUs that were found previously during
boot of the powerpc code.

> What does your device tree look like? Can you send us the output of:
> 
>  $ lsprop /proc/device-tree

See attachment 'device-tree.log'.  Note though that this boot of my test
system only has 2 nodes, 0 and 2.

> 
> cheers
>
Michael Ellerman June 6, 2017, 9:48 a.m. UTC | #22
Michael Bringmann <mwb@linux.vnet.ibm.com> writes:
> On 06/01/2017 04:36 AM, Michael Ellerman wrote:
>> Do you actually see mention of nodes 0 and 8 in the dmesg?
>
> When the 'numa.c' code is built with debug messages, and the system was
> given that configuration by pHyp, yes, I did.
>
>> What does it say?
>
> The debug message for each core thread would be something like,
>
>     removing cpu 64 from node 0
>     adding cpu 64 to node 8
>
> repeated for all 8 threads of the CPU, and usually with the messages
> for all of the CPUs coming out intermixed on the console/dmesg log.

OK. I meant what do you see at boot.

I'm curious how we're discovering node 0 and 8 at all if neither has any
memory or CPUs assigned at boot.

>> Right. So it's not that you're hot adding memory into a previously
>> unseen node as you implied in earlier mails.
>
> In the sense that the nodes were defined in the device tree, that is correct.

Where are they defined in the device tree? That's what I'm trying to understand.


> In the sense that those nodes are currently deleted from node_possible_map in
> 'numa.c' by the instruction 'node_and(node_possible_map,node_possible_map,
> node_online_map);', the nodes are no longer available to place memory or CPU.

Yeah I understand that part.

> Okay, I can try to insert code that extracts all of the nodes from the
> ibm,associativity-lookup-arrays property and merge them with the nodes
> put into the online map from the CPUs that were found previously during
> boot of the powerpc code.

Hmm, will that work?

Looking at PAPR it's not clear to me that it will work for nodes that
have no memory assigned at boot.

  This property is used to duplicate the function of the
  “ibm,associativity” property in a /memory node. Each “assigned” LMB
  represented has an index valued between 0 and M-1 which is used as in
  index into this table to select which associativity list to use for
  the LMB. “unassigned” LMBs are place holders for potential DLPAR
  additions, for which the associativity list index is meaningless and
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  is given the reserved value of -1. This static property, need only
  contain values relevant for the LMBs presented in the
  “ibm,dynamicreconfiguration-memory” node; for a dynamic LPAR addition
  of a new LMB, the device tree fragment reported by the
  ibm,configure-connector RTAS function is a /memory node, with the
  inclusion of the “ibm,associativity” device tree property defined in
  Section C.6.2.2‚ “Properties of the Children of Root‚” on page 1059.

>> What does your device tree look like? Can you send us the output of:
>> 
>>  $ lsprop /proc/device-tree

Thanks. I forgot that lsprop will truncate long properties, I actually
wanted to see all of the ibm,dynamic-memory property.

But looking at the code I see the only place we set a nid online is if
there is a CPU assigned to it:

static int __init parse_numa_properties(void)
{
...
	for_each_present_cpu(i) {
        	...
		cpu = of_get_cpu_node(i, NULL);
		nid = of_node_to_nid_single(cpu);
                ...
		node_set_online(nid);
	}

Or for memory nodes (same function):

	for_each_node_by_type(memory, "memory") {
        	...
		nid = of_node_to_nid_single(memory);
                ...
		node_set_online(nid);
                ...
	}

Or for entries in ibm,dynamic-memory that are assigned:

static void __init parse_drconf_memory(struct device_node *memory)
{
	...
	for (; n != 0; --n) {
        	...
		/* skip this block if the reserved bit is set in flags (0x80)
		   or if the block is not assigned to this partition (0x8) */
		if ((drmem.flags & DRCONF_MEM_RESERVED)
		    || !(drmem.flags & DRCONF_MEM_ASSIGNED))
			continue;

		...
		do {
                	...
			nid = of_drconf_to_nid_single(&drmem, &aa);
			node_set_online(nid);
                        ...
		} while (--ranges);
	}
}


So I don't see from that how we can even be aware that node 0 and 8
exist at boot based on that. Maybe there's another path I'm missing
though.

cheers
Michael Bringmann June 6, 2017, 4:16 p.m. UTC | #23
On 06/06/2017 04:48 AM, Michael Ellerman wrote:
> Michael Bringmann <mwb@linux.vnet.ibm.com> writes:
>> On 06/01/2017 04:36 AM, Michael Ellerman wrote:
>>> Do you actually see mention of nodes 0 and 8 in the dmesg?
>>
>> When the 'numa.c' code is built with debug messages, and the system was
>> given that configuration by pHyp, yes, I did.
>>
>>> What does it say?
>>
>> The debug message for each core thread would be something like,
>>
>>     removing cpu 64 from node 0
>>     adding cpu 64 to node 8
>>
>> repeated for all 8 threads of the CPU, and usually with the messages
>> for all of the CPUs coming out intermixed on the console/dmesg log.
> 
> OK. I meant what do you see at boot.

Here is an example with nodes 0,2,6,7, node 0 starts out empty:

[    0.000000] Initmem setup node 0
[    0.000000]   NODE_DATA [mem 0x3bff7d6300-0x3bff7dffff]
[    0.000000]     NODE_DATA(0) on node 7
[    0.000000] Initmem setup node 2 [mem 0x00000000-0x13ffffffff]
[    0.000000]   NODE_DATA [mem 0x13ffff6300-0x13ffffffff]
[    0.000000] Initmem setup node 6 [mem 0x1400000000-0x34afffffff]
[    0.000000]   NODE_DATA [mem 0x34afff6300-0x34afffffff]
[    0.000000] Initmem setup node 7 [mem 0x34b0000000-0x3bffffffff]
[    0.000000]   NODE_DATA [mem 0x3bff7cc600-0x3bff7d62ff]

[    0.000000] Zone ranges:
[    0.000000]   DMA      [mem 0x0000000000000000-0x0000003bffffffff]
[    0.000000]   DMA32    empty
[    0.000000]   Normal   empty
[    0.000000] Movable zone start for each node
[    0.000000] Early memory node ranges
[    0.000000]   node   2: [mem 0x0000000000000000-0x00000013ffffffff]
[    0.000000]   node   6: [mem 0x0000001400000000-0x00000034afffffff]
[    0.000000]   node   7: [mem 0x00000034b0000000-0x0000003bffffffff]
[    0.000000] Could not find start_pfn for node 0
[    0.000000] Initmem setup node 0 [mem 0x0000000000000000-0x0000000000000000]
[    0.000000] Initmem setup node 2 [mem 0x0000000000000000-0x00000013ffffffff]
[    0.000000] Initmem setup node 6 [mem 0x0000001400000000-0x00000034afffffff]
[    0.000000] Initmem setup node 7 [mem 0x00000034b0000000-0x0000003bffffffff]
[    0.000000] percpu: Embedded 3 pages/cpu @c000003bf8000000 s155672 r0 d40936 u262144
[    0.000000] Built 4 zonelists in Node order, mobility grouping on.  Total pages: 3928320

and,

[root@ltcalpine2-lp20 ~]# numactl --hardware
available: 4 nodes (0,2,6-7)
node 0 cpus:
node 0 size: 0 MB
node 0 free: 0 MB
node 2 cpus: 16 17 18 19 20 21 22 23 32 33 34 35 36 37 38 39 56 57 58 59 60 61 62 63
node 2 size: 81792 MB
node 2 free: 81033 MB
node 6 cpus: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 40 41 42 43 44 45 46 47
node 6 size: 133743 MB
node 6 free: 133097 MB
node 7 cpus: 48 49 50 51 52 53 54 55
node 7 size: 29877 MB
node 7 free: 29599 MB
node distances:
node   0   2   6   7
  0:  10  40  40  40
  2:  40  10  40  40
  6:  40  40  10  20
  7:  40  40  20  10
[root@ltcalpine2-lp20 ~]#

> 
> I'm curious how we're discovering node 0 and 8 at all if neither has any
> memory or CPUs assigned at boot.

Both are in the memory associativity lookup arrays.  And we are circling
back to the 

> 
>>> Right. So it's not that you're hot adding memory into a previously
>>> unseen node as you implied in earlier mails.
>>
>> In the sense that the nodes were defined in the device tree, that is correct.
> 
> Where are they defined in the device tree? That's what I'm trying to understand.

The nodes for memory are defined one time in "ibm,associativity-lookup-arrays".
I wish that there was an official set of node properties in the device-tree,
instead of having them be the values of other properties.

> 
>> In the sense that those nodes are currently deleted from node_possible_map in
>> 'numa.c' by the instruction 'node_and(node_possible_map,node_possible_map,
>> node_online_map);', the nodes are no longer available to place memory or CPU.
> 
> Yeah I understand that part.
> 
>> Okay, I can try to insert code that extracts all of the nodes from the
>> ibm,associativity-lookup-arrays property and merge them with the nodes
>> put into the online map from the CPUs that were found previously during
>> boot of the powerpc code.
> 
> Hmm, will that work?

The nodes are defined in the associativity lookup array, so they have at least
been reserved for us by the pHyp.  On the other hand, if we are only to use
nodes that have resources at boot, why are there extra node values specified?

What I am not 100% clear on -- and why I preferred letting all possible nodes
originally defined, still be possible for subsequent hot-add operations -- is
whether the nodes to be used for hot-added CPUs would always be a subset of
the nodes used for hot-added memory.

* The hot-added CPUs in Shared CPU configurations may be mapped to nodes by
  the value returned to the kernel by the VPHN hcall.

* So far in my tests, this has not been a problem, but I could not be positive
  from the PAPR.

> 
> Looking at PAPR it's not clear to me that it will work for nodes that
> have no memory assigned at boot.
> 
>   This property is used to duplicate the function of the
>   “ibm,associativity” property in a /memory node. Each “assigned” LMB
>   represented has an index valued between 0 and M-1 which is used as in
>   index into this table to select which associativity list to use for
>   the LMB. “unassigned” LMBs are place holders for potential DLPAR
>   additions, for which the associativity list index is meaningless and
>              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>   is given the reserved value of -1. This static property, need only
>   contain values relevant for the LMBs presented in the
>   “ibm,dynamicreconfiguration-memory” node; for a dynamic LPAR addition
>   of a new LMB, the device tree fragment reported by the
>   ibm,configure-connector RTAS function is a /memory node, with the
>   inclusion of the “ibm,associativity” device tree property defined in
>   Section C.6.2.2‚ “Properties of the Children of Root‚” on page 1059.

I don't see any place that builds new /memory nodes in conjunction with
hot-added memory.  The code for powerpc treats the definitions provided
by 'ibm,dynamic-reconfiguration-memory' as the primary reference wherever
hot-added memory comes into play.  It looks like the '/memory' properties
are backups or used for the 'pseries' according to one comment.

> 
>>> What does your device tree look like? Can you send us the output of:
>>>
>>>  $ lsprop /proc/device-tree
> 
> Thanks. I forgot that lsprop will truncate long properties, I actually
> wanted to see all of the ibm,dynamic-memory property.
> 
> But looking at the code I see the only place we set a nid online is if
> there is a CPU assigned to it:
> 
> static int __init parse_numa_properties(void)
> {
> ...
> 	for_each_present_cpu(i) {
>         	...
> 		cpu = of_get_cpu_node(i, NULL);
> 		nid = of_node_to_nid_single(cpu);
>                 ...
> 		node_set_online(nid);
> 	}
> 
> Or for memory nodes (same function):
> 
> 	for_each_node_by_type(memory, "memory") {
>         	...
> 		nid = of_node_to_nid_single(memory);
>                 ...
> 		node_set_online(nid);
>                 ...
> 	}
> 
> Or for entries in ibm,dynamic-memory that are assigned:
> 
> static void __init parse_drconf_memory(struct device_node *memory)
> {
> 	...
> 	for (; n != 0; --n) {
>         	...
> 		/* skip this block if the reserved bit is set in flags (0x80)
> 		   or if the block is not assigned to this partition (0x8) */
> 		if ((drmem.flags & DRCONF_MEM_RESERVED)
> 		    || !(drmem.flags & DRCONF_MEM_ASSIGNED))
> 			continue;
> 
> 		...
> 		do {
>                 	...
> 			nid = of_drconf_to_nid_single(&drmem, &aa);
> 			node_set_online(nid);
>                         ...
> 		} while (--ranges);
> 	}
> }
> 
> 
> So I don't see from that how we can even be aware that node 0 and 8
> exist at boot based on that. Maybe there's another path I'm missing
> though.

We don't 'fill in' the nodes, but we are aware that they exist per the 'ibm,associativity-lookup-arrays'
or the responsed provided by the pHyp to the VPHN hcall.  We don't associate either of these resources
to them, but does that mean that the nodes do not exist?

The code currently says that only nodes booted with resources "exist" i.e. it can't hot-add new nodes,
but is that a just a problem of the kernel implementation?  I think so.

However, this is the problem for users running systems that hot-add a lot of resources are concerned.

They see the associativity arrays (and 'hypinfo' table internal to the pHyp), and they ask why the
kernel only records new resources into the boot-time nodes, while pHyp appears to distribute across
all of the memory nodes specified to the LPAR of the kernel at boot.

I think that all of those nodes specified by the pHyp should exist to the kernel, and that we are
trying to find the best way to make them visible here.

> 
> cheers
> 
>
Michael Ellerman June 7, 2017, 12:08 p.m. UTC | #24
Michael Bringmann <mwb@linux.vnet.ibm.com> writes:

> On 06/06/2017 04:48 AM, Michael Ellerman wrote:
>> Michael Bringmann <mwb@linux.vnet.ibm.com> writes:
>>> On 06/01/2017 04:36 AM, Michael Ellerman wrote:
>>>> Do you actually see mention of nodes 0 and 8 in the dmesg?
>>>
>>> When the 'numa.c' code is built with debug messages, and the system was
>>> given that configuration by pHyp, yes, I did.
>>>
>>>> What does it say?
>>>
>>> The debug message for each core thread would be something like,
>>>
>>>     removing cpu 64 from node 0
>>>     adding cpu 64 to node 8
>>>
>>> repeated for all 8 threads of the CPU, and usually with the messages
>>> for all of the CPUs coming out intermixed on the console/dmesg log.
>> 
>> OK. I meant what do you see at boot.
>
> Here is an example with nodes 0,2,6,7, node 0 starts out empty:
>
> [    0.000000] Initmem setup node 0
> [    0.000000]   NODE_DATA [mem 0x3bff7d6300-0x3bff7dffff]
> [    0.000000]     NODE_DATA(0) on node 7
> [    0.000000] Initmem setup node 2 [mem 0x00000000-0x13ffffffff]
> [    0.000000]   NODE_DATA [mem 0x13ffff6300-0x13ffffffff]
> [    0.000000] Initmem setup node 6 [mem 0x1400000000-0x34afffffff]
> [    0.000000]   NODE_DATA [mem 0x34afff6300-0x34afffffff]
> [    0.000000] Initmem setup node 7 [mem 0x34b0000000-0x3bffffffff]
> [    0.000000]   NODE_DATA [mem 0x3bff7cc600-0x3bff7d62ff]
>
> [    0.000000] Zone ranges:
> [    0.000000]   DMA      [mem 0x0000000000000000-0x0000003bffffffff]
> [    0.000000]   DMA32    empty
> [    0.000000]   Normal   empty
> [    0.000000] Movable zone start for each node
> [    0.000000] Early memory node ranges
> [    0.000000]   node   2: [mem 0x0000000000000000-0x00000013ffffffff]
> [    0.000000]   node   6: [mem 0x0000001400000000-0x00000034afffffff]
> [    0.000000]   node   7: [mem 0x00000034b0000000-0x0000003bffffffff]
> [    0.000000] Could not find start_pfn for node 0
> [    0.000000] Initmem setup node 0 [mem 0x0000000000000000-0x0000000000000000]
> [    0.000000] Initmem setup node 2 [mem 0x0000000000000000-0x00000013ffffffff]
> [    0.000000] Initmem setup node 6 [mem 0x0000001400000000-0x00000034afffffff]
> [    0.000000] Initmem setup node 7 [mem 0x00000034b0000000-0x0000003bffffffff]
> [    0.000000] percpu: Embedded 3 pages/cpu @c000003bf8000000 s155672 r0 d40936 u262144
> [    0.000000] Built 4 zonelists in Node order, mobility grouping on.  Total pages: 3928320
>
> and,
>
> [root@ltcalpine2-lp20 ~]# numactl --hardware
> available: 4 nodes (0,2,6-7)
> node 0 cpus:
> node 0 size: 0 MB
> node 0 free: 0 MB
> node 2 cpus: 16 17 18 19 20 21 22 23 32 33 34 35 36 37 38 39 56 57 58 59 60 61 62 63
> node 2 size: 81792 MB
> node 2 free: 81033 MB
> node 6 cpus: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 40 41 42 43 44 45 46 47
> node 6 size: 133743 MB
> node 6 free: 133097 MB
> node 7 cpus: 48 49 50 51 52 53 54 55
> node 7 size: 29877 MB
> node 7 free: 29599 MB
> node distances:
> node   0   2   6   7
>   0:  10  40  40  40
>   2:  40  10  40  40
>   6:  40  40  10  20
>   7:  40  40  20  10
> [root@ltcalpine2-lp20 ~]#

What kernel is that running?

And can you show me the full ibm,dynamic-memory and lookup-arrays
properties for that system?

cheers
Michael Bringmann June 7, 2017, 5:17 p.m. UTC | #25
Red Hat Enterprise Linux Server 7.3 (Maipo)
Kernel 4.12.0-rc3.wi91275_054c_060106.ppc64le+ on an ppc64le

ltcalpine2-lp20 login: root
Password: 
Last login: Wed Jun  7 11:03:12 from oc1554177480.austin.ibm.com
[root@ltcalpine2-lp20 ~]# numactl -H
available: 3 nodes (0,2-3)
node 0 cpus:
node 0 size: 0 MB
node 0 free: 0 MB
node 2 cpus: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 48 49 50 51 52 53 54 55
node 2 size: 188668 MB
node 2 free: 187903 MB
node 3 cpus: 40 41 42 43 44 45 46 47 56 57 58 59 60 61 62 63
node 3 size: 56261 MB
node 3 free: 55324 MB
node distances:
node   0   2   3 
  0:  10  40  40 
  2:  40  10  20 
  3:  40  20  10 
[root@ltcalpine2-lp20 ~]# cd /proc/device-tree/ibm,dynamic-reconfiguration-memory
[root@ltcalpine2-lp20 ibm,dynamic-reconfiguration-memory]# lsprop ibm,dynamic-memory
ibm,dynamic-memory
		 0000059e 00000000 20000000 80000002
		 00000000 00000001 00000008 00000000
		 30000000 80000003 00000000 00000001
		 00000008 00000000 40000000 80000004
		 00000000 00000001 00000008 00000000
		 50000000 80000005 00000000 00000001
		 00000008 00000000 60000000 80000006
		 00000000 00000001 00000008 00000000
		 [34516 bytes total]
[root@ltcalpine2-lp20 ibm,dynamic-reconfiguration-memory]# lsprop ibm,associativity-lookup-arrays
ibm,associativity-lookup-arrays
		 00000003 00000004 00000000 00000000
		 00000000 00000000 00000000 00000001
		 00000002 00000002 00000000 00000001
		 00000003 00000003
[root@ltcalpine2-lp20 ibm,dynamic-reconfiguration-memory]# cat ~/dmesg.log
[    0.000000] Linux version 4.12.0-rc3.wi91275_054c_060106.ppc64le+ (root@ltcalpine2-lp20.aus.stglabs.ibm.com) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC) ) #28 SMP Tue Jun 6 16:05:01 EDT 2017
[    0.000000] Found initrd at 0xc00000000ce00000:0xc00000000eeb4b12
[    0.000000] Using pSeries machine description
[    0.000000] bootconsole [udbg0] enabled
[    0.000000] Partition configured for 256 cpus.
[    0.000000] CPU maps initialized for 8 threads per core
[    0.000000]  (thread shift is 3)
[    0.000000] Freed 4784128 bytes for unused pacas
[    0.000000] -----------------------------------------------------
[    0.000000] ppc64_pft_size    = 0x20
[    0.000000] phys_mem_size     = 0x3c00000000
[    0.000000] dcache_bsize      = 0x80
[    0.000000] icache_bsize      = 0x80
[    0.000000] cpu_features      = 0x27fc7aec18500249
[    0.000000]   possible        = 0x7fffffff18500649
[    0.000000]   always          = 0x0000000018100040
[    0.000000] cpu_user_features = 0xdc0065c2 0xef000000
[    0.000000] mmu_features      = 0x7c006001
[    0.000000] firmware_features = 0x00000003c45bfc57
[    0.000000] htab_hash_mask    = 0x1ffffff
[    0.000000] -----------------------------------------------------
[    0.000000] numa:   NODE_DATA [mem 0x3bff7d5f00-0x3bff7dffff]
[    0.000000] numa:     NODE_DATA(0) on node 3
[    0.000000] numa:   NODE_DATA [mem 0x2e1fff5f00-0x2e1fffffff]
[    0.000000] numa:   NODE_DATA [mem 0x3bff7cbe00-0x3bff7d5eff]
[    0.000000] Section 15357 and 15359 (node 3) have a circular dependency on usemap and pgdat allocations
[    0.000000] PPC64 nvram contains 15360 bytes
[    0.000000] Top of RAM: 0x3c00000000, Total RAM: 0x3c00000000
[    0.000000] Memory hole size: 0MB
[    0.000000] Zone ranges:
[    0.000000]   DMA      [mem 0x0000000000000000-0x0000003bffffffff]
[    0.000000]   DMA32    empty
[    0.000000]   Normal   empty
[    0.000000] Movable zone start for each node
[    0.000000] Early memory node ranges
[    0.000000]   node   2: [mem 0x0000000000000000-0x0000002e1fffffff]
[    0.000000]   node   3: [mem 0x0000002e20000000-0x0000003bffffffff]
[    0.000000] Could not find start_pfn for node 0
[    0.000000] Initmem setup node 0 [mem 0x0000000000000000-0x0000000000000000]
[    0.000000] On node 0 totalpages: 0
[    0.000000] Initmem setup node 2 [mem 0x0000000000000000-0x0000002e1fffffff]
[    0.000000] On node 2 totalpages: 3022848
[    0.000000]   DMA zone: 2952 pages used for memmap
[    0.000000]   DMA zone: 0 pages reserved
[    0.000000]   DMA zone: 3022848 pages, LIFO batch:1
[    0.000000] Initmem setup node 3 [mem 0x0000002e20000000-0x0000003bffffffff]
[    0.000000] On node 3 totalpages: 909312
[    0.000000]   DMA zone: 888 pages used for memmap
[    0.000000]   DMA zone: 0 pages reserved
[    0.000000]   DMA zone: 909312 pages, LIFO batch:1
[root@ltcalpine2-lp20 ibm,dynamic-reconfiguration-memory]#
Welcome to SUSE Linux Enterprise Server 12 SP3 Beta2 (ppc64le) - Kernel 4.4.63-2.1.wi91275.sp3.055a_27-default (hvc0).


ltcalpine2-lp9 login: root
Password: 
Last login: Mon Jun  5 11:43:45 from 9.53.92.157
ltcalpine2-lp9:ß # numactl -H
available: 4 nodes (0-1,6-7)
node 0 cpus:
node 0 size: 20512 MB
node 0 free: 20371 MB
node 1 cpus:
node 1 size: 2815 MB
node 1 free: 2706 MB
node 6 cpus: 0 1 2 3 4 5 6 7
node 6 size: 134783 MB
node 6 free: 134068 MB
node 7 cpus:
node 7 size: 87210 MB
node 7 free: 87102 MB
node distances:
node   0   1   6   7 
  0:  10  20  40  40 
  1:  20  10  40  40 
  6:  40  40  10  20 
  7:  40  40  20  10 
ltcalpine2-lp9:~ # cd 
ltcalpine2-lp9:~ # cd /proc/device-tree/ibm,dynamic-reconfiguration-memory
ltcalpine2-lp9:/proc/device-tree/ibm,dynamic-reconfiguration-memory # ls
ibm,associativity-lookup-arrays  ibm,memory-flags-mask         linux,phandle
ibm,dynamic-memory               ibm,memory-preservation-time  name
ibm,lmb-size                     ibm,phandle
ltcalpine2-lp9:/proc/device-tree/ibm,dynamic-reconfiguration-memory # lsprop ibm,associativity-lookup-arrays
ibm,associativity-lookup-arrays
		 00000004 00000004 00000000 00000000 00000000 00000000
		 00000000 00000000 00000001 00000001 00000000 00000003
		 00000006 00000006 00000000 00000003 00000007 00000007
ltcalpine2-lp9:/proc/device-tree/ibm,dynamic-reconfiguration-memory # lsprop ibm,dynamic-memory
ibm,dynamic-memory
		 0000059e 00000000 20000000 80000002
		 00000000 00000000 00000008 00000000
		 30000000 80000003 00000000 00000000
		 00000008 00000000 40000000 80000004
		 00000000 00000000 00000008 00000000
		 50000000 80000005 00000000 00000000
		 00000008 00000000 60000000 80000006
		 00000000 00000000 00000008 00000000
		 70000000 80000007 00000000 00000000
		 00000008 00000000 80000000 80000008
		 00000000 00000000 00000008 00000000
		 90000000 80000009 00000000 00000000
		 00000008 00000000 a0000000 8000000a
		 00000000 00000000 00000008 00000000
		 b0000000 8000000b 00000000 00000000
		 00000008 00000000 c0000000 8000000c
		 00000000 00000000 00000008 00000000
		 d0000000 8000000d 00000000 00000000
		 00000008 00000000 e0000000 8000000e
		 00000000 00000000 00000008 00000000
		 f0000000 8000000f 00000000 00000000
		 00000008 00000001 00000000 80000010
		 00000000 00000000 00000008 00000001
		 10000000 80000011 00000000 00000000
		 00000008 00000001 20000000 80000012
		 00000000 00000000 00000008 00000001
		 30000000 80000013 00000000 00000000
		 00000008 00000001 40000000 80000014
		 00000000 00000000 00000008 00000001
		 50000000 80000015 00000000 00000000
		 00000008 00000001 60000000 80000016
		 00000000 00000000 00000008 00000001
		 70000000 80000017 00000000 00000000
		 00000008 00000001 80000000 80000018
		 00000000 00000000 00000008 00000001
		 90000000 80000019 00000000 00000000
		 00000008 00000001 a0000000 8000001a
		 00000000 00000000 00000008 00000001
		 b0000000 8000001b 00000000 00000000
		 00000008 00000001 c0000000 8000001c
		 00000000 00000000 00000008 00000001
		 d0000000 8000001d 00000000 00000000
		 00000008 00000001 e0000000 8000001e
		 00000000 00000000 00000008 00000001
		 f0000000 8000001f 00000000 00000000
		 00000008 00000002 00000000 80000020
		 00000000 00000000 00000008 00000002
		 10000000 80000021 00000000 00000000
		 00000008 00000002 20000000 80000022
		 00000000 00000000 00000008 00000002
		 30000000 80000023 00000000 00000000
		 00000008 00000002 40000000 80000024
		 00000000 00000000 00000008 00000002
		 50000000 80000025 00000000 00000000
		 00000008 00000002 60000000 80000026
		 00000000 00000000 00000008 00000002
		 70000000 80000027 00000000 00000000
		 00000008 00000002 80000000 80000028
		 00000000 00000000 00000008 00000002
		 90000000 80000029 00000000 00000000
		 00000008 00000002 a0000000 8000002a
		 00000000 00000000 00000008 00000002
		 b0000000 8000002b 00000000 00000000
		 00000008 00000002 c0000000 8000002c
		 00000000 00000000 00000008 00000002
		 d0000000 8000002d 00000000 00000000
		 00000008 00000002 e0000000 8000002e
		 00000000 00000000 00000008 00000002
		 f0000000 8000002f 00000000 00000000
		 00000008 00000003 00000000 80000030
		 00000000 00000000 00000008 00000003
		 10000000 80000031 00000000 00000000
		 00000008 00000003 20000000 80000032
		 00000000 00000000 00000008 00000003
		 30000000 80000033 00000000 00000000
		 00000008 00000003 40000000 80000034
		 00000000 00000000 00000008 00000003
		 50000000 80000035 00000000 00000000
		 00000008 00000003 60000000 80000036
		 00000000 00000000 00000008 00000003
		 70000000 80000037 00000000 00000000
		 00000008 00000003 80000000 80000038
		 00000000 00000000 00000008 00000003
		 90000000 80000039 00000000 00000000
		 00000008 00000003 a0000000 8000003a
		 00000000 00000000 00000008 00000003
		 b0000000 8000003b 00000000 00000000
		 00000008 00000003 c0000000 8000003c
		 00000000 00000000 00000008 00000003
		 d0000000 8000003d 00000000 00000000
		 00000008 00000003 e0000000 8000003e
		 00000000 00000000 00000008 00000003
		 f0000000 8000003f 00000000 00000000
		 00000008 00000004 00000000 80000040
		 00000000 00000000 00000008 00000004
		 10000000 80000041 00000000 00000000
		 00000008 00000004 20000000 80000042
		 00000000 00000000 00000008 00000004
		 30000000 80000043 00000000 00000000
		 00000008 00000004 40000000 80000044
		 00000000 00000000 00000008 00000004
		 50000000 80000045 00000000 00000000
		 00000008 00000004 60000000 80000046
		 00000000 00000000 00000008 00000004
		 70000000 80000047 00000000 00000000
		 00000008 00000004 80000000 80000048
		 00000000 00000000 00000008 00000004
		 90000000 80000049 00000000 00000000
		 00000008 00000004 a0000000 8000004a
		 00000000 00000000 00000008 00000004
		 b0000000 8000004b 00000000 00000000
		 00000008 00000004 c0000000 8000004c
		 00000000 00000000 00000008 00000004
		 d0000000 8000004d 00000000 00000000
		 00000008 00000004 e0000000 8000004e
		 00000000 00000000 00000008 00000004
		 f0000000 8000004f 00000000 00000000
		 00000008 00000005 00000000 80000050
		 00000000 00000000 00000008 00000005
		 10000000 80000051 00000000 00000001
		 00000008 00000005 20000000 80000052
		 00000000 00000001 00000008 00000005
		 30000000 80000053 00000000 00000001
		 00000008 00000005 40000000 80000054
		 00000000 00000001 00000008 00000005
		 50000000 80000055 00000000 00000001
		 00000008 00000005 60000000 80000056
		 00000000 00000001 00000008 00000005
		 70000000 80000057 00000000 00000001
		 00000008 00000005 80000000 80000058
		 00000000 00000001 00000008 00000005
		 90000000 80000059 00000000 00000001
		 00000008 00000005 a0000000 8000005a
		 00000000 00000001 00000008 00000005
		 b0000000 8000005b 00000000 00000001
		 00000008 00000005 c0000000 8000005c
		 00000000 00000002 00000008 00000005
		 d0000000 8000005d 00000000 00000002
		 00000008 00000005 e0000000 8000005e
		 00000000 00000002 00000008 00000005
		 f0000000 8000005f 00000000 00000002
		 00000008 00000006 00000000 80000060
		 00000000 00000002 00000008 00000006
		 10000000 80000061 00000000 00000002
		 00000008 00000006 20000000 80000062
		 00000000 00000002 00000008 00000006
		 30000000 80000063 00000000 00000002
		 00000008 00000006 40000000 80000064
		 00000000 00000002 00000008 00000006
		 50000000 80000065 00000000 00000002
		 00000008 00000006 60000000 80000066
		 00000000 00000002 00000008 00000006
		 70000000 80000067 00000000 00000002
		 00000008 00000006 80000000 80000068
		 00000000 00000002 00000008 00000006
		 90000000 80000069 00000000 00000002
		 00000008 00000006 a0000000 8000006a
		 00000000 00000002 00000008 00000006
		 b0000000 8000006b 00000000 00000002
		 00000008 00000006 c0000000 8000006c
		 00000000 00000002 00000008 00000006
		 d0000000 8000006d 00000000 00000002
		 00000008 00000006 e0000000 8000006e
		 00000000 00000002 00000008 00000006
		 f0000000 8000006f 00000000 00000002
		 00000008 00000007 00000000 80000070
		 00000000 00000002 00000008 00000007
		 10000000 80000071 00000000 00000002
		 00000008 00000007 20000000 80000072
		 00000000 00000002 00000008 00000007
		 30000000 80000073 00000000 00000002
		 00000008 00000007 40000000 80000074
		 00000000 00000002 00000008 00000007
		 50000000 80000075 00000000 00000002
		 00000008 00000007 60000000 80000076
		 00000000 00000002 00000008 00000007
		 70000000 80000077 00000000 00000002
		 00000008 00000007 80000000 80000078
		 00000000 00000002 00000008 00000007
		 90000000 80000079 00000000 00000002
		 00000008 00000007 a0000000 8000007a
		 00000000 00000002 00000008 00000007
		 b0000000 8000007b 00000000 00000002
		 00000008 00000007 c0000000 8000007c
		 00000000 00000002 00000008 00000007
		 d0000000 8000007d 00000000 00000002
		 00000008 00000007 e0000000 8000007e
		 00000000 00000002 00000008 00000007
		 f0000000 8000007f 00000000 00000002
		 00000008 00000008 00000000 80000080
		 00000000 00000002 00000008 00000008
		 10000000 80000081 00000000 00000002
		 00000008 00000008 20000000 80000082
		 00000000 00000002 00000008 00000008
		 30000000 80000083 00000000 00000002
		 00000008 00000008 40000000 80000084
		 00000000 00000002 00000008 00000008
		 50000000 80000085 00000000 00000002
		 00000008 00000008 60000000 80000086
		 00000000 00000002 00000008 00000008
		 70000000 80000087 00000000 00000002
		 00000008 00000008 80000000 80000088
		 00000000 00000002 00000008 00000008
		 90000000 80000089 00000000 00000002
		 00000008 00000008 a0000000 8000008a
		 00000000 00000002 00000008 00000008
		 b0000000 8000008b 00000000 00000002
		 00000008 00000008 c0000000 8000008c
		 00000000 00000002 00000008 00000008
		 d0000000 8000008d 00000000 00000002
		 00000008 00000008 e0000000 8000008e
		 00000000 00000002 00000008 00000008
		 f0000000 8000008f 00000000 00000002
		 00000008 00000009 00000000 80000090
		 00000000 00000002 00000008 00000009
		 10000000 80000091 00000000 00000002
		 00000008 00000009 20000000 80000092
		 00000000 00000002 00000008 00000009
		 30000000 80000093 00000000 00000002
		 00000008 00000009 40000000 80000094
		 00000000 00000002 00000008 00000009
		 50000000 80000095 00000000 00000002
		 00000008 00000009 60000000 80000096
		 00000000 00000002 00000008 00000009
		 70000000 80000097 00000000 00000002
		 00000008 00000009 80000000 80000098
		 00000000 00000002 00000008 00000009
		 90000000 80000099 00000000 00000002
		 00000008 00000009 a0000000 8000009a
		 00000000 00000002 00000008 00000009
		 b0000000 8000009b 00000000 00000002
		 00000008 00000009 c0000000 8000009c
		 00000000 00000002 00000008 00000009
		 d0000000 8000009d 00000000 00000002
		 00000008 00000009 e0000000 8000009e
		 00000000 00000002 00000008 00000009
		 f0000000 8000009f 00000000 00000002
		 00000008 0000000a 00000000 800000a0
		 00000000 00000002 00000008 0000000a
		 10000000 800000a1 00000000 00000002
		 00000008 0000000a 20000000 800000a2
		 00000000 00000002 00000008 0000000a
		 30000000 800000a3 00000000 00000002
		 00000008 0000000a 40000000 800000a4
		 00000000 00000002 00000008 0000000a
		 50000000 800000a5 00000000 00000002
		 00000008 0000000a 60000000 800000a6
		 00000000 00000002 00000008 0000000a
		 70000000 800000a7 00000000 00000002
		 00000008 0000000a 80000000 800000a8
		 00000000 00000002 00000008 0000000a
		 90000000 800000a9 00000000 00000002
		 00000008 0000000a a0000000 800000aa
		 00000000 00000002 00000008 0000000a
		 b0000000 800000ab 00000000 00000002
		 00000008 0000000a c0000000 800000ac
		 00000000 00000002 00000008 0000000a
		 d0000000 800000ad 00000000 00000002
		 00000008 0000000a e0000000 800000ae
		 00000000 00000002 00000008 0000000a
		 f0000000 800000af 00000000 00000002
		 00000008 0000000b 00000000 800000b0
		 00000000 00000002 00000008 0000000b
		 10000000 800000b1 00000000 00000002
		 00000008 0000000b 20000000 800000b2
		 00000000 00000002 00000008 0000000b
		 30000000 800000b3 00000000 00000002
		 00000008 0000000b 40000000 800000b4
		 00000000 00000002 00000008 0000000b
		 50000000 800000b5 00000000 00000002
		 00000008 0000000b 60000000 800000b6
		 00000000 00000002 00000008 0000000b
		 70000000 800000b7 00000000 00000002
		 00000008 0000000b 80000000 800000b8
		 00000000 00000002 00000008 0000000b
		 90000000 800000b9 00000000 00000002
		 00000008 0000000b a0000000 800000ba
		 00000000 00000002 00000008 0000000b
		 b0000000 800000bb 00000000 00000002
		 00000008 0000000b c0000000 800000bc
		 00000000 00000002 00000008 0000000b
		 d0000000 800000bd 00000000 00000002
		 00000008 0000000b e0000000 800000be
		 00000000 00000002 00000008 0000000b
		 f0000000 800000bf 00000000 00000002
		 00000008 0000000c 00000000 800000c0
		 00000000 00000002 00000008 0000000c
		 10000000 800000c1 00000000 00000002
		 00000008 0000000c 20000000 800000c2
		 00000000 00000002 00000008 0000000c
		 30000000 800000c3 00000000 00000002
		 00000008 0000000c 40000000 800000c4
		 00000000 00000002 00000008 0000000c
		 50000000 800000c5 00000000 00000002
		 00000008 0000000c 60000000 800000c6
		 00000000 00000002 00000008 0000000c
		 70000000 800000c7 00000000 00000002
		 00000008 0000000c 80000000 800000c8
		 00000000 00000002 00000008 0000000c
		 90000000 800000c9 00000000 00000002
		 00000008 0000000c a0000000 800000ca
		 00000000 00000002 00000008 0000000c
		 b0000000 800000cb 00000000 00000002
		 00000008 0000000c c0000000 800000cc
		 00000000 00000002 00000008 0000000c
		 d0000000 800000cd 00000000 00000002
		 00000008 0000000c e0000000 800000ce
		 00000000 00000002 00000008 0000000c
		 f0000000 800000cf 00000000 00000002
		 00000008 0000000d 00000000 800000d0
		 00000000 00000002 00000008 0000000d
		 10000000 800000d1 00000000 00000002
		 00000008 0000000d 20000000 800000d2
		 00000000 00000002 00000008 0000000d
		 30000000 800000d3 00000000 00000002
		 00000008 0000000d 40000000 800000d4
		 00000000 00000002 00000008 0000000d
		 50000000 800000d5 00000000 00000002
		 00000008 0000000d 60000000 800000d6
		 00000000 00000002 00000008 0000000d
		 70000000 800000d7 00000000 00000002
		 00000008 0000000d 80000000 800000d8
		 00000000 00000002 00000008 0000000d
		 90000000 800000d9 00000000 00000002
		 00000008 0000000d a0000000 800000da
		 00000000 00000002 00000008 0000000d
		 b0000000 800000db 00000000 00000002
		 00000008 0000000d c0000000 800000dc
		 00000000 00000002 00000008 0000000d
		 d0000000 800000dd 00000000 00000002
		 00000008 0000000d e0000000 800000de
		 00000000 00000002 00000008 0000000d
		 f0000000 800000df 00000000 00000002
		 00000008 0000000e 00000000 800000e0
		 00000000 00000002 00000008 0000000e
		 10000000 800000e1 00000000 00000002
		 00000008 0000000e 20000000 800000e2
		 00000000 00000002 00000008 0000000e
		 30000000 800000e3 00000000 00000002
		 00000008 0000000e 40000000 800000e4
		 00000000 00000002 00000008 0000000e
		 50000000 800000e5 00000000 00000002
		 00000008 0000000e 60000000 800000e6
		 00000000 00000002 00000008 0000000e
		 70000000 800000e7 00000000 00000002
		 00000008 0000000e 80000000 800000e8
		 00000000 00000002 00000008 0000000e
		 90000000 800000e9 00000000 00000002
		 00000008 0000000e a0000000 800000ea
		 00000000 00000002 00000008 0000000e
		 b0000000 800000eb 00000000 00000002
		 00000008 0000000e c0000000 800000ec
		 00000000 00000002 00000008 0000000e
		 d0000000 800000ed 00000000 00000002
		 00000008 0000000e e0000000 800000ee
		 00000000 00000002 00000008 0000000e
		 f0000000 800000ef 00000000 00000002
		 00000008 0000000f 00000000 800000f0
		 00000000 00000002 00000008 0000000f
		 10000000 800000f1 00000000 00000002
		 00000008 0000000f 20000000 800000f2
		 00000000 00000002 00000008 0000000f
		 30000000 800000f3 00000000 00000002
		 00000008 0000000f 40000000 800000f4
		 00000000 00000002 00000008 0000000f
		 50000000 800000f5 00000000 00000002
		 00000008 0000000f 60000000 800000f6
		 00000000 00000002 00000008 0000000f
		 70000000 800000f7 00000000 00000002
		 00000008 0000000f 80000000 800000f8
		 00000000 00000002 00000008 0000000f
		 90000000 800000f9 00000000 00000002
		 00000008 0000000f a0000000 800000fa
		 00000000 00000002 00000008 0000000f
		 b0000000 800000fb 00000000 00000002
		 00000008 0000000f c0000000 800000fc
		 00000000 00000002 00000008 0000000f
		 d0000000 800000fd 00000000 00000002
		 00000008 0000000f e0000000 800000fe
		 00000000 00000002 00000008 0000000f
		 f0000000 800000ff 00000000 00000002
		 00000008 00000010 00000000 80000100
		 00000000 00000002 00000008 00000010
		 10000000 80000101 00000000 00000002
		 00000008 00000010 20000000 80000102
		 00000000 00000002 00000008 00000010
		 30000000 80000103 00000000 00000002
		 00000008 00000010 40000000 80000104
		 00000000 00000002 00000008 00000010
		 50000000 80000105 00000000 00000002
		 00000008 00000010 60000000 80000106
		 00000000 00000002 00000008 00000010
		 70000000 80000107 00000000 00000002
		 00000008 00000010 80000000 80000108
		 00000000 00000002 00000008 00000010
		 90000000 80000109 00000000 00000002
		 00000008 00000010 a0000000 8000010a
		 00000000 00000002 00000008 00000010
		 b0000000 8000010b 00000000 00000002
		 00000008 00000010 c0000000 8000010c
		 00000000 00000002 00000008 00000010
		 d0000000 8000010d 00000000 00000002
		 00000008 00000010 e0000000 8000010e
		 00000000 00000002 00000008 00000010
		 f0000000 8000010f 00000000 00000002
		 00000008 00000011 00000000 80000110
		 00000000 00000002 00000008 00000011
		 10000000 80000111 00000000 00000002
		 00000008 00000011 20000000 80000112
		 00000000 00000002 00000008 00000011
		 30000000 80000113 00000000 00000002
		 00000008 00000011 40000000 80000114
		 00000000 00000002 00000008 00000011
		 50000000 80000115 00000000 00000002
		 00000008 00000011 60000000 80000116
		 00000000 00000002 00000008 00000011
		 70000000 80000117 00000000 00000002
		 00000008 00000011 80000000 80000118
		 00000000 00000002 00000008 00000011
		 90000000 80000119 00000000 00000002
		 00000008 00000011 a0000000 8000011a
		 00000000 00000002 00000008 00000011
		 b0000000 8000011b 00000000 00000002
		 00000008 00000011 c0000000 8000011c
		 00000000 00000002 00000008 00000011
		 d0000000 8000011d 00000000 00000002
		 00000008 00000011 e0000000 8000011e
		 00000000 00000002 00000008 00000011
		 f0000000 8000011f 00000000 00000002
		 00000008 00000012 00000000 80000120
		 00000000 00000002 00000008 00000012
		 10000000 80000121 00000000 00000002
		 00000008 00000012 20000000 80000122
		 00000000 00000002 00000008 00000012
		 30000000 80000123 00000000 00000002
		 00000008 00000012 40000000 80000124
		 00000000 00000002 00000008 00000012
		 50000000 80000125 00000000 00000002
		 00000008 00000012 60000000 80000126
		 00000000 00000002 00000008 00000012
		 70000000 80000127 00000000 00000002
		 00000008 00000012 80000000 80000128
		 00000000 00000002 00000008 00000012
		 90000000 80000129 00000000 00000002
		 00000008 00000012 a0000000 8000012a
		 00000000 00000002 00000008 00000012
		 b0000000 8000012b 00000000 00000002
		 00000008 00000012 c0000000 8000012c
		 00000000 00000002 00000008 00000012
		 d0000000 8000012d 00000000 00000002
		 00000008 00000012 e0000000 8000012e
		 00000000 00000002 00000008 00000012
		 f0000000 8000012f 00000000 00000002
		 00000008 00000013 00000000 80000130
		 00000000 00000002 00000008 00000013
		 10000000 80000131 00000000 00000002
		 00000008 00000013 20000000 80000132
		 00000000 00000002 00000008 00000013
		 30000000 80000133 00000000 00000002
		 00000008 00000013 40000000 80000134
		 00000000 00000002 00000008 00000013
		 50000000 80000135 00000000 00000002
		 00000008 00000013 60000000 80000136
		 00000000 00000002 00000008 00000013
		 70000000 80000137 00000000 00000002
		 00000008 00000013 80000000 80000138
		 00000000 00000002 00000008 00000013
		 90000000 80000139 00000000 00000002
		 00000008 00000013 a0000000 8000013a
		 00000000 00000002 00000008 00000013
		 b0000000 8000013b 00000000 00000002
		 00000008 00000013 c0000000 8000013c
		 00000000 00000002 00000008 00000013
		 d0000000 8000013d 00000000 00000002
		 00000008 00000013 e0000000 8000013e
		 00000000 00000002 00000008 00000013
		 f0000000 8000013f 00000000 00000002
		 00000008 00000014 00000000 80000140
		 00000000 00000002 00000008 00000014
		 10000000 80000141 00000000 00000002
		 00000008 00000014 20000000 80000142
		 00000000 00000002 00000008 00000014
		 30000000 80000143 00000000 00000002
		 00000008 00000014 40000000 80000144
		 00000000 00000002 00000008 00000014
		 50000000 80000145 00000000 00000002
		 00000008 00000014 60000000 80000146
		 00000000 00000002 00000008 00000014
		 70000000 80000147 00000000 00000002
		 00000008 00000014 80000000 80000148
		 00000000 00000002 00000008 00000014
		 90000000 80000149 00000000 00000002
		 00000008 00000014 a0000000 8000014a
		 00000000 00000002 00000008 00000014
		 b0000000 8000014b 00000000 00000002
		 00000008 00000014 c0000000 8000014c
		 00000000 00000002 00000008 00000014
		 d0000000 8000014d 00000000 00000002
		 00000008 00000014 e0000000 8000014e
		 00000000 00000002 00000008 00000014
		 f0000000 8000014f 00000000 00000002
		 00000008 00000015 00000000 80000150
		 00000000 00000002 00000008 00000015
		 10000000 80000151 00000000 00000002
		 00000008 00000015 20000000 80000152
		 00000000 00000002 00000008 00000015
		 30000000 80000153 00000000 00000002
		 00000008 00000015 40000000 80000154
		 00000000 00000002 00000008 00000015
		 50000000 80000155 00000000 00000002
		 00000008 00000015 60000000 80000156
		 00000000 00000002 00000008 00000015
		 70000000 80000157 00000000 00000002
		 00000008 00000015 80000000 80000158
		 00000000 00000002 00000008 00000015
		 90000000 80000159 00000000 00000002
		 00000008 00000015 a0000000 8000015a
		 00000000 00000002 00000008 00000015
		 b0000000 8000015b 00000000 00000002
		 00000008 00000015 c0000000 8000015c
		 00000000 00000002 00000008 00000015
		 d0000000 8000015d 00000000 00000002
		 00000008 00000015 e0000000 8000015e
		 00000000 00000002 00000008 00000015
		 f0000000 8000015f 00000000 00000002
		 00000008 00000016 00000000 80000160
		 00000000 00000002 00000008 00000016
		 10000000 80000161 00000000 00000002
		 00000008 00000016 20000000 80000162
		 00000000 00000002 00000008 00000016
		 30000000 80000163 00000000 00000002
		 00000008 00000016 40000000 80000164
		 00000000 00000002 00000008 00000016
		 50000000 80000165 00000000 00000002
		 00000008 00000016 60000000 80000166
		 00000000 00000002 00000008 00000016
		 70000000 80000167 00000000 00000002
		 00000008 00000016 80000000 80000168
		 00000000 00000002 00000008 00000016
		 90000000 80000169 00000000 00000002
		 00000008 00000016 a0000000 8000016a
		 00000000 00000002 00000008 00000016
		 b0000000 8000016b 00000000 00000002
		 00000008 00000016 c0000000 8000016c
		 00000000 00000002 00000008 00000016
		 d0000000 8000016d 00000000 00000002
		 00000008 00000016 e0000000 8000016e
		 00000000 00000002 00000008 00000016
		 f0000000 8000016f 00000000 00000002
		 00000008 00000017 00000000 80000170
		 00000000 00000002 00000008 00000017
		 10000000 80000171 00000000 00000002
		 00000008 00000017 20000000 80000172
		 00000000 00000002 00000008 00000017
		 30000000 80000173 00000000 00000002
		 00000008 00000017 40000000 80000174
		 00000000 00000002 00000008 00000017
		 50000000 80000175 00000000 00000002
		 00000008 00000017 60000000 80000176
		 00000000 00000002 00000008 00000017
		 70000000 80000177 00000000 00000002
		 00000008 00000017 80000000 80000178
		 00000000 00000002 00000008 00000017
		 90000000 80000179 00000000 00000002
		 00000008 00000017 a0000000 8000017a
		 00000000 00000002 00000008 00000017
		 b0000000 8000017b 00000000 00000002
		 00000008 00000017 c0000000 8000017c
		 00000000 00000002 00000008 00000017
		 d0000000 8000017d 00000000 00000002
		 00000008 00000017 e0000000 8000017e
		 00000000 00000002 00000008 00000017
		 f0000000 8000017f 00000000 00000002
		 00000008 00000018 00000000 80000180
		 00000000 00000002 00000008 00000018
		 10000000 80000181 00000000 00000002
		 00000008 00000018 20000000 80000182
		 00000000 00000002 00000008 00000018
		 30000000 80000183 00000000 00000002
		 00000008 00000018 40000000 80000184
		 00000000 00000002 00000008 00000018
		 50000000 80000185 00000000 00000002
		 00000008 00000018 60000000 80000186
		 00000000 00000002 00000008 00000018
		 70000000 80000187 00000000 00000002
		 00000008 00000018 80000000 80000188
		 00000000 00000002 00000008 00000018
		 90000000 80000189 00000000 00000002
		 00000008 00000018 a0000000 8000018a
		 00000000 00000002 00000008 00000018
		 b0000000 8000018b 00000000 00000002
		 00000008 00000018 c0000000 8000018c
		 00000000 00000002 00000008 00000018
		 d0000000 8000018d 00000000 00000002
		 00000008 00000018 e0000000 8000018e
		 00000000 00000002 00000008 00000018
		 f0000000 8000018f 00000000 00000002
		 00000008 00000019 00000000 80000190
		 00000000 00000002 00000008 00000019
		 10000000 80000191 00000000 00000002
		 00000008 00000019 20000000 80000192
		 00000000 00000002 00000008 00000019
		 30000000 80000193 00000000 00000002
		 00000008 00000019 40000000 80000194
		 00000000 00000002 00000008 00000019
		 50000000 80000195 00000000 00000002
		 00000008 00000019 60000000 80000196
		 00000000 00000002 00000008 00000019
		 70000000 80000197 00000000 00000002
		 00000008 00000019 80000000 80000198
		 00000000 00000002 00000008 00000019
		 90000000 80000199 00000000 00000002
		 00000008 00000019 a0000000 8000019a
		 00000000 00000002 00000008 00000019
		 b0000000 8000019b 00000000 00000002
		 00000008 00000019 c0000000 8000019c
		 00000000 00000002 00000008 00000019
		 d0000000 8000019d 00000000 00000002
		 00000008 00000019 e0000000 8000019e
		 00000000 00000002 00000008 00000019
		 f0000000 8000019f 00000000 00000002
		 00000008 0000001a 00000000 800001a0
		 00000000 00000002 00000008 0000001a
		 10000000 800001a1 00000000 00000002
		 00000008 0000001a 20000000 800001a2
		 00000000 00000002 00000008 0000001a
		 30000000 800001a3 00000000 00000002
		 00000008 0000001a 40000000 800001a4
		 00000000 00000002 00000008 0000001a
		 50000000 800001a5 00000000 00000002
		 00000008 0000001a 60000000 800001a6
		 00000000 00000002 00000008 0000001a
		 70000000 800001a7 00000000 00000002
		 00000008 0000001a 80000000 800001a8
		 00000000 00000002 00000008 0000001a
		 90000000 800001a9 00000000 00000002
		 00000008 0000001a a0000000 800001aa
		 00000000 00000002 00000008 0000001a
		 b0000000 800001ab 00000000 00000002
		 00000008 0000001a c0000000 800001ac
		 00000000 00000002 00000008 0000001a
		 d0000000 800001ad 00000000 00000002
		 00000008 0000001a e0000000 800001ae
		 00000000 00000002 00000008 0000001a
		 f0000000 800001af 00000000 00000002
		 00000008 0000001b 00000000 800001b0
		 00000000 00000002 00000008 0000001b
		 10000000 800001b1 00000000 00000002
		 00000008 0000001b 20000000 800001b2
		 00000000 00000002 00000008 0000001b
		 30000000 800001b3 00000000 00000002
		 00000008 0000001b 40000000 800001b4
		 00000000 00000002 00000008 0000001b
		 50000000 800001b5 00000000 00000002
		 00000008 0000001b 60000000 800001b6
		 00000000 00000002 00000008 0000001b
		 70000000 800001b7 00000000 00000002
		 00000008 0000001b 80000000 800001b8
		 00000000 00000002 00000008 0000001b
		 90000000 800001b9 00000000 00000002
		 00000008 0000001b a0000000 800001ba
		 00000000 00000002 00000008 0000001b
		 b0000000 800001bb 00000000 00000002
		 00000008 0000001b c0000000 800001bc
		 00000000 00000002 00000008 0000001b
		 d0000000 800001bd 00000000 00000002
		 00000008 0000001b e0000000 800001be
		 00000000 00000002 00000008 0000001b
		 f0000000 800001bf 00000000 00000002
		 00000008 0000001c 00000000 800001c0
		 00000000 00000002 00000008 0000001c
		 10000000 800001c1 00000000 00000002
		 00000008 0000001c 20000000 800001c2
		 00000000 00000002 00000008 0000001c
		 30000000 800001c3 00000000 00000002
		 00000008 0000001c 40000000 800001c4
		 00000000 00000002 00000008 0000001c
		 50000000 800001c5 00000000 00000002
		 00000008 0000001c 60000000 800001c6
		 00000000 00000002 00000008 0000001c
		 70000000 800001c7 00000000 00000002
		 00000008 0000001c 80000000 800001c8
		 00000000 00000002 00000008 0000001c
		 90000000 800001c9 00000000 00000002
		 00000008 0000001c a0000000 800001ca
		 00000000 00000002 00000008 0000001c
		 b0000000 800001cb 00000000 00000002
		 00000008 0000001c c0000000 800001cc
		 00000000 00000002 00000008 0000001c
		 d0000000 800001cd 00000000 00000002
		 00000008 0000001c e0000000 800001ce
		 00000000 00000002 00000008 0000001c
		 f0000000 800001cf 00000000 00000002
		 00000008 0000001d 00000000 800001d0
		 00000000 00000002 00000008 0000001d
		 10000000 800001d1 00000000 00000002
		 00000008 0000001d 20000000 800001d2
		 00000000 00000002 00000008 0000001d
		 30000000 800001d3 00000000 00000002
		 00000008 0000001d 40000000 800001d4
		 00000000 00000002 00000008 0000001d
		 50000000 800001d5 00000000 00000002
		 00000008 0000001d 60000000 800001d6
		 00000000 00000002 00000008 0000001d
		 70000000 800001d7 00000000 00000002
		 00000008 0000001d 80000000 800001d8
		 00000000 00000002 00000008 0000001d
		 90000000 800001d9 00000000 00000002
		 00000008 0000001d a0000000 800001da
		 00000000 00000002 00000008 0000001d
		 b0000000 800001db 00000000 00000002
		 00000008 0000001d c0000000 800001dc
		 00000000 00000002 00000008 0000001d
		 d0000000 800001dd 00000000 00000002
		 00000008 0000001d e0000000 800001de
		 00000000 00000002 00000008 0000001d
		 f0000000 800001df 00000000 00000002
		 00000008 0000001e 00000000 800001e0
		 00000000 00000002 00000008 0000001e
		 10000000 800001e1 00000000 00000002
		 00000008 0000001e 20000000 800001e2
		 00000000 00000002 00000008 0000001e
		 30000000 800001e3 00000000 00000002
		 00000008 0000001e 40000000 800001e4
		 00000000 00000002 00000008 0000001e
		 50000000 800001e5 00000000 00000002
		 00000008 0000001e 60000000 800001e6
		 00000000 00000002 00000008 0000001e
		 70000000 800001e7 00000000 00000002
		 00000008 0000001e 80000000 800001e8
		 00000000 00000002 00000008 0000001e
		 90000000 800001e9 00000000 00000002
		 00000008 0000001e a0000000 800001ea
		 00000000 00000002 00000008 0000001e
		 b0000000 800001eb 00000000 00000002
		 00000008 0000001e c0000000 800001ec
		 00000000 00000002 00000008 0000001e
		 d0000000 800001ed 00000000 00000002
		 00000008 0000001e e0000000 800001ee
		 00000000 00000002 00000008 0000001e
		 f0000000 800001ef 00000000 00000002
		 00000008 0000001f 00000000 800001f0
		 00000000 00000002 00000008 0000001f
		 10000000 800001f1 00000000 00000002
		 00000008 0000001f 20000000 800001f2
		 00000000 00000002 00000008 0000001f
		 30000000 800001f3 00000000 00000002
		 00000008 0000001f 40000000 800001f4
		 00000000 00000002 00000008 0000001f
		 50000000 800001f5 00000000 00000002
		 00000008 0000001f 60000000 800001f6
		 00000000 00000002 00000008 0000001f
		 70000000 800001f7 00000000 00000002
		 00000008 0000001f 80000000 800001f8
		 00000000 00000002 00000008 0000001f
		 90000000 800001f9 00000000 00000002
		 00000008 0000001f a0000000 800001fa
		 00000000 00000002 00000008 0000001f
		 b0000000 800001fb 00000000 00000002
		 00000008 0000001f c0000000 800001fc
		 00000000 00000002 00000008 0000001f
		 d0000000 800001fd 00000000 00000002
		 00000008 0000001f e0000000 800001fe
		 00000000 00000002 00000008 0000001f
		 f0000000 800001ff 00000000 00000002
		 00000008 00000020 00000000 80000200
		 00000000 00000002 00000008 00000020
		 10000000 80000201 00000000 00000002
		 00000008 00000020 20000000 80000202
		 00000000 00000002 00000008 00000020
		 30000000 80000203 00000000 00000002
		 00000008 00000020 40000000 80000204
		 00000000 00000002 00000008 00000020
		 50000000 80000205 00000000 00000002
		 00000008 00000020 60000000 80000206
		 00000000 00000002 00000008 00000020
		 70000000 80000207 00000000 00000002
		 00000008 00000020 80000000 80000208
		 00000000 00000002 00000008 00000020
		 90000000 80000209 00000000 00000002
		 00000008 00000020 a0000000 8000020a
		 00000000 00000002 00000008 00000020
		 b0000000 8000020b 00000000 00000002
		 00000008 00000020 c0000000 8000020c
		 00000000 00000002 00000008 00000020
		 d0000000 8000020d 00000000 00000002
		 00000008 00000020 e0000000 8000020e
		 00000000 00000002 00000008 00000020
		 f0000000 8000020f 00000000 00000002
		 00000008 00000021 00000000 80000210
		 00000000 00000002 00000008 00000021
		 10000000 80000211 00000000 00000002
		 00000008 00000021 20000000 80000212
		 00000000 00000002 00000008 00000021
		 30000000 80000213 00000000 00000002
		 00000008 00000021 40000000 80000214
		 00000000 00000002 00000008 00000021
		 50000000 80000215 00000000 00000002
		 00000008 00000021 60000000 80000216
		 00000000 00000002 00000008 00000021
		 70000000 80000217 00000000 00000002
		 00000008 00000021 80000000 80000218
		 00000000 00000002 00000008 00000021
		 90000000 80000219 00000000 00000002
		 00000008 00000021 a0000000 8000021a
		 00000000 00000002 00000008 00000021
		 b0000000 8000021b 00000000 00000002
		 00000008 00000021 c0000000 8000021c
		 00000000 00000002 00000008 00000021
		 d0000000 8000021d 00000000 00000002
		 00000008 00000021 e0000000 8000021e
		 00000000 00000002 00000008 00000021
		 f0000000 8000021f 00000000 00000002
		 00000008 00000022 00000000 80000220
		 00000000 00000002 00000008 00000022
		 10000000 80000221 00000000 00000002
		 00000008 00000022 20000000 80000222
		 00000000 00000002 00000008 00000022
		 30000000 80000223 00000000 00000002
		 00000008 00000022 40000000 80000224
		 00000000 00000002 00000008 00000022
		 50000000 80000225 00000000 00000002
		 00000008 00000022 60000000 80000226
		 00000000 00000002 00000008 00000022
		 70000000 80000227 00000000 00000002
		 00000008 00000022 80000000 80000228
		 00000000 00000002 00000008 00000022
		 90000000 80000229 00000000 00000002
		 00000008 00000022 a0000000 8000022a
		 00000000 00000002 00000008 00000022
		 b0000000 8000022b 00000000 00000002
		 00000008 00000022 c0000000 8000022c
		 00000000 00000002 00000008 00000022
		 d0000000 8000022d 00000000 00000002
		 00000008 00000022 e0000000 8000022e
		 00000000 00000002 00000008 00000022
		 f0000000 8000022f 00000000 00000002
		 00000008 00000023 00000000 80000230
		 00000000 00000002 00000008 00000023
		 10000000 80000231 00000000 00000002
		 00000008 00000023 20000000 80000232
		 00000000 00000002 00000008 00000023
		 30000000 80000233 00000000 00000002
		 00000008 00000023 40000000 80000234
		 00000000 00000002 00000008 00000023
		 50000000 80000235 00000000 00000002
		 00000008 00000023 60000000 80000236
		 00000000 00000002 00000008 00000023
		 70000000 80000237 00000000 00000002
		 00000008 00000023 80000000 80000238
		 00000000 00000002 00000008 00000023
		 90000000 80000239 00000000 00000002
		 00000008 00000023 a0000000 8000023a
		 00000000 00000002 00000008 00000023
		 b0000000 8000023b 00000000 00000002
		 00000008 00000023 c0000000 8000023c
		 00000000 00000002 00000008 00000023
		 d0000000 8000023d 00000000 00000002
		 00000008 00000023 e0000000 8000023e
		 00000000 00000002 00000008 00000023
		 f0000000 8000023f 00000000 00000002
		 00000008 00000024 00000000 80000240
		 00000000 00000002 00000008 00000024
		 10000000 80000241 00000000 00000002
		 00000008 00000024 20000000 80000242
		 00000000 00000002 00000008 00000024
		 30000000 80000243 00000000 00000002
		 00000008 00000024 40000000 80000244
		 00000000 00000002 00000008 00000024
		 50000000 80000245 00000000 00000002
		 00000008 00000024 60000000 80000246
		 00000000 00000002 00000008 00000024
		 70000000 80000247 00000000 00000002
		 00000008 00000024 80000000 80000248
		 00000000 00000002 00000008 00000024
		 90000000 80000249 00000000 00000002
		 00000008 00000024 a0000000 8000024a
		 00000000 00000002 00000008 00000024
		 b0000000 8000024b 00000000 00000002
		 00000008 00000024 c0000000 8000024c
		 00000000 00000002 00000008 00000024
		 d0000000 8000024d 00000000 00000002
		 00000008 00000024 e0000000 8000024e
		 00000000 00000002 00000008 00000024
		 f0000000 8000024f 00000000 00000002
		 00000008 00000025 00000000 80000250
		 00000000 00000002 00000008 00000025
		 10000000 80000251 00000000 00000002
		 00000008 00000025 20000000 80000252
		 00000000 00000002 00000008 00000025
		 30000000 80000253 00000000 00000002
		 00000008 00000025 40000000 80000254
		 00000000 00000002 00000008 00000025
		 50000000 80000255 00000000 00000002
		 00000008 00000025 60000000 80000256
		 00000000 00000002 00000008 00000025
		 70000000 80000257 00000000 00000002
		 00000008 00000025 80000000 80000258
		 00000000 00000002 00000008 00000025
		 90000000 80000259 00000000 00000002
		 00000008 00000025 a0000000 8000025a
		 00000000 00000002 00000008 00000025
		 b0000000 8000025b 00000000 00000002
		 00000008 00000025 c0000000 8000025c
		 00000000 00000002 00000008 00000025
		 d0000000 8000025d 00000000 00000002
		 00000008 00000025 e0000000 8000025e
		 00000000 00000002 00000008 00000025
		 f0000000 8000025f 00000000 00000002
		 00000008 00000026 00000000 80000260
		 00000000 00000002 00000008 00000026
		 10000000 80000261 00000000 00000002
		 00000008 00000026 20000000 80000262
		 00000000 00000002 00000008 00000026
		 30000000 80000263 00000000 00000002
		 00000008 00000026 40000000 80000264
		 00000000 00000002 00000008 00000026
		 50000000 80000265 00000000 00000002
		 00000008 00000026 60000000 80000266
		 00000000 00000002 00000008 00000026
		 70000000 80000267 00000000 00000002
		 00000008 00000026 80000000 80000268
		 00000000 00000002 00000008 00000026
		 90000000 80000269 00000000 00000002
		 00000008 00000026 a0000000 8000026a
		 00000000 00000002 00000008 00000026
		 b0000000 8000026b 00000000 00000003
		 00000008 00000026 c0000000 8000026c
		 00000000 00000003 00000008 00000026
		 d0000000 8000026d 00000000 00000003
		 00000008 00000026 e0000000 8000026e
		 00000000 00000003 00000008 00000026
		 f0000000 8000026f 00000000 00000003
		 00000008 00000027 00000000 80000270
		 00000000 00000003 00000008 00000027
		 10000000 80000271 00000000 00000003
		 00000008 00000027 20000000 80000272
		 00000000 00000003 00000008 00000027
		 30000000 80000273 00000000 00000003
		 00000008 00000027 40000000 80000274
		 00000000 00000003 00000008 00000027
		 50000000 80000275 00000000 00000003
		 00000008 00000027 60000000 80000276
		 00000000 00000003 00000008 00000027
		 70000000 80000277 00000000 00000003
		 00000008 00000027 80000000 80000278
		 00000000 00000003 00000008 00000027
		 90000000 80000279 00000000 00000003
		 00000008 00000027 a0000000 8000027a
		 00000000 00000003 00000008 00000027
		 b0000000 8000027b 00000000 00000003
		 00000008 00000027 c0000000 8000027c
		 00000000 00000003 00000008 00000027
		 d0000000 8000027d 00000000 00000003
		 00000008 00000027 e0000000 8000027e
		 00000000 00000003 00000008 00000027
		 f0000000 8000027f 00000000 00000003
		 00000008 00000028 00000000 80000280
		 00000000 00000003 00000008 00000028
		 10000000 80000281 00000000 00000003
		 00000008 00000028 20000000 80000282
		 00000000 00000003 00000008 00000028
		 30000000 80000283 00000000 00000003
		 00000008 00000028 40000000 80000284
		 00000000 00000003 00000008 00000028
		 50000000 80000285 00000000 00000003
		 00000008 00000028 60000000 80000286
		 00000000 00000003 00000008 00000028
		 70000000 80000287 00000000 00000003
		 00000008 00000028 80000000 80000288
		 00000000 00000003 00000008 00000028
		 90000000 80000289 00000000 00000003
		 00000008 00000028 a0000000 8000028a
		 00000000 00000003 00000008 00000028
		 b0000000 8000028b 00000000 00000003
		 00000008 00000028 c0000000 8000028c
		 00000000 00000003 00000008 00000028
		 d0000000 8000028d 00000000 00000003
		 00000008 00000028 e0000000 8000028e
		 00000000 00000003 00000008 00000028
		 f0000000 8000028f 00000000 00000003
		 00000008 00000029 00000000 80000290
		 00000000 00000003 00000008 00000029
		 10000000 80000291 00000000 00000003
		 00000008 00000029 20000000 80000292
		 00000000 00000003 00000008 00000029
		 30000000 80000293 00000000 00000003
		 00000008 00000029 40000000 80000294
		 00000000 00000003 00000008 00000029
		 50000000 80000295 00000000 00000003
		 00000008 00000029 60000000 80000296
		 00000000 00000003 00000008 00000029
		 70000000 80000297 00000000 00000003
		 00000008 00000029 80000000 80000298
		 00000000 00000003 00000008 00000029
		 90000000 80000299 00000000 00000003
		 00000008 00000029 a0000000 8000029a
		 00000000 00000003 00000008 00000029
		 b0000000 8000029b 00000000 00000003
		 00000008 00000029 c0000000 8000029c
		 00000000 00000003 00000008 00000029
		 d0000000 8000029d 00000000 00000003
		 00000008 00000029 e0000000 8000029e
		 00000000 00000003 00000008 00000029
		 f0000000 8000029f 00000000 00000003
		 00000008 0000002a 00000000 800002a0
		 00000000 00000003 00000008 0000002a
		 10000000 800002a1 00000000 00000003
		 00000008 0000002a 20000000 800002a2
		 00000000 00000003 00000008 0000002a
		 30000000 800002a3 00000000 00000003
		 00000008 0000002a 40000000 800002a4
		 00000000 00000003 00000008 0000002a
		 50000000 800002a5 00000000 00000003
		 00000008 0000002a 60000000 800002a6
		 00000000 00000003 00000008 0000002a
		 70000000 800002a7 00000000 00000003
		 00000008 0000002a 80000000 800002a8
		 00000000 00000003 00000008 0000002a
		 90000000 800002a9 00000000 00000003
		 00000008 0000002a a0000000 800002aa
		 00000000 00000003 00000008 0000002a
		 b0000000 800002ab 00000000 00000003
		 00000008 0000002a c0000000 800002ac
		 00000000 00000003 00000008 0000002a
		 d0000000 800002ad 00000000 00000003
		 00000008 0000002a e0000000 800002ae
		 00000000 00000003 00000008 0000002a
		 f0000000 800002af 00000000 00000003
		 00000008 0000002b 00000000 800002b0
		 00000000 00000003 00000008 0000002b
		 10000000 800002b1 00000000 00000003
		 00000008 0000002b 20000000 800002b2
		 00000000 00000003 00000008 0000002b
		 30000000 800002b3 00000000 00000003
		 00000008 0000002b 40000000 800002b4
		 00000000 00000003 00000008 0000002b
		 50000000 800002b5 00000000 00000003
		 00000008 0000002b 60000000 800002b6
		 00000000 00000003 00000008 0000002b
		 70000000 800002b7 00000000 00000003
		 00000008 0000002b 80000000 800002b8
		 00000000 00000003 00000008 0000002b
		 90000000 800002b9 00000000 00000003
		 00000008 0000002b a0000000 800002ba
		 00000000 00000003 00000008 0000002b
		 b0000000 800002bb 00000000 00000003
		 00000008 0000002b c0000000 800002bc
		 00000000 00000003 00000008 0000002b
		 d0000000 800002bd 00000000 00000003
		 00000008 0000002b e0000000 800002be
		 00000000 00000003 00000008 0000002b
		 f0000000 800002bf 00000000 00000003
		 00000008 0000002c 00000000 800002c0
		 00000000 00000003 00000008 0000002c
		 10000000 800002c1 00000000 00000003
		 00000008 0000002c 20000000 800002c2
		 00000000 00000003 00000008 0000002c
		 30000000 800002c3 00000000 00000003
		 00000008 0000002c 40000000 800002c4
		 00000000 00000003 00000008 0000002c
		 50000000 800002c5 00000000 00000003
		 00000008 0000002c 60000000 800002c6
		 00000000 00000003 00000008 0000002c
		 70000000 800002c7 00000000 00000003
		 00000008 0000002c 80000000 800002c8
		 00000000 00000003 00000008 0000002c
		 90000000 800002c9 00000000 00000003
		 00000008 0000002c a0000000 800002ca
		 00000000 00000003 00000008 0000002c
		 b0000000 800002cb 00000000 00000003
		 00000008 0000002c c0000000 800002cc
		 00000000 00000003 00000008 0000002c
		 d0000000 800002cd 00000000 00000003
		 00000008 0000002c e0000000 800002ce
		 00000000 00000003 00000008 0000002c
		 f0000000 800002cf 00000000 00000003
		 00000008 0000002d 00000000 800002d0
		 00000000 00000003 00000008 0000002d
		 10000000 800002d1 00000000 00000003
		 00000008 0000002d 20000000 800002d2
		 00000000 00000003 00000008 0000002d
		 30000000 800002d3 00000000 00000003
		 00000008 0000002d 40000000 800002d4
		 00000000 00000003 00000008 0000002d
		 50000000 800002d5 00000000 00000003
		 00000008 0000002d 60000000 800002d6
		 00000000 00000003 00000008 0000002d
		 70000000 800002d7 00000000 00000003
		 00000008 0000002d 80000000 800002d8
		 00000000 00000003 00000008 0000002d
		 90000000 800002d9 00000000 00000003
		 00000008 0000002d a0000000 800002da
		 00000000 00000003 00000008 0000002d
		 b0000000 800002db 00000000 00000003
		 00000008 0000002d c0000000 800002dc
		 00000000 00000003 00000008 0000002d
		 d0000000 800002dd 00000000 00000003
		 00000008 0000002d e0000000 800002de
		 00000000 00000003 00000008 0000002d
		 f0000000 800002df 00000000 00000003
		 00000008 0000002e 00000000 800002e0
		 00000000 00000003 00000008 0000002e
		 10000000 800002e1 00000000 00000003
		 00000008 0000002e 20000000 800002e2
		 00000000 00000003 00000008 0000002e
		 30000000 800002e3 00000000 00000003
		 00000008 0000002e 40000000 800002e4
		 00000000 00000003 00000008 0000002e
		 50000000 800002e5 00000000 00000003
		 00000008 0000002e 60000000 800002e6
		 00000000 00000003 00000008 0000002e
		 70000000 800002e7 00000000 00000003
		 00000008 0000002e 80000000 800002e8
		 00000000 00000003 00000008 0000002e
		 90000000 800002e9 00000000 00000003
		 00000008 0000002e a0000000 800002ea
		 00000000 00000003 00000008 0000002e
		 b0000000 800002eb 00000000 00000003
		 00000008 0000002e c0000000 800002ec
		 00000000 00000003 00000008 0000002e
		 d0000000 800002ed 00000000 00000003
		 00000008 0000002e e0000000 800002ee
		 00000000 00000003 00000008 0000002e
		 f0000000 800002ef 00000000 00000003
		 00000008 0000002f 00000000 800002f0
		 00000000 00000003 00000008 0000002f
		 10000000 800002f1 00000000 00000003
		 00000008 0000002f 20000000 800002f2
		 00000000 00000003 00000008 0000002f
		 30000000 800002f3 00000000 00000003
		 00000008 0000002f 40000000 800002f4
		 00000000 00000003 00000008 0000002f
		 50000000 800002f5 00000000 00000003
		 00000008 0000002f 60000000 800002f6
		 00000000 00000003 00000008 0000002f
		 70000000 800002f7 00000000 00000003
		 00000008 0000002f 80000000 800002f8
		 00000000 00000003 00000008 0000002f
		 90000000 800002f9 00000000 00000003
		 00000008 0000002f a0000000 800002fa
		 00000000 00000003 00000008 0000002f
		 b0000000 800002fb 00000000 00000003
		 00000008 0000002f c0000000 800002fc
		 00000000 00000003 00000008 0000002f
		 d0000000 800002fd 00000000 00000003
		 00000008 0000002f e0000000 800002fe
		 00000000 00000003 00000008 0000002f
		 f0000000 800002ff 00000000 00000003
		 00000008 00000030 00000000 80000300
		 00000000 00000003 00000008 00000030
		 10000000 80000301 00000000 00000003
		 00000008 00000030 20000000 80000302
		 00000000 00000003 00000008 00000030
		 30000000 80000303 00000000 00000003
		 00000008 00000030 40000000 80000304
		 00000000 00000003 00000008 00000030
		 50000000 80000305 00000000 00000003
		 00000008 00000030 60000000 80000306
		 00000000 00000003 00000008 00000030
		 70000000 80000307 00000000 00000003
		 00000008 00000030 80000000 80000308
		 00000000 00000003 00000008 00000030
		 90000000 80000309 00000000 00000003
		 00000008 00000030 a0000000 8000030a
		 00000000 00000003 00000008 00000030
		 b0000000 8000030b 00000000 00000003
		 00000008 00000030 c0000000 8000030c
		 00000000 00000003 00000008 00000030
		 d0000000 8000030d 00000000 00000003
		 00000008 00000030 e0000000 8000030e
		 00000000 00000003 00000008 00000030
		 f0000000 8000030f 00000000 00000003
		 00000008 00000031 00000000 80000310
		 00000000 00000003 00000008 00000031
		 10000000 80000311 00000000 00000003
		 00000008 00000031 20000000 80000312
		 00000000 00000003 00000008 00000031
		 30000000 80000313 00000000 00000003
		 00000008 00000031 40000000 80000314
		 00000000 00000003 00000008 00000031
		 50000000 80000315 00000000 00000003
		 00000008 00000031 60000000 80000316
		 00000000 00000003 00000008 00000031
		 70000000 80000317 00000000 00000003
		 00000008 00000031 80000000 80000318
		 00000000 00000003 00000008 00000031
		 90000000 80000319 00000000 00000003
		 00000008 00000031 a0000000 8000031a
		 00000000 00000003 00000008 00000031
		 b0000000 8000031b 00000000 00000003
		 00000008 00000031 c0000000 8000031c
		 00000000 00000003 00000008 00000031
		 d0000000 8000031d 00000000 00000003
		 00000008 00000031 e0000000 8000031e
		 00000000 00000003 00000008 00000031
		 f0000000 8000031f 00000000 00000003
		 00000008 00000032 00000000 80000320
		 00000000 00000003 00000008 00000032
		 10000000 80000321 00000000 00000003
		 00000008 00000032 20000000 80000322
		 00000000 00000003 00000008 00000032
		 30000000 80000323 00000000 00000003
		 00000008 00000032 40000000 80000324
		 00000000 00000003 00000008 00000032
		 50000000 80000325 00000000 00000003
		 00000008 00000032 60000000 80000326
		 00000000 00000003 00000008 00000032
		 70000000 80000327 00000000 00000003
		 00000008 00000032 80000000 80000328
		 00000000 00000003 00000008 00000032
		 90000000 80000329 00000000 00000003
		 00000008 00000032 a0000000 8000032a
		 00000000 00000003 00000008 00000032
		 b0000000 8000032b 00000000 00000003
		 00000008 00000032 c0000000 8000032c
		 00000000 00000003 00000008 00000032
		 d0000000 8000032d 00000000 00000003
		 00000008 00000032 e0000000 8000032e
		 00000000 00000003 00000008 00000032
		 f0000000 8000032f 00000000 00000003
		 00000008 00000033 00000000 80000330
		 00000000 00000003 00000008 00000033
		 10000000 80000331 00000000 00000003
		 00000008 00000033 20000000 80000332
		 00000000 00000003 00000008 00000033
		 30000000 80000333 00000000 00000003
		 00000008 00000033 40000000 80000334
		 00000000 00000003 00000008 00000033
		 50000000 80000335 00000000 00000003
		 00000008 00000033 60000000 80000336
		 00000000 00000003 00000008 00000033
		 70000000 80000337 00000000 00000003
		 00000008 00000033 80000000 80000338
		 00000000 00000003 00000008 00000033
		 90000000 80000339 00000000 00000003
		 00000008 00000033 a0000000 8000033a
		 00000000 00000003 00000008 00000033
		 b0000000 8000033b 00000000 00000003
		 00000008 00000033 c0000000 8000033c
		 00000000 00000003 00000008 00000033
		 d0000000 8000033d 00000000 00000003
		 00000008 00000033 e0000000 8000033e
		 00000000 00000003 00000008 00000033
		 f0000000 8000033f 00000000 00000003
		 00000008 00000034 00000000 80000340
		 00000000 00000003 00000008 00000034
		 10000000 80000341 00000000 00000003
		 00000008 00000034 20000000 80000342
		 00000000 00000003 00000008 00000034
		 30000000 80000343 00000000 00000003
		 00000008 00000034 40000000 80000344
		 00000000 00000003 00000008 00000034
		 50000000 80000345 00000000 00000003
		 00000008 00000034 60000000 80000346
		 00000000 00000003 00000008 00000034
		 70000000 80000347 00000000 00000003
		 00000008 00000034 80000000 80000348
		 00000000 00000003 00000008 00000034
		 90000000 80000349 00000000 00000003
		 00000008 00000034 a0000000 8000034a
		 00000000 00000003 00000008 00000034
		 b0000000 8000034b 00000000 00000003
		 00000008 00000034 c0000000 8000034c
		 00000000 00000003 00000008 00000034
		 d0000000 8000034d 00000000 00000003
		 00000008 00000034 e0000000 8000034e
		 00000000 00000003 00000008 00000034
		 f0000000 8000034f 00000000 00000003
		 00000008 00000035 00000000 80000350
		 00000000 00000003 00000008 00000035
		 10000000 80000351 00000000 00000003
		 00000008 00000035 20000000 80000352
		 00000000 00000003 00000008 00000035
		 30000000 80000353 00000000 00000003
		 00000008 00000035 40000000 80000354
		 00000000 00000003 00000008 00000035
		 50000000 80000355 00000000 00000003
		 00000008 00000035 60000000 80000356
		 00000000 00000003 00000008 00000035
		 70000000 80000357 00000000 00000003
		 00000008 00000035 80000000 80000358
		 00000000 00000003 00000008 00000035
		 90000000 80000359 00000000 00000003
		 00000008 00000035 a0000000 8000035a
		 00000000 00000003 00000008 00000035
		 b0000000 8000035b 00000000 00000003
		 00000008 00000035 c0000000 8000035c
		 00000000 00000003 00000008 00000035
		 d0000000 8000035d 00000000 00000003
		 00000008 00000035 e0000000 8000035e
		 00000000 00000003 00000008 00000035
		 f0000000 8000035f 00000000 00000003
		 00000008 00000036 00000000 80000360
		 00000000 00000003 00000008 00000036
		 10000000 80000361 00000000 00000003
		 00000008 00000036 20000000 80000362
		 00000000 00000003 00000008 00000036
		 30000000 80000363 00000000 00000003
		 00000008 00000036 40000000 80000364
		 00000000 00000003 00000008 00000036
		 50000000 80000365 00000000 00000003
		 00000008 00000036 60000000 80000366
		 00000000 00000003 00000008 00000036
		 70000000 80000367 00000000 00000003
		 00000008 00000036 80000000 80000368
		 00000000 00000003 00000008 00000036
		 90000000 80000369 00000000 00000003
		 00000008 00000036 a0000000 8000036a
		 00000000 00000003 00000008 00000036
		 b0000000 8000036b 00000000 00000003
		 00000008 00000036 c0000000 8000036c
		 00000000 00000003 00000008 00000036
		 d0000000 8000036d 00000000 00000003
		 00000008 00000036 e0000000 8000036e
		 00000000 00000003 00000008 00000036
		 f0000000 8000036f 00000000 00000003
		 00000008 00000037 00000000 80000370
		 00000000 00000003 00000008 00000037
		 10000000 80000371 00000000 00000003
		 00000008 00000037 20000000 80000372
		 00000000 00000003 00000008 00000037
		 30000000 80000373 00000000 00000003
		 00000008 00000037 40000000 80000374
		 00000000 00000003 00000008 00000037
		 50000000 80000375 00000000 00000003
		 00000008 00000037 60000000 80000376
		 00000000 00000003 00000008 00000037
		 70000000 80000377 00000000 00000003
		 00000008 00000037 80000000 80000378
		 00000000 00000003 00000008 00000037
		 90000000 80000379 00000000 00000003
		 00000008 00000037 a0000000 8000037a
		 00000000 00000003 00000008 00000037
		 b0000000 8000037b 00000000 00000003
		 00000008 00000037 c0000000 8000037c
		 00000000 00000003 00000008 00000037
		 d0000000 8000037d 00000000 00000003
		 00000008 00000037 e0000000 8000037e
		 00000000 00000003 00000008 00000037
		 f0000000 8000037f 00000000 00000003
		 00000008 00000038 00000000 80000380
		 00000000 00000003 00000008 00000038
		 10000000 80000381 00000000 00000003
		 00000008 00000038 20000000 80000382
		 00000000 00000003 00000008 00000038
		 30000000 80000383 00000000 00000003
		 00000008 00000038 40000000 80000384
		 00000000 00000003 00000008 00000038
		 50000000 80000385 00000000 00000003
		 00000008 00000038 60000000 80000386
		 00000000 00000003 00000008 00000038
		 70000000 80000387 00000000 00000003
		 00000008 00000038 80000000 80000388
		 00000000 00000003 00000008 00000038
		 90000000 80000389 00000000 00000003
		 00000008 00000038 a0000000 8000038a
		 00000000 00000003 00000008 00000038
		 b0000000 8000038b 00000000 00000003
		 00000008 00000038 c0000000 8000038c
		 00000000 00000003 00000008 00000038
		 d0000000 8000038d 00000000 00000003
		 00000008 00000038 e0000000 8000038e
		 00000000 00000003 00000008 00000038
		 f0000000 8000038f 00000000 00000003
		 00000008 00000039 00000000 80000390
		 00000000 00000003 00000008 00000039
		 10000000 80000391 00000000 00000003
		 00000008 00000039 20000000 80000392
		 00000000 00000003 00000008 00000039
		 30000000 80000393 00000000 00000003
		 00000008 00000039 40000000 80000394
		 00000000 00000003 00000008 00000039
		 50000000 80000395 00000000 00000003
		 00000008 00000039 60000000 80000396
		 00000000 00000003 00000008 00000039
		 70000000 80000397 00000000 00000003
		 00000008 00000039 80000000 80000398
		 00000000 00000003 00000008 00000039
		 90000000 80000399 00000000 00000003
		 00000008 00000039 a0000000 8000039a
		 00000000 00000003 00000008 00000039
		 b0000000 8000039b 00000000 00000003
		 00000008 00000039 c0000000 8000039c
		 00000000 00000003 00000008 00000039
		 d0000000 8000039d 00000000 00000003
		 00000008 00000039 e0000000 8000039e
		 00000000 00000003 00000008 00000039
		 f0000000 8000039f 00000000 00000003
		 00000008 0000003a 00000000 800003a0
		 00000000 00000003 00000008 0000003a
		 10000000 800003a1 00000000 00000003
		 00000008 0000003a 20000000 800003a2
		 00000000 00000003 00000008 0000003a
		 30000000 800003a3 00000000 00000003
		 00000008 0000003a 40000000 800003a4
		 00000000 00000003 00000008 0000003a
		 50000000 800003a5 00000000 00000003
		 00000008 0000003a 60000000 800003a6
		 00000000 00000003 00000008 0000003a
		 70000000 800003a7 00000000 00000003
		 00000008 0000003a 80000000 800003a8
		 00000000 00000003 00000008 0000003a
		 90000000 800003a9 00000000 00000003
		 00000008 0000003a a0000000 800003aa
		 00000000 00000003 00000008 0000003a
		 b0000000 800003ab 00000000 00000003
		 00000008 0000003a c0000000 800003ac
		 00000000 00000003 00000008 0000003a
		 d0000000 800003ad 00000000 00000003
		 00000008 0000003a e0000000 800003ae
		 00000000 00000003 00000008 0000003a
		 f0000000 800003af 00000000 00000003
		 00000008 0000003b 00000000 800003b0
		 00000000 00000003 00000008 0000003b
		 10000000 800003b1 00000000 00000003
		 00000008 0000003b 20000000 800003b2
		 00000000 00000003 00000008 0000003b
		 30000000 800003b3 00000000 00000003
		 00000008 0000003b 40000000 800003b4
		 00000000 00000003 00000008 0000003b
		 50000000 800003b5 00000000 00000003
		 00000008 0000003b 60000000 800003b6
		 00000000 00000003 00000008 0000003b
		 70000000 800003b7 00000000 00000003
		 00000008 0000003b 80000000 800003b8
		 00000000 00000003 00000008 0000003b
		 90000000 800003b9 00000000 00000003
		 00000008 0000003b a0000000 800003ba
		 00000000 00000003 00000008 0000003b
		 b0000000 800003bb 00000000 00000003
		 00000008 0000003b c0000000 800003bc
		 00000000 00000003 00000008 0000003b
		 d0000000 800003bd 00000000 00000003
		 00000008 0000003b e0000000 800003be
		 00000000 00000003 00000008 0000003b
		 f0000000 800003bf 00000000 00000003
		 00000008 0000003c 00000000 800003c0
		 00000000 ffffffff 00000000 0000003c
		 10000000 800003c1 00000000 ffffffff
		 00000000 0000003c 20000000 800003c2
		 00000000 ffffffff 00000000 0000003c
		 30000000 800003c3 00000000 ffffffff
		 00000000 0000003c 40000000 800003c4
		 00000000 ffffffff 00000000 0000003c
		 50000000 800003c5 00000000 ffffffff
		 00000000 0000003c 60000000 800003c6
		 00000000 ffffffff 00000000 0000003c
		 70000000 800003c7 00000000 ffffffff
		 00000000 0000003c 80000000 800003c8
		 00000000 ffffffff 00000000 0000003c
		 90000000 800003c9 00000000 ffffffff
		 00000000 0000003c a0000000 800003ca
		 00000000 ffffffff 00000000 0000003c
		 b0000000 800003cb 00000000 ffffffff
		 00000000 0000003c c0000000 800003cc
		 00000000 ffffffff 00000000 0000003c
		 d0000000 800003cd 00000000 ffffffff
		 00000000 0000003c e0000000 800003ce
		 00000000 ffffffff 00000000 0000003c
		 f0000000 800003cf 00000000 ffffffff
		 00000000 0000003d 00000000 800003d0
		 00000000 ffffffff 00000000 0000003d
		 10000000 800003d1 00000000 ffffffff
		 00000000 0000003d 20000000 800003d2
		 00000000 ffffffff 00000000 0000003d
		 30000000 800003d3 00000000 ffffffff
		 00000000 0000003d 40000000 800003d4
		 00000000 ffffffff 00000000 0000003d
		 50000000 800003d5 00000000 ffffffff
		 00000000 0000003d 60000000 800003d6
		 00000000 ffffffff 00000000 0000003d
		 70000000 800003d7 00000000 ffffffff
		 00000000 0000003d 80000000 800003d8
		 00000000 ffffffff 00000000 0000003d
		 90000000 800003d9 00000000 ffffffff
		 00000000 0000003d a0000000 800003da
		 00000000 ffffffff 00000000 0000003d
		 b0000000 800003db 00000000 ffffffff
		 00000000 0000003d c0000000 800003dc
		 00000000 ffffffff 00000000 0000003d
		 d0000000 800003dd 00000000 ffffffff
		 00000000 0000003d e0000000 800003de
		 00000000 ffffffff 00000000 0000003d
		 f0000000 800003df 00000000 ffffffff
		 00000000 0000003e 00000000 800003e0
		 00000000 ffffffff 00000000 0000003e
		 10000000 800003e1 00000000 ffffffff
		 00000000 0000003e 20000000 800003e2
		 00000000 ffffffff 00000000 0000003e
		 30000000 800003e3 00000000 ffffffff
		 00000000 0000003e 40000000 800003e4
		 00000000 ffffffff 00000000 0000003e
		 50000000 800003e5 00000000 ffffffff
		 00000000 0000003e 60000000 800003e6
		 00000000 ffffffff 00000000 0000003e
		 70000000 800003e7 00000000 ffffffff
		 00000000 0000003e 80000000 800003e8
		 00000000 ffffffff 00000000 0000003e
		 90000000 800003e9 00000000 ffffffff
		 00000000 0000003e a0000000 800003ea
		 00000000 ffffffff 00000000 0000003e
		 b0000000 800003eb 00000000 ffffffff
		 00000000 0000003e c0000000 800003ec
		 00000000 ffffffff 00000000 0000003e
		 d0000000 800003ed 00000000 ffffffff
		 00000000 0000003e e0000000 800003ee
		 00000000 ffffffff 00000000 0000003e
		 f0000000 800003ef 00000000 ffffffff
		 00000000 0000003f 00000000 800003f0
		 00000000 ffffffff 00000000 0000003f
		 10000000 800003f1 00000000 ffffffff
		 00000000 0000003f 20000000 800003f2
		 00000000 ffffffff 00000000 0000003f
		 30000000 800003f3 00000000 ffffffff
		 00000000 0000003f 40000000 800003f4
		 00000000 ffffffff 00000000 0000003f
		 50000000 800003f5 00000000 ffffffff
		 00000000 0000003f 60000000 800003f6
		 00000000 ffffffff 00000000 0000003f
		 70000000 800003f7 00000000 ffffffff
		 00000000 0000003f 80000000 800003f8
		 00000000 ffffffff 00000000 0000003f
		 90000000 800003f9 00000000 ffffffff
		 00000000 0000003f a0000000 800003fa
		 00000000 ffffffff 00000000 0000003f
		 b0000000 800003fb 00000000 ffffffff
		 00000000 0000003f c0000000 800003fc
		 00000000 ffffffff 00000000 0000003f
		 d0000000 800003fd 00000000 ffffffff
		 00000000 0000003f e0000000 800003fe
		 00000000 ffffffff 00000000 0000003f
		 f0000000 800003ff 00000000 ffffffff
		 00000000 00000040 00000000 80000400
		 00000000 ffffffff 00000000 00000040
		 10000000 80000401 00000000 ffffffff
		 00000000 00000040 20000000 80000402
		 00000000 ffffffff 00000000 00000040
		 30000000 80000403 00000000 ffffffff
		 00000000 00000040 40000000 80000404
		 00000000 ffffffff 00000000 00000040
		 50000000 80000405 00000000 ffffffff
		 00000000 00000040 60000000 80000406
		 00000000 ffffffff 00000000 00000040
		 70000000 80000407 00000000 ffffffff
		 00000000 00000040 80000000 80000408
		 00000000 ffffffff 00000000 00000040
		 90000000 80000409 00000000 ffffffff
		 00000000 00000040 a0000000 8000040a
		 00000000 ffffffff 00000000 00000040
		 b0000000 8000040b 00000000 ffffffff
		 00000000 00000040 c0000000 8000040c
		 00000000 ffffffff 00000000 00000040
		 d0000000 8000040d 00000000 ffffffff
		 00000000 00000040 e0000000 8000040e
		 00000000 ffffffff 00000000 00000040
		 f0000000 8000040f 00000000 ffffffff
		 00000000 00000041 00000000 80000410
		 00000000 ffffffff 00000000 00000041
		 10000000 80000411 00000000 ffffffff
		 00000000 00000041 20000000 80000412
		 00000000 ffffffff 00000000 00000041
		 30000000 80000413 00000000 ffffffff
		 00000000 00000041 40000000 80000414
		 00000000 ffffffff 00000000 00000041
		 50000000 80000415 00000000 ffffffff
		 00000000 00000041 60000000 80000416
		 00000000 ffffffff 00000000 00000041
		 70000000 80000417 00000000 ffffffff
		 00000000 00000041 80000000 80000418
		 00000000 ffffffff 00000000 00000041
		 90000000 80000419 00000000 ffffffff
		 00000000 00000041 a0000000 8000041a
		 00000000 ffffffff 00000000 00000041
		 b0000000 8000041b 00000000 ffffffff
		 00000000 00000041 c0000000 8000041c
		 00000000 ffffffff 00000000 00000041
		 d0000000 8000041d 00000000 ffffffff
		 00000000 00000041 e0000000 8000041e
		 00000000 ffffffff 00000000 00000041
		 f0000000 8000041f 00000000 ffffffff
		 00000000 00000042 00000000 80000420
		 00000000 ffffffff 00000000 00000042
		 10000000 80000421 00000000 ffffffff
		 00000000 00000042 20000000 80000422
		 00000000 ffffffff 00000000 00000042
		 30000000 80000423 00000000 ffffffff
		 00000000 00000042 40000000 80000424
		 00000000 ffffffff 00000000 00000042
		 50000000 80000425 00000000 ffffffff
		 00000000 00000042 60000000 80000426
		 00000000 ffffffff 00000000 00000042
		 70000000 80000427 00000000 ffffffff
		 00000000 00000042 80000000 80000428
		 00000000 ffffffff 00000000 00000042
		 90000000 80000429 00000000 ffffffff
		 00000000 00000042 a0000000 8000042a
		 00000000 ffffffff 00000000 00000042
		 b0000000 8000042b 00000000 ffffffff
		 00000000 00000042 c0000000 8000042c
		 00000000 ffffffff 00000000 00000042
		 d0000000 8000042d 00000000 ffffffff
		 00000000 00000042 e0000000 8000042e
		 00000000 ffffffff 00000000 00000042
		 f0000000 8000042f 00000000 ffffffff
		 00000000 00000043 00000000 80000430
		 00000000 ffffffff 00000000 00000043
		 10000000 80000431 00000000 ffffffff
		 00000000 00000043 20000000 80000432
		 00000000 ffffffff 00000000 00000043
		 30000000 80000433 00000000 ffffffff
		 00000000 00000043 40000000 80000434
		 00000000 ffffffff 00000000 00000043
		 50000000 80000435 00000000 ffffffff
		 00000000 00000043 60000000 80000436
		 00000000 ffffffff 00000000 00000043
		 70000000 80000437 00000000 ffffffff
		 00000000 00000043 80000000 80000438
		 00000000 ffffffff 00000000 00000043
		 90000000 80000439 00000000 ffffffff
		 00000000 00000043 a0000000 8000043a
		 00000000 ffffffff 00000000 00000043
		 b0000000 8000043b 00000000 ffffffff
		 00000000 00000043 c0000000 8000043c
		 00000000 ffffffff 00000000 00000043
		 d0000000 8000043d 00000000 ffffffff
		 00000000 00000043 e0000000 8000043e
		 00000000 ffffffff 00000000 00000043
		 f0000000 8000043f 00000000 ffffffff
		 00000000 00000044 00000000 80000440
		 00000000 ffffffff 00000000 00000044
		 10000000 80000441 00000000 ffffffff
		 00000000 00000044 20000000 80000442
		 00000000 ffffffff 00000000 00000044
		 30000000 80000443 00000000 ffffffff
		 00000000 00000044 40000000 80000444
		 00000000 ffffffff 00000000 00000044
		 50000000 80000445 00000000 ffffffff
		 00000000 00000044 60000000 80000446
		 00000000 ffffffff 00000000 00000044
		 70000000 80000447 00000000 ffffffff
		 00000000 00000044 80000000 80000448
		 00000000 ffffffff 00000000 00000044
		 90000000 80000449 00000000 ffffffff
		 00000000 00000044 a0000000 8000044a
		 00000000 ffffffff 00000000 00000044
		 b0000000 8000044b 00000000 ffffffff
		 00000000 00000044 c0000000 8000044c
		 00000000 ffffffff 00000000 00000044
		 d0000000 8000044d 00000000 ffffffff
		 00000000 00000044 e0000000 8000044e
		 00000000 ffffffff 00000000 00000044
		 f0000000 8000044f 00000000 ffffffff
		 00000000 00000045 00000000 80000450
		 00000000 ffffffff 00000000 00000045
		 10000000 80000451 00000000 ffffffff
		 00000000 00000045 20000000 80000452
		 00000000 ffffffff 00000000 00000045
		 30000000 80000453 00000000 ffffffff
		 00000000 00000045 40000000 80000454
		 00000000 ffffffff 00000000 00000045
		 50000000 80000455 00000000 ffffffff
		 00000000 00000045 60000000 80000456
		 00000000 ffffffff 00000000 00000045
		 70000000 80000457 00000000 ffffffff
		 00000000 00000045 80000000 80000458
		 00000000 ffffffff 00000000 00000045
		 90000000 80000459 00000000 ffffffff
		 00000000 00000045 a0000000 8000045a
		 00000000 ffffffff 00000000 00000045
		 b0000000 8000045b 00000000 ffffffff
		 00000000 00000045 c0000000 8000045c
		 00000000 ffffffff 00000000 00000045
		 d0000000 8000045d 00000000 ffffffff
		 00000000 00000045 e0000000 8000045e
		 00000000 ffffffff 00000000 00000045
		 f0000000 8000045f 00000000 ffffffff
		 00000000 00000046 00000000 80000460
		 00000000 ffffffff 00000000 00000046
		 10000000 80000461 00000000 ffffffff
		 00000000 00000046 20000000 80000462
		 00000000 ffffffff 00000000 00000046
		 30000000 80000463 00000000 ffffffff
		 00000000 00000046 40000000 80000464
		 00000000 ffffffff 00000000 00000046
		 50000000 80000465 00000000 ffffffff
		 00000000 00000046 60000000 80000466
		 00000000 ffffffff 00000000 00000046
		 70000000 80000467 00000000 ffffffff
		 00000000 00000046 80000000 80000468
		 00000000 ffffffff 00000000 00000046
		 90000000 80000469 00000000 ffffffff
		 00000000 00000046 a0000000 8000046a
		 00000000 ffffffff 00000000 00000046
		 b0000000 8000046b 00000000 ffffffff
		 00000000 00000046 c0000000 8000046c
		 00000000 ffffffff 00000000 00000046
		 d0000000 8000046d 00000000 ffffffff
		 00000000 00000046 e0000000 8000046e
		 00000000 ffffffff 00000000 00000046
		 f0000000 8000046f 00000000 ffffffff
		 00000000 00000047 00000000 80000470
		 00000000 ffffffff 00000000 00000047
		 10000000 80000471 00000000 ffffffff
		 00000000 00000047 20000000 80000472
		 00000000 ffffffff 00000000 00000047
		 30000000 80000473 00000000 ffffffff
		 00000000 00000047 40000000 80000474
		 00000000 ffffffff 00000000 00000047
		 50000000 80000475 00000000 ffffffff
		 00000000 00000047 60000000 80000476
		 00000000 ffffffff 00000000 00000047
		 70000000 80000477 00000000 ffffffff
		 00000000 00000047 80000000 80000478
		 00000000 ffffffff 00000000 00000047
		 90000000 80000479 00000000 ffffffff
		 00000000 00000047 a0000000 8000047a
		 00000000 ffffffff 00000000 00000047
		 b0000000 8000047b 00000000 ffffffff
		 00000000 00000047 c0000000 8000047c
		 00000000 ffffffff 00000000 00000047
		 d0000000 8000047d 00000000 ffffffff
		 00000000 00000047 e0000000 8000047e
		 00000000 ffffffff 00000000 00000047
		 f0000000 8000047f 00000000 ffffffff
		 00000000 00000048 00000000 80000480
		 00000000 ffffffff 00000000 00000048
		 10000000 80000481 00000000 ffffffff
		 00000000 00000048 20000000 80000482
		 00000000 ffffffff 00000000 00000048
		 30000000 80000483 00000000 ffffffff
		 00000000 00000048 40000000 80000484
		 00000000 ffffffff 00000000 00000048
		 50000000 80000485 00000000 ffffffff
		 00000000 00000048 60000000 80000486
		 00000000 ffffffff 00000000 00000048
		 70000000 80000487 00000000 ffffffff
		 00000000 00000048 80000000 80000488
		 00000000 ffffffff 00000000 00000048
		 90000000 80000489 00000000 ffffffff
		 00000000 00000048 a0000000 8000048a
		 00000000 ffffffff 00000000 00000048
		 b0000000 8000048b 00000000 ffffffff
		 00000000 00000048 c0000000 8000048c
		 00000000 ffffffff 00000000 00000048
		 d0000000 8000048d 00000000 ffffffff
		 00000000 00000048 e0000000 8000048e
		 00000000 ffffffff 00000000 00000048
		 f0000000 8000048f 00000000 ffffffff
		 00000000 00000049 00000000 80000490
		 00000000 ffffffff 00000000 00000049
		 10000000 80000491 00000000 ffffffff
		 00000000 00000049 20000000 80000492
		 00000000 ffffffff 00000000 00000049
		 30000000 80000493 00000000 ffffffff
		 00000000 00000049 40000000 80000494
		 00000000 ffffffff 00000000 00000049
		 50000000 80000495 00000000 ffffffff
		 00000000 00000049 60000000 80000496
		 00000000 ffffffff 00000000 00000049
		 70000000 80000497 00000000 ffffffff
		 00000000 00000049 80000000 80000498
		 00000000 ffffffff 00000000 00000049
		 90000000 80000499 00000000 ffffffff
		 00000000 00000049 a0000000 8000049a
		 00000000 ffffffff 00000000 00000049
		 b0000000 8000049b 00000000 ffffffff
		 00000000 00000049 c0000000 8000049c
		 00000000 ffffffff 00000000 00000049
		 d0000000 8000049d 00000000 ffffffff
		 00000000 00000049 e0000000 8000049e
		 00000000 ffffffff 00000000 00000049
		 f0000000 8000049f 00000000 ffffffff
		 00000000 0000004a 00000000 800004a0
		 00000000 ffffffff 00000000 0000004a
		 10000000 800004a1 00000000 ffffffff
		 00000000 0000004a 20000000 800004a2
		 00000000 ffffffff 00000000 0000004a
		 30000000 800004a3 00000000 ffffffff
		 00000000 0000004a 40000000 800004a4
		 00000000 ffffffff 00000000 0000004a
		 50000000 800004a5 00000000 ffffffff
		 00000000 0000004a 60000000 800004a6
		 00000000 ffffffff 00000000 0000004a
		 70000000 800004a7 00000000 ffffffff
		 00000000 0000004a 80000000 800004a8
		 00000000 ffffffff 00000000 0000004a
		 90000000 800004a9 00000000 ffffffff
		 00000000 0000004a a0000000 800004aa
		 00000000 ffffffff 00000000 0000004a
		 b0000000 800004ab 00000000 ffffffff
		 00000000 0000004a c0000000 800004ac
		 00000000 ffffffff 00000000 0000004a
		 d0000000 800004ad 00000000 ffffffff
		 00000000 0000004a e0000000 800004ae
		 00000000 ffffffff 00000000 0000004a
		 f0000000 800004af 00000000 ffffffff
		 00000000 0000004b 00000000 800004b0
		 00000000 ffffffff 00000000 0000004b
		 10000000 800004b1 00000000 ffffffff
		 00000000 0000004b 20000000 800004b2
		 00000000 ffffffff 00000000 0000004b
		 30000000 800004b3 00000000 ffffffff
		 00000000 0000004b 40000000 800004b4
		 00000000 ffffffff 00000000 0000004b
		 50000000 800004b5 00000000 ffffffff
		 00000000 0000004b 60000000 800004b6
		 00000000 ffffffff 00000000 0000004b
		 70000000 800004b7 00000000 ffffffff
		 00000000 0000004b 80000000 800004b8
		 00000000 ffffffff 00000000 0000004b
		 90000000 800004b9 00000000 ffffffff
		 00000000 0000004b a0000000 800004ba
		 00000000 ffffffff 00000000 0000004b
		 b0000000 800004bb 00000000 ffffffff
		 00000000 0000004b c0000000 800004bc
		 00000000 ffffffff 00000000 0000004b
		 d0000000 800004bd 00000000 ffffffff
		 00000000 0000004b e0000000 800004be
		 00000000 ffffffff 00000000 0000004b
		 f0000000 800004bf 00000000 ffffffff
		 00000000 0000004c 00000000 800004c0
		 00000000 ffffffff 00000000 0000004c
		 10000000 800004c1 00000000 ffffffff
		 00000000 0000004c 20000000 800004c2
		 00000000 ffffffff 00000000 0000004c
		 30000000 800004c3 00000000 ffffffff
		 00000000 0000004c 40000000 800004c4
		 00000000 ffffffff 00000000 0000004c
		 50000000 800004c5 00000000 ffffffff
		 00000000 0000004c 60000000 800004c6
		 00000000 ffffffff 00000000 0000004c
		 70000000 800004c7 00000000 ffffffff
		 00000000 0000004c 80000000 800004c8
		 00000000 ffffffff 00000000 0000004c
		 90000000 800004c9 00000000 ffffffff
		 00000000 0000004c a0000000 800004ca
		 00000000 ffffffff 00000000 0000004c
		 b0000000 800004cb 00000000 ffffffff
		 00000000 0000004c c0000000 800004cc
		 00000000 ffffffff 00000000 0000004c
		 d0000000 800004cd 00000000 ffffffff
		 00000000 0000004c e0000000 800004ce
		 00000000 ffffffff 00000000 0000004c
		 f0000000 800004cf 00000000 ffffffff
		 00000000 0000004d 00000000 800004d0
		 00000000 ffffffff 00000000 0000004d
		 10000000 800004d1 00000000 ffffffff
		 00000000 0000004d 20000000 800004d2
		 00000000 ffffffff 00000000 0000004d
		 30000000 800004d3 00000000 ffffffff
		 00000000 0000004d 40000000 800004d4
		 00000000 ffffffff 00000000 0000004d
		 50000000 800004d5 00000000 ffffffff
		 00000000 0000004d 60000000 800004d6
		 00000000 ffffffff 00000000 0000004d
		 70000000 800004d7 00000000 ffffffff
		 00000000 0000004d 80000000 800004d8
		 00000000 ffffffff 00000000 0000004d
		 90000000 800004d9 00000000 ffffffff
		 00000000 0000004d a0000000 800004da
		 00000000 ffffffff 00000000 0000004d
		 b0000000 800004db 00000000 ffffffff
		 00000000 0000004d c0000000 800004dc
		 00000000 ffffffff 00000000 0000004d
		 d0000000 800004dd 00000000 ffffffff
		 00000000 0000004d e0000000 800004de
		 00000000 ffffffff 00000000 0000004d
		 f0000000 800004df 00000000 ffffffff
		 00000000 0000004e 00000000 800004e0
		 00000000 ffffffff 00000000 0000004e
		 10000000 800004e1 00000000 ffffffff
		 00000000 0000004e 20000000 800004e2
		 00000000 ffffffff 00000000 0000004e
		 30000000 800004e3 00000000 ffffffff
		 00000000 0000004e 40000000 800004e4
		 00000000 ffffffff 00000000 0000004e
		 50000000 800004e5 00000000 ffffffff
		 00000000 0000004e 60000000 800004e6
		 00000000 ffffffff 00000000 0000004e
		 70000000 800004e7 00000000 ffffffff
		 00000000 0000004e 80000000 800004e8
		 00000000 ffffffff 00000000 0000004e
		 90000000 800004e9 00000000 ffffffff
		 00000000 0000004e a0000000 800004ea
		 00000000 ffffffff 00000000 0000004e
		 b0000000 800004eb 00000000 ffffffff
		 00000000 0000004e c0000000 800004ec
		 00000000 ffffffff 00000000 0000004e
		 d0000000 800004ed 00000000 ffffffff
		 00000000 0000004e e0000000 800004ee
		 00000000 ffffffff 00000000 0000004e
		 f0000000 800004ef 00000000 ffffffff
		 00000000 0000004f 00000000 800004f0
		 00000000 ffffffff 00000000 0000004f
		 10000000 800004f1 00000000 ffffffff
		 00000000 0000004f 20000000 800004f2
		 00000000 ffffffff 00000000 0000004f
		 30000000 800004f3 00000000 ffffffff
		 00000000 0000004f 40000000 800004f4
		 00000000 ffffffff 00000000 0000004f
		 50000000 800004f5 00000000 ffffffff
		 00000000 0000004f 60000000 800004f6
		 00000000 ffffffff 00000000 0000004f
		 70000000 800004f7 00000000 ffffffff
		 00000000 0000004f 80000000 800004f8
		 00000000 ffffffff 00000000 0000004f
		 90000000 800004f9 00000000 ffffffff
		 00000000 0000004f a0000000 800004fa
		 00000000 ffffffff 00000000 0000004f
		 b0000000 800004fb 00000000 ffffffff
		 00000000 0000004f c0000000 800004fc
		 00000000 ffffffff 00000000 0000004f
		 d0000000 800004fd 00000000 ffffffff
		 00000000 0000004f e0000000 800004fe
		 00000000 ffffffff 00000000 0000004f
		 f0000000 800004ff 00000000 ffffffff
		 00000000 00000050 00000000 80000500
		 00000000 ffffffff 00000000 00000050
		 10000000 80000501 00000000 ffffffff
		 00000000 00000050 20000000 80000502
		 00000000 ffffffff 00000000 00000050
		 30000000 80000503 00000000 ffffffff
		 00000000 00000050 40000000 80000504
		 00000000 ffffffff 00000000 00000050
		 50000000 80000505 00000000 ffffffff
		 00000000 00000050 60000000 80000506
		 00000000 ffffffff 00000000 00000050
		 70000000 80000507 00000000 ffffffff
		 00000000 00000050 80000000 80000508
		 00000000 ffffffff 00000000 00000050
		 90000000 80000509 00000000 ffffffff
		 00000000 00000050 a0000000 8000050a
		 00000000 ffffffff 00000000 00000050
		 b0000000 8000050b 00000000 ffffffff
		 00000000 00000050 c0000000 8000050c
		 00000000 ffffffff 00000000 00000050
		 d0000000 8000050d 00000000 ffffffff
		 00000000 00000050 e0000000 8000050e
		 00000000 ffffffff 00000000 00000050
		 f0000000 8000050f 00000000 ffffffff
		 00000000 00000051 00000000 80000510
		 00000000 ffffffff 00000000 00000051
		 10000000 80000511 00000000 ffffffff
		 00000000 00000051 20000000 80000512
		 00000000 ffffffff 00000000 00000051
		 30000000 80000513 00000000 ffffffff
		 00000000 00000051 40000000 80000514
		 00000000 ffffffff 00000000 00000051
		 50000000 80000515 00000000 ffffffff
		 00000000 00000051 60000000 80000516
		 00000000 ffffffff 00000000 00000051
		 70000000 80000517 00000000 ffffffff
		 00000000 00000051 80000000 80000518
		 00000000 ffffffff 00000000 00000051
		 90000000 80000519 00000000 ffffffff
		 00000000 00000051 a0000000 8000051a
		 00000000 ffffffff 00000000 00000051
		 b0000000 8000051b 00000000 ffffffff
		 00000000 00000051 c0000000 8000051c
		 00000000 ffffffff 00000000 00000051
		 d0000000 8000051d 00000000 ffffffff
		 00000000 00000051 e0000000 8000051e
		 00000000 ffffffff 00000000 00000051
		 f0000000 8000051f 00000000 ffffffff
		 00000000 00000052 00000000 80000520
		 00000000 ffffffff 00000000 00000052
		 10000000 80000521 00000000 ffffffff
		 00000000 00000052 20000000 80000522
		 00000000 ffffffff 00000000 00000052
		 30000000 80000523 00000000 ffffffff
		 00000000 00000052 40000000 80000524
		 00000000 ffffffff 00000000 00000052
		 50000000 80000525 00000000 ffffffff
		 00000000 00000052 60000000 80000526
		 00000000 ffffffff 00000000 00000052
		 70000000 80000527 00000000 ffffffff
		 00000000 00000052 80000000 80000528
		 00000000 ffffffff 00000000 00000052
		 90000000 80000529 00000000 ffffffff
		 00000000 00000052 a0000000 8000052a
		 00000000 ffffffff 00000000 00000052
		 b0000000 8000052b 00000000 ffffffff
		 00000000 00000052 c0000000 8000052c
		 00000000 ffffffff 00000000 00000052
		 d0000000 8000052d 00000000 ffffffff
		 00000000 00000052 e0000000 8000052e
		 00000000 ffffffff 00000000 00000052
		 f0000000 8000052f 00000000 ffffffff
		 00000000 00000053 00000000 80000530
		 00000000 ffffffff 00000000 00000053
		 10000000 80000531 00000000 ffffffff
		 00000000 00000053 20000000 80000532
		 00000000 ffffffff 00000000 00000053
		 30000000 80000533 00000000 ffffffff
		 00000000 00000053 40000000 80000534
		 00000000 ffffffff 00000000 00000053
		 50000000 80000535 00000000 ffffffff
		 00000000 00000053 60000000 80000536
		 00000000 ffffffff 00000000 00000053
		 70000000 80000537 00000000 ffffffff
		 00000000 00000053 80000000 80000538
		 00000000 ffffffff 00000000 00000053
		 90000000 80000539 00000000 ffffffff
		 00000000 00000053 a0000000 8000053a
		 00000000 ffffffff 00000000 00000053
		 b0000000 8000053b 00000000 ffffffff
		 00000000 00000053 c0000000 8000053c
		 00000000 ffffffff 00000000 00000053
		 d0000000 8000053d 00000000 ffffffff
		 00000000 00000053 e0000000 8000053e
		 00000000 ffffffff 00000000 00000053
		 f0000000 8000053f 00000000 ffffffff
		 00000000 00000054 00000000 80000540
		 00000000 ffffffff 00000000 00000054
		 10000000 80000541 00000000 ffffffff
		 00000000 00000054 20000000 80000542
		 00000000 ffffffff 00000000 00000054
		 30000000 80000543 00000000 ffffffff
		 00000000 00000054 40000000 80000544
		 00000000 ffffffff 00000000 00000054
		 50000000 80000545 00000000 ffffffff
		 00000000 00000054 60000000 80000546
		 00000000 ffffffff 00000000 00000054
		 70000000 80000547 00000000 ffffffff
		 00000000 00000054 80000000 80000548
		 00000000 ffffffff 00000000 00000054
		 90000000 80000549 00000000 ffffffff
		 00000000 00000054 a0000000 8000054a
		 00000000 ffffffff 00000000 00000054
		 b0000000 8000054b 00000000 ffffffff
		 00000000 00000054 c0000000 8000054c
		 00000000 ffffffff 00000000 00000054
		 d0000000 8000054d 00000000 ffffffff
		 00000000 00000054 e0000000 8000054e
		 00000000 ffffffff 00000000 00000054
		 f0000000 8000054f 00000000 ffffffff
		 00000000 00000055 00000000 80000550
		 00000000 ffffffff 00000000 00000055
		 10000000 80000551 00000000 ffffffff
		 00000000 00000055 20000000 80000552
		 00000000 ffffffff 00000000 00000055
		 30000000 80000553 00000000 ffffffff
		 00000000 00000055 40000000 80000554
		 00000000 ffffffff 00000000 00000055
		 50000000 80000555 00000000 ffffffff
		 00000000 00000055 60000000 80000556
		 00000000 ffffffff 00000000 00000055
		 70000000 80000557 00000000 ffffffff
		 00000000 00000055 80000000 80000558
		 00000000 ffffffff 00000000 00000055
		 90000000 80000559 00000000 ffffffff
		 00000000 00000055 a0000000 8000055a
		 00000000 ffffffff 00000000 00000055
		 b0000000 8000055b 00000000 ffffffff
		 00000000 00000055 c0000000 8000055c
		 00000000 ffffffff 00000000 00000055
		 d0000000 8000055d 00000000 ffffffff
		 00000000 00000055 e0000000 8000055e
		 00000000 ffffffff 00000000 00000055
		 f0000000 8000055f 00000000 ffffffff
		 00000000 00000056 00000000 80000560
		 00000000 ffffffff 00000000 00000056
		 10000000 80000561 00000000 ffffffff
		 00000000 00000056 20000000 80000562
		 00000000 ffffffff 00000000 00000056
		 30000000 80000563 00000000 ffffffff
		 00000000 00000056 40000000 80000564
		 00000000 ffffffff 00000000 00000056
		 50000000 80000565 00000000 ffffffff
		 00000000 00000056 60000000 80000566
		 00000000 ffffffff 00000000 00000056
		 70000000 80000567 00000000 ffffffff
		 00000000 00000056 80000000 80000568
		 00000000 ffffffff 00000000 00000056
		 90000000 80000569 00000000 ffffffff
		 00000000 00000056 a0000000 8000056a
		 00000000 ffffffff 00000000 00000056
		 b0000000 8000056b 00000000 ffffffff
		 00000000 00000056 c0000000 8000056c
		 00000000 ffffffff 00000000 00000056
		 d0000000 8000056d 00000000 ffffffff
		 00000000 00000056 e0000000 8000056e
		 00000000 ffffffff 00000000 00000056
		 f0000000 8000056f 00000000 ffffffff
		 00000000 00000057 00000000 80000570
		 00000000 ffffffff 00000000 00000057
		 10000000 80000571 00000000 ffffffff
		 00000000 00000057 20000000 80000572
		 00000000 ffffffff 00000000 00000057
		 30000000 80000573 00000000 ffffffff
		 00000000 00000057 40000000 80000574
		 00000000 ffffffff 00000000 00000057
		 50000000 80000575 00000000 ffffffff
		 00000000 00000057 60000000 80000576
		 00000000 ffffffff 00000000 00000057
		 70000000 80000577 00000000 ffffffff
		 00000000 00000057 80000000 80000578
		 00000000 ffffffff 00000000 00000057
		 90000000 80000579 00000000 ffffffff
		 00000000 00000057 a0000000 8000057a
		 00000000 ffffffff 00000000 00000057
		 b0000000 8000057b 00000000 ffffffff
		 00000000 00000057 c0000000 8000057c
		 00000000 ffffffff 00000000 00000057
		 d0000000 8000057d 00000000 ffffffff
		 00000000 00000057 e0000000 8000057e
		 00000000 ffffffff 00000000 00000057
		 f0000000 8000057f 00000000 ffffffff
		 00000000 00000058 00000000 80000580
		 00000000 ffffffff 00000000 00000058
		 10000000 80000581 00000000 ffffffff
		 00000000 00000058 20000000 80000582
		 00000000 ffffffff 00000000 00000058
		 30000000 80000583 00000000 ffffffff
		 00000000 00000058 40000000 80000584
		 00000000 ffffffff 00000000 00000058
		 50000000 80000585 00000000 ffffffff
		 00000000 00000058 60000000 80000586
		 00000000 ffffffff 00000000 00000058
		 70000000 80000587 00000000 ffffffff
		 00000000 00000058 80000000 80000588
		 00000000 ffffffff 00000000 00000058
		 90000000 80000589 00000000 ffffffff
		 00000000 00000058 a0000000 8000058a
		 00000000 ffffffff 00000000 00000058
		 b0000000 8000058b 00000000 ffffffff
		 00000000 00000058 c0000000 8000058c
		 00000000 ffffffff 00000000 00000058
		 d0000000 8000058d 00000000 ffffffff
		 00000000 00000058 e0000000 8000058e
		 00000000 ffffffff 00000000 00000058
		 f0000000 8000058f 00000000 ffffffff
		 00000000 00000059 00000000 80000590
		 00000000 ffffffff 00000000 00000059
		 10000000 80000591 00000000 ffffffff
		 00000000 00000059 20000000 80000592
		 00000000 ffffffff 00000000 00000059
		 30000000 80000593 00000000 ffffffff
		 00000000 00000059 40000000 80000594
		 00000000 ffffffff 00000000 00000059
		 50000000 80000595 00000000 ffffffff
		 00000000 00000059 60000000 80000596
		 00000000 ffffffff 00000000 00000059
		 70000000 80000597 00000000 ffffffff
		 00000000 00000059 80000000 80000598
		 00000000 ffffffff 00000000 00000059
		 90000000 80000599 00000000 ffffffff
		 00000000 00000059 a0000000 8000059a
		 00000000 ffffffff 00000000 00000059
		 b0000000 8000059b 00000000 ffffffff
		 00000000 00000059 c0000000 8000059c
		 00000000 ffffffff 00000000 00000059
		 d0000000 8000059d 00000000 ffffffff
		 00000000 00000059 e0000000 8000059e
		 00000000 ffffffff 00000000 00000059
		 f0000000 8000059f 00000000 ffffffff
		 00000000
ltcalpine2-lp9:/proc/device-tree/ibm,dynamic-reconfiguration-memory # 
ltcalpine2-lp9:/proc/device-tree/ibm,dynamic-reconfiguration-memory # cat ~/dmesg.log
[    0.000000] Linux version 4.4.63-2.1.wi91275.sp3.055a_27-default (geeko@buildhost) (gcc version 4.8.5 (SUSE Linux) ) #1 SMP Tue May 2 10:56:31 EDT 2017 (27e2849)
[    0.000000] Node 0 Memory: 0x0-0x510000000
[    0.000000] Node 1 Memory: 0x510000000-0x5c0000000
[    0.000000] Node 6 Memory: 0x5c0000000-0x26b0000000
[    0.000000] Node 7 Memory: 0x26b0000000-0x3c00000000
[    0.000000] numa: Initmem setup node 0 [mem 0x00000000-0x50fffffff]
[    0.000000] numa:   NODE_DATA [mem 0x50fff6100-0x50fffffff]
[    0.000000] numa: Initmem setup node 1 [mem 0x510000000-0x5bfffffff]
[    0.000000] numa:   NODE_DATA [mem 0x5bfff6100-0x5bfffffff]
[    0.000000] numa: Initmem setup node 6 [mem 0x5c0000000-0x26afffffff]
[    0.000000] numa:   NODE_DATA [mem 0x26afff6100-0x26afffffff]
[    0.000000] numa: Initmem setup node 7 [mem 0x26b0000000-0x3bffffffff]
[    0.000000] numa:   NODE_DATA [mem 0x3bffbe2100-0x3bffbebfff]
[    0.000000] Section 15357 and 15359 (node 7) have a circular dependency on usemap and pgdat allocations
[    0.000000] PPC64 nvram contains 15360 bytes
[    0.000000] Top of RAM: 0x3c00000000, Total RAM: 0x3c00000000
[    0.000000] Memory hole size: 0MB
[    0.000000] Zone ranges:
[    0.000000]   DMA      [mem 0x0000000000000000-0x0000003bffffffff]
[    0.000000]   DMA32    empty
[    0.000000]   Normal   empty
[    0.000000] Movable zone start for each node
[    0.000000] Early memory node ranges
[    0.000000]   node   0: [mem 0x0000000000000000-0x000000050fffffff]
[    0.000000]   node   1: [mem 0x0000000510000000-0x00000005bfffffff]
[    0.000000]   node   6: [mem 0x00000005c0000000-0x00000026afffffff]
[    0.000000]   node   7: [mem 0x00000026b0000000-0x0000003bffffffff]
[    0.000000] Initmem setup node 0 [mem 0x0000000000000000-0x000000050fffffff]
[    0.000000] On node 0 totalpages: 331776
[    0.000000]   DMA zone: 324 pages used for memmap
[    0.000000]   DMA zone: 0 pages reserved
[    0.000000]   DMA zone: 331776 pages, LIFO batch:1
[    0.000000] Initmem setup node 1 [mem 0x0000000510000000-0x00000005bfffffff]
[    0.000000] On node 1 totalpages: 45056
[    0.000000]   DMA zone: 44 pages used for memmap
[    0.000000]   DMA zone: 0 pages reserved
[    0.000000]   DMA zone: 45056 pages, LIFO batch:1
[    0.000000] Initmem setup node 6 [mem 0x00000005c0000000-0x00000026afffffff]
[    0.000000] On node 6 totalpages: 2158592
[    0.000000]   DMA zone: 2108 pages used for memmap
[    0.000000]   DMA zone: 0 pages reserved
[    0.000000]   DMA zone: 2158592 pages, LIFO batch:1
[    0.000000] Initmem setup node 7 [mem 0x00000026b0000000-0x0000003bffffffff]
[    0.000000] On node 7 totalpages: 1396736
[    0.000000]   DMA zone: 1364 pages used for memmap
[    0.000000]   DMA zone: 0 pages reserved
[    0.000000]   DMA zone: 1396736 pages, LIFO batch:1
ltcalpine2-lp9:/proc/device-tree/ibm,dynamic-reconfiguration-memory #
Michael Bringmann June 7, 2017, 5:28 p.m. UTC | #26
Here is the information from 2 different kernels.  I have not been able to retrieve
the information matching yesterday's attachments, yet, as those dumps were
acquired in April.
 
Attached please find 2 dumps of similar material from kernels running with my
current patches (Linux 4.4, Linux 4.12).

On 06/07/2017 07:08 AM, Michael Ellerman wrote:
> Michael Bringmann <mwb@linux.vnet.ibm.com> writes:
> 
>> On 06/06/2017 04:48 AM, Michael Ellerman wrote:
>>> Michael Bringmann <mwb@linux.vnet.ibm.com> writes:
>>>> On 06/01/2017 04:36 AM, Michael Ellerman wrote:
>>>>> Do you actually see mention of nodes 0 and 8 in the dmesg?
>>>>
>>>> When the 'numa.c' code is built with debug messages, and the system was
>>>> given that configuration by pHyp, yes, I did.
>>>>
>>>>> What does it say?
>>>>
>>>> The debug message for each core thread would be something like,
>>>>
>>>>     removing cpu 64 from node 0
>>>>     adding cpu 64 to node 8
>>>>
>>>> repeated for all 8 threads of the CPU, and usually with the messages
>>>> for all of the CPUs coming out intermixed on the console/dmesg log.
>>>
>>> OK. I meant what do you see at boot.
>>
>> Here is an example with nodes 0,2,6,7, node 0 starts out empty:
>>
>> [    0.000000] Initmem setup node 0
>> [    0.000000]   NODE_DATA [mem 0x3bff7d6300-0x3bff7dffff]
>> [    0.000000]     NODE_DATA(0) on node 7
>> [    0.000000] Initmem setup node 2 [mem 0x00000000-0x13ffffffff]
>> [    0.000000]   NODE_DATA [mem 0x13ffff6300-0x13ffffffff]
>> [    0.000000] Initmem setup node 6 [mem 0x1400000000-0x34afffffff]
>> [    0.000000]   NODE_DATA [mem 0x34afff6300-0x34afffffff]
>> [    0.000000] Initmem setup node 7 [mem 0x34b0000000-0x3bffffffff]
>> [    0.000000]   NODE_DATA [mem 0x3bff7cc600-0x3bff7d62ff]
>>
>> [    0.000000] Zone ranges:
>> [    0.000000]   DMA      [mem 0x0000000000000000-0x0000003bffffffff]
>> [    0.000000]   DMA32    empty
>> [    0.000000]   Normal   empty
>> [    0.000000] Movable zone start for each node
>> [    0.000000] Early memory node ranges
>> [    0.000000]   node   2: [mem 0x0000000000000000-0x00000013ffffffff]
>> [    0.000000]   node   6: [mem 0x0000001400000000-0x00000034afffffff]
>> [    0.000000]   node   7: [mem 0x00000034b0000000-0x0000003bffffffff]
>> [    0.000000] Could not find start_pfn for node 0
>> [    0.000000] Initmem setup node 0 [mem 0x0000000000000000-0x0000000000000000]
>> [    0.000000] Initmem setup node 2 [mem 0x0000000000000000-0x00000013ffffffff]
>> [    0.000000] Initmem setup node 6 [mem 0x0000001400000000-0x00000034afffffff]
>> [    0.000000] Initmem setup node 7 [mem 0x00000034b0000000-0x0000003bffffffff]
>> [    0.000000] percpu: Embedded 3 pages/cpu @c000003bf8000000 s155672 r0 d40936 u262144
>> [    0.000000] Built 4 zonelists in Node order, mobility grouping on.  Total pages: 3928320
>>
>> and,
>>
>> [root@ltcalpine2-lp20 ~]# numactl --hardware
>> available: 4 nodes (0,2,6-7)
>> node 0 cpus:
>> node 0 size: 0 MB
>> node 0 free: 0 MB
>> node 2 cpus: 16 17 18 19 20 21 22 23 32 33 34 35 36 37 38 39 56 57 58 59 60 61 62 63
>> node 2 size: 81792 MB
>> node 2 free: 81033 MB
>> node 6 cpus: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 40 41 42 43 44 45 46 47
>> node 6 size: 133743 MB
>> node 6 free: 133097 MB
>> node 7 cpus: 48 49 50 51 52 53 54 55
>> node 7 size: 29877 MB
>> node 7 free: 29599 MB
>> node distances:
>> node   0   2   6   7
>>   0:  10  40  40  40
>>   2:  40  10  40  40
>>   6:  40  40  10  20
>>   7:  40  40  20  10
>> [root@ltcalpine2-lp20 ~]#
> 
> What kernel is that running?
> 
> And can you show me the full ibm,dynamic-memory and lookup-arrays
> properties for that system?
> 
> cheers
> 
>
Michael Ellerman June 13, 2017, 10:45 a.m. UTC | #27
Michael Bringmann <mwb@linux.vnet.ibm.com> writes:

> Here is the information from 2 different kernels.  I have not been able to retrieve
> the information matching yesterday's attachments, yet, as those dumps were
> acquired in April.
>  
> Attached please find 2 dumps of similar material from kernels running with my
> current patches (Linux 4.4, Linux 4.12).

OK thanks.

I'd actually like to see the dmesg output from a kernel *without* your
patches.

Looking at the device tree properties:

ltcalpine2-lp9:/proc/device-tree/ibm,dynamic-reconfiguration-memory # lsprop ibm,associativity-lookup-arrays
ibm,associativity-lookup-arrays
		 00000004 = 4 arrays
                 00000004 = of 4 entries each
                 00000000 00000000 00000000 00000000
		 00000000 00000000 00000001 00000001
                 00000000 00000003 00000006 00000006
                 00000000 00000003 00000007 00000007


Which does tell us that nodes 0, 1, 6 and 7 exist.

So your idea of looking at that and setting any node found in there
online should work.

My only worry is that behaviour appears to be completely undocumented in
PAPR, ie. PAPR explicitly says that property only needs to contain
values for LMBs present at boot.

But possibly we can talk to the PowerVM/PAPR guys and have that changed
so that it becomes something we can rely on.

cheers
Michael Bringmann June 13, 2017, 10:21 p.m. UTC | #28
On a related note, we are discussing the addition of 2 new device-tree properties
with Pete Heyrman and his fellows that should simplify the determination of the
set of required nodes.

* One property would provide the total/max number of nodes needed by the kernel
  on the current hardware.
* A second property would provide the total/max number of nodes that the kernel
  could use on any system to which it could be migrated.

These properties aren't available, yet, and it takes time to define new properties
in the PAPR and have them implemented in pHyp and the kernel.  As an intermediary
step, the systems which are doing a lot of dynamic hot-add/hot-remove configuration
could provide equivalent information to the PowerPC kernel with a command line
parameter.  The 'numa.c' code would then read this value and fill in the necessary
entries in the 'node_possible_map'.

Would you foresee any problems with using such a feature?

Thanks.

On 06/13/2017 05:45 AM, Michael Ellerman wrote:
> Michael Bringmann <mwb@linux.vnet.ibm.com> writes:
> 
>> Here is the information from 2 different kernels.  I have not been able to retrieve
>> the information matching yesterday's attachments, yet, as those dumps were
>> acquired in April.
>>  
>> Attached please find 2 dumps of similar material from kernels running with my
>> current patches (Linux 4.4, Linux 4.12).
> 
> OK thanks.
> 
> I'd actually like to see the dmesg output from a kernel *without* your
> patches.
> 
> Looking at the device tree properties:
> 
> ltcalpine2-lp9:/proc/device-tree/ibm,dynamic-reconfiguration-memory # lsprop ibm,associativity-lookup-arrays
> ibm,associativity-lookup-arrays
> 		 00000004 = 4 arrays
>                  00000004 = of 4 entries each
>                  00000000 00000000 00000000 00000000
> 		 00000000 00000000 00000001 00000001
>                  00000000 00000003 00000006 00000006
>                  00000000 00000003 00000007 00000007
> 
> 
> Which does tell us that nodes 0, 1, 6 and 7 exist.
> 
> So your idea of looking at that and setting any node found in there
> online should work.
> 
> My only worry is that behaviour appears to be completely undocumented in
> PAPR, ie. PAPR explicitly says that property only needs to contain
> values for LMBs present at boot.
> 
> But possibly we can talk to the PowerVM/PAPR guys and have that changed
> so that it becomes something we can rely on.
> 
> cheers
> 
>
Balbir Singh June 14, 2017, 5:25 a.m. UTC | #29
On Wed, Jun 14, 2017 at 8:21 AM, Michael Bringmann <mwb@linux.vnet.ibm.com>
wrote:

> On a related note, we are discussing the addition of 2 new device-tree
> properties
> with Pete Heyrman and his fellows that should simplify the determination
> of the
> set of required nodes.
>
> * One property would provide the total/max number of nodes needed by the
> kernel
>   on the current hardware.
>

Yes, that would be nice to have


> * A second property would provide the total/max number of nodes that the
> kernel
>   could use on any system to which it could be migrated.
>
>
Not sure about this one, are you suggesting more memory can be added
depending on the migration target?



> These properties aren't available, yet, and it takes time to define new
> properties
> in the PAPR and have them implemented in pHyp and the kernel.  As an
> intermediary
> step, the systems which are doing a lot of dynamic hot-add/hot-remove
> configuration
> could provide equivalent information to the PowerPC kernel with a command
> line
> parameter.  The 'numa.c' code would then read this value and fill in the
> necessary
> entries in the 'node_possible_map'.
>
> Would you foresee any problems with using such a feature?
>


Balbir Singh
Balbir Singh June 14, 2017, 5:27 a.m. UTC | #30
On Wed, Jun 14, 2017 at 3:25 PM, Balbir Singh <bsingharora@gmail.com> wrote:
>
>
> On Wed, Jun 14, 2017 at 8:21 AM, Michael Bringmann <mwb@linux.vnet.ibm.com>
> wrote:
>>
>> On a related note, we are discussing the addition of 2 new device-tree
>> properties
>> with Pete Heyrman and his fellows that should simplify the determination
>> of the
>> set of required nodes.
>>
>> * One property would provide the total/max number of nodes needed by the
>> kernel
>>   on the current hardware.
>
>

Yes, that would be nice to have

>
>>
>> * A second property would provide the total/max number of nodes that the
>> kernel
>>   could use on any system to which it could be migrated.
>>
>

Not sure about this one, are you suggesting more memory can be added
depending on the migration target?

>
>
>>
>> These properties aren't available, yet, and it takes time to define new
>> properties
>> in the PAPR and have them implemented in pHyp and the kernel.  As an
>> intermediary
>> step, the systems which are doing a lot of dynamic hot-add/hot-remove
>> configuration
>> could provide equivalent information to the PowerPC kernel with a command
>> line
>> parameter.  The 'numa.c' code would then read this value and fill in the
>> necessary
>> entries in the 'node_possible_map'.
>>
>> Would you foresee any problems with using such a feature?
>
>

Sorry my mailer goofed up, resending

Balbir Singh
Michael Bringmann June 14, 2017, 1:41 p.m. UTC | #31
Hello:

On 06/14/2017 12:27 AM, Balbir Singh wrote:
> On Wed, Jun 14, 2017 at 3:25 PM, Balbir Singh <bsingharora@gmail.com> wrote:
>>
>>
>> On Wed, Jun 14, 2017 at 8:21 AM, Michael Bringmann <mwb@linux.vnet.ibm.com>
>> wrote:
>>>
>>> On a related note, we are discussing the addition of 2 new device-tree
>>> properties
>>> with Pete Heyrman and his fellows that should simplify the determination
>>> of the
>>> set of required nodes.
>>>
>>> * One property would provide the total/max number of nodes needed by the
>>> kernel
>>>   on the current hardware.
>>
>>
> 
> Yes, that would be nice to have
> 
>>
>>>
>>> * A second property would provide the total/max number of nodes that the
>>> kernel
>>>   could use on any system to which it could be migrated.
>>>
>>
> 
> Not sure about this one, are you suggesting more memory can be added
> depending on the migration target?

We would use only one of these numbers to allocate nodes.  I have only been
on the periphery of the discussions, so I can not communicate the full
reasoning as to why both measures would be needed.  We would like to have
the first number for node allocation/initialization, but if only the second
value were provided, we would likely need to use it.

>>
>>
>>>
>>> These properties aren't available, yet, and it takes time to define new
>>> properties
>>> in the PAPR and have them implemented in pHyp and the kernel.  As an
>>> intermediary
>>> step, the systems which are doing a lot of dynamic hot-add/hot-remove
>>> configuration
>>> could provide equivalent information to the PowerPC kernel with a command
>>> line
>>> parameter.  The 'numa.c' code would then read this value and fill in the
>>> necessary
>>> entries in the 'node_possible_map'.
>>>
>>> Would you foresee any problems with using such a feature?
>>
>>
> 
> Sorry my mailer goofed up, resending
> 
> Balbir Singh
> 

Thanks.
diff mbox

Patch

diff --git a/arch/powerpc/mm/numa.c b/arch/powerpc/mm/numa.c
index 15c2dd5..3d58c1f 100644
--- a/arch/powerpc/mm/numa.c
+++ b/arch/powerpc/mm/numa.c
@@ -870,7 +870,7 @@  void __init dump_numa_cpu_topology(void)
 }
 
 /* Initialize NODE_DATA for a node on the local memory */
-static void __init setup_node_data(int nid, u64 start_pfn, u64 end_pfn)
+static void setup_node_data(int nid, u64 start_pfn, u64 end_pfn)
 {
 	u64 spanned_pages = end_pfn - start_pfn;
 	const size_t nd_size = roundup(sizeof(pg_data_t), SMP_CACHE_BYTES);
@@ -878,23 +878,41 @@  static void __init setup_node_data(int nid, u64 start_pfn, u64 end_pfn)
 	void *nd;
 	int tnid;
 
-	nd_pa = memblock_alloc_try_nid(nd_size, SMP_CACHE_BYTES, nid);
-	nd = __va(nd_pa);
+	if (!node_data[nid]) {
+		nd_pa = memblock_alloc_try_nid(nd_size, SMP_CACHE_BYTES, nid);
+		nd = __va(nd_pa);
 
-	/* report and initialize */
-	pr_info("  NODE_DATA [mem %#010Lx-%#010Lx]\n",
-		nd_pa, nd_pa + nd_size - 1);
-	tnid = early_pfn_to_nid(nd_pa >> PAGE_SHIFT);
-	if (tnid != nid)
-		pr_info("    NODE_DATA(%d) on node %d\n", nid, tnid);
+		node_data[nid] = nd;
+		memset(NODE_DATA(nid), 0, sizeof(pg_data_t));
+		NODE_DATA(nid)->node_id = nid;
+
+		/* report and initialize */
+		pr_info("  NODE_DATA [mem %#010Lx-%#010Lx]\n",
+			nd_pa, nd_pa + nd_size - 1);
+		tnid = early_pfn_to_nid(nd_pa >> PAGE_SHIFT);
+		if (tnid != nid)
+			pr_info("    NODE_DATA(%d) on node %d\n", nid, tnid);
+	} else {
+		nd_pa = (u64) node_data[nid];
+		nd = __va(nd_pa);
+	}
 
-	node_data[nid] = nd;
-	memset(NODE_DATA(nid), 0, sizeof(pg_data_t));
-	NODE_DATA(nid)->node_id = nid;
 	NODE_DATA(nid)->node_start_pfn = start_pfn;
 	NODE_DATA(nid)->node_spanned_pages = spanned_pages;
 }
 
+static void setup_nodes(void)
+{
+	int i, l = 32 /* MAX_NUMNODES */;
+
+	for (i = 0; i < l; i++) {
+		if (!node_possible(i)) {
+			setup_node_data(i, 0, 0);
+			node_set(i, node_possible_map);
+		}
+	}
+}
+
 void __init initmem_init(void)
 {
 	int nid, cpu;
@@ -914,6 +932,8 @@  void __init initmem_init(void)
 	 */
 	nodes_and(node_possible_map, node_possible_map, node_online_map);
 
+	setup_nodes();
+
 	for_each_online_node(nid) {
 		unsigned long start_pfn, end_pfn;