From mboxrd@z Thu Jan 1 00:00:00 1970 From: DuanZhenzhong Subject: [PATCH 2/2] hvmloader->rombios use C/H/S, LBA when have been set by qemu Date: Mon, 25 Oct 2010 13:53:18 +0800 Message-ID: <4CC51B4E.7050400@oracle.com> References: <20100805233516.GB21473@joejin-pc.cn.oracle.com> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <20100805233516.GB21473@joejin-pc.cn.oracle.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: xen-devel@lists.xensource.com Cc: joe.jin@oracle.com List-Id: xen-devel@lists.xenproject.org Hi, Multiple guests rebooting, across multiple OVS nodes. Not all guest at the same time. Error in /var/log/xend.log taking the form: ... [2010-09-06 12:19:55 8816] WARNING (image:490) domain 234_sscgrantsd: device model failure: pid 16657: died due to signal 11; see ... This is due to some ide state pointer in ide.c is NULL. Patch from carnold@novell.com fixed this problem. After applying, our system get steady. --- xen-3.4.0.old/qemu-xen.git/hw/ide.c 2010-10-19 10:45:23.000000000 +0800 +++ xen-3.4.0/qemu-xen.git/hw/ide.c 2010-10-19 10:52:57.000000000 +0800 @@ -934,8 +934,9 @@ static inline void ide_dma_submit_check( static inline void ide_set_irq(IDEState *s) { - BMDMAState *bm = s->bmdma; - if (!s->bs) return; /* ouch! (see ide_flush_cb) */ + BMDMAState *bm; + if (!s || !s->bs) return; /* ouch! (see ide_flush_cb) */ + bm = s->bmdma; if (!(s->cmd & IDE_CMD_DISABLE_IRQ)) { if (bm) { bm->status |= BM_STATUS_INT; @@ -1223,14 +1224,14 @@ static void ide_read_dma_cb(void *opaque int n; int64_t sector_num; + if (!s || !s->bs) return; /* ouch! (see ide_flush_cb) */ + if (ret < 0) { dma_buf_commit(s, 1); ide_dma_error(s); return; } - if (!s->bs) return; /* ouch! (see ide_flush_cb) */ - n = s->io_buffer_size >> 9; sector_num = ide_get_sector(s); if (n > 0) { @@ -1334,6 +1335,8 @@ static void ide_write_flush_cb(void *opa BMDMAState *bm = opaque; IDEState *s = bm->ide_if; + if (!s) return; + if (ret != 0) { ide_dma_error(s); return; @@ -1365,6 +1368,8 @@ static void ide_write_dma_cb(void *opaqu int n; int64_t sector_num; + if (!s || !s->bs) return; /* ouch! (see ide_flush_cb) */ + if (ret < 0) { if (ide_handle_write_error(s, -ret, BM_STATUS_DMA_RETRY)) return; @@ -1375,8 +1380,6 @@ static void ide_write_dma_cb(void *opaqu return; /* ouch2 */ } - if (!s->bs) return; /* ouch! (see ide_flush_cb) */ - n = s->io_buffer_size >> 9; sector_num = ide_get_sector(s); if (n > 0) { @@ -1433,7 +1436,7 @@ static void ide_flush_cb(void *opaque, i { IDEState *s = opaque; - if (!s->bs) return; /* ouch! (see below) */ + if (!s || !s->bs) return; /* ouch! (see below) */ if (ret) { /* We are completely doomed. The IDE spec does not permit us @@ -1690,7 +1693,7 @@ static void ide_atapi_cmd_read_dma_cb(vo IDEState *s = bm->ide_if; int data_offset, n; - if (!s->bs) return; /* ouch! (see ide_flush_cb) */ + if (!s || !s->bs) return; /* ouch! (see ide_flush_cb) */ if (ret < 0) { ide_atapi_io_error(s, ret); @@ -2368,7 +2371,7 @@ static void cdrom_change_cb(void *opaque IDEState *s = opaque; uint64_t nb_sectors; - if (!s->bs) return; /* ouch! (see ide_flush_cb) */ + if (!s || !s->bs) return; /* ouch! (see ide_flush_cb) */ bdrv_get_geometry(s->bs, &nb_sectors); s->nb_sectors = nb_sectors;