virtualization.lists.linux-foundation.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v4 1/3] checkpatch.pl: add missing memory barriers
       [not found] <1452509968-19778-1-git-send-email-mst@redhat.com>
@ 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
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 6+ messages in thread
From: Michael S. Tsirkin @ 2016-01-11 11:00 UTC (permalink / raw)
  To: linux-kernel
  Cc: linux-mips, linux-ia64, linux-sh, Peter Zijlstra, virtualization,
	H. Peter Anvin, sparclinux, Ingo Molnar, linux-arch, linux-s390,
	Russell King - ARM Linux, Arnd Bergmann, x86, Tony Lindgren,
	xen-devel, Ingo Molnar, linux-xtensa, user-mode-linux-devel,
	Stefano Stabellini, Julian Calaby, adi-buildroot-devel,
	Andy Whitcroft, Thomas Gleixner, linux-metag, linux-arm-kernel,
	Andrew Cooper <and>

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] 6+ messages in thread

* [PATCH v4 2/3] checkpatch: check for __smp outside barrier.h
       [not found] <1452509968-19778-1-git-send-email-mst@redhat.com>
  2016-01-11 11:00 ` [PATCH v4 1/3] checkpatch.pl: add missing memory barriers 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
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 6+ messages in thread
From: Michael S. Tsirkin @ 2016-01-11 11:00 UTC (permalink / raw)
  To: linux-kernel
  Cc: linux-mips, linux-ia64, linux-sh, Peter Zijlstra, virtualization,
	H. Peter Anvin, sparclinux, Ingo Molnar, linux-arch, linux-s390,
	Russell King - ARM Linux, Arnd Bergmann, x86, Tony Lindgren,
	xen-devel, Ingo Molnar, linux-xtensa, user-mode-linux-devel,
	Stefano Stabellini, Julian Calaby, adi-buildroot-devel,
	Andy Whitcroft, Thomas Gleixner, linux-metag, linux-arm-kernel,
	Andrew Cooper <and>

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] 6+ messages in thread

* [PATCH v4 3/3] checkpatch: add virt barriers
       [not found] <1452509968-19778-1-git-send-email-mst@redhat.com>
  2016-01-11 11:00 ` [PATCH v4 1/3] checkpatch.pl: add missing memory barriers 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
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 6+ messages in thread
From: Michael S. Tsirkin @ 2016-01-11 11:00 UTC (permalink / raw)
  To: linux-kernel
  Cc: linux-mips, linux-ia64, linux-sh, Peter Zijlstra, virtualization,
	H. Peter Anvin, sparclinux, Ingo Molnar, linux-arch, linux-s390,
	Russell King - ARM Linux, Arnd Bergmann, x86, Tony Lindgren,
	xen-devel, Ingo Molnar, linux-xtensa, user-mode-linux-devel,
	Stefano Stabellini, Julian Calaby, adi-buildroot-devel,
	Andy Whitcroft, Thomas Gleixner, linux-metag, linux-arm-kernel,
	Andrew Cooper <and>

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] 6+ messages in thread

* Re: [PATCH v4 0/3] checkpatch: handling of memory barriers
       [not found] <1452509968-19778-1-git-send-email-mst@redhat.com>
                   ` (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
       [not found] ` <20160111130334-mutt-send-email-mst@redhat.com>
  2016-01-11 21:45 ` Joe Perches
  5 siblings, 0 replies; 6+ messages in thread
From: Michael S. Tsirkin @ 2016-01-11 11:04 UTC (permalink / raw)
  To: linux-kernel
  Cc: linux-mips, linux-ia64, linux-sh, Peter Zijlstra, virtualization,
	H. Peter Anvin, sparclinux, Ingo Molnar, linux-arch, linux-s390,
	Russell King - ARM Linux, Arnd Bergmann, x86, Tony Lindgren,
	xen-devel, Ingo Molnar, linux-xtensa, user-mode-linux-devel,
	Stefano Stabellini, Julian Calaby, adi-buildroot-devel,
	Andy Whitcroft, Thomas Gleixner, linux-metag, linux-arm-kernel,
	Andrew Cooper <and>

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] 6+ messages in thread

* Re: [PATCH v4 0/3] checkpatch: handling of memory barriers
       [not found] ` <20160111130334-mutt-send-email-mst@redhat.com>
@ 2016-01-11 11:06   ` Julian Calaby
  0 siblings, 0 replies; 6+ messages in thread
From: Julian Calaby @ 2016-01-11 11:06 UTC (permalink / raw)
  To: Michael S. Tsirkin
  Cc: linux-mips, linux-ia64, linux-sh, Peter Zijlstra, virtualization,
	H. Peter Anvin, sparclinux, Ingo Molnar, linux-arch, linux-s390,
	Russell King - ARM Linux, Arnd Bergmann, x86, Tony Lindgren,
	xen-devel, Ingo Molnar, linux-xtensa, user-mode-linux-devel,
	Stefano Stabellini, adi-buildroot-devel, Andy Whitcroft,
	Thomas Gleixner, linux-metag, Mailing List, Arm,
	Andrew Cooper <andrew.co>

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] 6+ messages in thread

* Re: [PATCH v4 0/3] checkpatch: handling of memory barriers
       [not found] <1452509968-19778-1-git-send-email-mst@redhat.com>
                   ` (4 preceding siblings ...)
       [not found] ` <20160111130334-mutt-send-email-mst@redhat.com>
@ 2016-01-11 21:45 ` Joe Perches
  5 siblings, 0 replies; 6+ messages in thread
From: Joe Perches @ 2016-01-11 21:45 UTC (permalink / raw)
  To: Michael S. Tsirkin, linux-kernel
  Cc: linux-mips, linux-ia64, linux-sh, Peter Zijlstra, virtualization,
	H. Peter Anvin, sparclinux, Ingo Molnar, linux-arch, linux-s390,
	Russell King - ARM Linux, Arnd Bergmann, x86, Tony Lindgren,
	xen-devel, Ingo Molnar, linux-xtensa, user-mode-linux-devel,
	Stefano Stabellini, Julian Calaby, adi-buildroot-devel,
	Andy Whitcroft, Thomas Gleixner, linux-metag, linux-arm-kernel,
	Andrew Cooper <and>

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] 6+ messages in thread

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

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <1452509968-19778-1-git-send-email-mst@redhat.com>
2016-01-11 11:00 ` [PATCH v4 1/3] checkpatch.pl: add missing memory barriers 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
     [not found] ` <20160111130334-mutt-send-email-mst@redhat.com>
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).