xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
From: Vincent Hanquez <vincent.hanquez@eu.citrix.com>
To: xen-devel <xen-devel@lists.xensource.com>
Cc: Vincent Hanquez <vincent.hanquez@eu.citrix.com>
Subject: [PATCH 2/5] Wrap init context procedure into a macro. Introduce a gc structure.
Date: Tue, 10 Aug 2010 12:46:50 +0100	[thread overview]
Message-ID: <1281440813-22610-3-git-send-email-vincent.hanquez@eu.citrix.com> (raw)
In-Reply-To: <1281440813-22610-1-git-send-email-vincent.hanquez@eu.citrix.com>

[-- Attachment #1: Type: text/plain, Size: 206 bytes --]


Signed-off-by: Vincent Hanquez <vincent.hanquez@eu.citrix.com>
---
 tools/ocaml/libs/xl/xl_stubs.c |  103 +++++++++++++++++++++------------------
 1 files changed, 55 insertions(+), 48 deletions(-)


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0002-Wrap-init-context-procedure-into-a-macro.-Introduce-.patch --]
[-- Type: text/x-patch; name="0002-Wrap-init-context-procedure-into-a-macro.-Introduce-.patch", Size: 12395 bytes --]

diff --git a/tools/ocaml/libs/xl/xl_stubs.c b/tools/ocaml/libs/xl/xl_stubs.c
index fc0c20d..42f2637 100644
--- a/tools/ocaml/libs/xl/xl_stubs.c
+++ b/tools/ocaml/libs/xl/xl_stubs.c
@@ -34,6 +34,11 @@ struct caml_logger {
 	char log_buf[2048];
 };
 
+typedef struct caml_gc {
+	int offset;
+	void *ptrs[64];
+} caml_gc;
+
 void log_vmessage(struct xentoollog_logger *logger, xentoollog_level level,
                   int errnoval, const char *context, const char *format, va_list al)
 {
@@ -47,6 +52,8 @@ void log_destroy(struct xentoollog_logger *logger)
 {
 }
 
+#define INIT_STRUCT() libxl_ctx ctx; struct caml_logger lg; struct caml_gc gc; gc.offset = 0;
+
 #define INIT_CTX()  \
 	lg.logger.vmessage = log_vmessage; \
 	lg.logger.destroy = log_destroy; \
@@ -65,7 +72,7 @@ void failwith_xl(char *fname, struct caml_logger *lg)
 	caml_raise_with_string(*caml_named_value("xl.error"), s);
 }
 
-static int string_string_tuple_array_val (char ***c_val, value v)
+static int string_string_tuple_array_val (caml_gc *gc, char ***c_val, value v)
 {
 	CAMLparam1(v);
 	CAMLlocal1(a);
@@ -86,7 +93,7 @@ static int string_string_tuple_array_val (char ***c_val, value v)
 	CAMLreturn(0);
 }
 
-static int domain_create_info_val (libxl_domain_create_info *c_val, value v)
+static int domain_create_info_val (caml_gc *gc, libxl_domain_create_info *c_val, value v)
 {
 	CAMLparam1(v);
 	CAMLlocal1(a);
@@ -100,8 +107,8 @@ static int domain_create_info_val (libxl_domain_create_info *c_val, value v)
 	a = Field(v, 5);
 	for (i = 0; i < 16; i++)
 		c_val->uuid[i] = Int_val(Field(a, i));
-	string_string_tuple_array_val(&(c_val->xsdata), Field(v, 6));
-	string_string_tuple_array_val(&(c_val->platformdata), Field(v, 7));
+	string_string_tuple_array_val(gc, &(c_val->xsdata), Field(v, 6));
+	string_string_tuple_array_val(gc, &(c_val->platformdata), Field(v, 7));
 
 	c_val->poolid = Int32_val(Field(v, 8));
 	c_val->poolname = String_val(Field(v, 9));
@@ -109,7 +116,7 @@ static int domain_create_info_val (libxl_domain_create_info *c_val, value v)
 	CAMLreturn(0);
 }
 
