From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:41659) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TQEGD-00033j-At for qemu-devel@nongnu.org; Mon, 22 Oct 2012 05:25:34 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TQEG3-00077L-Nu for qemu-devel@nongnu.org; Mon, 22 Oct 2012 05:25:25 -0400 Received: from e28smtp02.in.ibm.com ([122.248.162.2]:37623) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TQEG3-00077C-3E for qemu-devel@nongnu.org; Mon, 22 Oct 2012 05:25:15 -0400 Received: from /spool/local by e28smtp02.in.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Mon, 22 Oct 2012 14:55:12 +0530 Received: from d28av01.in.ibm.com (d28av01.in.ibm.com [9.184.220.63]) by d28relay02.in.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id q9M9OW5a37748974 for ; Mon, 22 Oct 2012 14:54:32 +0530 Received: from d28av01.in.ibm.com (loopback [127.0.0.1]) by d28av01.in.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id q9MEsNAu029319 for ; Mon, 22 Oct 2012 14:54:24 GMT From: Liu Ping Fan Date: Mon, 22 Oct 2012 17:23:59 +0800 Message-Id: <1350897839-29593-17-git-send-email-pingfank@linux.vnet.ibm.com> In-Reply-To: <1350897839-29593-1-git-send-email-pingfank@linux.vnet.ibm.com> References: <1350897839-29593-1-git-send-email-pingfank@linux.vnet.ibm.com> Subject: [Qemu-devel] [patch v4 16/16] e1000: implement MemoryRegionOps's ref&lock interface List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Stefan Hajnoczi , Marcelo Tosatti , Avi Kivity , Anthony Liguori , Jan Kiszka , Paolo Bonzini With this, e1000 tells memory core that it can be protected by refcnt, and can protected by local lock Signed-off-by: Liu Ping Fan --- hw/e1000.c | 31 +++++++++++++++++++++++++++++++ 1 files changed, 31 insertions(+), 0 deletions(-) diff --git a/hw/e1000.c b/hw/e1000.c index 72c2324..9929fe6 100644 --- a/hw/e1000.c +++ b/hw/e1000.c @@ -1082,9 +1082,40 @@ e1000_mmio_read(void *opaque, target_phys_addr_t addr, unsigned size) return ret; } +static void e1000_mmio_lock(MemoryRegion *mr) +{ + E1000State *d = container_of(mr, E1000State, mmio); + qemu_mutex_lock(&d->e1000_lock); +} + +static void e1000_mmio_unlock(MemoryRegion *mr) +{ + E1000State *d = container_of(mr, E1000State, mmio); + qemu_mutex_unlock(&d->e1000_lock); +} + +static int e1000_mmio_ref(MemoryRegion *mr) +{ + E1000State *e1000 = container_of(mr, E1000State, mmio); + + object_ref(OBJECT(e1000)); + return 1; +} + +static void e1000_mmio_unref(MemoryRegion *mr) +{ + E1000State *e1000 = container_of(mr, E1000State, mmio); + + object_unref(OBJECT(e1000)); +} + static const MemoryRegionOps e1000_mmio_ops = { .read = e1000_mmio_read, .write = e1000_mmio_write, + .ref = e1000_mmio_ref, + .unref = e1000_mmio_unref, + .lock = e1000_mmio_lock, + .unlock = e1000_mmio_unlock, .endianness = DEVICE_LITTLE_ENDIAN, .impl = { .min_access_size = 4, -- 1.7.4.4