From: Roman Penyaev <rpenyaev@suse.de> Cc: Roman Penyaev <rpenyaev@suse.de>, Andrew Morton <akpm@linux-foundation.org>, Michal Hocko <mhocko@suse.com>, Andrey Ryabinin <aryabinin@virtuozzo.com>, Joe Perches <joe@perches.com>, "Luis R. Rodriguez" <mcgrof@kernel.org>, linux-mm@kvack.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH 01/15] mm/vmalloc: add new 'alignment' field for vm_struct structure Date: Wed, 9 Jan 2019 17:40:11 +0100 [thread overview] Message-ID: <20190109164025.24554-2-rpenyaev@suse.de> (raw) In-Reply-To: <20190109164025.24554-1-rpenyaev@suse.de> I need a new alignment field for vm area in order to reallocate previously allocated area with the same alignment. Patch for a new vrealloc() call will follow and this new call I want to keep as simple as possible, thus not to provide dozens of variants, like vrealloc_user(), which cares about alignment. Current changes are just preparations. Worth to mention, that on archs were unsigned long is 64 bit this new field does not bloat vm_struct, because originally there was a padding between nr_pages and phys_addr. Signed-off-by: Roman Penyaev <rpenyaev@suse.de> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Michal Hocko <mhocko@suse.com> Cc: Andrey Ryabinin <aryabinin@virtuozzo.com> Cc: Joe Perches <joe@perches.com> Cc: "Luis R. Rodriguez" <mcgrof@kernel.org> Cc: linux-mm@kvack.org Cc: linux-kernel@vger.kernel.org --- include/linux/vmalloc.h | 1 + mm/vmalloc.c | 10 ++++++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/include/linux/vmalloc.h b/include/linux/vmalloc.h index 398e9c95cd61..78210aa0bb43 100644 --- a/include/linux/vmalloc.h +++ b/include/linux/vmalloc.h @@ -38,6 +38,7 @@ struct vm_struct { unsigned long flags; struct page **pages; unsigned int nr_pages; + unsigned int alignment; phys_addr_t phys_addr; const void *caller; }; diff --git a/mm/vmalloc.c b/mm/vmalloc.c index e83961767dc1..4851b4a67f55 100644 --- a/mm/vmalloc.c +++ b/mm/vmalloc.c @@ -1347,12 +1347,14 @@ int map_vm_area(struct vm_struct *area, pgprot_t prot, struct page **pages) EXPORT_SYMBOL_GPL(map_vm_area); static void setup_vmalloc_vm(struct vm_struct *vm, struct vmap_area *va, - unsigned long flags, const void *caller) + unsigned int align, unsigned long flags, + const void *caller) { spin_lock(&vmap_area_lock); vm->flags = flags; vm->addr = (void *)va->va_start; vm->size = va->va_end - va->va_start; + vm->alignment = align; vm->caller = caller; va->vm = vm; va->flags |= VM_VM_AREA; @@ -1399,7 +1401,7 @@ static struct vm_struct *__get_vm_area_node(unsigned long size, return NULL; } - setup_vmalloc_vm(area, va, flags, caller); + setup_vmalloc_vm(area, va, align, flags, caller); return area; } @@ -2601,8 +2603,8 @@ struct vm_struct **pcpu_get_vm_areas(const unsigned long *offsets, /* insert all vm's */ for (area = 0; area < nr_vms; area++) - setup_vmalloc_vm(vms[area], vas[area], VM_ALLOC, - pcpu_get_vm_areas); + setup_vmalloc_vm(vms[area], vas[area], align, + VM_ALLOC, pcpu_get_vm_areas); kfree(vas); return vms; -- 2.19.1
WARNING: multiple messages have this Message-ID (diff)
From: Roman Penyaev <rpenyaev@suse.de> Cc: Roman Penyaev <rpenyaev@suse.de>, Andrew Morton <akpm@linux-foundation.org>, Michal Hocko <mhocko@suse.com>, Andrey Ryabinin <aryabinin@virtuozzo.com>, Joe Perches <joe@perches.com>, "Luis R. Rodriguez" <mcgrof@kernel.org>, linux-mm@kvack.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH 01/15] mm/vmalloc: add new 'alignment' field for vm_struct structure Date: Wed, 9 Jan 2019 17:40:11 +0100 [thread overview] Message-ID: <20190109164025.24554-2-rpenyaev@suse.de> (raw) Message-ID: <20190109164011.Y9Jbig96bumAB93SgjTRsFsFVxjswuycvHDp-SFQtrs@z> (raw) In-Reply-To: <20190109164025.24554-1-rpenyaev@suse.de> I need a new alignment field for vm area in order to reallocate previously allocated area with the same alignment. Patch for a new vrealloc() call will follow and this new call I want to keep as simple as possible, thus not to provide dozens of variants, like vrealloc_user(), which cares about alignment. Current changes are just preparations. Worth to mention, that on archs were unsigned long is 64 bit this new field does not bloat vm_struct, because originally there was a padding between nr_pages and phys_addr. Signed-off-by: Roman Penyaev <rpenyaev@suse.de> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Michal Hocko <mhocko@suse.com> Cc: Andrey Ryabinin <aryabinin@virtuozzo.com> Cc: Joe Perches <joe@perches.com> Cc: "Luis R. Rodriguez" <mcgrof@kernel.org> Cc: linux-mm@kvack.org Cc: linux-kernel@vger.kernel.org --- include/linux/vmalloc.h | 1 + mm/vmalloc.c | 10 ++++++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/include/linux/vmalloc.h b/include/linux/vmalloc.h index 398e9c95cd61..78210aa0bb43 100644 --- a/include/linux/vmalloc.h +++ b/include/linux/vmalloc.h @@ -38,6 +38,7 @@ struct vm_struct { unsigned long flags; struct page **pages; unsigned int nr_pages; + unsigned int alignment; phys_addr_t phys_addr; const void *caller; }; diff --git a/mm/vmalloc.c b/mm/vmalloc.c index e83961767dc1..4851b4a67f55 100644 --- a/mm/vmalloc.c +++ b/mm/vmalloc.c @@ -1347,12 +1347,14 @@ int map_vm_area(struct vm_struct *area, pgprot_t prot, struct page **pages) EXPORT_SYMBOL_GPL(map_vm_area); static void setup_vmalloc_vm(struct vm_struct *vm, struct vmap_area *va, - unsigned long flags, const void *caller) + unsigned int align, unsigned long flags, + const void *caller) { spin_lock(&vmap_area_lock); vm->flags = flags; vm->addr = (void *)va->va_start; vm->size = va->va_end - va->va_start; + vm->alignment = align; vm->caller = caller; va->vm = vm; va->flags |= VM_VM_AREA; @@ -1399,7 +1401,7 @@ static struct vm_struct *__get_vm_area_node(unsigned long size, return NULL; } - setup_vmalloc_vm(area, va, flags, caller); + setup_vmalloc_vm(area, va, align, flags, caller); return area; } @@ -2601,8 +2603,8 @@ struct vm_struct **pcpu_get_vm_areas(const unsigned long *offsets, /* insert all vm's */ for (area = 0; area < nr_vms; area++) - setup_vmalloc_vm(vms[area], vas[area], VM_ALLOC, - pcpu_get_vm_areas); + setup_vmalloc_vm(vms[area], vas[area], align, + VM_ALLOC, pcpu_get_vm_areas); kfree(vas); return vms; -- 2.19.1
next prev parent reply other threads:[~2019-01-09 16:40 UTC|newest] Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-01-09 16:40 [RFC 00/15] epoll: support pollable epoll from userspace Roman Penyaev 2019-01-09 16:40 ` Roman Penyaev 2019-01-09 16:40 ` Roman Penyaev [this message] 2019-01-09 16:40 ` [RFC PATCH 01/15] mm/vmalloc: add new 'alignment' field for vm_struct structure Roman Penyaev 2019-01-09 16:40 ` [RFC PATCH 02/15] mm/vmalloc: move common logic from __vmalloc_area_node to a separate func Roman Penyaev 2019-01-09 16:40 ` Roman Penyaev 2019-01-09 16:40 ` [RFC PATCH 03/15] mm/vmalloc: introduce new vrealloc() call and its subsidiary reach analog Roman Penyaev 2019-01-09 16:40 ` Roman Penyaev 2019-01-09 16:50 ` Matthew Wilcox 2019-01-10 10:08 ` Roman Penyaev
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20190109164025.24554-2-rpenyaev@suse.de \ --to=rpenyaev@suse.de \ --cc=akpm@linux-foundation.org \ --cc=aryabinin@virtuozzo.com \ --cc=joe@perches.com \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-mm@kvack.org \ --cc=mcgrof@kernel.org \ --cc=mhocko@suse.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).