WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] [xen-unstable] evtchn: Free pirq_to_evtchn/pirq_mask arr

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] evtchn: Free pirq_to_evtchn/pirq_mask arrays on domain destruction.
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Wed, 27 May 2009 06:05:10 -0700
Delivery-date: Wed, 27 May 2009 06:05:16 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1243429389 -3600
# Node ID 326b24bfa9f92b805f7da8fc369af8e721cf707a
# Parent  649226acc47e8b670fbb7ea889c753fef430e455
evtchn: Free pirq_to_evtchn/pirq_mask arrays on domain destruction.

At the same time, move this into evtchn_init/destroy().

Signed-off-by: Keir Fraser <keir.fraser@xxxxxxxxxx>
---
 xen/common/domain.c        |   11 -----------
 xen/common/event_channel.c |   24 +++++++++++++++++++++++-
 2 files changed, 23 insertions(+), 12 deletions(-)

diff -r 649226acc47e -r 326b24bfa9f9 xen/common/domain.c
--- a/xen/common/domain.c       Wed May 27 12:00:51 2009 +0100
+++ b/xen/common/domain.c       Wed May 27 14:03:09 2009 +0100
@@ -261,13 +261,6 @@ struct domain *domain_create(
         if ( evtchn_init(d) != 0 )
             goto fail;
         init_status |= INIT_evtchn;
-        d->pirq_to_evtchn = xmalloc_array(u16, d->nr_pirqs);
-        d->pirq_mask = xmalloc_array(unsigned long,
-                                     BITS_TO_LONGS(d->nr_pirqs));
-        if ( !d->pirq_to_evtchn || !d->pirq_mask )
-            goto fail;
-        memset(d->pirq_to_evtchn, 0, d->nr_pirqs * sizeof(*d->pirq_to_evtchn));
-        bitmap_zero(d->pirq_mask, d->nr_pirqs);
 
         if ( grant_table_create(d) != 0 )
             goto fail;
@@ -310,11 +303,7 @@ struct domain *domain_create(
     if ( init_status & INIT_gnttab )
         grant_table_destroy(d);
     if ( init_status & INIT_evtchn )
-    {
-        xfree(d->pirq_mask);
-        xfree(d->pirq_to_evtchn);
         evtchn_destroy(d);
-    }
     if ( init_status & INIT_rangeset )
         rangeset_domain_destroy(d);
     if ( init_status & INIT_xsm )
diff -r 649226acc47e -r 326b24bfa9f9 xen/common/event_channel.c
--- a/xen/common/event_channel.c        Wed May 27 12:00:51 2009 +0100
+++ b/xen/common/event_channel.c        Wed May 27 14:03:09 2009 +0100
@@ -1013,10 +1013,27 @@ int evtchn_init(struct domain *d)
 int evtchn_init(struct domain *d)
 {
     spin_lock_init(&d->event_lock);
+
+    d->pirq_to_evtchn = xmalloc_array(u16, d->nr_pirqs);
+    d->pirq_mask = xmalloc_array(
+        unsigned long, BITS_TO_LONGS(d->nr_pirqs));
+    if ( (d->pirq_to_evtchn == NULL) || (d->pirq_mask == NULL) )
+        goto fail;
+    memset(d->pirq_to_evtchn, 0, d->nr_pirqs * sizeof(*d->pirq_to_evtchn));
+    bitmap_zero(d->pirq_mask, d->nr_pirqs);
+
     if ( get_free_port(d) != 0 )
-        return -EINVAL;
+        goto fail;
     evtchn_from_port(d, 0)->state = ECS_RESERVED;
+
     return 0;
+
+ fail:
+    xfree(d->pirq_to_evtchn);
+    d->pirq_to_evtchn = NULL;
+    xfree(d->pirq_mask);
+    d->pirq_mask = NULL;
+    return -ENOMEM;
 }
 
 
@@ -1044,6 +1061,11 @@ void evtchn_destroy(struct domain *d)
         d->evtchn[i] = NULL;
     }
     spin_unlock(&d->event_lock);
+
+    xfree(d->pirq_to_evtchn);
+    d->pirq_to_evtchn = NULL;
+    xfree(d->pirq_mask);
+    d->pirq_mask = NULL;
 }
 
 static void domain_dump_evtchn_info(struct domain *d)

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

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] evtchn: Free pirq_to_evtchn/pirq_mask arrays on domain destruction., Xen patchbot-unstable <=