Hi, On Friday, 27 July 2007 15:27, Stefan Seyfried wrote: > Hi, > > while working on https://bugzilla.novell.com/show_bug.cgi?id=293662 and > https://bugzilla.novell.com/show_bug.cgi?id=281798 it occured to me that > including Ubuntu's hack in s2ram might be a good idea. > It should do no harm - they are apparently doing it unconditionally on all > machines. > This could get some machines out of the NOFB requirement - at least the > ACER mentioned in the above bugreport seems to work with framebuffers > and this hack. I doubt it will help on some of the HP's with ATI, but > i'd need to test that again. > > The hack (as the bugreporter made the "minimal testcase") is basically: > > #!/bin/bash > CONSOLE=`fgconsole` > chvt 12 > for x in /sys/class/graphics/*; do > if [ -f $x/state ]; then > echo -n 1 >$x/state; > fi > done > echo -n mem >/sys/power/state > vbetool post > for x in /sys/class/graphics/*; do > if [ -f $x/state ]; then > echo -n 0 >$x/state; > fi > done > chvt $CONSOLE > > I have coded this into C in the following patch: > > Index: s2ram-x86.c > =================================================================== > RCS file: /cvsroot/suspend/suspend/s2ram-x86.c,v > retrieving revision 1.6 > diff -u -p -r1.6 s2ram-x86.c > --- s2ram-x86.c 19 Jul 2007 13:28:47 -0000 1.6 > +++ s2ram-x86.c 27 Jul 2007 11:35:53 -0000 > @@ -10,6 +10,9 @@ > #include <stdlib.h> > #include <errno.h> > #include <string.h> > +#include <sys/types.h> > +#include <dirent.h> > +#include <unistd.h> > > #include <pci/pci.h> > > @@ -124,6 +127,42 @@ static int machine_match(void) > return -1; > } > > +static void fbcon_state(int state) > +{ > + DIR *d; > + FILE *f; > + struct dirent *entry; > + char statefile[255]; > + > + if ((d = opendir("/sys/class/graphics")) == NULL) > + return; > + while ((entry = readdir(d)) != NULL) { > + if (entry->d_name[0] == '.') > + continue; > + snprintf(statefile, 255, "/sys/class/graphics/%s/state", > entry->d_name); > + if (!access(statefile, W_OK)) { > + printf("fbcon %s state %d\n", entry->d_name, state); > + f = fopen(statefile, "w"); > + if (!f) { > + printf("s2ram: cannot write to %s\n", > statefile); > + continue; > + } > + fprintf(f, "%d", state); > + fclose(f); > + } > + } > +} > + > +static void suspend_fbcon(void) > +{ > + fbcon_state(1); > +} > + > +static void resume_fbcon(void) > +{ > + fbcon_state(0); > +} > + > int s2ram_check(int id) > { > int ret = S2RAM_OK; > @@ -252,6 +291,7 @@ int s2ram_hacks(void) > return 1; > } > > + suspend_fbcon(); > return 0; > } > > @@ -304,6 +344,7 @@ void s2ram_resume(void) > printf("Calling set_vbe_mode\n"); > do_set_mode(vbe_mode, 0); > } > + resume_fbcon(); > if (flags & RADEON_OFF) { > printf("Calling radeon_cmd_light(1)\n"); > radeon_cmd_light(1); > > > Objections? Does anybody know what i am doing here :-) ?
I have no idea. > (yes, i think i know what it does; writing 1 into the state of the > framebuffer device just disables any drawing - and thus any access > of possibly not really initialized hardware before running vbe_post > etc...) > At least it seemed to do no harm in my (limited) tests. I think it can go if (1) it doesn't break any setups that currently work (2) it fixes at least one box that currently doesn't work Greetings, Rafael -- "Premature optimization is the root of all evil." - Donald Knuth ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/ _______________________________________________ Suspend-devel mailing list Suspend-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/suspend-devel