linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v4 0/3] checkpatch: handling of memory barriers
@ 2016-01-11 11:00 Michael S. Tsirkin
  2016-01-11 11:00 ` [PATCH v4 1/3] checkpatch.pl: add missing " Michael S. Tsirkin
                   ` (4 more replies)
  0 siblings, 5 replies; 7+ messages in thread
From: Michael S. Tsirkin @ 2016-01-11 11:00 UTC (permalink / raw)
  To: linux-kernel
  Cc: Andy Whitcroft, Joe Perches, Peter Zijlstra, Arnd Bergmann,
	linux-arch, Andrew Cooper, virtualization, Stefano Stabellini,
	Thomas Gleixner, Ingo Molnar, H. Peter Anvin, David Miller,
	linux-ia64, linuxppc-dev, linux-s390, sparclinux,
	linux-arm-kernel, linux-metag, linux-mips, x86,
	user-mode-linux-devel, adi-buildroot-devel, linux-sh,
	linux-xtensa, xen-devel, Ingo Molnar, Tony Lindgren,
	Julian Calaby, Russell King - ARM Linux

As part of memory barrier cleanup, this patchset
extends checkpatch to make it easier to stop
incorrect memory barrier usage.

This replaces the checkpatch patches in my series
	arch: barrier cleanup + barriers for virt
and will be included in the pull request including
the series.

changes from v3:
	rename smp_barrier_stems to barrier_stems
	as suggested by Julian Calaby.
	add (?: ... ) around a variable in regexp,
	in case we change the value later so that it matters.
changes from v2:
	address comments by Joe Perches:
	use (?: ... ) to avoid unnecessary capture groups
	rename smp_barriers to smp_barrier_stems for clarity
	add barriers before/after atomic
Changes from v1:
	catch optional\s* before () in barriers
	rewrite using qr{} instead of map

Michael S. Tsirkin (3):
  checkpatch.pl: add missing memory barriers
  checkpatch: check for __smp outside barrier.h
  checkpatch: add virt barriers

Michael S. Tsirkin (3):
  checkpatch.pl: add missing memory barriers
  checkpatch: check for __smp outside barrier.h
  checkpatch: add virt barriers

 scripts/checkpatch.pl | 33 ++++++++++++++++++++++++++++++++-
 1 file changed, 32 insertions(+), 1 deletion(-)

-- 
MST

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH v4 1/3] checkpatch.pl: add missing memory barriers
  2016-01-11 11:00 [PATCH v4 0/3] checkpatch: handling of memory barriers Michael S. Tsirkin
@ 2016-01-11 11:00 ` Michael S. Tsirkin
  2016-01-11 11:00 ` [PATCH v4 2/3] checkpatch: check for __smp outside barrier.h Michael S. Tsirkin
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 7+ messages in thread
From: Michael S. Tsirkin @ 2016-01-11 11:00 UTC (permalink / raw)
  To: linux-kernel
  Cc: Andy Whitcroft, Joe Perches, Peter Zijlstra, Arnd Bergmann,
	linux-arch, Andrew Cooper, virtualization, Stefano Stabellini,
	Thomas Gleixner, Ingo Molnar, H. Peter Anvin, David Miller,
	linux-ia64, linuxppc-dev, linux-s390, sparclinux,
	linux-arm-kernel, linux-metag, linux-mips, x86,
	user-mode-linux-devel, adi-buildroot-devel, linux-sh,
	linux-xtensa, xen-devel, Ingo Molnar, Tony Lindgren,
	Julian Calaby, Russell King - ARM Linux

SMP-only barriers were missing in checkpatch.pl

Refactor code slightly to make adding more variants easier.

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
 scripts/checkpatch.pl | 22 +++++++++++++++++++++-
 1 file changed, 21 insertions(+), 1 deletion(-)

diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
index 2b3c228..94b4e33 100755
--- a/scripts/checkpatch.pl
+++ b/scripts/checkpatch.pl
@@ -5116,7 +5116,27 @@ sub process {
 			}
 		}
 # check for memory barriers without a comment.