-static int domain_build_info_val (libxl_domain_build_info *c_val, value v)
+static int domain_build_info_val (caml_gc *gc, libxl_domain_build_info *c_val, value v)
 {
 	CAMLparam1(v);
 	CAMLlocal1(infopriv);
@@ -143,7 +150,7 @@ static int domain_build_info_val (libxl_domain_build_info *c_val, value v)
 	CAMLreturn(0);
 }
 
-static int device_disk_val(libxl_device_disk *c_val, value v)
+static int device_disk_val(caml_gc *gc, libxl_device_disk *c_val, value v)
 {
 	CAMLparam1(v);
 
@@ -158,7 +165,7 @@ static int device_disk_val(libxl_device_disk *c_val, value v)
 	CAMLreturn(0);
 }
 
-static int device_nic_val(libxl_device_nic *c_val, value v)
+static int device_nic_val(caml_gc *gc, libxl_device_nic *c_val, value v)
 {
 	CAMLparam1(v);
 	int i;
@@ -185,7 +192,7 @@ out:
 	CAMLreturn(ret);
 }
 
-static int device_console_val(libxl_device_console *c_val, value v)
+static int device_console_val(caml_gc *gc, libxl_device_console *c_val, value v)
 {
 	CAMLparam1(v);
 
@@ -196,7 +203,7 @@ static int device_console_val(libxl_device_console *c_val, value v)
 	CAMLreturn(0);
 }
 
-static int device_vkb_val(libxl_device_vkb *c_val, value v)
+static int device_vkb_val(caml_gc *gc, libxl_device_vkb *c_val, value v)
 {
 	CAMLparam1(v);
 
@@ -206,7 +213,7 @@ static int device_vkb_val(libxl_device_vkb *c_val, value v)
 	CAMLreturn(0);
 }
 
-static int device_vfb_val(libxl_device_vfb *c_val, value v)
+static int device_vfb_val(caml_gc *gc, libxl_device_vfb *c_val, value v)
 {
 	CAMLparam1(v);
 
@@ -225,7 +232,7 @@ static int device_vfb_val(libxl_device_vfb *c_val, value v)
 	CAMLreturn(0);
 }
 
-static int device_pci_val(libxl_device_pci *c_val, value v)
+static int device_pci_val(caml_gc *gc, libxl_device_pci *c_val, value v)
 {
 	CAMLparam1(v);
 
@@ -238,7 +245,7 @@ static int device_pci_val(libxl_device_pci *c_val, value v)
 	CAMLreturn(0);
 }
 
-static int sched_credit_val(libxl_sched_credit *c_val, value v)
+static int sched_credit_val(caml_gc *gc, libxl_sched_credit *c_val, value v)
 {
 	CAMLparam1(v);
 	c_val->weight = Int_val(Field(v, 0));
@@ -246,7 +253,7 @@ static int sched_credit_val(libxl_sched_credit *c_val, value v)
 	CAMLreturn(0);
 }
 
