All of lore.kernel.org
 help / color / mirror / Atom feed
From: Oleksandr Andrushchenko <Oleksandr_Andrushchenko@epam.com>
To: Juergen Gross <jgross@suse.com>,
	Oleksandr Andrushchenko <andr2000@gmail.com>,
	xen-devel@lists.xenproject.org, linux-kernel@vger.kernel.org,
	dri-devel@lists.freedesktop.org, linux-media@vger.kernel.org,
	boris.ostrovsky@oracle.com, konrad.wilk@oracle.com
Cc: daniel.vetter@intel.com, matthew.d.roper@intel.com,
	dongwon.kim@intel.com
Subject: Re: [PATCH 2/8] xen/balloon: Move common memory reservation routines to a module
Date: Wed, 30 May 2018 08:30:26 +0300	[thread overview]
Message-ID: <3d9360c5-5ee4-292b-3787-fc4d4cfc9cc9__37414.001642219$1527658727$gmane$org@epam.com> (raw)
In-Reply-To: <b838fcb8-fa7f-5d75-d536-4dca47bd20aa@suse.com>

On 05/30/2018 07:32 AM, Juergen Gross wrote:
> On 25/05/18 17:33, Oleksandr Andrushchenko wrote:
>> From: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>
>>
>> Memory {increase|decrease}_reservation and VA mappings update/reset
>> code used in balloon driver can be made common, so other drivers can
>> also re-use the same functionality without open-coding.
>> Create a dedicated module for the shared code and export corresponding
>> symbols for other kernel modules.
>>
>> Signed-off-by: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>
>> ---
>>   drivers/xen/Makefile          |   1 +
>>   drivers/xen/balloon.c         |  71 ++----------------
>>   drivers/xen/mem-reservation.c | 134 ++++++++++++++++++++++++++++++++++
>>   include/xen/mem_reservation.h |  29 ++++++++
>>   4 files changed, 170 insertions(+), 65 deletions(-)
>>   create mode 100644 drivers/xen/mem-reservation.c
>>   create mode 100644 include/xen/mem_reservation.h
> Can you please name this include/xen/mem-reservation.h ?
>
Will rename
>> diff --git a/drivers/xen/Makefile b/drivers/xen/Makefile
>> index 451e833f5931..3c87b0c3aca6 100644
>> --- a/drivers/xen/Makefile
>> +++ b/drivers/xen/Makefile
>> @@ -2,6 +2,7 @@
>>   obj-$(CONFIG_HOTPLUG_CPU)		+= cpu_hotplug.o
>>   obj-$(CONFIG_X86)			+= fallback.o
>>   obj-y	+= grant-table.o features.o balloon.o manage.o preempt.o time.o
>> +obj-y	+= mem-reservation.o
>>   obj-y	+= events/
>>   obj-y	+= xenbus/
>>   
>> diff --git a/drivers/xen/balloon.c b/drivers/xen/balloon.c
>> index 065f0b607373..57b482d67a3a 100644
>> --- a/drivers/xen/balloon.c
>> +++ b/drivers/xen/balloon.c
>> @@ -71,6 +71,7 @@
>>   #include <xen/balloon.h>
>>   #include <xen/features.h>
>>   #include <xen/page.h>
>> +#include <xen/mem_reservation.h>
>>   
>>   static int xen_hotplug_unpopulated;
>>   
>> @@ -157,13 +158,6 @@ static DECLARE_DELAYED_WORK(balloon_worker, balloon_process);
>>   #define GFP_BALLOON \
>>   	(GFP_HIGHUSER | __GFP_NOWARN | __GFP_NORETRY | __GFP_NOMEMALLOC)
>>   
>> -static void scrub_page(struct page *page)
>> -{
>> -#ifdef CONFIG_XEN_SCRUB_PAGES
>> -	clear_highpage(page);
>> -#endif
>> -}
>> -
>>   /* balloon_append: add the given page to the balloon. */
>>   static void __balloon_append(struct page *page)
>>   {
>> @@ -463,11 +457,6 @@ static enum bp_state increase_reservation(unsigned long nr_pages)
>>   	int rc;
>>   	unsigned long i;
>>   	struct page   *page;
>> -	struct xen_memory_reservation reservation = {
>> -		.address_bits = 0,
>> -		.extent_order = EXTENT_ORDER,
>> -		.domid        = DOMID_SELF
>> -	};
>>   
>>   	if (nr_pages > ARRAY_SIZE(frame_list))
>>   		nr_pages = ARRAY_SIZE(frame_list);
>> @@ -486,9 +475,7 @@ static enum bp_state increase_reservation(unsigned long nr_pages)
>>   		page = balloon_next_page(page);
>>   	}
>>   
>> -	set_xen_guest_handle(reservation.extent_start, frame_list);
>> -	reservation.nr_extents = nr_pages;
>> -	rc = HYPERVISOR_memory_op(XENMEM_populate_physmap, &reservation);
>> +	rc = xenmem_reservation_increase(nr_pages, frame_list);
>>   	if (rc <= 0)
>>   		return BP_EAGAIN;
>>   
>> @@ -496,29 +483,7 @@ static enum bp_state increase_reservation(unsigned long nr_pages)
>>   		page = balloon_retrieve(false);
>>   		BUG_ON(page == NULL);
>>   
>> -#ifdef CONFIG_XEN_HAVE_PVMMU
>> -		/*
>> -		 * We don't support PV MMU when Linux and Xen is using
>> -		 * different page granularity.
>> -		 */
>> -		BUILD_BUG_ON(XEN_PAGE_SIZE != PAGE_SIZE);
>> -
>> -		if (!xen_feature(XENFEAT_auto_translated_physmap)) {
>> -			unsigned long pfn = page_to_pfn(page);
>> -
>> -			set_phys_to_machine(pfn, frame_list[i]);
>> -
>> -			/* Link back into the page tables if not highmem. */
>> -			if (!PageHighMem(page)) {
>> -				int ret;
>> -				ret = HYPERVISOR_update_va_mapping(
>> -						(unsigned long)__va(pfn << PAGE_SHIFT),
>> -						mfn_pte(frame_list[i], PAGE_KERNEL),
>> -						0);
>> -				BUG_ON(ret);
>> -			}
>> -		}
>> -#endif
>> +		xenmem_reservation_va_mapping_update(1, &page, &frame_list[i]);
>>   
>>   		/* Relinquish the page back to the allocator. */
>>   		free_reserved_page(page);
>> @@ -535,11 +500,6 @@ static enum bp_state decrease_reservation(unsigned long nr_pages, gfp_t gfp)
>>   	unsigned long i;
>>   	struct page *page, *tmp;
>>   	int ret;
>> -	struct xen_memory_reservation reservation = {
>> -		.address_bits = 0,
>> -		.extent_order = EXTENT_ORDER,
>> -		.domid        = DOMID_SELF
>> -	};
>>   	LIST_HEAD(pages);
>>   
>>   	if (nr_pages > ARRAY_SIZE(frame_list))
>> @@ -553,7 +513,7 @@ static enum bp_state decrease_reservation(unsigned long nr_pages, gfp_t gfp)
>>   			break;
>>   		}
>>   		adjust_managed_page_count(page, -1);
>> -		scrub_page(page);
>> +		xenmem_reservation_scrub_page(page);
>>   		list_add(&page->lru, &pages);
>>   	}
>>   
>> @@ -575,25 +535,8 @@ static enum bp_state decrease_reservation(unsigned long nr_pages, gfp_t gfp)
>>   		/* XENMEM_decrease_reservation requires a GFN */
>>   		frame_list[i++] = xen_page_to_gfn(page);
>>   
>> -#ifdef CONFIG_XEN_HAVE_PVMMU
>> -		/*
>> -		 * We don't support PV MMU when Linux and Xen is using
>> -		 * different page granularity.
>> -		 */
>> -		BUILD_BUG_ON(XEN_PAGE_SIZE != PAGE_SIZE);
>> -
>> -		if (!xen_feature(XENFEAT_auto_translated_physmap)) {
>> -			unsigned long pfn = page_to_pfn(page);
>> +		xenmem_reservation_va_mapping_reset(1, &page);
>>   
>> -			if (!PageHighMem(page)) {
>> -				ret = HYPERVISOR_update_va_mapping(
>> -						(unsigned long)__va(pfn << PAGE_SHIFT),
>> -						__pte_ma(0), 0);
>> -				BUG_ON(ret);
>> -			}
>> -			__set_phys_to_machine(pfn, INVALID_P2M_ENTRY);
>> -		}
>> -#endif
>>   		list_del(&page->lru);
>>   
>>   		balloon_append(page);
>> @@ -601,9 +544,7 @@ static enum bp_state decrease_reservation(unsigned long nr_pages, gfp_t gfp)
>>   
>>   	flush_tlb_all();
>>   
>> -	set_xen_guest_handle(reservation.extent_start, frame_list);
>> -	reservation.nr_extents   = nr_pages;
>> -	ret = HYPERVISOR_memory_op(XENMEM_decrease_reservation, &reservation);
>> +	ret = xenmem_reservation_decrease(nr_pages, frame_list);
>>   	BUG_ON(ret != nr_pages);
>>   
>>   	balloon_stats.current_pages -= nr_pages;
>> diff --git a/drivers/xen/mem-reservation.c b/drivers/xen/mem-reservation.c
>> new file mode 100644
>> index 000000000000..29882e4324f5
>> --- /dev/null
>> +++ b/drivers/xen/mem-reservation.c
>> @@ -0,0 +1,134 @@
>> +// SPDX-License-Identifier: GPL-2.0 OR MIT
>> +
>> +/******************************************************************************
>> + * Xen memory reservation utilities.
>> + *
>> + * Copyright (c) 2003, B Dragovic
>> + * Copyright (c) 2003-2004, M Williamson, K Fraser
>> + * Copyright (c) 2005 Dan M. Smith, IBM Corporation
>> + * Copyright (c) 2010 Daniel Kiper
>> + * Copyright (c) 2018, Oleksandr Andrushchenko, EPAM Systems Inc.
>> + */
>> +
>> +#include <linux/kernel.h>
>> +#include <linux/slab.h>
>> +
>> +#include <asm/tlb.h>
>> +#include <asm/xen/hypercall.h>
>> +
>> +#include <xen/interface/memory.h>
>> +#include <xen/page.h>
>> +
>> +/*
>> + * Use one extent per PAGE_SIZE to avoid to break down the page into
>> + * multiple frame.
>> + */
>> +#define EXTENT_ORDER (fls(XEN_PFN_PER_PAGE) - 1)
>> +
>> +void xenmem_reservation_scrub_page(struct page *page)
>> +{
>> +#ifdef CONFIG_XEN_SCRUB_PAGES
>> +	clear_highpage(page);
>> +#endif
>> +}
>> +EXPORT_SYMBOL(xenmem_reservation_scrub_page);
> EXPORT_SYMBOL_GPL()
>
> Multiple times below, too.
Ok, will change to _GPL
> As a general rule of thumb: new exports should all be
> EXPORT_SYMBOL_GPL() if you can't give a reason why they shouldn't be.
>
>
> Juergen
Thank you,
Oleksandr

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

  reply	other threads:[~2018-05-30  5:39 UTC|newest]

