Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:12.2:ARM
suspend
suspend-0.80-vbetool-retry-on-errors.diff
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File suspend-0.80-vbetool-retry-on-errors.diff of Package suspend
Index: s2ram-x86.c =================================================================== --- s2ram-x86.c.orig +++ s2ram-x86.c @@ -319,6 +319,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); @@ -328,19 +329,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);
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor