123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- Index: s2ram-x86.c
- ===================================================================
- --- s2ram-x86.c.orig
- +++ s2ram-x86.c
- @@ -321,6 +321,7 @@ int s2ram_do(void)
-
- void s2ram_resume(void)
- {
- + int i = 0;
- if (flags & PCI_SAVE) {
- printf("restoring PCI config of device %02x:%02x.%d\n",
- vga_dev.bus, vga_dev.dev, vga_dev.func);
- @@ -330,19 +331,36 @@ void s2ram_resume(void)
- }
- // FIXME: can we call vbetool_init() multiple times without cleaning up?
- if (flags & VBE_POST) {
- - vbetool_init();
- - printf("Calling do_post\n");
- - do_post();
- + while (i++ < 5) {
- + vbetool_init();
- + printf("Calling do_post\n");
- + if (!do_post())
- + break;
- + printf("do_post failed, sleeping 100ms and retrying...\n");
- + usleep(100000);
- + }
- + i = 0;
- }
- if (vbe_buffer) {
- - vbetool_init();
- - printf("Calling restore_state_from\n");
- - restore_state_from(vbe_buffer);
- + while (i++ < 5) {
- + vbetool_init();
- + printf("Calling restore_state_from\n");
- + if (!restore_state_from(vbe_buffer))
- + break;
- + printf("restore_state_from failed, sleeping 100ms and retrying...\n");
- + usleep(100000);
- + }
- + i = 0;
- }
- if (vbe_mode >= 0) {
- - vbetool_init();
- - printf("Calling set_vbe_mode\n");
- - do_set_mode(vbe_mode, 0);
- + while (i++ < 5) {
- + vbetool_init();
- + printf("Calling set_vbe_mode\n");
- + if (!do_set_mode(vbe_mode, 0))
- + break;
- + printf("set_vbe_mode failed, sleeping 100ms and retrying...\n");
- + usleep(100000);
- + }
- }
- if (!fb_nosuspend)
- resume_fbcon();
- Index: vbetool/vbetool.c
- ===================================================================
- --- vbetool/vbetool.c.orig
- +++ vbetool/vbetool.c
- @@ -231,9 +231,10 @@ int do_post(void)
- return 0;
- }
-
- -void restore_state_from(char *data)
- +int restore_state_from(char *data)
- {
- struct LRMI_regs r;
- + int ret = 1;
-
- /* VGA BIOS mode 3 is text mode */
- do_set_mode(3,1);
- @@ -252,12 +253,16 @@ void restore_state_from(char *data)
- "Can't restore video state (vm86 failure)\n");
- } else if ((r.eax & 0xffff) != 0x4f) {
- fprintf(stderr, "Restore video state failed\n");
- + } else {
- + /* everything ok */
- + ret = 0;
- }
-
- LRMI_free_real(data);
-
- ioctl(0, KDSETMODE, KD_TEXT);
-
- + return ret;
- }
-
- #ifndef S2RAM
- Index: vbetool/vbetool.h
- ===================================================================
- --- vbetool/vbetool.h.orig
- +++ vbetool/vbetool.h
- @@ -18,5 +18,5 @@ int disable_vga(void);
- int do_get_panel_id();
- void vbetool_init(void);
- char *__save_state(int *);
- -void restore_state_from(char *);
- +int restore_state_from(char *);
- int __get_mode(void);
|