-		if ($line =~ /\b(mb|rmb|wmb|read_barrier_depends|smp_mb|smp_rmb|smp_wmb|smp_read_barrier_depends)\(/) {
+
+		my $barriers = qr{
+			mb|
+			rmb|
+			wmb|
+			read_barrier_depends
+		}x;
+		my $barrier_stems = qr{
+			mb__before_atomic|
+			mb__after_atomic|
+			store_release|
+			load_acquire|
+			store_mb|
+			(?:$barriers)
+		}x;
+		my $all_barriers = qr{
+			(?:$barriers)|
+			smp_(?:$barrier_stems)
+		}x;
+
+		if ($line =~ /\b(?:$all_barriers)\s*\(/) {
 			if (!ctx_has_comment($first_line, $linenr)) {
 				WARN("MEMORY_BARRIER",
 				     "memory barrier without comment\n" . $herecurr);
-- 
MST

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH v4 2/3] checkpatch: check for __smp outside barrier.h
  2016-01-11 11:00 [PATCH v4 0/3] checkpatch: handling of memory barriers Michael S. Tsirkin
  2016-01-11 11:00 ` [PATCH v4 1/3] checkpatch.pl: add missing " Michael S. Tsirkin
@ 2016-01-11 11:00 ` Michael S. Tsirkin
  2016-01-11 11:00 ` [PATCH v4 3/3] checkpatch: add virt barriers Michael S. Tsirkin
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 7+ messages in thread
From: Michael S. Tsirkin @ 2016-01-11 11:00 UTC (permalink / raw)
  To: linux-kernel
  Cc: Andy Whitcroft, Joe Perches, Peter Zijlstra, Arnd Bergmann,
	linux-arch, Andrew Cooper, virtualization, Stefano Stabellini,
	Thomas Gleixner, Ingo Molnar, H. Peter Anvin, David Miller,
	linux-ia64, linuxppc-dev, linux-s390, sparclinux,
	linux-arm-kernel, linux-metag, linux-mips, x86,
	user-mode-linux-devel, adi-buildroot-devel, linux-sh,
	linux-xtensa, xen-devel, Ingo Molnar, Tony Lindgren,
	Julian Calaby, Russell King - ARM Linux

Introduction of __smp barriers cleans up a bunch of duplicate code, but
it gives people an additional handle onto a "new" set of barriers - just
because they're prefixed with __* unfortunately doesn't stop anyone from
using it (as happened with other arch stuff before.)

Add a checkpatch test so it will trigger a warning.

Reported-by: Russell King <linux@arm.linux.org.uk>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
 scripts/checkpatch.pl | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
index 94b4e33..25476c2 100755
--- a/scripts/checkpatch.pl
+++ b/scripts/checkpatch.pl
@@ -5143,6 +5143,16 @@ sub process {
 			}
 		}
 
+		my $underscore_smp_barriers = qr{__smp_(?:$barrier_stems)}x;
+
+		if ($realfile !~ m@^include/asm-generic/@ &&
+		    $realfile !~ m@/barrier\.h$@ &&
+		    $line =~ m/\b(?:$underscore_smp_barriers)\s*\(/ &&
+		    $line !~ m/^.\s*\#\s*define\s+(?:$underscore_smp_barriers)\s*\(/) {
+			WARN("MEMORY_BARRIER",
+			     "__smp memory barriers shouldn't be used outside barrier.h and asm-generic\n" . $herecurr);
+		}
+
 # check for waitqueue_active without a comment.
 		if ($line =~ /\bwaitqueue_active\s*\(/) {
 			if (!ctx_has_comment($first_line, $linenr)) {
-- 
MST

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH v4 3/3] checkpatch: add virt barriers
  2016-01-11 11:00 [PATCH v4 0/3] checkpatch: handling of memory barriers Michael S. Tsirkin
  2016-01-11 11:00 ` [PATCH v4 1/3] checkpatch.pl: add missing " Michael S. Tsirkin
  2016-01-11 11:00 ` [PATCH v4 2/3] checkpatch: check for __smp outside barrier.h Michael S. Tsirkin
@ 2016-01-11 11:00 ` Michael S. Tsirkin
  2016-01-11 11:04 ` [PATCH v4 0/3] checkpatch: handling of memory barriers Michael S. Tsirkin
  2016-01-11 21:45 ` Joe Perches
  4 siblings, 0 replies; 7+ messages in thread
From: Michael S. Tsirkin @ 2016-01-11 11:00 UTC (permalink / raw)
  To: linux-kernel
  Cc: Andy Whitcroft, Joe Perches, Peter Zijlstra, Arnd Bergmann,
	linux-arch, Andrew Cooper, virtualization, Stefano Stabellini,
	Thomas Gleixner, Ingo Molnar, H. Peter Anvin, David Miller,
	linux-ia64, linuxppc-dev, linux-s390, sparclinux,
	linux-arm-kernel, linux-metag, linux-mips, x86,
	user-mode-linux-devel, adi-buildroot-devel, linux-sh,
	linux-xtensa, xen-devel, Ingo Molnar, Tony Lindgren,
	Julian Calaby, Russell King - ARM Linux

Add virt_ barriers to list of barriers to check for
presence of a comment.

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
 scripts/checkpatch.pl | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
index 25476c2..c7bf1aa 100755
--- a/scripts/checkpatch.pl
+++ b/scripts/checkpatch.pl
@@ -5133,7 +5133,8 @@ sub process {
 		}x;
 		my $all_barriers = qr{
 			(?:$barriers)|
-			smp_(?:$barrier_stems)
+			smp_(?:$barrier_stems)|
+			virt_(?:$barrier_stems)
 		}x;
 
 		if ($line =~ /\b(?:$all_barriers)\s*\(/) {
-- 
MST

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH v4 0/3] checkpatch: handling of memory barriers
  2016-01-11 11:00 [PATCH v4 0/3] checkpatch: handling of memory barriers Michael S. Tsirkin
                   ` (2 preceding siblings ...)
  2016-01-11 11:00 ` [PATCH v4 3/3] checkpatch: add virt barriers Michael S. Tsirkin
@ 2016-01-11 11:04 ` Michael S. Tsirkin
  2016-01-11 11:06   ` Julian Calaby
  2016-01-11 21:45 ` Joe Perches
  4 siblings, 1 reply; 7+ messages in thread
From: Michael S. Tsirkin @ 2016-01-11 11:04 UTC (permalink / raw)
  To: linux-kernel
  Cc: Andy Whitcroft, Joe Perches, Peter Zijlstra, Arnd Bergmann,
	linux-arch, Andrew Cooper, virtualization, Stefano Stabellini,
	Thomas Gleixner, Ingo Molnar, H. Peter Anvin, David Miller,
	linux-ia64, linuxppc-dev, linux-s390, sparclinux,
	linux-arm-kernel, linux-metag, linux-mips, x86,
	user-mode-linux-devel, adi-buildroot-devel, linux-sh,
	linux-xtensa, xen-devel, Ingo Molnar, Tony Lindgren,
	Julian Calaby, Russell King - ARM Linux

On Mon, Jan 11, 2016 at 12:59:25PM +0200, Michael S. Tsirkin wrote:
> As part of memory barrier cleanup, this patchset
> extends checkpatch to make it easier to stop
> incorrect memory barrier usage.
> 
> This replaces the checkpatch patches in my series
> 	arch: barrier cleanup + barriers for virt
> and will be included in the pull request including
> the series.
> 
> changes from v3:
> 	rename smp_barrier_stems to barrier_stems
> 	as suggested by Julian Calaby.

In fact it was Joe Perches that suggested it.
Sorry about the confusion.

> 	add (?: ... ) around a variable in regexp,
> 	in case we change the value later so that it matters.
> changes from v2:
> 	address comments by Joe Perches:
> 	use (?: ... ) to avoid unnecessary capture groups
> 	rename smp_barriers to smp_barrier_stems for clarity
> 	add barriers before/after atomic
> Changes from v1:
> 	catch optional\s* before () in barriers
> 	rewrite using qr{} instead of map
> 
> Michael S. Tsirkin (3):
>   checkpatch.pl: add missing memory barriers
>   checkpatch: check for __smp outside barrier.h
>   checkpatch: add virt barriers
> 
> Michael S. Tsirkin (3):
>   checkpatch.pl: add missing memory barriers
>   checkpatch: check for __smp outside barrier.h
>   checkpatch: add virt barriers
> 
>  scripts/checkpatch.pl | 33 ++++++++++++++++++++++++++++++++-
>  1 file changed, 32 insertions(+), 1 deletion(-)
> 
> -- 
> MST

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH v4 0/3] checkpatch: handling of memory barriers
  2016-01-11 11:04 ` [PATCH v4 0/3] checkpatch: handling of memory barriers Michael S. Tsirkin
@ 2016-01-11 11:06   ` Julian Calaby
  0 siblings, 0 replies; 7+ messages in thread
From: Julian Calaby @ 2016-01-11 11:06 UTC (permalink / raw)
  To: Michael S. Tsirkin
  Cc: linux-kernel, Andy Whitcroft, Joe Perches, Peter Zijlstra,
	Arnd Bergmann, linux-arch, Andrew Cooper, virtualization,
	Stefano Stabellini, Thomas Gleixner, Ingo Molnar, H. Peter Anvin,
	David Miller, linux-ia64, linuxppc-dev, linux-s390, sparclinux,
	Mailing List, Arm, linux-metag, linux-mips, x86,
	user-mode-linux-devel, adi-buildroot-devel, linux-sh,
	linux-xtensa, xen-devel, Ingo Molnar, Tony Lindgren,
	Russell King - ARM Linux

Hi Michael,

On Mon, Jan 11, 2016 at 10:04 PM, Michael S. Tsirkin <mst@redhat.com> wrote:
> On Mon, Jan 11, 2016 at 12:59:25PM +0200, Michael S. Tsirkin wrote:
>> As part of memory barrier cleanup, this patchset
>> extends checkpatch to make it easier to stop
>> incorrect memory barrier usage.
>>
>> This replaces the checkpatch patches in my series
>>       arch: barrier cleanup + barriers for virt
>> and will be included in the pull request including
>> the series.
>>
>> changes from v3:
>>       rename smp_barrier_stems to barrier_stems
>>       as suggested by Julian Calaby.
>
> In fact it was Joe Perches that suggested it.
> Sorry about the confusion.

I was about to point that out.

FWIW this entire series is:

Acked-by: Julian Calaby <julian.calaby@gmail.com>

Thanks,

-- 
Julian Calaby

Email: julian.calaby@gmail.com
Profile: http://www.google.com/profiles/julian.calaby/

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH v4 0/3] checkpatch: handling of memory barriers
  2016-01-11 11:00 [PATCH v4 0/3] checkpatch: handling of memory barriers Michael S. Tsirkin
                   ` (3 preceding siblings ...)
  2016-01-11 11:04 ` [PATCH v4 0/3] checkpatch: handling of memory barriers Michael S. Tsirkin
@ 2016-01-11 21:45 ` Joe Perches
  4 siblings, 0 replies; 7+ messages in thread
From: Joe Perches @ 2016-01-11 21:45 UTC (permalink / raw)
  To: Michael S. Tsirkin, linux-kernel
  Cc: Andy Whitcroft, Peter Zijlstra, Arnd Bergmann, linux-arch,
	Andrew Cooper, virtualization, Stefano Stabellini,
	Thomas Gleixner, Ingo Molnar, H. Peter Anvin, David Miller,
	linux-ia64, linuxppc-dev, linux-s390, sparclinux,
	linux-arm-kernel, linux-metag, linux-mips, x86,
	user-mode-linux-devel, adi-buildroot-devel, linux-sh,
	linux-xtensa, xen-devel, Ingo Molnar, Tony Lindgren,
	Julian Calaby, Russell King - ARM Linux

On Mon, 2016-01-11 at 13:00 +0200, Michael S. Tsirkin wrote:
> As part of memory barrier cleanup, this patchset
> extends checkpatch to make it easier to stop
> incorrect memory barrier usage.

Thanks Michael.

Acked-by: Joe Perches <joe@perches.com>

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2016-01-11 21:45 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-01-11 11:00 [PATCH v4 0/3] checkpatch: handling of memory barriers Michael S. Tsirkin
2016-01-11 11:00 ` [PATCH v4 1/3] checkpatch.pl: add missing " Michael S. Tsirkin
2016-01-11 11:00 ` [PATCH v4 2/3] checkpatch: check for __smp outside barrier.h Michael S. Tsirkin
2016-01-11 11:00 ` [PATCH v4 3/3] checkpatch: add virt barriers Michael S. Tsirkin
2016-01-11 11:04 ` [PATCH v4 0/3] checkpatch: handling of memory barriers Michael S. Tsirkin
2016-01-11 11:06   ` Julian Calaby
2016-01-11 21:45 ` Joe Perches

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).