All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Vladimir N. Oleynik" <dzo@simtreas.ru>
To: qemu-devel@nongnu.org, whit74@verbmail.com
Subject: [Qemu-devel] Re: Windows 2000 disk full problem during install...
Date: Fri, 17 Dec 2004 14:23:38 +0300	[thread overview]
Message-ID: <41C2C1BA.9000509@simtreas.ru> (raw)
In-Reply-To: <200412142142.iBELg2Qa009126@treas.simtreas.ru>

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

Leo,

 > I was wondering if anyone had a chance to look into this problem more.
 > I've done a great deal of research myself on it so far, but do not yet have
 > a solution. Most of the c:\winnt\security\edb*.log files that fill up the disk
 > are created during the hardware scan stage in the GUI portion of the install.
 > I'm using Windows 2000 Professional, on QEMU 0.6.2 (latest from CVS) and have
 > encountered the problem on any flavor of Linux I try.

 > I also tried a small patch to hw/ide.c (without the multithread bits),
 > from Vladimir N. Oleynik. Basically only the s->status is set to READY_STAT
 > instead of READY_STAT | SEEK_STAT in/around hw/ide.c:1472 from that patch.
 > This did not solve the problem at all.

O my God!
This problem consists not in these flags, you looked corrections
to the previous version of the ide emulator.
I have made new hack specially for elimination of a Subject problem only.
This correction adds waiting one (or zero, autorandomly) period before
sending interruption after positioning before write. (see attach)
But this a HACK, do not use after w2k install!
Me other idea interested - to make asynchronous input-output.
The received effect of elimination of a Subject problem was
completely unexpected.
But the author of the QEmu has not supported idea.
(The sended a patch do not contain asynchronous input-output.)



--w
vodz


[-- Attachment #2: qemu_w2k_df.patch --]
[-- Type: text/x-patch, Size: 3121 bytes --]

diff -rbu qemu.orig/hw/ide.c qemu/hw/ide.c
--- qemu.orig/hw/ide.c	2004-12-02 23:20:21.000000000 +0300
+++ qemu/hw/ide.c	2004-12-17 14:06:15.000000000 +0300
@@ -332,8 +332,12 @@
     uint8_t *data_ptr;
     uint8_t *data_end;
     uint8_t io_buffer[MAX_MULT_SECTORS*512 + 4];
+    int ide_set_irq_from_timer;
 } IDEState;
 
+volatile int ide_set_irq_from_timer;
+static IDEState *IDEStates[4];
+
 #define BM_STATUS_DMAING 0x01
 #define BM_STATUS_ERROR  0x02
 #define BM_STATUS_INT    0x04
@@ -512,6 +516,21 @@
     }
 }
 
+void make_ide_set_irq(void)
+{
+	int i;
+	IDEState *s;
+
+	ide_set_irq_from_timer--;
+	for(i = 0; (s=IDEStates[i]) != NULL; i++) {
+		if(s->ide_set_irq_from_timer) {
+			s->ide_set_irq_from_timer--;
+			ide_set_irq(s);
+			break;
+		}
+	}
+}
+
 /* prepare data transfer and tell what to do after */
 static void ide_transfer_start(IDEState *s, uint8_t *buf, int size, 
                                EndTransferFunc *end_transfer_func)
@@ -667,7 +686,11 @@
         ide_transfer_start(s, s->io_buffer, 512 * n1, ide_sector_write);
     }
     ide_set_sector(s, sector_num + n);
+    if(s->ide_set_irq_from_timer) {
+	ide_set_irq_from_timer++;
+    } else {
     ide_set_irq(s);
+    }
 }
 
 static int ide_write_dma_cb(IDEState *s, 
@@ -1511,6 +1534,7 @@
             s->error = 0;
             s->status = SEEK_STAT | READY_STAT;
             s->req_nb_sectors = 1;
+	    s->ide_set_irq_from_timer = 1;
             ide_transfer_start(s, s->io_buffer, 512, ide_sector_write);
             break;
         case WIN_MULTREAD:
@@ -1528,6 +1552,7 @@
             n = s->nsector;
             if (n > s->req_nb_sectors)
                 n = s->req_nb_sectors;
+	    s->ide_set_irq_from_timer = 1;
             ide_transfer_start(s, s->io_buffer, 512 * n, ide_sector_write);
             break;
         case WIN_READDMA:
@@ -1883,6 +1908,7 @@
 
     for(i = 0; i < 2; i++) {
         s = ide_state + i;
+	IDEStates[drive_serial-1] = s;
         if (i == 0)
             s->bs = hd0;
         else
diff -rbu qemu.orig/vl.c qemu/vl.c
--- qemu.orig/vl.c	2004-12-13 01:20:04.000000000 +0300
+++ qemu/vl.c	2004-12-17 12:41:16.000000000 +0300
@@ -911,7 +911,7 @@
         
         /* timer signal */
         sigfillset(&act.sa_mask);
-        act.sa_flags = 0;
+	act.sa_flags = SA_RESTART;
 #if defined (TARGET_I386) && defined(USE_CODE_COPY)
         act.sa_flags |= SA_ONSTACK;
 #endif
@@ -2403,7 +2403,12 @@
     int n, max_size;
 #endif
     int ret;
+    /* ide.c hack */
+    extern volatile int ide_set_irq_from_timer;
+    extern void make_ide_set_irq(void);
 
+	if(ide_set_irq_from_timer)
+		make_ide_set_irq();
 #ifdef _WIN32
         if (timeout > 0)
             Sleep(timeout);
@@ -2449,8 +2454,6 @@
                             n = read(ioh->fd, buf, ioh->max_size);
                             if (n >= 0) {
                                 ioh->fd_read(ioh->opaque, buf, n);
-                            } else if (errno != EAGAIN) {
-                                ioh->fd_read(ioh->opaque, NULL, -errno);
                             }
                         }
                     }

       reply	other threads:[~2004-12-17 11:37 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <200412142142.iBELg2Qa009126@treas.simtreas.ru>
2004-12-17 11:23 ` Vladimir N. Oleynik [this message]
2004-12-17 11:51   ` [Qemu-devel] Re: Windows 2000 disk full problem during install Piotras
2004-12-17 14:15   ` Leo Whitman
2005-04-30 16:18   ` Fabrice Bellard
2004-12-17 17:42 Vladimir N. Oleynik
  -- strict thread matches above, loose matches on Subject: below --
2004-12-14 20:58 [Qemu-devel] " Leo Whitman
2004-12-15  6:50 ` [Qemu-devel] " Janusz S. Bień

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=41C2C1BA.9000509@simtreas.ru \
    --to=dzo@simtreas.ru \
    --cc=qemu-devel@nongnu.org \
    --cc=whit74@verbmail.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.