Re: [RFC PATCH 0/8] remove vm_struct list management
From: JoonSoo Kim <hidden>
Date: 2012-12-10 14:40:49
Also in:
kexec, lkml
Hello, Vivek. 2012/12/7 Vivek Goyal [off-list ref]:
On Fri, Dec 07, 2012 at 10:16:55PM +0900, JoonSoo Kim wrote:quoted
2012/12/7 Andrew Morton [off-list ref]:quoted
On Fri, 7 Dec 2012 01:09:27 +0900 Joonsoo Kim [off-list ref] wrote:quoted
I'm not sure that "7/8: makes vmlist only for kexec" is fine. Because it is related to userspace program. As far as I know, makedumpfile use kexec's output information and it only need first address of vmalloc layer. So my implementation reflect this fact, but I'm not sure. And now, I don't fully test this patchset. Basic operation work well, but I don't test kexec. So I send this patchset with 'RFC'.Yes, this is irritating. Perhaps Vivek or one of the other kexec people could take a look at this please - if would obviously be much better if we can avoid merging [patch 7/8] at all.I'm not sure, but I almost sure that [patch 7/8] have no problem. In kexec.c, they write an address of vmlist and offset of vm_struct's address field. It imply that user for this information doesn't have any other information about vm_struct, and they can't use other field of vm_struct. They can use *only* address field. So, remaining just one vm_struct for vmlist which represent first area of vmalloc layer may be safe.I browsed through makedumpfile source quickly. So yes it does look like that we look at first vmlist element ->addr field to figure out where vmalloc area is starting. Can we get the same information from this rb-tree of vmap_area? Is ->va_start field communication same information as vmlist was communicating? What's the difference between vmap_area_root and vmlist.
Thanks for comment. Yes. vmap_area's va_start field represent same information as vm_struct's addr. vmap_area_root is data structure for fast searching an area. vmap_area_list is address sorted list, so we can use it like as vmlist. There is a little difference vmap_area_list and vmlist. vmlist is lack of information about some areas in vmalloc address space. For example, vm_map_ram() allocate area in vmalloc address space, but it doesn't make a link with vmlist. To provide full information about vmalloc address space, using vmap_area_list is more adequate.
So without knowing details of both the data structures, I think if vmlist is going away, then user space tools should be able to traverse vmap_area_root rb tree. I am assuming it is sorted using ->addr field and we should be able to get vmalloc area start from there. It will just be a matter of exporting right fields to user space (instead of vmlist).
There is address sorted list of vmap_area, vmap_area_list. So we can use it for traversing vmalloc areas if it is necessary. But, as I mentioned before, kexec write *just* address of vmlist and offset of vm_struct's address field. It imply that they don't traverse vmlist, because they didn't write vm_struct's next field which is needed for traversing. Without vm_struct's next field, they have no method for traversing. So, IMHO, assigning dummy vm_struct to vmlist which is implemented by [7/8] is a safe way to maintain a compatibility of userspace tool. :) Thanks. -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>