Thread overview: 115+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-05-25 15:33 [PATCH 0/8] xen: dma-buf support for grant device Oleksandr Andrushchenko
2018-05-25 15:33 ` Oleksandr Andrushchenko
2018-05-25 15:33 ` [PATCH 1/8] xen/grant-table: Make set/clear page private code shared Oleksandr Andrushchenko
2018-05-25 15:33   ` Oleksandr Andrushchenko
2018-05-29 17:39   ` Boris Ostrovsky
2018-05-29 17:39   ` Boris Ostrovsky
2018-05-30  4:24   ` Juergen Gross
2018-05-30  5:27     ` Oleksandr Andrushchenko
2018-05-30  5:27     ` Oleksandr Andrushchenko
2018-05-30  4:24   ` Juergen Gross
2018-05-30 21:34   ` Dongwon Kim
2018-05-30 21:34   ` Dongwon Kim
2018-05-31  5:37     ` Oleksandr Andrushchenko
2018-05-31  5:37       ` Oleksandr Andrushchenko
2018-05-31  5:37     ` Oleksandr Andrushchenko
2018-05-25 15:33 ` Oleksandr Andrushchenko
2018-05-25 15:33 ` [PATCH 2/8] xen/balloon: Move common memory reservation routines to a module Oleksandr Andrushchenko
2018-05-25 15:33 ` Oleksandr Andrushchenko
2018-05-25 15:33   ` Oleksandr Andrushchenko
2018-05-29 18:04   ` Boris Ostrovsky
2018-05-29 18:04   ` Boris Ostrovsky
2018-05-29 18:22     ` Oleksandr Andrushchenko
2018-05-29 18:22       ` Oleksandr Andrushchenko
2018-05-29 20:03       ` Boris Ostrovsky
2018-05-29 20:03       ` Boris Ostrovsky
2018-05-30  8:29         ` Oleksandr Andrushchenko
2018-05-30 15:54           ` Boris Ostrovsky
2018-05-30 15:54           ` Boris Ostrovsky
2018-05-30 17:46             ` Oleksandr Andrushchenko
2018-05-30 17:46             ` Oleksandr Andrushchenko
2018-05-30 19:24               ` Boris Ostrovsky
2018-05-30 19:24               ` Boris Ostrovsky
2018-05-31  7:51                 ` Oleksandr Andrushchenko
2018-05-31  7:51                   ` Oleksandr Andrushchenko
2018-05-31 14:29                   ` Oleksandr Andrushchenko
2018-05-31 14:29                   ` Oleksandr Andrushchenko
2018-05-31  7:51                 ` Oleksandr Andrushchenko
2018-05-30  8:29         ` Oleksandr Andrushchenko
2018-05-29 18:22     ` Oleksandr Andrushchenko
2018-05-29 18:24   ` Boris Ostrovsky
2018-05-29 18:24   ` Boris Ostrovsky
2018-05-29 18:23     ` Oleksandr Andrushchenko
2018-05-29 18:23     ` Oleksandr Andrushchenko
2018-05-29 18:23       ` Oleksandr Andrushchenko
2018-05-30  4:32   ` Juergen Gross
2018-05-30  5:30     ` Oleksandr Andrushchenko [this message]
2018-05-30  5:30     ` Oleksandr Andrushchenko
2018-05-30  4:32   ` Juergen Gross
2018-05-25 15:33 ` [PATCH 3/8] xen/grant-table: Allow allocating buffers suitable for DMA Oleksandr Andrushchenko
2018-05-25 15:33   ` Oleksandr Andrushchenko
2018-05-29 19:10   ` Boris Ostrovsky
2018-05-30  6:34     ` Oleksandr Andrushchenko
2018-05-30  6:34       ` Oleksandr Andrushchenko
2018-05-30 15:20       ` Boris Ostrovsky
2018-05-30 15:20       ` Boris Ostrovsky
2018-05-30 17:49         ` Oleksandr Andrushchenko
2018-05-30 17:49         ` Oleksandr Andrushchenko
2018-05-30 19:25           ` Boris Ostrovsky
2018-05-30 19:25           ` Boris Ostrovsky
2018-05-30  6:34     ` Oleksandr Andrushchenko
2018-05-29 19:10   ` Boris Ostrovsky
2018-05-25 15:33 ` Oleksandr Andrushchenko
2018-05-25 15:33 ` [PATCH 4/8] xen/gntdev: Allow mappings for DMA buffers Oleksandr Andrushchenko
2018-05-25 15:33   ` Oleksandr Andrushchenko
2018-05-29 21:52   ` Boris Ostrovsky
2018-05-30  6:47     ` Oleksandr Andrushchenko
2018-05-30  6:47       ` Oleksandr Andrushchenko
2018-05-30  6:47     ` Oleksandr Andrushchenko
2018-05-29 21:52   ` Boris Ostrovsky
2018-05-25 15:33 ` Oleksandr Andrushchenko
2018-05-25 15:33 ` [PATCH 5/8] xen/gntdev: Add initial support for dma-buf UAPI Oleksandr Andrushchenko
2018-05-25 15:33 ` Oleksandr Andrushchenko
2018-05-25 15:33   ` Oleksandr Andrushchenko
2018-05-29 22:34   ` Boris Ostrovsky
2018-05-30  6:52     ` Oleksandr Andrushchenko
2018-05-30  6:52       ` Oleksandr Andrushchenko
2018-05-30  6:52     ` Oleksandr Andrushchenko
2018-05-29 22:34   ` Boris Ostrovsky
2018-05-30  6:52   ` Oleksandr Andrushchenko
2018-05-30  6:52   ` Oleksandr Andrushchenko
2018-05-30  6:52     ` Oleksandr Andrushchenko
2018-05-25 15:33 ` [PATCH 6/8] xen/gntdev: Implement dma-buf export functionality Oleksandr Andrushchenko
2018-05-25 15:33   ` Oleksandr Andrushchenko
2018-05-30 23:10   ` Dongwon Kim
2018-05-30 23:10     ` Dongwon Kim
2018-05-31  5:55     ` Oleksandr Andrushchenko
2018-05-31  5:55       ` Oleksandr Andrushchenko
2018-05-31 14:32       ` Oleksandr Andrushchenko
2018-05-31 14:32         ` Oleksandr Andrushchenko
2018-05-31 14:32       ` Oleksandr Andrushchenko
2018-05-31  5:55     ` Oleksandr Andrushchenko
2018-05-30 23:10   ` Dongwon Kim
2018-05-25 15:33 ` Oleksandr Andrushchenko
2018-05-25 15:33 ` [PATCH 7/8] xen/gntdev: Implement dma-buf import functionality Oleksandr Andrushchenko
2018-05-25 15:33   ` Oleksandr Andrushchenko
2018-05-25 15:33 ` Oleksandr Andrushchenko
2018-05-25 15:33 ` [PATCH 8/8] xen/gntdev: Expose gntdev's dma-buf API for in-kernel use Oleksandr Andrushchenko
2018-05-25 15:33 ` Oleksandr Andrushchenko
2018-05-30  8:32   ` Oleksandr Andrushchenko
2018-05-30  8:32   ` Oleksandr Andrushchenko
2018-05-31  1:46 ` [PATCH 0/8] xen: dma-buf support for grant device Boris Ostrovsky
2018-05-31  5:51   ` Oleksandr Andrushchenko
2018-05-31  5:51     ` Oleksandr Andrushchenko
2018-05-31 14:41     ` Oleksandr Andrushchenko
2018-05-31 14:41       ` Oleksandr Andrushchenko
2018-05-31 20:25       ` Boris Ostrovsky
2018-05-31 20:25       ` Boris Ostrovsky
2018-06-01  5:42         ` Oleksandr Andrushchenko
2018-06-01  5:42           ` Oleksandr Andrushchenko
2018-06-01  5:42         ` Oleksandr Andrushchenko
2018-05-31 14:41     ` Oleksandr Andrushchenko
2018-05-31 19:36     ` Boris Ostrovsky
2018-05-31 19:36     ` Boris Ostrovsky
2018-05-31  5:51   ` Oleksandr Andrushchenko
2018-05-31  1:46 ` Boris Ostrovsky

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='3d9360c5-5ee4-292b-3787-fc4d4cfc9cc9__37414.001642219$1527658727$gmane$org@epam.com' \
    --to=oleksandr_andrushchenko@epam.com \
    --cc=andr2000@gmail.com \
    --cc=boris.ostrovsky@oracle.com \
    --cc=daniel.vetter@intel.com \
    --cc=dongwon.kim@intel.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=jgross@suse.com \
    --cc=konrad.wilk@oracle.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-media@vger.kernel.org \
    --cc=matthew.d.roper@intel.com \
    --cc=xen-devel@lists.xenproject.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.