From: Bob Liu <bob.liu@oracle.com>
To: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Cc: xen-devel@lists.xenproject.org, Bob Liu <lliubbo@gmail.com>,
keir@xen.org, ian.campbell@citrix.com, JBeulich@suse.com
Subject: Re: [PATCH 13/16] tmem: cleanup: __tmem_alloc_page: drop unneed parameters
Date: Tue, 26 Nov 2013 16:41:42 +0800 [thread overview]
Message-ID: <52945EC6.1080906@oracle.com> (raw)
In-Reply-To: <20131122181753.GH8120@phenom.dumpdata.com>
On 11/23/2013 02:17 AM, Konrad Rzeszutek Wilk wrote:
> On Wed, Nov 20, 2013 at 04:46:22PM +0800, Bob Liu wrote:
>> The two parameters of __tmem_alloc_page() can be reduced.
>
> That is dangerous. The last one (no_heap) was added to guard
> against recursion. Check how tmem_alloc_page_thispool calls
> alloc_domheap_pages, whcih calls alloc_heap_pages which
> can call tmem_relinquish_pages, which can .. well, you will
> get the idea.
>
>> tmem_called_from_tmem() was also dropped by this patch.
>>
>> Signed-off-by: Bob Liu <bob.liu@oracle.com>
>> ---
>> xen/common/tmem.c | 13 +++++--------
>> xen/include/xen/tmem_xen.h | 11 +++++------
>> 2 files changed, 10 insertions(+), 14 deletions(-)
>>
>> diff --git a/xen/common/tmem.c b/xen/common/tmem.c
>> index ee61899..bf0fa1b 100644
>> --- a/xen/common/tmem.c
>> +++ b/xen/common/tmem.c
>> @@ -245,7 +245,7 @@ static struct page_info *tmem_alloc_page(struct tmem_pool *pool)
>> if ( pool != NULL && is_persistent(pool) )
>> pfp = __tmem_alloc_page_thispool(pool->client->domain);
>> else
>> - pfp = __tmem_alloc_page(pool,0);
>> + pfp = __tmem_alloc_page();
>> return pfp;
>> }
>>
>> @@ -263,9 +263,8 @@ static noinline void *tmem_mempool_page_get(unsigned long size)
>> struct page_info *pi;
>>
>> ASSERT(size == PAGE_SIZE);
>> - if ( (pi = __tmem_alloc_page(NULL,0)) == NULL )
>> + if ( (pi = __tmem_alloc_page()) == NULL )
>> return NULL;
>> - ASSERT(IS_VALID_PAGE(pi));
>> return page_to_virt(pi);
>> }
>>
>> @@ -2450,7 +2449,6 @@ void tmem_freeze_all(unsigned char key)
>> void *tmem_relinquish_pages(unsigned int order, unsigned int memflags)
>> {
>> struct page_info *pfp;
>> - unsigned long evicts_per_relinq = 0;
>> int max_evictions = 10;
>>
>> if (!tmem_enabled() || !tmem_freeable_pages())
>> @@ -2464,14 +2462,13 @@ void *tmem_relinquish_pages(unsigned int order, unsigned int memflags)
>> return NULL;
>> }
>>
>> - if ( tmem_called_from_tmem(memflags) )
>> + if ( memflags & MEMF_tmem )
>> read_lock(&tmem_rwlock);
>>
>> - while ( (pfp = __tmem_alloc_page(NULL,1)) == NULL )
>> + while ( (pfp = tmem_page_list_get()) == NULL )
>
> No no. That could lead to bad recursion. You need to pass '1' somehow.
>
I don't think so.
If pass '1' to __tmem_alloc_page(), __tmem_alloc_page() only call
tmem_page_list_get() and return.
It's no difference, so an extra parameter is unneeded.
>
>> {
>> if ( (max_evictions-- <= 0) || !tmem_evict())
>> break;
>> - evicts_per_relinq++;
>
>
> ? Should this be a seperate patch?
>
>> }
>> if ( pfp != NULL )
>> {
>> @@ -2479,7 +2476,7 @@ void *tmem_relinquish_pages(unsigned int order, unsigned int memflags)
>> scrub_one_page(pfp);
>> }
>>
>> - if ( tmem_called_from_tmem(memflags) )
>> + if ( memflags & MEMF_tmem )
>
> Perhaps a comment too? /* Called recursively from within tmem. */
>
>> read_unlock(&tmem_rwlock);
>>
>> return pfp;
>> diff --git a/xen/include/xen/tmem_xen.h b/xen/include/xen/tmem_xen.h
>> index 7468c28..c4b9f5a 100644
>> --- a/xen/include/xen/tmem_xen.h
>> +++ b/xen/include/xen/tmem_xen.h
>> @@ -144,15 +144,16 @@ static inline void __tmem_free_page_thispool(struct page_info *pi)
>> /*
>> * Memory allocation for ephemeral (non-persistent) data
>> */
>> -static inline struct page_info *__tmem_alloc_page(void *pool, int no_heap)
>> +static inline struct page_info *__tmem_alloc_page(void)
>> {
>> struct page_info *pi = tmem_page_list_get();
>>
>> - if ( pi == NULL && !no_heap )
>> + if ( pi == NULL)
>> pi = alloc_domheap_pages(0,0,MEMF_tmem);
>> - ASSERT((pi == NULL) || IS_VALID_PAGE(pi));
>> - if ( pi != NULL && !no_heap )
>> +
>> + if ( pi )
>> atomic_inc(&freeable_page_count);
>> + ASSERT((pi == NULL) || IS_VALID_PAGE(pi));
>> return pi;
>> }
>>
See __tmem_alloc_page() implementation here.
--
Regards,
-Bob
next prev parent reply other threads:[~2013-11-26 8:41 UTC|newest]
Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-11-20 8:46 [PATCH 01/16] tmem: cleanup: drop some debug code Bob Liu
2013-11-20 8:46 ` [PATCH 02/16] tmem: cleanup: drop useless function 'tmem_copy_page' Bob Liu
2013-11-20 8:46 ` [PATCH 03/16] tmem: cleanup: rm unused tmem_op Bob Liu
2013-11-22 17:38 ` Konrad Rzeszutek Wilk
2013-11-25 9:43 ` Jan Beulich
2013-11-25 9:52 ` Ian Campbell
2013-11-25 9:58 ` Jan Beulich
2013-11-25 16:37 ` Konrad Rzeszutek Wilk
2013-11-25 16:40 ` Ian Campbell
2013-11-25 17:09 ` Konrad Rzeszutek Wilk
2013-11-25 17:12 ` Ian Campbell
2013-11-25 19:56 ` Konrad Rzeszutek Wilk
2013-11-26 8:56 ` Bob Liu
2013-11-20 8:46 ` [PATCH 04/16] tmem: cleanup: rm unneeded parameters from put path Bob Liu
2013-11-22 17:54 ` Konrad Rzeszutek Wilk
2013-11-26 8:22 ` Bob Liu
2013-11-20 8:46 ` [PATCH 05/16] tmem: cleanup: rm unneeded parameters from get path Bob Liu
2013-11-22 17:55 ` Konrad Rzeszutek Wilk
2013-11-20 8:46 ` [PATCH 06/16] tmem: cleanup: reorg do_tmem_put() Bob Liu
2013-11-22 18:04 ` Konrad Rzeszutek Wilk
2013-11-20 8:46 ` [PATCH 07/16] tmem: drop unneeded is_ephemeral() and is_private() Bob Liu
2013-11-20 8:46 ` [PATCH 08/16] tmem: cleanup: rm useless EXPORT/FORWARD define Bob Liu
2013-11-22 18:05 ` Konrad Rzeszutek Wilk
2013-11-20 8:46 ` [PATCH 09/16] tmem: cleanup: drop tmemc_list() temporary Bob Liu
2013-11-22 18:07 ` Konrad Rzeszutek Wilk
2013-11-26 8:28 ` Bob Liu
2013-11-22 21:00 ` Konrad Rzeszutek Wilk
2013-11-20 8:46 ` [PATCH 10/16] tmem: cleanup: drop runtime statistics Bob Liu
2013-11-22 18:08 ` Konrad Rzeszutek Wilk
2013-11-20 8:46 ` [PATCH 11/16] tmem: cleanup: drop tmem_lock_all Bob Liu
2013-11-20 8:46 ` [PATCH 12/16] tmem: cleanup: refactor the alloc/free path Bob Liu
2013-11-20 8:46 ` [PATCH 13/16] tmem: cleanup: __tmem_alloc_page: drop unneed parameters Bob Liu
2013-11-22 18:17 ` Konrad Rzeszutek Wilk
2013-11-26 8:41 ` Bob Liu [this message]
2013-11-26 17:38 ` Konrad Rzeszutek Wilk
2013-11-20 8:46 ` [PATCH 14/16] tmem: cleanup: drop useless functions from head file Bob Liu
2013-11-27 14:38 ` Andrew Cooper
2013-11-27 14:52 ` Konrad Rzeszutek Wilk
2013-11-27 14:59 ` Andrew Cooper
2013-11-27 15:55 ` Jan Beulich
2013-11-20 8:46 ` [PATCH 15/16] tmem: refator function tmem_ensure_avail_pages() Bob Liu
2013-11-22 18:22 ` Konrad Rzeszutek Wilk
2013-11-20 8:46 ` [PATCH 16/16] tmem: cleanup: rename tmem_relinquish_npages() Bob Liu
2013-11-20 9:08 ` [PATCH 01/16] tmem: cleanup: drop some debug code Jan Beulich
2013-11-20 9:19 ` Bob Liu
2013-11-20 9:25 ` Jan Beulich
2013-11-20 13:51 ` Konrad Rzeszutek Wilk
2013-11-20 14:21 ` Jan Beulich
2013-11-20 18:46 ` Konrad Rzeszutek Wilk
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=52945EC6.1080906@oracle.com \
--to=bob.liu@oracle.com \
--cc=JBeulich@suse.com \
--cc=ian.campbell@citrix.com \
--cc=keir@xen.org \
--cc=konrad.wilk@oracle.com \
--cc=lliubbo@gmail.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.