[coreboot] [PATCH] flashrom: Remove superfluous volatile

Joseph Smith joe at settoplinux.org
Fri Mar 6 00:59:07 CET 2009




On Fri, 06 Mar 2009 00:23:45 +0100, Carl-Daniel Hailfinger
<c-d.hailfinger.devel.2006 at gmx.net> wrote:
> During the conversion of flash chip accesses to helper functions, I
> spotted assignments to volatile variables which were neither placed
> inside the mmapped ROM area nor were they counters.
> Due to the use of accessor functions, volatile usage can be reduced
> significantly because the accessor functions take care of actually
> performing the reads/writes correctly.
> 
> The following semantic patch spotted them:
> r exists@
> expression b;
> typedef uint8_t;
> volatile uint8_t a;
> position p1;
> @@
>  a at p1 = readb(b);
> 
> @script:python@
> p1 << r.p1;
> a << r.a;
> b << r.b;
> @@
> print "* file: %s line %s has assignment to unnecessarily volatile
> variable: %s = readb(%s);" % (p1[0].file, p1[0].line, a, b)
> 
> Result was:
> HANDLING: sst28sf040.c
> * file: sst28sf040.c line 44 has assignment to unnecessarily volatile
> variable: tmp = readb(TODO: Binary);
> * file: sst28sf040.c line 43 has assignment to unnecessarily volatile
> variable: tmp = readb(TODO: Binary);
> * file: sst28sf040.c line 42 has assignment to unnecessarily volatile
> variable: tmp = readb(TODO: Binary);
> * file: sst28sf040.c line 41 has assignment to unnecessarily volatile
> variable: tmp = readb(TODO: Binary);
> * file: sst28sf040.c line 40 has assignment to unnecessarily volatile
> variable: tmp = readb(TODO: Binary);
> * file: sst28sf040.c line 39 has assignment to unnecessarily volatile
> variable: tmp = readb(TODO: Binary);
> * file: sst28sf040.c line 38 has assignment to unnecessarily volatile
> variable: tmp = readb(TODO: Binary);
> * file: sst28sf040.c line 58 has assignment to unnecessarily volatile
> variable: tmp = readb(TODO: Binary);
> * file: sst28sf040.c line 57 has assignment to unnecessarily volatile
> variable: tmp = readb(TODO: Binary);
> * file: sst28sf040.c line 56 has assignment to unnecessarily volatile
> variable: tmp = readb(TODO: Binary);
> * file: sst28sf040.c line 55 has assignment to unnecessarily volatile
> variable: tmp = readb(TODO: Binary);
> * file: sst28sf040.c line 54 has assignment to unnecessarily volatile
> variable: tmp = readb(TODO: Binary);
> * file: sst28sf040.c line 53 has assignment to unnecessarily volatile
> variable: tmp = readb(TODO: Binary);
> * file: sst28sf040.c line 52 has assignment to unnecessarily volatile
> variable: tmp = readb(TODO: Binary);
> 
> From that result, the fix was obvious:
> 
> Signed-off-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006 at gmx.net>
Acked-by: Joseph Smith <joe at settoplinux.org>

Good find. Looks like your having fun with the semantic patching :-)
> 
> Index: flashrom-unneeded_volatile/sst28sf040.c
> ===================================================================
> --- flashrom-unneeded_volatile/sst28sf040.c	(Revision 3971)
> +++ flashrom-unneeded_volatile/sst28sf040.c	(Arbeitskopie)
> @@ -32,8 +32,7 @@
> 
>  static __inline__ void protect_28sf040(volatile uint8_t *bios)
>  {
> -	/* ask compiler not to optimize this */
> -	volatile uint8_t tmp;
> +	uint8_t tmp;
> 
>  	tmp = readb(bios + 0x1823);
>  	tmp = readb(bios + 0x1820);
> @@ -46,8 +45,7 @@
> 
>  static __inline__ void unprotect_28sf040(volatile uint8_t *bios)
>  {
> -	/* ask compiler not to optimize this */
> -	volatile uint8_t tmp;
> +	uint8_t tmp;
> 
>  	tmp = readb(bios + 0x1823);
>  	tmp = readb(bios + 0x1820);
> 
> 
> --
> http://www.hailfinger.org/
-- 
Thanks,
Joseph Smith
Set-Top-Linux
www.settoplinux.org





More information about the coreboot mailing list