-static int domain_build_state_val(libxl_domain_build_state *c_val, value v)
+static int domain_build_state_val(caml_gc *gc, libxl_domain_build_state *c_val, value v)
 {
 	CAMLparam1(v);
 
@@ -315,12 +322,12 @@ static value Val_physinfo(libxl_physinfo *c_val)
 value stub_xl_domain_make(value info)
 {
 	CAMLparam1(info);
-	libxl_ctx ctx; struct caml_logger lg;
 	uint32_t domid;
 	libxl_domain_create_info c_info;
 	int ret;
+	INIT_STRUCT();
 
-	domain_create_info_val (&c_info, info);
+	domain_create_info_val (&gc, &c_info, info);
 
 	INIT_CTX();
 
@@ -340,13 +347,13 @@ value stub_xl_domain_build(value info, value domid)
 {
 	CAMLparam2(info, domid);
 	CAMLlocal1(result);
-	libxl_ctx ctx; struct caml_logger lg;
 	libxl_domain_build_info c_info;
 	libxl_domain_build_state c_state;
 	int ret;
 	int c_domid;
+	INIT_STRUCT();
 
-	domain_build_info_val (&c_info, info);
+	domain_build_info_val (&gc, &c_info, info);
 	c_domid = Int_val(domid);
 
 	INIT_CTX();
@@ -365,10 +372,10 @@ value stub_xl_disk_add(value info, value domid)
 {
 	CAMLparam2(info, domid);
 	libxl_device_disk c_info;
-	libxl_ctx ctx; struct caml_logger lg;
 	int ret;
+	INIT_STRUCT();
 
-	device_disk_val(&c_info, info);
+	device_disk_val(&gc, &c_info, info);
 	c_info.domid = Int_val(domid);
 
 	INIT_CTX();
@@ -383,10 +390,10 @@ value stub_xl_disk_remove(value info, value domid)
 {
 	CAMLparam2(info, domid);
 	libxl_device_disk c_info;
-	libxl_ctx ctx; struct caml_logger lg;
 	int ret;
+	INIT_STRUCT();
 
-	device_disk_val(&c_info, info);
+	device_disk_val(&gc, &c_info, info);
 	c_info.domid = Int_val(domid);
 
 	INIT_CTX();
@@ -400,11 +407,11 @@ value stub_xl_disk_remove(value info, value domid)
 value stub_xl_nic_add(value info, value domid)
 {
 	CAMLparam2(info, domid);
-	libxl_ctx ctx; struct caml_logger lg;
 	libxl_device_nic c_info;
 	int ret;
+	INIT_STRUCT();
 
-	device_nic_val(&c_info, info);
+	device_nic_val(&gc, &c_info, info);
 	c_info.domid = Int_val(domid);
 
 	INIT_CTX();
@@ -418,11 +425,11 @@ value stub_xl_nic_add(value info, value domid)
 value stub_xl_nic_remove(value info, value domid)
 {
 	CAMLparam2(info, domid);
-	libxl_ctx ctx; struct caml_logger lg;
 	libxl_device_nic c_info;
 	int ret;
+	INIT_STRUCT();
 
-	device_nic_val(&c_info, info);
+	device_nic_val(&gc, &c_info, info);
 	c_info.domid = Int_val(domid);
 
 	INIT_CTX();
@@ -436,13 +443,13 @@ value stub_xl_nic_remove(value info, value domid)
 value stub_xl_console_add(value info, value state, value domid)
 {
 	CAMLparam3(info, state, domid);
-	libxl_ctx ctx; struct caml_logger lg;
 	libxl_device_console c_info;
 	libxl_domain_build_state c_state;
 	int ret;
+	INIT_STRUCT();
 
-	device_console_val(&c_info, info);
-	domain_build_state_val(&c_state, state);
+	device_console_val(&gc, &c_info, info);
+	domain_build_state_val(&gc, &c_state, state);
 	c_info.domid = Int_val(domid);
 	c_info.build_state = &c_state;
 
@@ -457,11 +464,11 @@ value stub_xl_console_add(value info, value state, value domid)
 value stub_xl_vkb_add(value info, value domid)
 {
 	CAMLparam2(info, domid);
-	libxl_ctx ctx; struct caml_logger lg;
 	libxl_device_vkb c_info;
 	int ret;
+	INIT_STRUCT();
 
-	device_vkb_val(&c_info, info);
+	device_vkb_val(&gc, &c_info, info);
 	c_info.domid = Int_val(domid);
 
 	INIT_CTX();
@@ -476,8 +483,8 @@ value stub_xl_vkb_add(value info, value domid)
 value stub_xl_vkb_clean_shutdown(value domid)
 {
 	CAMLparam1(domid);
-	libxl_ctx ctx; struct caml_logger lg;
 	int ret;
+	INIT_STRUCT();
 
 	INIT_CTX();
 	ret = libxl_device_vkb_clean_shutdown(&ctx, Int_val(domid));
@@ -491,8 +498,8 @@ value stub_xl_vkb_clean_shutdown(value domid)
 value stub_xl_vkb_hard_shutdown(value domid)
 {
 	CAMLparam1(domid);
-	libxl_ctx ctx; struct caml_logger lg;
 	int ret;
+	INIT_STRUCT();
 
 	INIT_CTX();
 	ret = libxl_device_vkb_hard_shutdown(&ctx, Int_val(domid));
@@ -506,11 +513,11 @@ value stub_xl_vkb_hard_shutdown(value domid)
 value stub_xl_vfb_add(value info, value domid)
 {
 	CAMLparam2(info, domid);
-	libxl_ctx ctx; struct caml_logger lg;
 	libxl_device_vfb c_info;
 	int ret;
+	INIT_STRUCT();
 
-	device_vfb_val(&c_info, info);
+	device_vfb_val(&gc, &c_info, info);
 	c_info.domid = Int_val(domid);
 
 	INIT_CTX();
@@ -525,8 +532,8 @@ value stub_xl_vfb_add(value info, value domid)
 value stub_xl_vfb_clean_shutdown(value domid)
 {
 	CAMLparam1(domid);
-	libxl_ctx ctx; struct caml_logger lg;
 	int ret;
+	INIT_STRUCT();
 
 	INIT_CTX();
 	ret = libxl_device_vfb_clean_shutdown(&ctx, Int_val(domid));
@@ -540,8 +547,8 @@ value stub_xl_vfb_clean_shutdown(value domid)
 value stub_xl_vfb_hard_shutdown(value domid)
 {
 	CAMLparam1(domid);
-	libxl_ctx ctx; struct caml_logger lg;
 	int ret;
+	INIT_STRUCT();
 
 	INIT_CTX();
 	ret = libxl_device_vfb_hard_shutdown(&ctx, Int_val(domid));
@@ -555,11 +562,11 @@ value stub_xl_vfb_hard_shutdown(value domid)
 value stub_xl_pci_add(value info, value domid)
 {
 	CAMLparam2(info, domid);
-	libxl_ctx ctx; struct caml_logger lg;
 	libxl_device_pci c_info;
 	int ret;
+	INIT_STRUCT();
 
-	device_pci_val(&c_info, info);
+	device_pci_val(&gc, &c_info, info);
 
 	INIT_CTX();
 	ret = libxl_device_pci_add(&ctx, Int_val(domid), &c_info);
@@ -573,11 +580,11 @@ value stub_xl_pci_add(value info, value domid)
 value stub_xl_pci_remove(value info, value domid)
 {
 	CAMLparam2(info, domid);
-	libxl_ctx ctx; struct caml_logger lg;
 	libxl_device_pci c_info;
 	int ret;
+	INIT_STRUCT();
 
-	device_pci_val(&c_info, info);
+	device_pci_val(&gc, &c_info, info);
 
 	INIT_CTX();
 	ret = libxl_device_pci_remove(&ctx, Int_val(domid), &c_info);
@@ -591,8 +598,8 @@ value stub_xl_pci_remove(value info, value domid)
 value stub_xl_pci_shutdown(value domid)
 {
 	CAMLparam1(domid);
-	libxl_ctx ctx; struct caml_logger lg;
 	int ret;
+	INIT_STRUCT();
 
 	INIT_CTX();
 	ret = libxl_device_pci_shutdown(&ctx, Int_val(domid));
@@ -606,8 +613,8 @@ value stub_xl_pci_shutdown(value domid)
 value stub_xl_button_press(value domid, value button)
 {
 	CAMLparam2(domid, button);
-	libxl_ctx ctx; struct caml_logger lg;
 	int ret;
+	INIT_STRUCT();
 	
 	INIT_CTX();
 	ret = libxl_button_press(&ctx, Int_val(domid), Int_val(button) + POWER_BUTTON);
@@ -622,9 +629,9 @@ value stub_xl_physinfo(value unit)
 {
 	CAMLparam1(unit);
 	CAMLlocal1(physinfo);
-	libxl_ctx ctx; struct caml_logger lg;
 	libxl_physinfo c_physinfo;
 	int ret;
+	INIT_STRUCT();
 
 	INIT_CTX();
 	ret = libxl_get_physinfo(&ctx, &c_physinfo);
@@ -640,9 +647,9 @@ value stub_xl_sched_credit_domain_get(value domid)
 {
 	CAMLparam1(domid);
 	CAMLlocal1(scinfo);
-	libxl_ctx ctx; struct caml_logger lg;
 	libxl_sched_credit c_scinfo;
 	int ret;
+	INIT_STRUCT();
 
 	INIT_CTX();
 	ret = libxl_sched_credit_domain_get(&ctx, Int_val(domid), &c_scinfo);
@@ -657,11 +664,11 @@ value stub_xl_sched_credit_domain_get(value domid)
 value stub_xl_sched_credit_domain_set(value domid, value scinfo)
 {
 	CAMLparam2(domid, scinfo);
-	libxl_ctx ctx; struct caml_logger lg;
 	libxl_sched_credit c_scinfo;
 	int ret;
+	INIT_STRUCT();
 
-	sched_credit_val(&c_scinfo, scinfo);
+	sched_credit_val(&gc, &c_scinfo, scinfo);
 
 	INIT_CTX();
 	ret = libxl_sched_credit_domain_set(&ctx, Int_val(domid), &c_scinfo);
@@ -689,8 +696,8 @@ value stub_xl_send_trigger(value domid, value trigger, value vcpuid)
 value stub_xl_send_sysrq(value domid, value sysrq)
 {
 	CAMLparam2(domid, sysrq);
-	libxl_ctx ctx; struct caml_logger lg;
 	int ret;
+	INIT_STRUCT();
 
 	INIT_CTX();
 	ret = libxl_send_sysrq(&ctx, Int_val(domid), Int_val(sysrq));
@@ -703,8 +710,8 @@ value stub_xl_send_sysrq(value domid, value sysrq)
 value stub_xl_send_debug_keys(value keys)
 {
 	CAMLparam1(keys);
-	libxl_ctx ctx; struct caml_logger lg;
 	int ret;
+	INIT_STRUCT();
 
 	INIT_CTX();
 	ret = libxl_send_debug_keys(&ctx, String_val(keys));

[-- Attachment #3: Type: text/plain, Size: 138 bytes --]

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel

  parent reply	other threads:[~2010-08-10 11:46 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-08-10 11:46 [PATCH 0/5] xl ocaml: drop lock in the bindings Vincent Hanquez
2010-08-10 11:46 ` [PATCH 1/5] Put a valid version number in the META files Vincent Hanquez
2010-08-10 11:46 ` Vincent Hanquez [this message]
2010-08-10 11:46 ` [PATCH 3/5] use new functions to get elements out of ocaml values Vincent Hanquez
2010-08-10 11:46 ` [PATCH 4/5] use new gc functions to deep copy structure and only free once the gc Vincent Hanquez
2010-08-10 11:46 ` [PATCH 5/5] always drop the caml lock during any xl operations Vincent Hanquez
2010-08-10 14:29 ` [PATCH 0/5] xl ocaml: drop lock in the bindings Stefano Stabellini
2010-08-10 15:14   ` Vincent Hanquez
2010-08-10 15:36     ` Stefano Stabellini
  -- strict thread matches above, loose matches on Subject: below --
2010-08-10 15:12 Vincent Hanquez
2010-08-10 15:12 ` [PATCH 2/5] Wrap init context procedure into a macro. Introduce a gc structure Vincent Hanquez

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=1281440813-22610-3-git-send-email-vincent.hanquez@eu.citrix.com \
    --to=vincent.hanquez@eu.citrix.com \
    --cc=xen-devel@lists.xensource.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: 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).