From da273a686a09c56534d7afeb11bbb2b8523dea22 Mon Sep 17 00:00:00 2001 From: James Mckenzie Date: Wed, 2 Dec 2009 09:49:38 +0000 Subject: [PATCH] Add a timeout to the uncompress code of 500ms:wq --- master/intel | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/master/intel b/master/intel index 53fa2dc..33c3cb8 100644 --- a/master/intel +++ b/master/intel @@ -201,10 +201,10 @@ index 90bd544..e4e27a9 100644 vga_update_display(s); diff --git a/intel.c b/intel.c new file mode 100644 -index 0000000..3fd2379 +index 0000000..f3d6672 --- /dev/null +++ b/intel.c -@@ -0,0 +1,507 @@ +@@ -0,0 +1,518 @@ +#include +#include +#include @@ -303,6 +303,8 @@ index 0000000..3fd2379 + unsigned int *dspbstride = (unsigned int *)(intel_mmio + REG_DR_DSPBSTRIDE); + volatile unsigned int *fbc_ctl = (unsigned int *)(intel_mmio + REG_FBC_CONTROL); + ++ struct timeval start_decompress; ++ + unsigned int surfa = 0, surfb = 0, pipea = 0, pipeb = 0; + char pipeaenabled = !!(*pipeaconf & (1 << 30)); + char pipebenabled = !!(*pipebconf & (1 << 30)); @@ -367,9 +369,18 @@ index 0000000..3fd2379 + + /* Clear the compression bit */ + *fbc_ctl &= ~(1 << 31); ++ ++ gettimeofday(&start_decompress,NULL); + /* Wait for the status register */ -+ while (intel_get_reg(REG_FBC_STATUS) & (1 << 31)) -+ ; ++ ++ while (intel_get_reg(REG_FBC_STATUS) & (1 << 31)) { ++ struct timeval now,diff; ++ gettimeofday(&now,NULL); ++ timersub(&now,&start_decompress,&diff); ++ ++ if (diff.tv_sec || diff.tv_usec>500000) break; ++ usleep(1000); ++ } +} + +static void set_fb_mapping(void) @@ -752,7 +763,7 @@ index 0000000..cd7855e + + diff --git a/vl.c b/vl.c -index 6350384..cf7ad19 100644 +index e5c0447..33cfb51 100644 --- a/vl.c +++ b/vl.c @@ -235,6 +235,7 @@ int win2k_install_hack = 0; @@ -779,7 +790,7 @@ index 6350384..cf7ad19 100644 #if defined(CONFIG_XEN) && !defined(CONFIG_DM) { "xen-domid", HAS_ARG, QEMU_OPTION_xen_domid }, { "xen-create", 0, QEMU_OPTION_xen_create }, -@@ -5318,6 +5321,9 @@ int main(int argc, char **argv, char **envp) +@@ -5319,6 +5322,9 @@ int main(int argc, char **argv, char **envp) case QEMU_OPTION_dom0_input: dom0_input = optarg; break; @@ -789,7 +800,7 @@ index 6350384..cf7ad19 100644 case QEMU_OPTION_direct_pci: direct_pci = optarg; break; -@@ -5922,26 +5928,26 @@ int main(int argc, char **argv, char **envp) +@@ -5923,26 +5929,26 @@ int main(int argc, char **argv, char **envp) curses_display_init(ds, full_screen); } else #endif -- 2.39.5