[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] [PATCH 2/2] hvmloader->rombios use C/H/S, LBA when have been set by qemu



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@xxxxxxxxxx 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;

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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.