Hi Tang, On Thu, 2013-01-31 at 15:10 +0800, Tang Chen wrote: > On 01/31/2013 02:19 PM, Simon Jeons wrote: > > Hi Tang, > > On Thu, 2013-01-31 at 11:31 +0800, Tang Chen wrote: > >> Hi Simon, > >> > >> Please see below. :) > >> > >> On 01/31/2013 09:22 AM, Simon Jeons wrote: > >>> > >>> Sorry, I still confuse. :( > >>> update node_states[N_NORMAL_MEMORY] to node_states[N_MEMORY] or > >>> node_states[N_NORMAL_MEMOR] present 0...ZONE_MOVABLE? > >>> > >>> node_states is what? node_states[N_NORMAL_MEMOR] or > >>> node_states[N_MEMORY]? > >> > >> Are you asking what node_states[] is ? > >> > >> node_states[] is an array of nodemask, > >> > >> extern nodemask_t node_states[NR_NODE_STATES]; > >> > >> For example, node_states[N_NORMAL_MEMOR] represents which nodes have > >> normal memory. > >> If N_MEMORY == N_HIGH_MEMORY == N_NORMAL_MEMORY, node_states[N_MEMORY] is > >> node_states[N_NORMAL_MEMOR]. So it represents which nodes have 0 ... > >> ZONE_MOVABLE. > >> > > > > Sorry, how can nodes_state[N_NORMAL_MEMORY] represents a node have 0 ... > > *ZONE_MOVABLE*, the comment of enum nodes_states said that > > N_NORMAL_MEMORY just means the node has regular memory. > > > > Hi Simon, > > Let's say it in this way. > > If we don't have CONFIG_HIGHMEM, N_HIGH_MEMORY == N_NORMAL_MEMORY. We > don't have a separate > macro to represent highmem because we don't have highmem. > This is easy to understand, right ? > > Now, think it just like above: > If we don't have CONFIG_MOVABLE_NODE, N_MEMORY == N_HIGH_MEMORY == > N_NORMAL_MEMORY. > This means we don't allow a node to have only movable memory, not we > don't have movable memory. > A node could have normal memory and movable memory. So > nodes_state[N_NORMAL_MEMORY] represents > a node have 0 ... *ZONE_MOVABLE*. > > I think the point is: CONFIG_MOVABLE_NODE means we allow a node to have > only movable memory. > So without CONFIG_MOVABLE_NODE, it doesn't mean a node cannot have > movable memory. It means > the node cannot have only movable memory. It can have normal memory and > movable memory. > > 1) With CONFIG_MOVABLE_NODE: > N_NORMAL_MEMORY: nodes who have normal memory. > normal memory only > normal and highmem > normal and highmem and movablemem > normal and movablemem > N_MEMORY: nodes who has memory (any memory) > normal memory only > normal and highmem > normal and highmem and movablemem > normal and movablemem ---------------- We can have > movablemem. > highmem only ------------------------- > highmem and movablemem --------------- > movablemem only ---------------------- We can have > movablemem only. *** > > 2) With out CONFIG_MOVABLE_NODE: > N_MEMORY == N_NORMAL_MEMORY: (Here, I omit N_HIGH_MEMORY) > normal memory only > normal and highmem > normal and highmem and movablemem > normal and movablemem ---------------- We can have > movablemem. > No movablemem only ------------------- We cannot > have movablemem only. *** > > The semantics is not that clear here. So we can only try to understand > it from the code where > we use N_MEMORY. :) > > That is my understanding of this. Thanks for your clarify, very clear now. :) > > Thanks. :) > > > > > -- > To unsubscribe, send a message with 'unsubscribe linux-mm' in > the body to majordomo@xxxxxxxxx. For more info on Linux MM, > see: http://www.linux-mm.org/ . > Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a> -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>