* [PATCH v3 0/3] checkpatch: handling of memory barriers @ 2016-01-10 19:30 Michael S. Tsirkin 2016-01-10 19:30 ` [PATCH v3 1/3] checkpatch.pl: add missing " Michael S. Tsirkin ` (2 more replies) 0 siblings, 3 replies; 9+ messages in thread From: Michael S. Tsirkin @ 2016-01-10 19:30 UTC (permalink / raw) To: linux-arm-kernel 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 next version of the series. 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 scripts/checkpatch.pl | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) -- MST ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v3 1/3] checkpatch.pl: add missing memory barriers 2016-01-10 19:30 [PATCH v3 0/3] checkpatch: handling of memory barriers Michael S. Tsirkin @ 2016-01-10 19:30 ` Michael S. Tsirkin 2016-01-10 19:30 ` [PATCH v3 2/3] checkpatch: check for __smp outside barrier.h Michael S. Tsirkin 2016-01-10 19:31 ` [PATCH v3 3/3] checkpatch: add virt barriers Michael S. Tsirkin 2 siblings, 0 replies; 9+ messages in thread From: Michael S. Tsirkin @ 2016-01-10 19:30 UTC (permalink / raw) To: linux-arm-kernel 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..1c01b7d 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 $smp_barrier_stems = qr{ + mb__before_atomic| + mb__after_atomic| + store_release| + load_acquire| + store_mb| + (?:$barriers) + }x; + my $all_barriers = qr{ + $barriers| + smp_(?:$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] 9+ messages in thread
* [PATCH v3 2/3] checkpatch: check for __smp outside barrier.h 2016-01-10 19:30 [PATCH v3 0/3] checkpatch: handling of memory barriers Michael S. Tsirkin 2016-01-10 19:30 ` [PATCH v3 1/3] checkpatch.pl: add missing " Michael S. Tsirkin @ 2016-01-10 19:30 ` Michael S. Tsirkin 2016-01-10 19:31 ` [PATCH v3 3/3] checkpatch: add virt barriers Michael S. Tsirkin 2 siblings, 0 replies; 9+ messages in thread From: Michael S. Tsirkin @ 2016-01-10 19:30 UTC (permalink / raw) To: linux-arm-kernel 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 1c01b7d..15cfca4 100755 --- a/scripts/checkpatch.pl +++ b/scripts/checkpatch.pl @@ -5143,6 +5143,16 @@ sub process { } } + my $underscore_smp_barriers = qr{__smp_(?:$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] 9+ messages in thread
* [PATCH v3 3/3] checkpatch: add virt barriers 2016-01-10 19:30 [PATCH v3 0/3] checkpatch: handling of memory barriers Michael S. Tsirkin 2016-01-10 19:30 ` [PATCH v3 1/3] checkpatch.pl: add missing " Michael S. Tsirkin 2016-01-10 19:30 ` [PATCH v3 2/3] checkpatch: check for __smp outside barrier.h Michael S. Tsirkin @ 2016-01-10 19:31 ` Michael S. Tsirkin 2016-01-10 22:13 ` Julian Calaby 2 siblings, 1 reply; 9+ messages in thread From: Michael S. Tsirkin @ 2016-01-10 19:31 UTC (permalink / raw) To: linux-arm-kernel 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 15cfca4..4466579 100755 --- a/scripts/checkpatch.pl +++ b/scripts/checkpatch.pl @@ -5133,7 +5133,8 @@ sub process { }x; my $all_barriers = qr{ $barriers| - smp_(?:$smp_barrier_stems) + smp_(?:$smp_barrier_stems)| + virt_(?:$smp_barrier_stems) }x; if ($line =~ /\b(?:$all_barriers)\s*\(/) { -- MST ^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v3 3/3] checkpatch: add virt barriers 2016-01-10 19:31 ` [PATCH v3 3/3] checkpatch: add virt barriers Michael S. Tsirkin @ 2016-01-10 22:13 ` Julian Calaby 2016-01-10 22:52 ` Joe Perches 0 siblings, 1 reply; 9+ messages in thread From: Julian Calaby @ 2016-01-10 22:13 UTC (permalink / raw) To: linux-arm-kernel Hi Michael, On Mon, Jan 11, 2016 at 6:31 AM, Michael S. Tsirkin <mst@redhat.com> wrote: > 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 15cfca4..4466579 100755 > --- a/scripts/checkpatch.pl > +++ b/scripts/checkpatch.pl > @@ -5133,7 +5133,8 @@ sub process { > }x; > my $all_barriers = qr{ > $barriers| > - smp_(?:$smp_barrier_stems) > + smp_(?:$smp_barrier_stems)| > + virt_(?:$smp_barrier_stems) Sorry I'm late to the party here, but would it make sense to write this as: (?:smp|virt)_(?:$smp_barrier_stems) Thanks, -- Julian Calaby Email: julian.calaby at gmail.com Profile: http://www.google.com/profiles/julian.calaby/ ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v3 3/3] checkpatch: add virt barriers 2016-01-10 22:13 ` Julian Calaby @ 2016-01-10 22:52 ` Joe Perches 2016-01-11 10:35 ` Michael S. Tsirkin 0 siblings, 1 reply; 9+ messages in thread From: Joe Perches @ 2016-01-10 22:52 UTC (permalink / raw) To: linux-arm-kernel On Mon, 2016-01-11 at 09:13 +1100, Julian Calaby wrote: > On Mon, Jan 11, 2016 at 6:31 AM, Michael S. Tsirkin <mst@redhat.com> wrote: > > Add virt_ barriers to list of barriers to check for > > presence of a comment. [] > > diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl [] > > @@ -5133,7 +5133,8 @@ sub process { > > ????????????????}x; > > ????????????????my $all_barriers = qr{ > > ????????????????????????$barriers| > > -???????????????????????smp_(?:$smp_barrier_stems) > > +???????????????????????smp_(?:$smp_barrier_stems)| > > +???????????????????????virt_(?:$smp_barrier_stems) > > Sorry I'm late to the party here, but would it make sense to write this as: > > (?:smp|virt)_(?:$smp_barrier_stems) Yes. Perhaps the name might be better as barrier_stems. Also, ideally this would be longest match first or use \b after the matches so that $all_barriers could work successfully without a following \s*\( my $all_barriers = qr{ (?:smp|virt)_(?:barrier_stems)| $barriers) }x; or maybe add separate $smp_barriers and $virt_barriers <shrug> it doesn't matter much in any case ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v3 3/3] checkpatch: add virt barriers 2016-01-10 22:52 ` Joe Perches @ 2016-01-11 10:35 ` Michael S. Tsirkin 2016-01-11 10:40 ` Julian Calaby 0 siblings, 1 reply; 9+ messages in thread From: Michael S. Tsirkin @ 2016-01-11 10:35 UTC (permalink / raw) To: linux-arm-kernel On Sun, Jan 10, 2016 at 02:52:16PM -0800, Joe Perches wrote: > On Mon, 2016-01-11 at 09:13 +1100, Julian Calaby wrote: > > On Mon, Jan 11, 2016 at 6:31 AM, Michael S. Tsirkin <mst@redhat.com> wrote: > > > Add virt_ barriers to list of barriers to check for > > > presence of a comment. > [] > > > diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl > [] > > > @@ -5133,7 +5133,8 @@ sub process { > > > ????????????????}x; > > > ????????????????my $all_barriers = qr{ > > > ????????????????????????$barriers| > > > -???????????????????????smp_(?:$smp_barrier_stems) > > > +???????????????????????smp_(?:$smp_barrier_stems)| > > > +???????????????????????virt_(?:$smp_barrier_stems) > > > > Sorry I'm late to the party here, but would it make sense to write this as: > > > > (?:smp|virt)_(?:$smp_barrier_stems) > > Yes. Perhaps the name might be better as barrier_stems. > > Also, ideally this would be longest match first or use \b > after the matches so that $all_barriers could work > successfully without a following \s*\( > > my $all_barriers = qr{ > (?:smp|virt)_(?:barrier_stems)| > $barriers) > }x; > > or maybe add separate $smp_barriers and $virt_barriers > > <shrug> it doesn't matter much in any case OK just to clarify - are you OK with merging the patch as is? Refactorings can come as patches on top if required. -- MST ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v3 3/3] checkpatch: add virt barriers 2016-01-11 10:35 ` Michael S. Tsirkin @ 2016-01-11 10:40 ` Julian Calaby 2016-01-11 10:56 ` Michael S. Tsirkin 0 siblings, 1 reply; 9+ messages in thread From: Julian Calaby @ 2016-01-11 10:40 UTC (permalink / raw) To: linux-arm-kernel Hi Michael, On Mon, Jan 11, 2016 at 9:35 PM, Michael S. Tsirkin <mst@redhat.com> wrote: > On Sun, Jan 10, 2016 at 02:52:16PM -0800, Joe Perches wrote: >> On Mon, 2016-01-11 at 09:13 +1100, Julian Calaby wrote: >> > On Mon, Jan 11, 2016 at 6:31 AM, Michael S. Tsirkin <mst@redhat.com> wrote: >> > > Add virt_ barriers to list of barriers to check for >> > > presence of a comment. >> [] >> > > diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl >> [] >> > > @@ -5133,7 +5133,8 @@ sub process { >> > > }x; >> > > my $all_barriers = qr{ >> > > $barriers| >> > > - smp_(?:$smp_barrier_stems) >> > > + smp_(?:$smp_barrier_stems)| >> > > + virt_(?:$smp_barrier_stems) >> > >> > Sorry I'm late to the party here, but would it make sense to write this as: >> > >> > (?:smp|virt)_(?:$smp_barrier_stems) >> >> Yes. Perhaps the name might be better as barrier_stems. >> >> Also, ideally this would be longest match first or use \b >> after the matches so that $all_barriers could work >> successfully without a following \s*\( >> >> my $all_barriers = qr{ >> (?:smp|virt)_(?:barrier_stems)| >> $barriers) >> }x; >> >> or maybe add separate $smp_barriers and $virt_barriers >> >> <shrug> it doesn't matter much in any case > > OK just to clarify - are you OK with merging the patch as is? > Refactorings can come as patches on top if required. I don't really care either way, I was just asking if it was possible. If you don't see any value in that change, then don't make it. Thanks, -- Julian Calaby Email: julian.calaby at gmail.com Profile: http://www.google.com/profiles/julian.calaby/ ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v3 3/3] checkpatch: add virt barriers 2016-01-11 10:40 ` Julian Calaby @ 2016-01-11 10:56 ` Michael S. Tsirkin 0 siblings, 0 replies; 9+ messages in thread From: Michael S. Tsirkin @ 2016-01-11 10:56 UTC (permalink / raw) To: linux-arm-kernel On Mon, Jan 11, 2016 at 09:40:18PM +1100, Julian Calaby wrote: > Hi Michael, > > On Mon, Jan 11, 2016 at 9:35 PM, Michael S. Tsirkin <mst@redhat.com> wrote: > > On Sun, Jan 10, 2016 at 02:52:16PM -0800, Joe Perches wrote: > >> On Mon, 2016-01-11 at 09:13 +1100, Julian Calaby wrote: > >> > On Mon, Jan 11, 2016 at 6:31 AM, Michael S. Tsirkin <mst@redhat.com> wrote: > >> > > Add virt_ barriers to list of barriers to check for > >> > > presence of a comment. > >> [] > >> > > diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl > >> [] > >> > > @@ -5133,7 +5133,8 @@ sub process { > >> > > }x; > >> > > my $all_barriers = qr{ > >> > > $barriers| > >> > > - smp_(?:$smp_barrier_stems) > >> > > + smp_(?:$smp_barrier_stems)| > >> > > + virt_(?:$smp_barrier_stems) > >> > > >> > Sorry I'm late to the party here, but would it make sense to write this as: > >> > > >> > (?:smp|virt)_(?:$smp_barrier_stems) > >> > >> Yes. Perhaps the name might be better as barrier_stems. > >> > >> Also, ideally this would be longest match first or use \b > >> after the matches so that $all_barriers could work > >> successfully without a following \s*\( > >> > >> my $all_barriers = qr{ > >> (?:smp|virt)_(?:barrier_stems)| > >> $barriers) > >> }x; > >> > >> or maybe add separate $smp_barriers and $virt_barriers > >> > >> <shrug> it doesn't matter much in any case > > > > OK just to clarify - are you OK with merging the patch as is? > > Refactorings can come as patches on top if required. > > I don't really care either way, I was just asking if it was possible. > If you don't see any value in that change, then don't make it. > > Thanks, > > -- > Julian Calaby > > Email: julian.calaby at gmail.com > Profile: http://www.google.com/profiles/julian.calaby/ OK, got it, thanks. I will rename smp_barrier_stems to barrier_stems since this doesn't need too much testing. I'd rather keep the regex code as is since changing it requires testing. I might play with it some more in the future but I'd like to merge it in the current form to help make sure __smp barriers are not misused. I'll post v4 now - an ack will be appreciated. -- MST ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2016-01-11 10:56 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2016-01-10 19:30 [PATCH v3 0/3] checkpatch: handling of memory barriers Michael S. Tsirkin 2016-01-10 19:30 ` [PATCH v3 1/3] checkpatch.pl: add missing " Michael S. Tsirkin 2016-01-10 19:30 ` [PATCH v3 2/3] checkpatch: check for __smp outside barrier.h Michael S. Tsirkin 2016-01-10 19:31 ` [PATCH v3 3/3] checkpatch: add virt barriers Michael S. Tsirkin 2016-01-10 22:13 ` Julian Calaby 2016-01-10 22:52 ` Joe Perches 2016-01-11 10:35 ` Michael S. Tsirkin 2016-01-11 10:40 ` Julian Calaby 2016-01-11 10:56 ` Michael S. Tsirkin
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).