From: Mike Rapoport <rppt@linux.ibm.com>
To: Souptick Joarder <jrdr.linux@gmail.com>
Cc: akpm@linux-foundation.org, willy@infradead.org, mhocko@suse.com,
kirill.shutemov@linux.intel.com, vbabka@suse.cz,
riel@surriel.com, sfr@canb.auug.org.au, rppt@linux.vnet.ibm.com,
peterz@infradead.org, linux@armlinux.org.uk,
robin.murphy@arm.com, iamjoonsoo.kim@lge.com, treding@nvidia.com,
keescook@chromium.org, m.szyprowski@samsung.com,
stefanr@s5r6.in-berlin.de, hjc@rock-chips.com, heiko@sntech.de,
airlied@linux.ie, oleksandr_andrushchenko@epam.com,
joro@8bytes.org, pawel@osciak.com, kyungmin.park@samsung.com,
mchehab@kernel.org, boris.ostrovsky@oracle.com, jgross@suse.com,
linux-kernel@vger.kernel.org, linux-mm@kvack.org,
linux-arm-kernel@lists.infradead.org,
linux1394-devel@lists.sourceforge.net,
dri-devel@lists.freedesktop.org,
linux-rockchip@lists.infradead.org, xen-de
Subject: Re: [PATCHv2 1/9] mm: Introduce new vm_insert_range and vm_insert_range_buggy API
Date: Thu, 31 Jan 2019 10:38:42 +0200 [thread overview]
Message-ID: <20190131083842.GE28876@rapoport-lnx> (raw)
In-Reply-To: <20190131030812.GA2174@jordon-HP-15-Notebook-PC>
On Thu, Jan 31, 2019 at 08:38:12AM +0530, Souptick Joarder wrote:
> Previouly drivers have their own way of mapping range of
> kernel pages/memory into user vma and this was done by
> invoking vm_insert_page() within a loop.
>
> As this pattern is common across different drivers, it can
> be generalized by creating new functions and use it across
> the drivers.
>
> vm_insert_range() is the API which could be used to mapped
> kernel memory/pages in drivers which has considered vm_pgoff
>
> vm_insert_range_buggy() is the API which could be used to map
> range of kernel memory/pages in drivers which has not considered
> vm_pgoff. vm_pgoff is passed default as 0 for those drivers.
>
> We _could_ then at a later "fix" these drivers which are using
> vm_insert_range_buggy() to behave according to the normal vm_pgoff
> offsetting simply by removing the _buggy suffix on the function
> name and if that causes regressions, it gives us an easy way to revert.
>
> Signed-off-by: Souptick Joarder <jrdr.linux@gmail.com>
> Suggested-by: Russell King <linux@armlinux.org.uk>
> Suggested-by: Matthew Wilcox <willy@infradead.org>
> ---
> include/linux/mm.h | 4 +++
> mm/memory.c | 81 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
> mm/nommu.c | 14 ++++++++++
> 3 files changed, 99 insertions(+)
>
> diff --git a/include/linux/mm.h b/include/linux/mm.h
> index 80bb640..25752b0 100644
> --- a/include/linux/mm.h
> +++ b/include/linux/mm.h
> @@ -2565,6 +2565,10 @@ unsigned long change_prot_numa(struct vm_area_struct *vma,
> int remap_pfn_range(struct vm_area_struct *, unsigned long addr,
> unsigned long pfn, unsigned long size, pgprot_t);
> int vm_insert_page(struct vm_area_struct *, unsigned long addr, struct page *);
> +int vm_insert_range(struct vm_area_struct *vma, struct page **pages,
> + unsigned long num);
> +int vm_insert_range_buggy(struct vm_area_struct *vma, struct page **pages,
> + unsigned long num);
> vm_fault_t vmf_insert_pfn(struct vm_area_struct *vma, unsigned long addr,
> unsigned long pfn);
> vm_fault_t vmf_insert_pfn_prot(struct vm_area_struct *vma, unsigned long addr,
> diff --git a/mm/memory.c b/mm/memory.c
> index e11ca9d..0a4bf57 100644
> --- a/mm/memory.c
> +++ b/mm/memory.c
> @@ -1520,6 +1520,87 @@ int vm_insert_page(struct vm_area_struct *vma, unsigned long addr,
> }
> EXPORT_SYMBOL(vm_insert_page);
>
> +/**
> + * __vm_insert_range - insert range of kernel pages into user vma
> + * @vma: user vma to map to
> + * @pages: pointer to array of source kernel pages
> + * @num: number of pages in page array
> + * @offset: user's requested vm_pgoff
> + *
> + * This allows drivers to insert range of kernel pages they've allocated
> + * into a user vma.
> + *
> + * If we fail to insert any page into the vma, the function will return
> + * immediately leaving any previously inserted pages present. Callers
> + * from the mmap handler may immediately return the error as their caller
> + * will destroy the vma, removing any successfully inserted pages. Other
> + * callers should make their own arrangements for calling unmap_region().
> + *
> + * Context: Process context.
> + * Return: 0 on success and error code otherwise.
> + */
> +static int __vm_insert_range(struct vm_area_struct *vma, struct page **pages,
> + unsigned long num, unsigned long offset)
> +{
> + unsigned long count = vma_pages(vma);
> + unsigned long uaddr = vma->vm_start;
> + int ret, i;
> +
> + /* Fail if the user requested offset is beyond the end of the object */
> + if (offset > num)
> + return -ENXIO;
> +
> + /* Fail if the user requested size exceeds available object size */
> + if (count > num - offset)
> + return -ENXIO;
> +
> + for (i = 0; i < count; i++) {
> + ret = vm_insert_page(vma, uaddr, pages[offset + i]);
> + if (ret < 0)
> + return ret;
> + uaddr += PAGE_SIZE;
> + }
> +
> + return 0;
> +}
> +
> +/**
> + * vm_insert_range - insert range of kernel pages starts with non zero offset
> + * @vma: user vma to map to
> + * @pages: pointer to array of source kernel pages
> + * @num: number of pages in page array
> + *
> + * Maps an object consisting of `num' `pages', catering for the user's
> + * requested vm_pgoff
> + *
The elaborate description you've added to __vm_insert_range() is better put
here, as this is the "public" function.
> + * Context: Process context. Called by mmap handlers.
> + * Return: 0 on success and error code otherwise.
> + */
> +int vm_insert_range(struct vm_area_struct *vma, struct page **pages,
> + unsigned long num)
> +{
> + return __vm_insert_range(vma, pages, num, vma->vm_pgoff);
> +}
> +EXPORT_SYMBOL(vm_insert_range);
> +
> +/**
> + * vm_insert_range_buggy - insert range of kernel pages starts with zero offset
> + * @vma: user vma to map to
> + * @pages: pointer to array of source kernel pages
> + * @num: number of pages in page array
> + *
> + * Maps a set of pages, always starting at page[0]
Here I'd add something like:
Similar to vm_insert_range(), except that it explicitly sets @vm_pgoff to
0. This function is intended for the drivers that did not consider
@vm_pgoff.
> vm_insert_range_buggy() is the API which could be used to map
> range of kernel memory/pages in drivers which has not considered
> vm_pgoff. vm_pgoff is passed default as 0 for those drivers.
> + *
> + * Context: Process context. Called by mmap handlers.
> + * Return: 0 on success and error code otherwise.
> + */
> +int vm_insert_range_buggy(struct vm_area_struct *vma, struct page **pages,
> + unsigned long num)
> +{
> + return __vm_insert_range(vma, pages, num, 0);
> +}
> +EXPORT_SYMBOL(vm_insert_range_buggy);
> +
> static vm_fault_t insert_pfn(struct vm_area_struct *vma, unsigned long addr,
> pfn_t pfn, pgprot_t prot, bool mkwrite)
> {
> diff --git a/mm/nommu.c b/mm/nommu.c
> index 749276b..21d101e 100644
> --- a/mm/nommu.c
> +++ b/mm/nommu.c
> @@ -473,6 +473,20 @@ int vm_insert_page(struct vm_area_struct *vma, unsigned long addr,
> }
> EXPORT_SYMBOL(vm_insert_page);
>
> +int vm_insert_range(struct vm_area_struct *vma, struct page **pages,
> + unsigned long num)
> +{
> + return -EINVAL;
> +}
> +EXPORT_SYMBOL(vm_insert_range);
> +
> +int vm_insert_range_buggy(struct vm_area_struct *vma, struct page **pages,
> + unsigned long num)
> +{
> + return -EINVAL;
> +}
> +EXPORT_SYMBOL(vm_insert_range_buggy);
> +
> /*
> * sys_brk() for the most part doesn't need the global kernel
> * lock, except when an application is doing something nasty
> --
> 1.9.1
>
--
Sincerely yours,
Mike.
WARNING: multiple messages have this Message-ID (diff)
From: Mike Rapoport <rppt@linux.ibm.com>
To: Souptick Joarder <jrdr.linux@gmail.com>
Cc: mhocko@suse.com, heiko@sntech.de, peterz@infradead.org,
dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org,
linux-mm@kvack.org, linux1394-devel@lists.sourceforge.net,
m.szyprowski@samsung.com, sfr@canb.auug.org.au,
oleksandr_andrushchenko@epam.com, joro@8bytes.org,
linux@armlinux.org.uk, willy@infradead.org, airlied@linux.ie,
linux-arm-kernel@lists.infradead.org,
linux-rockchip@lists.infradead.org, treding@nvidia.com,
linux-media@vger.kernel.org, keescook@chromium.org,
pawel@osciak.com, riel@surriel.com,
iommu@lists.linux-foundation.org, rppt@linux.vnet.ibm.com,
boris.ostrovsky@oracle.com, mchehab@kernel.org,
iamjoonsoo.kim@lge.com, vbabka@suse.cz, jgross@suse.com,
hjc@rock-chips.com, xen-devel@lists.xen.org,
kyungmin.park@samsung.com, stefanr@s5r6.in-berlin.de,
akpm@linux-foundation.org, robin.murphy@arm.com,
kirill.shutemov@linux.intel.com
Subject: Re: [PATCHv2 1/9] mm: Introduce new vm_insert_range and vm_insert_range_buggy API
Date: Thu, 31 Jan 2019 10:38:42 +0200 [thread overview]
Message-ID: <20190131083842.GE28876@rapoport-lnx> (raw)
In-Reply-To: <20190131030812.GA2174@jordon-HP-15-Notebook-PC>
On Thu, Jan 31, 2019 at 08:38:12AM +0530, Souptick Joarder wrote:
> Previouly drivers have their own way of mapping range of
> kernel pages/memory into user vma and this was done by
> invoking vm_insert_page() within a loop.
>
> As this pattern is common across different drivers, it can
> be generalized by creating new functions and use it across
> the drivers.
>
> vm_insert_range() is the API which could be used to mapped
> kernel memory/pages in drivers which has considered vm_pgoff
>
> vm_insert_range_buggy() is the API which could be used to map
> range of kernel memory/pages in drivers which has not considered
> vm_pgoff. vm_pgoff is passed default as 0 for those drivers.
>
> We _could_ then at a later "fix" these drivers which are using
> vm_insert_range_buggy() to behave according to the normal vm_pgoff
> offsetting simply by removing the _buggy suffix on the function
> name and if that causes regressions, it gives us an easy way to revert.
>
> Signed-off-by: Souptick Joarder <jrdr.linux@gmail.com>
> Suggested-by: Russell King <linux@armlinux.org.uk>
> Suggested-by: Matthew Wilcox <willy@infradead.org>
> ---
> include/linux/mm.h | 4 +++
> mm/memory.c | 81 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
> mm/nommu.c | 14 ++++++++++
> 3 files changed, 99 insertions(+)
>
> diff --git a/include/linux/mm.h b/include/linux/mm.h
> index 80bb640..25752b0 100644
> --- a/include/linux/mm.h
> +++ b/include/linux/mm.h
> @@ -2565,6 +2565,10 @@ unsigned long change_prot_numa(struct vm_area_struct *vma,
> int remap_pfn_range(struct vm_area_struct *, unsigned long addr,
> unsigned long pfn, unsigned long size, pgprot_t);
> int vm_insert_page(struct vm_area_struct *, unsigned long addr, struct page *);
> +int vm_insert_range(struct vm_area_struct *vma, struct page **pages,
> + unsigned long num);
> +int vm_insert_range_buggy(struct vm_area_struct *vma, struct page **pages,
> + unsigned long num);
> vm_fault_t vmf_insert_pfn(struct vm_area_struct *vma, unsigned long addr,
> unsigned long pfn);
> vm_fault_t vmf_insert_pfn_prot(struct vm_area_struct *vma, unsigned long addr,
> diff --git a/mm/memory.c b/mm/memory.c
> index e11ca9d..0a4bf57 100644
> --- a/mm/memory.c
> +++ b/mm/memory.c
> @@ -1520,6 +1520,87 @@ int vm_insert_page(struct vm_area_struct *vma, unsigned long addr,
> }
> EXPORT_SYMBOL(vm_insert_page);
>
> +/**
> + * __vm_insert_range - insert range of kernel pages into user vma
> + * @vma: user vma to map to
> + * @pages: pointer to array of source kernel pages
> + * @num: number of pages in page array
> + * @offset: user's requested vm_pgoff
> + *
> + * This allows drivers to insert range of kernel pages they've allocated
> + * into a user vma.
> + *
> + * If we fail to insert any page into the vma, the function will return
> + * immediately leaving any previously inserted pages present. Callers
> + * from the mmap handler may immediately return the error as their caller
> + * will destroy the vma, removing any successfully inserted pages. Other
> + * callers should make their own arrangements for calling unmap_region().
> + *
> + * Context: Process context.
> + * Return: 0 on success and error code otherwise.
> + */
> +static int __vm_insert_range(struct vm_area_struct *vma, struct page **pages,
> + unsigned long num, unsigned long offset)
> +{
> + unsigned long count = vma_pages(vma);
> + unsigned long uaddr = vma->vm_start;
> + int ret, i;
> +
> + /* Fail if the user requested offset is beyond the end of the object */
> + if (offset > num)
> + return -ENXIO;
> +
> + /* Fail if the user requested size exceeds available object size */
> + if (count > num - offset)
> + return -ENXIO;
> +
> + for (i = 0; i < count; i++) {
> + ret = vm_insert_page(vma, uaddr, pages[offset + i]);
> + if (ret < 0)
> + return ret;
> + uaddr += PAGE_SIZE;
> + }
> +
> + return 0;
> +}
> +
> +/**
> + * vm_insert_range - insert range of kernel pages starts with non zero offset
> + * @vma: user vma to map to
> + * @pages: pointer to array of source kernel pages
> + * @num: number of pages in page array
> + *
> + * Maps an object consisting of `num' `pages', catering for the user's
> + * requested vm_pgoff
> + *
The elaborate description you've added to __vm_insert_range() is better put
here, as this is the "public" function.
> + * Context: Process context. Called by mmap handlers.
> + * Return: 0 on success and error code otherwise.
> + */
> +int vm_insert_range(struct vm_area_struct *vma, struct page **pages,
> + unsigned long num)
> +{
> + return __vm_insert_range(vma, pages, num, vma->vm_pgoff);
> +}
> +EXPORT_SYMBOL(vm_insert_range);
> +
> +/**
> + * vm_insert_range_buggy - insert range of kernel pages starts with zero offset
> + * @vma: user vma to map to
> + * @pages: pointer to array of source kernel pages
> + * @num: number of pages in page array
> + *
> + * Maps a set of pages, always starting at page[0]
Here I'd add something like:
Similar to vm_insert_range(), except that it explicitly sets @vm_pgoff to
0. This function is intended for the drivers that did not consider
@vm_pgoff.
> vm_insert_range_buggy() is the API which could be used to map
> range of kernel memory/pages in drivers which has not considered
> vm_pgoff. vm_pgoff is passed default as 0 for those drivers.
> + *
> + * Context: Process context. Called by mmap handlers.
> + * Return: 0 on success and error code otherwise.
> + */
> +int vm_insert_range_buggy(struct vm_area_struct *vma, struct page **pages,
> + unsigned long num)
> +{
> + return __vm_insert_range(vma, pages, num, 0);
> +}
> +EXPORT_SYMBOL(vm_insert_range_buggy);
> +
> static vm_fault_t insert_pfn(struct vm_area_struct *vma, unsigned long addr,
> pfn_t pfn, pgprot_t prot, bool mkwrite)
> {
> diff --git a/mm/nommu.c b/mm/nommu.c
> index 749276b..21d101e 100644
> --- a/mm/nommu.c
> +++ b/mm/nommu.c
> @@ -473,6 +473,20 @@ int vm_insert_page(struct vm_area_struct *vma, unsigned long addr,
> }
> EXPORT_SYMBOL(vm_insert_page);
>
> +int vm_insert_range(struct vm_area_struct *vma, struct page **pages,
> + unsigned long num)
> +{
> + return -EINVAL;
> +}
> +EXPORT_SYMBOL(vm_insert_range);
> +
> +int vm_insert_range_buggy(struct vm_area_struct *vma, struct page **pages,
> + unsigned long num)
> +{
> + return -EINVAL;
> +}
> +EXPORT_SYMBOL(vm_insert_range_buggy);
> +
> /*
> * sys_brk() for the most part doesn't need the global kernel
> * lock, except when an application is doing something nasty
> --
> 1.9.1
>
--
Sincerely yours,
Mike.
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
WARNING: multiple messages have this Message-ID (diff)
From: Mike Rapoport <rppt@linux.ibm.com>
To: Souptick Joarder <jrdr.linux@gmail.com>
Cc: akpm@linux-foundation.org, willy@infradead.org, mhocko@suse.com,
kirill.shutemov@linux.intel.com, vbabka@suse.cz,
riel@surriel.com, sfr@canb.auug.org.au, rppt@linux.vnet.ibm.com,
peterz@infradead.org, linux@armlinux.org.uk,
robin.murphy@arm.com, iamjoonsoo.kim@lge.com, treding@nvidia.com,
keescook@chromium.org, m.szyprowski@samsung.com,
stefanr@s5r6.in-berlin.de, hjc@rock-chips.com, heiko@sntech.de,
airlied@linux.ie, oleksandr_andrushchenko@epam.com,
joro@8bytes.org, pawel@osciak.com, kyungmin.park@samsung.com,
mchehab@kernel.org, boris.ostrovsky@oracle.com, jgross@suse.com,
linux-kernel@vger.kernel.org, linux-mm@kvack.org,
linux-arm-kernel@lists.infradead.org,
linux1394-devel@lists.sourceforge.net,
dri-devel@lists.freedesktop.org,
linux-rockchip@lists.infradead.org, xen-devel@lists.xen.org,
iommu@lists.linux-foundation.org, linux-media@vger.kernel.org
Subject: Re: [PATCHv2 1/9] mm: Introduce new vm_insert_range and vm_insert_range_buggy API
Date: Thu, 31 Jan 2019 10:38:42 +0200 [thread overview]
Message-ID: <20190131083842.GE28876@rapoport-lnx> (raw)
In-Reply-To: <20190131030812.GA2174@jordon-HP-15-Notebook-PC>
On Thu, Jan 31, 2019 at 08:38:12AM +0530, Souptick Joarder wrote:
> Previouly drivers have their own way of mapping range of
> kernel pages/memory into user vma and this was done by
> invoking vm_insert_page() within a loop.
>
> As this pattern is common across different drivers, it can
> be generalized by creating new functions and use it across
> the drivers.
>
> vm_insert_range() is the API which could be used to mapped
> kernel memory/pages in drivers which has considered vm_pgoff
>
> vm_insert_range_buggy() is the API which could be used to map
> range of kernel memory/pages in drivers which has not considered
> vm_pgoff. vm_pgoff is passed default as 0 for those drivers.
>
> We _could_ then at a later "fix" these drivers which are using
> vm_insert_range_buggy() to behave according to the normal vm_pgoff
> offsetting simply by removing the _buggy suffix on the function
> name and if that causes regressions, it gives us an easy way to revert.
>
> Signed-off-by: Souptick Joarder <jrdr.linux@gmail.com>
> Suggested-by: Russell King <linux@armlinux.org.uk>
> Suggested-by: Matthew Wilcox <willy@infradead.org>
> ---
> include/linux/mm.h | 4 +++
> mm/memory.c | 81 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
> mm/nommu.c | 14 ++++++++++
> 3 files changed, 99 insertions(+)
>
> diff --git a/include/linux/mm.h b/include/linux/mm.h
> index 80bb640..25752b0 100644
> --- a/include/linux/mm.h
> +++ b/include/linux/mm.h
> @@ -2565,6 +2565,10 @@ unsigned long change_prot_numa(struct vm_area_struct *vma,
> int remap_pfn_range(struct vm_area_struct *, unsigned long addr,
> unsigned long pfn, unsigned long size, pgprot_t);
> int vm_insert_page(struct vm_area_struct *, unsigned long addr, struct page *);
> +int vm_insert_range(struct vm_area_struct *vma, struct page **pages,
> + unsigned long num);
> +int vm_insert_range_buggy(struct vm_area_struct *vma, struct page **pages,
> + unsigned long num);
> vm_fault_t vmf_insert_pfn(struct vm_area_struct *vma, unsigned long addr,
> unsigned long pfn);
> vm_fault_t vmf_insert_pfn_prot(struct vm_area_struct *vma, unsigned long addr,
> diff --git a/mm/memory.c b/mm/memory.c
> index e11ca9d..0a4bf57 100644
> --- a/mm/memory.c
> +++ b/mm/memory.c
> @@ -1520,6 +1520,87 @@ int vm_insert_page(struct vm_area_struct *vma, unsigned long addr,
> }
> EXPORT_SYMBOL(vm_insert_page);
>
> +/**
> + * __vm_insert_range - insert range of kernel pages into user vma
> + * @vma: user vma to map to
> + * @pages: pointer to array of source kernel pages
> + * @num: number of pages in page array
> + * @offset: user's requested vm_pgoff
> + *
> + * This allows drivers to insert range of kernel pages they've allocated
> + * into a user vma.
> + *
> + * If we fail to insert any page into the vma, the function will return
> + * immediately leaving any previously inserted pages present. Callers
> + * from the mmap handler may immediately return the error as their caller
> + * will destroy the vma, removing any successfully inserted pages. Other
> + * callers should make their own arrangements for calling unmap_region().
> + *
> + * Context: Process context.
> + * Return: 0 on success and error code otherwise.
> + */
> +static int __vm_insert_range(struct vm_area_struct *vma, struct page **pages,
> + unsigned long num, unsigned long offset)
> +{
> + unsigned long count = vma_pages(vma);
> + unsigned long uaddr = vma->vm_start;
> + int ret, i;
> +
> + /* Fail if the user requested offset is beyond the end of the object */
> + if (offset > num)
> + return -ENXIO;
> +
> + /* Fail if the user requested size exceeds available object size */
> + if (count > num - offset)
> + return -ENXIO;
> +
> + for (i = 0; i < count; i++) {
> + ret = vm_insert_page(vma, uaddr, pages[offset + i]);
> + if (ret < 0)
> + return ret;
> + uaddr += PAGE_SIZE;
> + }
> +
> + return 0;
> +}
> +
> +/**
> + * vm_insert_range - insert range of kernel pages starts with non zero offset
> + * @vma: user vma to map to
> + * @pages: pointer to array of source kernel pages
> + * @num: number of pages in page array
> + *
> + * Maps an object consisting of `num' `pages', catering for the user's
> + * requested vm_pgoff
> + *
The elaborate description you've added to __vm_insert_range() is better put
here, as this is the "public" function.
> + * Context: Process context. Called by mmap handlers.
> + * Return: 0 on success and error code otherwise.
> + */
> +int vm_insert_range(struct vm_area_struct *vma, struct page **pages,
> + unsigned long num)
> +{
> + return __vm_insert_range(vma, pages, num, vma->vm_pgoff);
> +}
> +EXPORT_SYMBOL(vm_insert_range);
> +
> +/**
> + * vm_insert_range_buggy - insert range of kernel pages starts with zero offset
> + * @vma: user vma to map to
> + * @pages: pointer to array of source kernel pages
> + * @num: number of pages in page array
> + *
> + * Maps a set of pages, always starting at page[0]
Here I'd add something like:
Similar to vm_insert_range(), except that it explicitly sets @vm_pgoff to
0. This function is intended for the drivers that did not consider
@vm_pgoff.
> vm_insert_range_buggy() is the API which could be used to map
> range of kernel memory/pages in drivers which has not considered
> vm_pgoff. vm_pgoff is passed default as 0 for those drivers.
> + *
> + * Context: Process context. Called by mmap handlers.
> + * Return: 0 on success and error code otherwise.
> + */
> +int vm_insert_range_buggy(struct vm_area_struct *vma, struct page **pages,
> + unsigned long num)
> +{
> + return __vm_insert_range(vma, pages, num, 0);
> +}
> +EXPORT_SYMBOL(vm_insert_range_buggy);
> +
> static vm_fault_t insert_pfn(struct vm_area_struct *vma, unsigned long addr,
> pfn_t pfn, pgprot_t prot, bool mkwrite)
> {
> diff --git a/mm/nommu.c b/mm/nommu.c
> index 749276b..21d101e 100644
> --- a/mm/nommu.c
> +++ b/mm/nommu.c
> @@ -473,6 +473,20 @@ int vm_insert_page(struct vm_area_struct *vma, unsigned long addr,
> }
> EXPORT_SYMBOL(vm_insert_page);
>
> +int vm_insert_range(struct vm_area_struct *vma, struct page **pages,
> + unsigned long num)
> +{
> + return -EINVAL;
> +}
> +EXPORT_SYMBOL(vm_insert_range);
> +
> +int vm_insert_range_buggy(struct vm_area_struct *vma, struct page **pages,
> + unsigned long num)
> +{
> + return -EINVAL;
> +}
> +EXPORT_SYMBOL(vm_insert_range_buggy);
> +
> /*
> * sys_brk() for the most part doesn't need the global kernel
> * lock, except when an application is doing something nasty
> --
> 1.9.1
>
--
Sincerely yours,
Mike.
next prev parent reply other threads:[~2019-01-31 8:38 UTC|newest]
Thread overview: 60+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-01-31 3:08 [PATCHv2 1/9] mm: Introduce new vm_insert_range and vm_insert_range_buggy API Souptick Joarder
2019-01-31 3:08 ` Souptick Joarder
2019-01-31 3:08 ` Souptick Joarder
2019-01-31 8:38 ` Mike Rapoport
2019-01-31 8:38 ` Mike Rapoport [this message]
2019-01-31 8:38 ` Mike Rapoport
2019-01-31 8:38 ` Mike Rapoport
2019-01-31 10:13 ` Souptick Joarder
2019-01-31 10:13 ` Souptick Joarder
2019-01-31 10:13 ` Souptick Joarder
2019-01-31 10:13 ` Souptick Joarder
2019-01-31 11:06 ` Mike Rapoport
2019-01-31 11:06 ` Mike Rapoport
2019-01-31 11:06 ` Mike Rapoport
2019-01-31 11:06 ` Mike Rapoport
2019-02-07 15:49 ` Souptick Joarder
2019-02-07 15:49 ` Souptick Joarder
2019-02-07 15:49 ` Souptick Joarder
2019-02-07 15:49 ` Souptick Joarder
[not found] ` <CAFqt6za9xA_8OKiaaHXcO9go+RtPdjLY5Bz_fgQL+DZbermNhA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2019-02-07 15:57 ` Mike Rapoport
2019-02-07 15:57 ` Mike Rapoport
2019-02-07 15:57 ` Mike Rapoport
2019-02-07 16:07 ` Souptick Joarder
2019-02-07 16:07 ` Souptick Joarder
2019-02-07 16:07 ` Souptick Joarder
[not found] ` <CAFqt6zbE0JD09ibp3jZ0rr5xp52SEK+Pi6pGMQwSp_=d0edy7g-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2019-02-07 16:04 ` Mike Rapoport
2019-02-07 16:04 ` Mike Rapoport
2019-02-07 16:04 ` Mike Rapoport
2019-02-07 16:04 ` Mike Rapoport
2019-02-07 16:07 ` Souptick Joarder
2019-02-07 15:57 ` Mike Rapoport
2019-02-07 16:47 ` Matthew Wilcox
2019-02-07 16:47 ` Matthew Wilcox
2019-02-07 16:47 ` Matthew Wilcox
2019-02-07 16:47 ` Matthew Wilcox
2019-02-08 5:22 ` Souptick Joarder
2019-02-08 5:22 ` Souptick Joarder
2019-02-08 5:22 ` Souptick Joarder
2019-02-08 5:22 ` Souptick Joarder
2019-02-11 17:06 ` Souptick Joarder
2019-02-11 17:06 ` Souptick Joarder
2019-02-11 17:06 ` Souptick Joarder
2019-02-11 17:06 ` Souptick Joarder
2019-01-31 12:06 ` Heiko Stuebner
2019-01-31 12:06 ` Heiko Stuebner
2019-01-31 12:06 ` Heiko Stuebner
2019-01-31 12:06 ` Heiko Stuebner
2019-01-31 12:31 ` Souptick Joarder
2019-01-31 12:31 ` Souptick Joarder
2019-01-31 12:31 ` Souptick Joarder
2019-01-31 12:31 ` Souptick Joarder
2019-01-31 12:34 ` Heiko Stuebner
2019-01-31 12:34 ` Heiko Stuebner
2019-01-31 12:34 ` Heiko Stuebner
2019-01-31 12:34 ` Heiko Stuebner
2019-02-01 12:38 ` Souptick Joarder
2019-02-01 12:38 ` Souptick Joarder
2019-02-01 12:38 ` Souptick Joarder
2019-02-01 12:38 ` Souptick Joarder
-- strict thread matches above, loose matches on Subject: below --
2019-01-31 3:08 Souptick Joarder
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=20190131083842.GE28876@rapoport-lnx \
--to=rppt@linux.ibm.com \
--cc=airlied@linux.ie \
--cc=akpm@linux-foundation.org \
--cc=boris.ostrovsky@oracle.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=heiko@sntech.de \
--cc=hjc@rock-chips.com \
--cc=iamjoonsoo.kim@lge.com \
--cc=jgross@suse.com \
--cc=joro@8bytes.org \
--cc=jrdr.linux@gmail.com \
--cc=keescook@chromium.org \
--cc=kirill.shutemov@linux.intel.com \
--cc=kyungmin.park@samsung.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linux-rockchip@lists.infradead.org \
--cc=linux1394-devel@lists.sourceforge.net \
--cc=linux@armlinux.org.uk \
--cc=m.szyprowski@samsung.com \
--cc=mchehab@kernel.org \
--cc=mhocko@suse.com \
--cc=oleksandr_andrushchenko@epam.com \
--cc=pawel@osciak.com \
--cc=peterz@infradead.org \
--cc=riel@surriel.com \
--cc=robin.murphy@arm.com \
--cc=rppt@linux.vnet.ibm.com \
--cc=sfr@canb.auug.org.au \
--cc=stefanr@s5r6.in-berlin.de \
--cc=treding@nvidia.com \
--cc=vbabka@suse.cz \
--cc=willy@infradead.org \
/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: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.