All of lore.kernel.org
 help / color / mirror / Atom feed
From: Florian Tobias Schandinat <FlorianSchandinat@gmx.de>
To: Julia Lawall <Julia.Lawall@lip6.fr>,
	Andrew Morton <akpm@linux-foundation.org>
Cc: kernel-janitors@vger.kernel.org, linux-fbdev@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH 0/4] use devm_ functions
Date: Sat, 21 Jan 2012 14:02:15 +0000	[thread overview]
Message-ID: <4F1AC567.1000805@gmx.de> (raw)
In-Reply-To: <1327094732-9050-1-git-send-email-Julia.Lawall@lip6.fr>

Hi Andrew,

can you please take care of the backlight patches (1, 3, 4) of this series?


Thank you,

Florian Tobias Schandinat


On 01/20/2012 09:25 PM, Julia Lawall wrote:
> The semantic patch (http://coccinelle.lip6.fr/) used in generating this
> patch is as follows.  Some manual cleanup was required.
> 
> // requires -in_place
> virtual after_start
> virtual returned
> virtual arg
> virtual get
> 
> virtual drop_labels
> 
> // ---------------------------------------------------------------------
> // find functions
> 
> @plat depends on !after_start@
> identifier i,pfn,rfn;
> position p;
> @@
> 
> struct platform_driver i@p = {
>   .probe = pfn,
>   .remove = (<+...rfn...+>),
> };
> 
> // ---------------------------------------------------------------------
> // set up iteration
> 
> @initialize:ocaml@
> 
> let drop_labels = ref false
> 
> type ret = UseReturned | UseReturned2 of string | UseArg | UseGet
> 
> let add pfn rfn alloc free devm_alloc file rule >    let it = new iteration() in
>    it#set_files [file];
>    it#add_virtual_rule After_start;
>    (if !drop_labels then it#add_virtual_rule Drop_labels);
>    (match rule with
>       UseReturned -> it#add_virtual_rule Returned
>     | UseReturned2(free) -> it#add_virtual_rule Returned;
>       it#add_virtual_identifier Second_free free
>     | UseArg -> it#add_virtual_rule Arg
>     | UseGet -> it#add_virtual_rule Get);
>    it#add_virtual_identifier Pfn pfn;
>    it#add_virtual_identifier Rfn rfn;
>    it#add_virtual_identifier Alloc alloc;
>    it#add_virtual_identifier Free free;
>    it#add_virtual_identifier Devm_alloc devm_alloc;
>    it#register()
> 
> @script:ocaml depends on drop_labels@
> @@
> 
> drop_labels := true
> 
> @script:ocaml@
> pfn << plat.pfn;
> rfn << plat.rfn;
> p << plat.p;
> @@
> 
> let file = (List.hd p).file in
> add pfn rfn "kmalloc" "kfree" "devm_kzalloc" file UseReturned;
> add pfn rfn "kzalloc" "kfree" "devm_kzalloc" file UseReturned;
> add pfn rfn "ioremap" "iounmap" "devm_ioremap" file UseReturned;
> add pfn rfn "ioremap_nocache" "iounmap" "devm_ioremap_nocache" file
>    UseReturned;
> 
> add pfn rfn "request_irq" "free_irq" "devm_request_irq" file UseArg;
> add pfn rfn "request_threaded_irq" "free_irq" "devm_request_threaded_irq" file
>   UseArg;
> add pfn rfn "dma_alloc_coherent" "dma_free_coherent" "dmam_alloc_coherent"
>   file UseArg;
> add pfn rfn "dma_alloc_noncoherent" "dma_free_noncoherent"
>   "dmam_alloc_noncoherent" file UseArg;
> 
> (* several possibilities... *)
> add pfn rfn "request_region" "release_region" "devm_request_region" file
>   UseGet;
> add pfn rfn "request_mem_region" "release_mem_region"
>   "devm_request_mem_region" file UseGet;
> add pfn rfn "request_region" "release_region" "devm_request_region" file
>   UseArg;
> add pfn rfn "request_mem_region" "release_mem_region"
>   "devm_request_mem_region" file UseArg;
> (* fix a bug at the same time *)
> add pfn rfn "request_region" "release_resource" "devm_request_region" file
>   (UseReturned2("kfree"));
> add pfn rfn "request_mem_region" "release_resource"
>   "devm_request_mem_region" file (UseReturned2("kfree"));
> add pfn rfn "ioport_map" "ioport_unmap" "devm_ioport_map" file UseReturned
> 
> // ---------------------------------------------------------------------
> // transform functions where free uses the result
> 
> @prb depends on returned exists@
> identifier virtual.pfn,pdev,virtual.alloc,virtual.free,virtual.second_free;
> expression x;
> expression list args;
> position p1,p2,p3;
> type T1,T2,T3;
> @@
> 
> pfn(struct platform_device *pdev) { ... when any
> x = (T1)alloc@p1(args)
> <... when strict
>      when any
>      when forall
> (
> free@p2((T2)x,...);
> ... when != x
> second_free@p3((T3)x,...);
> |
> free@p2((T2)x,...);
> )
> ...>
> }
> 
> @reme exists@
> identifier virtual.rfn,virtual.free;
> expression prb.x;
> type T;
> @@
> 
> rfn(...) { ... free((T)x,...); ... }
> 
> @rem depends on reme@
> identifier virtual.rfn,virtual.free,virtual.second_free;
> expression prb.x;
> position p4,p5;
> type T,T1;
> @@
> 
> rfn(...) {
> <... when strict
> (
> free@p4((T)x,...);
> ... when != x
> second_free@p5((T1)x,...);
> |
> free@p4((T)x,...);
> )
> ...>
> }
> 
> @bad@
> identifier virtual.free;
> expression prb.x;
> position p != {prb.p2,rem.p4};
> type T;
> @@
> 
> free@p((T)x,...)
> 
> @modif depends on rem && !bad@
> expression x;
> identifier prb.pdev,virtual.alloc,virtual.free,virtual.devm_alloc;
> identifier virtual.second_free;
> expression list args;
> position prb.p1,prb.p2,prb.p3,rem.p4,rem.p5;
> type T;
> @@
> 
> (
> - free@p2(...);
> |
> - second_free@p3(...);
> |
> - free@p4(...);
> |
> - second_free@p5(...);
> |
>   x > - alloc@p1(
> + devm_alloc(&pdev->dev,
>     args)
> |
>   x = 
> - (T)alloc@p1(
> + (T)devm_alloc(&pdev->dev,
>     args)
> )
> 
> // ---------------------------------------------------------------------
> // transform functions where free uses the first argument
> 
> @prbx depends on arg exists@
> identifier virtual.pfn,pdev,virtual.alloc,virtual.free;
> expression x;
> expression list args;
> position p1,p2;
> @@
> 
> pfn(struct platform_device *pdev) { ... when any
> alloc@p1(x,args)
> <... when strict
>      when any
>      when forall
> free@p2(x,...)
> ...>
> }
> 
> @remxe exists@
> identifier virtual.rfn, virtual.free;
> expression prbx.x;
> @@
> 
> rfn(...) { ... free(x,...); ... }
> 
> @remx depends on remxe@
> identifier virtual.rfn, virtual.free;
> expression prbx.x;
> position p3;
> @@
> 
> rfn(...) {
> <... when strict
> free@p3(x,...)
> ...>
> }
> 
> @badx@
> identifier virtual.free;
> expression prbx.x;
> position p != {prbx.p2,remx.p3};
> @@
> 
> free@p(x,...)
> 
> @modifx depends on remx && !badx@
> expression x;
> identifier prbx.pdev,virtual.alloc,virtual.free,virtual.devm_alloc;
> expression list args;
> position prbx.p1,prbx.p2,remx.p3;
> @@
> 
> (
> - free@p2(...);
> |
> - free@p3(...);
> |
> - alloc@p1(
> + devm_alloc(&pdev->dev,
>    x,args)
> )
> 
> // ---------------------------------------------------------------------
> // transform functions where free uses the result of platform_get_resource
> 
> @prbg depends on get exists@
> identifier virtual.pfn,pdev,virtual.alloc,virtual.free;
> expression x;
> expression list args;
> position p1,p2;
> @@
> 
> pfn(struct platform_device *pdev) { ... when any
> alloc@p1(x,args)
> <... when strict
>      when any
>      when forall
> free@p2(x,...)
> ...>
> }
> 
> @remge exists@
> identifier virtual.rfn, virtual.free;
> identifier y;
> identifier pdev;
> @@
> 
> rfn(struct platform_device *pdev) { ... when any
> y = platform_get_resource(pdev, IORESOURCE_MEM, 0)
> ...
> free(y->start,...)
> ...
> }
> 
> @remg depends on remge@
> identifier virtual.rfn, virtual.free;
> identifier y;
> identifier pdev;
> position p3;
> @@
> 
> rfn(struct platform_device *pdev) {
> <... when strict
> y = platform_get_resource(pdev, IORESOURCE_MEM, 0)
> ... when strict
> free@p3(y->start,...)
> ...>
> }
> 
> @badg@
> identifier virtual.free;
> position p != {prbg.p2,remg.p3};
> @@
> 
> free@p(...)
> 
> @modifg depends on remg && !badg@
> expression x;
> identifier prbg.pdev,virtual.alloc,virtual.free,virtual.devm_alloc;
> expression list args;
> position prbg.p1,prbg.p2,remg.p3;
> @@
> 
> (
> - free@p2(...);
> |
> - free@p3(...);
> |
> - alloc@p1(
> + devm_alloc(&pdev->dev,
>    x,args)
> )
> 
> // ---------------------------------------------------------------------
> // cleanup, if the drvdata was only used to enable the free
> // probably only relevant for kmalloc/kzalloc
> 
> @dclean depends on modif || modifx || modifg@
> identifier virtual.rfn, pdev, i;
> type T;
> @@
> 
> rfn(struct platform_device *pdev) { ...
> (
> - T i = platform_get_drvdata(pdev);
> |
> - T i = dev_get_drvdata(&pdev->drv);
> |
> - T i;
>   ... when != i
> (
> - i = platform_get_drvdata(pdev);
> |
> - i = dev_get_drvdata(&pdev->drv);
> )
> )
> ... when != i
> }
> 
> @rclean depends on modif || modifx || modifg@
> identifier virtual.rfn, pdev, i;
> type T;
> @@
> 
> rfn(struct platform_device *pdev) { ...
> (
> - T i = platform_get_resource(pdev,...);
> |
> - T i;
>   ... when != i
> - i = platform_get_resource(pdev,...);
> )
> ... when != i
> }
> 
> // ---------------------------------------------------------------------
> // cleanup empty ifs, etc
> 
> @depends on modif || modifx || modifg@
> identifier virtual.pfn;
> @@
> 
> pfn(...) { <...
> - if (...) {}
> ...> }
> 
> @depends on modif || modifx || modifg@
> identifier virtual.rfn;
> @@
> 
> rfn(...) { <...
> - if (...) {}
> ...> }
> 
> @depends on modif || modifx || modifg@
> identifier virtual.pfn;
> expression ret,e;
> @@
> 
> pfn(...) { <...
> + return
> - ret >  e;
> - return ret;
> ...> }
> 
> @depends on modif || modifx || modifg@
> identifier virtual.rfn;
> expression ret,e;
> @@
> 
> rfn(...) { <...
> + return
> - ret >  e;
> - return ret;
> ...> }
> 
> // ---------------------------------------------------------------------
> 
> // this is likely to leave dead code, if l: is preceded by a return
> // because we are control-flow based, there is no way to match on that
> @r depends on drop_labels && (modif || modifx || modifg)@
> identifier l,l1,l2;
> expression e;
> statement S;
> identifier virtual.pfn;
> identifier i;
> statement S1,S2;
> @@
> 
> pfn(...) { <...
> (
> - goto l;
> + goto l2;
> ...
> -l:
> <... when != S
>      when any
> l1:
> ...>
> l2:
> (
>  (<+...i...+>);
> |
>  if (...) S1 else S2
> |
>  while (...) S1
> |
>  for (...;...;...) S1
> )
> |
> - goto l;
> + return e;
> ...
> -l:
> <... when != S
>      when any
> l1:
> ...>
> return e;
> )
> ...> }
> 
> 


WARNING: multiple messages have this Message-ID (diff)
From: Florian Tobias Schandinat <FlorianSchandinat@gmx.de>
To: Julia Lawall <Julia.Lawall@lip6.fr>,
	Andrew Morton <akpm@linux-foundation.org>
Cc: kernel-janitors@vger.kernel.org, linux-fbdev@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH 0/4] use devm_ functions
Date: Sat, 21 Jan 2012 14:02:15 +0000	[thread overview]
Message-ID: <4F1AC567.1000805@gmx.de> (raw)
In-Reply-To: <1327094732-9050-1-git-send-email-Julia.Lawall@lip6.fr>

Hi Andrew,

can you please take care of the backlight patches (1, 3, 4) of this series?


Thank you,

Florian Tobias Schandinat


On 01/20/2012 09:25 PM, Julia Lawall wrote:
> The semantic patch (http://coccinelle.lip6.fr/) used in generating this
> patch is as follows.  Some manual cleanup was required.
> 
> // requires -in_place
> virtual after_start
> virtual returned
> virtual arg
> virtual get
> 
> virtual drop_labels
> 
> // ---------------------------------------------------------------------
> // find functions
> 
> @plat depends on !after_start@
> identifier i,pfn,rfn;
> position p;
> @@
> 
> struct platform_driver i@p = {
>   .probe = pfn,
>   .remove = (<+...rfn...+>),
> };
> 
> // ---------------------------------------------------------------------
> // set up iteration
> 
> @initialize:ocaml@
> 
> let drop_labels = ref false
> 
> type ret = UseReturned | UseReturned2 of string | UseArg | UseGet
> 
> let add pfn rfn alloc free devm_alloc file rule =
>    let it = new iteration() in
>    it#set_files [file];
>    it#add_virtual_rule After_start;
>    (if !drop_labels then it#add_virtual_rule Drop_labels);
>    (match rule with
>       UseReturned -> it#add_virtual_rule Returned
>     | UseReturned2(free) -> it#add_virtual_rule Returned;
>       it#add_virtual_identifier Second_free free
>     | UseArg -> it#add_virtual_rule Arg
>     | UseGet -> it#add_virtual_rule Get);
>    it#add_virtual_identifier Pfn pfn;
>    it#add_virtual_identifier Rfn rfn;
>    it#add_virtual_identifier Alloc alloc;
>    it#add_virtual_identifier Free free;
>    it#add_virtual_identifier Devm_alloc devm_alloc;
>    it#register()
> 
> @script:ocaml depends on drop_labels@
> @@
> 
> drop_labels := true
> 
> @script:ocaml@
> pfn << plat.pfn;
> rfn << plat.rfn;
> p << plat.p;
> @@
> 
> let file = (List.hd p).file in
> add pfn rfn "kmalloc" "kfree" "devm_kzalloc" file UseReturned;
> add pfn rfn "kzalloc" "kfree" "devm_kzalloc" file UseReturned;
> add pfn rfn "ioremap" "iounmap" "devm_ioremap" file UseReturned;
> add pfn rfn "ioremap_nocache" "iounmap" "devm_ioremap_nocache" file
>    UseReturned;
> 
> add pfn rfn "request_irq" "free_irq" "devm_request_irq" file UseArg;
> add pfn rfn "request_threaded_irq" "free_irq" "devm_request_threaded_irq" file
>   UseArg;
> add pfn rfn "dma_alloc_coherent" "dma_free_coherent" "dmam_alloc_coherent"
>   file UseArg;
> add pfn rfn "dma_alloc_noncoherent" "dma_free_noncoherent"
>   "dmam_alloc_noncoherent" file UseArg;
> 
> (* several possibilities... *)
> add pfn rfn "request_region" "release_region" "devm_request_region" file
>   UseGet;
> add pfn rfn "request_mem_region" "release_mem_region"
>   "devm_request_mem_region" file UseGet;
> add pfn rfn "request_region" "release_region" "devm_request_region" file
>   UseArg;
> add pfn rfn "request_mem_region" "release_mem_region"
>   "devm_request_mem_region" file UseArg;
> (* fix a bug at the same time *)
> add pfn rfn "request_region" "release_resource" "devm_request_region" file
>   (UseReturned2("kfree"));
> add pfn rfn "request_mem_region" "release_resource"
>   "devm_request_mem_region" file (UseReturned2("kfree"));
> add pfn rfn "ioport_map" "ioport_unmap" "devm_ioport_map" file UseReturned
> 
> // ---------------------------------------------------------------------
> // transform functions where free uses the result
> 
> @prb depends on returned exists@
> identifier virtual.pfn,pdev,virtual.alloc,virtual.free,virtual.second_free;
> expression x;
> expression list args;
> position p1,p2,p3;
> type T1,T2,T3;
> @@
> 
> pfn(struct platform_device *pdev) { ... when any
> x = (T1)alloc@p1(args)
> <... when strict
>      when any
>      when forall
> (
> free@p2((T2)x,...);
> ... when != x
> second_free@p3((T3)x,...);
> |
> free@p2((T2)x,...);
> )
> ...>
> }
> 
> @reme exists@
> identifier virtual.rfn,virtual.free;
> expression prb.x;
> type T;
> @@
> 
> rfn(...) { ... free((T)x,...); ... }
> 
> @rem depends on reme@
> identifier virtual.rfn,virtual.free,virtual.second_free;
> expression prb.x;
> position p4,p5;
> type T,T1;
> @@
> 
> rfn(...) {
> <... when strict
> (
> free@p4((T)x,...);
> ... when != x
> second_free@p5((T1)x,...);
> |
> free@p4((T)x,...);
> )
> ...>
> }
> 
> @bad@
> identifier virtual.free;
> expression prb.x;
> position p != {prb.p2,rem.p4};
> type T;
> @@
> 
> free@p((T)x,...)
> 
> @modif depends on rem && !bad@
> expression x;
> identifier prb.pdev,virtual.alloc,virtual.free,virtual.devm_alloc;
> identifier virtual.second_free;
> expression list args;
> position prb.p1,prb.p2,prb.p3,rem.p4,rem.p5;
> type T;
> @@
> 
> (
> - free@p2(...);
> |
> - second_free@p3(...);
> |
> - free@p4(...);
> |
> - second_free@p5(...);
> |
>   x =
> - alloc@p1(
> + devm_alloc(&pdev->dev,
>     args)
> |
>   x = 
> - (T)alloc@p1(
> + (T)devm_alloc(&pdev->dev,
>     args)
> )
> 
> // ---------------------------------------------------------------------
> // transform functions where free uses the first argument
> 
> @prbx depends on arg exists@
> identifier virtual.pfn,pdev,virtual.alloc,virtual.free;
> expression x;
> expression list args;
> position p1,p2;
> @@
> 
> pfn(struct platform_device *pdev) { ... when any
> alloc@p1(x,args)
> <... when strict
>      when any
>      when forall
> free@p2(x,...)
> ...>
> }
> 
> @remxe exists@
> identifier virtual.rfn, virtual.free;
> expression prbx.x;
> @@
> 
> rfn(...) { ... free(x,...); ... }
> 
> @remx depends on remxe@
> identifier virtual.rfn, virtual.free;
> expression prbx.x;
> position p3;
> @@
> 
> rfn(...) {
> <... when strict
> free@p3(x,...)
> ...>
> }
> 
> @badx@
> identifier virtual.free;
> expression prbx.x;
> position p != {prbx.p2,remx.p3};
> @@
> 
> free@p(x,...)
> 
> @modifx depends on remx && !badx@
> expression x;
> identifier prbx.pdev,virtual.alloc,virtual.free,virtual.devm_alloc;
> expression list args;
> position prbx.p1,prbx.p2,remx.p3;
> @@
> 
> (
> - free@p2(...);
> |
> - free@p3(...);
> |
> - alloc@p1(
> + devm_alloc(&pdev->dev,
>    x,args)
> )
> 
> // ---------------------------------------------------------------------
> // transform functions where free uses the result of platform_get_resource
> 
> @prbg depends on get exists@
> identifier virtual.pfn,pdev,virtual.alloc,virtual.free;
> expression x;
> expression list args;
> position p1,p2;
> @@
> 
> pfn(struct platform_device *pdev) { ... when any
> alloc@p1(x,args)
> <... when strict
>      when any
>      when forall
> free@p2(x,...)
> ...>
> }
> 
> @remge exists@
> identifier virtual.rfn, virtual.free;
> identifier y;
> identifier pdev;
> @@
> 
> rfn(struct platform_device *pdev) { ... when any
> y = platform_get_resource(pdev, IORESOURCE_MEM, 0)
> ...
> free(y->start,...)
> ...
> }
> 
> @remg depends on remge@
> identifier virtual.rfn, virtual.free;
> identifier y;
> identifier pdev;
> position p3;
> @@
> 
> rfn(struct platform_device *pdev) {
> <... when strict
> y = platform_get_resource(pdev, IORESOURCE_MEM, 0)
> ... when strict
> free@p3(y->start,...)
> ...>
> }
> 
> @badg@
> identifier virtual.free;
> position p != {prbg.p2,remg.p3};
> @@
> 
> free@p(...)
> 
> @modifg depends on remg && !badg@
> expression x;
> identifier prbg.pdev,virtual.alloc,virtual.free,virtual.devm_alloc;
> expression list args;
> position prbg.p1,prbg.p2,remg.p3;
> @@
> 
> (
> - free@p2(...);
> |
> - free@p3(...);
> |
> - alloc@p1(
> + devm_alloc(&pdev->dev,
>    x,args)
> )
> 
> // ---------------------------------------------------------------------
> // cleanup, if the drvdata was only used to enable the free
> // probably only relevant for kmalloc/kzalloc
> 
> @dclean depends on modif || modifx || modifg@
> identifier virtual.rfn, pdev, i;
> type T;
> @@
> 
> rfn(struct platform_device *pdev) { ...
> (
> - T i = platform_get_drvdata(pdev);
> |
> - T i = dev_get_drvdata(&pdev->drv);
> |
> - T i;
>   ... when != i
> (
> - i = platform_get_drvdata(pdev);
> |
> - i = dev_get_drvdata(&pdev->drv);
> )
> )
> ... when != i
> }
> 
> @rclean depends on modif || modifx || modifg@
> identifier virtual.rfn, pdev, i;
> type T;
> @@
> 
> rfn(struct platform_device *pdev) { ...
> (
> - T i = platform_get_resource(pdev,...);
> |
> - T i;
>   ... when != i
> - i = platform_get_resource(pdev,...);
> )
> ... when != i
> }
> 
> // ---------------------------------------------------------------------
> // cleanup empty ifs, etc
> 
> @depends on modif || modifx || modifg@
> identifier virtual.pfn;
> @@
> 
> pfn(...) { <...
> - if (...) {}
> ...> }
> 
> @depends on modif || modifx || modifg@
> identifier virtual.rfn;
> @@
> 
> rfn(...) { <...
> - if (...) {}
> ...> }
> 
> @depends on modif || modifx || modifg@
> identifier virtual.pfn;
> expression ret,e;
> @@
> 
> pfn(...) { <...
> + return
> - ret =
>  e;
> - return ret;
> ...> }
> 
> @depends on modif || modifx || modifg@
> identifier virtual.rfn;
> expression ret,e;
> @@
> 
> rfn(...) { <...
> + return
> - ret =
>  e;
> - return ret;
> ...> }
> 
> // ---------------------------------------------------------------------
> 
> // this is likely to leave dead code, if l: is preceded by a return
> // because we are control-flow based, there is no way to match on that
> @r depends on drop_labels && (modif || modifx || modifg)@
> identifier l,l1,l2;
> expression e;
> statement S;
> identifier virtual.pfn;
> identifier i;
> statement S1,S2;
> @@
> 
> pfn(...) { <...
> (
> - goto l;
> + goto l2;
> ...
> -l:
> <... when != S
>      when any
> l1:
> ...>
> l2:
> (
>  (<+...i...+>);
> |
>  if (...) S1 else S2
> |
>  while (...) S1
> |
>  for (...;...;...) S1
> )
> |
> - goto l;
> + return e;
> ...
> -l:
> <... when != S
>      when any
> l1:
> ...>
> return e;
> )
> ...> }
> 
> 


  parent reply	other threads:[~2012-01-21 14:02 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-01-20 21:25 [PATCH 0/4] use devm_ functions Julia Lawall
2012-01-20 21:25 ` Julia Lawall
2012-01-20 21:25 ` [PATCH 1/4] drivers/video/backlight/wm831x_bl.c: " Julia Lawall
2012-01-20 21:25   ` Julia Lawall
2012-01-21 12:33   ` Mark Brown
2012-01-20 21:25 ` [PATCH 2/4] drivers/video/au*fb.c: " Julia Lawall
2012-01-20 21:25   ` Julia Lawall
2012-01-21 13:53   ` Florian Tobias Schandinat
2012-01-21 13:53     ` Florian Tobias Schandinat
2012-01-21 14:00     ` Manuel Lauss
2012-01-21 14:00       ` Manuel Lauss
2012-01-21 14:00       ` Manuel Lauss
2012-01-21 15:01       ` Julia Lawall
2012-01-21 15:01         ` Julia Lawall
2012-01-30  5:17         ` Florian Tobias Schandinat
2012-01-30  5:17           ` Florian Tobias Schandinat
2012-01-20 21:25 ` [PATCH 3/4] drivers/video/backlight: " Julia Lawall
2012-01-20 21:25   ` Julia Lawall
2012-01-20 21:25 ` [PATCH 4/4] drivers/video/backlight/adp5520_bl.c: " Julia Lawall
2012-01-20 21:25   ` Julia Lawall
2012-01-23  8:32   ` Michael Hennerich
2012-01-23  8:32     ` Michael Hennerich
2012-01-21 14:02 ` Florian Tobias Schandinat [this message]
2012-01-21 14:02   ` [PATCH 0/4] " Florian Tobias Schandinat

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4F1AC567.1000805@gmx.de \
    --to=florianschandinat@gmx.de \
    --cc=Julia.Lawall@lip6.fr \
    --cc=akpm@linux-foundation.org \
    --cc=kernel-janitors@vger.kernel.org \
    --cc=linux-fbdev@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.