From: Bob Liu <lliubbo@gmail.com>
To: xen-devel@lists.xenproject.org
Cc: Bob Liu <bob.liu@oracle.com>,
keir@xen.org, ian.campbell@citrix.com, JBeulich@suse.com
Subject: [PATCH v2 07/11] tmem: cleanup: drop typedef tmem_client_t
Date: Fri, 8 Nov 2013 09:03:53 +0800 [thread overview]
Message-ID: <1383872637-15486-8-git-send-email-bob.liu@oracle.com> (raw)
In-Reply-To: <1383872637-15486-1-git-send-email-bob.liu@oracle.com>
Informations in typedef 'tmem_client_t' can be integreated into
'struct client' directly, no need to use a separate struct.
Signed-off-by: Bob Liu <bob.liu@oracle.com>
---
xen/common/tmem.c | 31 ++++++++++++++++++++++++-------
xen/common/tmem_xen.c | 34 ++--------------------------------
xen/include/xen/tmem_xen.h | 40 +++++++---------------------------------
3 files changed, 33 insertions(+), 72 deletions(-)
diff --git a/xen/common/tmem.c b/xen/common/tmem.c
index 589a515..db18b65 100644
--- a/xen/common/tmem.c
+++ b/xen/common/tmem.c
@@ -104,7 +104,8 @@ struct tmem_page_content_descriptor;
struct client {
struct list_head client_list;
struct tmem_pool *pools[MAX_POOLS_PER_DOMAIN];
- tmem_client_t *tmem;
+ struct domain *domain;
+ struct xmem_pool *persistent_pool;
struct list_head ephemeral_page_list;
long eph_count, eph_count_max;
domid_t cli_id;
@@ -1190,7 +1191,9 @@ static void pool_flush(struct tmem_pool *pool, domid_t cli_id, bool_t destroy)
static struct client *client_create(domid_t cli_id)
{
struct client *client = xzalloc(struct client);
- int i;
+ int i, shift;
+ char name[5];
+ struct domain *d;
tmem_client_info("tmem: initializing tmem capability for %s=%d...",
tmem_cli_id_str, cli_id);
@@ -1199,16 +1202,30 @@ static struct client *client_create(domid_t cli_id)
tmem_client_err("failed... out of memory\n");
goto fail;
}
- if ( (client->tmem = tmem_client_init(cli_id)) == NULL )
+
+ for (i = 0, shift = 12; i < 4; shift -=4, i++)
+ name[i] = (((unsigned short)cli_id >> shift) & 0xf) + '0';
+ name[4] = '\0';
+ client->persistent_pool = xmem_pool_create(name, tmem_persistent_pool_page_get,
+ tmem_persistent_pool_page_put, PAGE_SIZE, 0, PAGE_SIZE);
+ if ( client->persistent_pool == NULL )
{
- tmem_client_err("failed... can't allocate host-dependent part of client\n");
+ tmem_client_err("failed... can't alloc persistent pool\n");
goto fail;
}
- if ( !tmem_set_client_from_id(client, client->tmem, cli_id) )
- {
+
+ d = rcu_lock_domain_by_id(cli_id);
+ if ( d == NULL ) {
tmem_client_err("failed... can't set client\n");
+ xmem_pool_destroy(client->persistent_pool);
goto fail;
}
+ if ( !d->is_dying ) {
+ d->tmem = client;
+ client->domain = d;
+ }
+ rcu_unlock_domain(d);
+
client->cli_id = cli_id;
client->compress = tmem_compression_enabled();
client->shared_auth_required = tmem_shared_auth();
@@ -1235,7 +1252,7 @@ static struct client *client_create(domid_t cli_id)
static void client_free(struct client *client)
{
list_del(&client->client_list);
- tmem_client_destroy(client->tmem);
+ xmem_pool_destroy(client->persistent_pool);
xfree(client);
}
diff --git a/xen/common/tmem_xen.c b/xen/common/tmem_xen.c
index e92eab6..1309932 100644
--- a/xen/common/tmem_xen.c
+++ b/xen/common/tmem_xen.c
@@ -341,7 +341,7 @@ static int __init tmem_mempool_init(void)
/* persistent pools are per-domain */
-static void *tmem_persistent_pool_page_get(unsigned long size)
+void *tmem_persistent_pool_page_get(unsigned long size)
{
struct page_info *pi;
struct domain *d = current->domain;
@@ -353,7 +353,7 @@ static void *tmem_persistent_pool_page_get(unsigned long size)
return page_to_virt(pi);
}
-static void tmem_persistent_pool_page_put(void *page_va)
+void tmem_persistent_pool_page_put(void *page_va)
{
struct page_info *pi;
@@ -363,36 +363,6 @@ static void tmem_persistent_pool_page_put(void *page_va)
_tmem_free_page_thispool(pi);
}
-/****************** XEN-SPECIFIC CLIENT HANDLING ********************/
-
-EXPORT tmem_client_t *tmem_client_init(domid_t cli_id)
-{
- tmem_client_t *tmem;
- char name[5];
- int i, shift;
-
- if ( (tmem = xmalloc(tmem_client_t)) == NULL )
- return NULL;
- for (i = 0, shift = 12; i < 4; shift -=4, i++)
- name[i] = (((unsigned short)cli_id >> shift) & 0xf) + '0';
- name[4] = '\0';
- tmem->persistent_pool = xmem_pool_create(name, tmem_persistent_pool_page_get,
- tmem_persistent_pool_page_put, PAGE_SIZE, 0, PAGE_SIZE);
- if ( tmem->persistent_pool == NULL )
- {
- xfree(tmem);
- return NULL;
- }
- return tmem;
-}
-
-EXPORT void tmem_client_destroy(tmem_client_t *tmem)
-{
- ASSERT(tmem->domain->is_dying);
- xmem_pool_destroy(tmem->persistent_pool);
- tmem->domain = NULL;
-}
-
/****************** XEN-SPECIFIC HOST INITIALIZATION ********************/
static int dstmem_order, workmem_order;
diff --git a/xen/include/xen/tmem_xen.h b/xen/include/xen/tmem_xen.h
index d4eafaf..3c99bee 100644
--- a/xen/include/xen/tmem_xen.h
+++ b/xen/include/xen/tmem_xen.h
@@ -21,13 +21,6 @@
#ifdef CONFIG_COMPAT
#include <compat/tmem.h>
#endif
-
-struct tmem_host_dependent_client {
- struct domain *domain;
- struct xmem_pool *persistent_pool;
-};
-typedef struct tmem_host_dependent_client tmem_client_t;
-
typedef uint32_t pagesize_t; /* like size_t, must handle largest PAGE_SIZE */
#define IS_PAGE_ALIGNED(addr) \
@@ -123,7 +116,7 @@ static inline bool_t domain_fully_allocated(struct domain *d)
return ( d->tot_pages >= d->max_pages );
}
#define tmem_client_memory_fully_allocated(_pool) \
- domain_fully_allocated(_pool->client->tmem->domain)
+ domain_fully_allocated(_pool->client->domain)
static inline void *_tmem_alloc_subpage_thispool(struct xmem_pool *cmem_mempool,
size_t size, size_t align)
@@ -138,7 +131,7 @@ static inline void *_tmem_alloc_subpage_thispool(struct xmem_pool *cmem_mempool,
return xmem_pool_alloc(size, cmem_mempool);
}
#define tmem_alloc_subpage_thispool(_pool, _s, _a) \
- _tmem_alloc_subpage_thispool(pool->client->tmem->persistent_pool, \
+ _tmem_alloc_subpage_thispool(pool->client->persistent_pool, \
_s, _a)
static inline void _tmem_free_subpage_thispool(struct xmem_pool *cmem_mempool,
@@ -149,7 +142,7 @@ static inline void _tmem_free_subpage_thispool(struct xmem_pool *cmem_mempool,
xmem_pool_free(ptr,cmem_mempool);
}
#define tmem_free_subpage_thispool(_pool, _p, _s) \
- _tmem_free_subpage_thispool(_pool->client->tmem->persistent_pool, _p, _s)
+ _tmem_free_subpage_thispool(_pool->client->persistent_pool, _p, _s)
static inline struct page_info *_tmem_alloc_page_thispool(struct domain *d)
{
@@ -179,7 +172,7 @@ out:
return pi;
}
#define tmem_alloc_page_thispool(_pool) \
- _tmem_alloc_page_thispool(_pool->client->tmem->domain)
+ _tmem_alloc_page_thispool(_pool->client->domain)
static inline void _tmem_free_page_thispool(struct page_info *pi)
{
@@ -251,10 +244,6 @@ static inline unsigned long tmem_free_mb(void)
/* "Client" (==domain) abstraction */
struct client;
-
-extern tmem_client_t *tmem_client_init(domid_t);
-extern void tmem_client_destroy(tmem_client_t *);
-
static inline struct client *tmem_client_from_cli_id(domid_t cli_id)
{
struct client *c;
@@ -271,7 +260,7 @@ static inline struct client *tmem_client_from_current(void)
return (struct client *)(current->domain->tmem);
}
-#define tmem_client_is_dying(_client) (!!_client->tmem->domain->is_dying)
+#define tmem_client_is_dying(_client) (!!_client->domain->is_dying)
static inline domid_t tmem_get_cli_id_from_current(void)
{
@@ -283,23 +272,6 @@ static inline struct domain *tmem_get_cli_ptr_from_current(void)
return current->domain;
}
-static inline bool_t tmem_set_client_from_id(
- struct client *client, tmem_client_t *tmem, domid_t cli_id)
-{
- struct domain *d = rcu_lock_domain_by_id(cli_id);
- bool_t rc = 0;
- if ( d == NULL )
- return 0;
- if ( !d->is_dying )
- {
- d->tmem = client;
- tmem->domain = d;
- rc = 1;
- }
- rcu_unlock_domain(d);
- return rc;
-}
-
static inline bool_t tmem_current_permitted(void)
{
return !xsm_tmem_op(XSM_HOOK);
@@ -476,6 +448,8 @@ int tmem_copy_to_client(xen_pfn_t, struct page_info *, pagesize_t tmem_offset,
pagesize_t pfn_offset, pagesize_t len, tmem_cli_va_param_t);
extern int tmem_copy_tze_to_client(xen_pfn_t cmfn, void *tmem_va, pagesize_t len);
+extern void *tmem_persistent_pool_page_get(unsigned long size);
+extern void tmem_persistent_pool_page_put(void *page_va);
#define tmem_client_err(fmt, args...) printk(XENLOG_G_ERR fmt, ##args)
#define tmem_client_warn(fmt, args...) printk(XENLOG_G_WARNING fmt, ##args)
--
1.7.10.4
next prev parent reply other threads:[~2013-11-08 1:05 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-11-08 1:03 [PATCH v2 00/11] tmem: some basic cleanup Bob Liu
2013-11-08 1:03 ` [PATCH v2 01/11] tmem: cleanup: drop COMPARE_COPY_PAGE_SSE2 Bob Liu
2013-11-08 1:03 ` [PATCH v2 02/11] tmem: cleanup: drop typedef pfp_t Bob Liu
2013-11-08 1:03 ` [PATCH v2 03/11] tmem: cleanup: drop typedef tmem_cli_mfn_t Bob Liu
2013-11-08 1:03 ` [PATCH v2 04/11] tmem: cleanup: rename 'tmh_' with 'tmem_' Bob Liu
2013-11-08 1:03 ` [PATCH v2 05/11] tmem: cleanup: drop most of the typedefs Bob Liu
2013-11-08 1:03 ` [PATCH v2 06/11] tmem: cleanup: drop function tmem_alloc/free_infra Bob Liu
2013-11-08 1:03 ` Bob Liu [this message]
2013-11-08 1:03 ` [PATCH v2 08/11] tmem: cleanup: drop useless wrap functions Bob Liu
2013-11-08 1:03 ` [PATCH v2 09/11] tmem: cleanup: drop unused function 'domain_fully_allocated' Bob Liu
2013-11-08 1:03 ` [PATCH v2 10/11] tmem: cleanup: drop useless '_subpage' wrap functions Bob Liu
2013-11-08 1:03 ` [PATCH v2 11/11] tmem: cleanup: drop useless functions Bob Liu
2014-02-07 15:48 ` Konrad Rzeszutek Wilk
2014-02-07 16:16 ` Jan Beulich
2014-02-11 7:45 ` Bob Liu
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=1383872637-15486-8-git-send-email-bob.liu@oracle.com \
--to=lliubbo@gmail.com \
--cc=JBeulich@suse.com \
--cc=bob.liu@oracle.com \
--cc=ian.campbell@citrix.com \
--cc=keir@xen.org \
--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 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).