From: Ingo Molnar <mingo@kernel.org>
To: Boqun Feng <boqun.feng@gmail.com>
Cc: Will Deacon <will.deacon@arm.com>,
Peter Zijlstra <peterz@infradead.org>,
"Reshetova, Elena" <elena.reshetova@intel.com>,
"gregkh@linuxfoundation.org" <gregkh@linuxfoundation.org>,
"keescook@chromium.org" <keescook@chromium.org>,
"arnd@arndb.de" <arnd@arndb.de>,
"tglx@linutronix.de" <tglx@linutronix.de>,
"hpa@zytor.com" <hpa@zytor.com>,
"dave@progbits.org" <dave@progbits.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: [RFC][PATCH 7/7] kref: Implement using refcount_t
Date: Mon, 21 Nov 2016 08:48:26 +0100 [thread overview]
Message-ID: <20161121074826.GA29412@gmail.com> (raw)
In-Reply-To: <20161121040644.GE5227@tardis.cn.ibm.com>
* Boqun Feng <boqun.feng@gmail.com> wrote:
> > It also fails to decrement in the underflow case (which is fine, but not
> > obvious from the comment). Same thing below.
> >
>
> Maybe a table in the comment like the following helps?
>
> /*
> * T: return true, F: return fasle
> * W: trigger WARNING
> * N: no effect
> *
> * | value before ops |
> * | 0 | 1 | UINT_MAX - 1 | UINT_MAX |
> * ---------------------+-------+-------+--------------+----------+
> * inc() | W | | W | N |
> * inc_not_zero() | FN | T | WT | WTN |
> * dec_and_test() | WFN | T | F | FN |
> * dec_and_mutex_lock() | WFN | T | F | FN |
> * dec_and_spin_lock() | WFN | T | F | FN |
> */
Yes!
nit: s/fasle/false
Also, I think we want to do a couple of other changes as well to make it more
readable, extend the columns with 'normal' values (2 and UINT_MAX-2) and order the
colums properly. I.e. something like:
/*
* The before/after outcome of various atomic ops:
*
* T: returns true
* F: returns false
* ----------------------------------
* W: op triggers kernel WARNING
* ----------------------------------
* 0: no change to atomic var value
* +: atomic var value increases by 1
* -: atomic var value decreases by 1
* ----------------------------------
* -1: UINT_MAX
* -2: UINT_MAX-1
* -3: UINT_MAX-2
*
* ---------------------+-----+-----+-----+-----+-----+-----+
* value before: | -3 | -2 | -1 | 0 | 1 | 2 |
* ---------------------+-----+-----+-----+-----+-----+-----+
* value+effect after: |
* ---------------------+ | | | | | |
* inc() | ..+ | W.+ | ..0 | W.+ | ..+ | ..+ |
* inc_not_zero() | .T+ | WT+ | WT0 | .F0 | .T+ | .T+ |
* dec_and_test() | .F- | .F- | .F0 | WF0 | .T- | .F- |
* dec_and_mutex_lock() | .F- | .F- | .F0 | WF0 | .T- | .F- |
* dec_and_spin_lock() | .F- | .F- | .F0 | WF0 | .T- | .F- |
* ---------------------+-----+-----+-----+-----+-----+-----+
*
* So for example: 'WT+' in the inc_not_zero() row and '-2' column
* means that when the atomic_inc_not_zero() function is called
* with an atomic var that has a value of UINT_MAX-1, then the
* atomic var's value will increase to the maximum overflow value
* of UINT_MAX and will produce a warning. The function returns
* 'true'.
*/
I think this table makes the overflow/underflow semantics pretty clear and also
documents the regular behavior of these atomic ops pretty intuitively.
Agreed?
Thanks,
Ingo
next prev parent reply other threads:[~2016-11-21 7:48 UTC|newest]
Thread overview: 96+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-11-14 17:39 [RFC][PATCH 0/7] kref improvements Peter Zijlstra
2016-11-14 17:39 ` [RFC][PATCH 1/7] kref: Add KREF_INIT() Peter Zijlstra
2016-11-14 17:39 ` [RFC][PATCH 2/7] kref: Add kref_read() Peter Zijlstra
2016-11-14 18:16 ` Christoph Hellwig
2016-11-15 7:28 ` Greg KH
2016-11-15 7:47 ` Peter Zijlstra
2016-11-15 8:37 ` [PATCH] printk, locking/atomics, kref: Introduce new %pAr and %pAk format string options for atomic_t and 'struct kref' Ingo Molnar
2016-11-15 8:43 ` [PATCH v2] " Ingo Molnar
2016-11-15 9:21 ` Peter Zijlstra
2016-11-15 9:41 ` [PATCH v3] printk, locking/atomics, kref: Introduce new %pAa " Ingo Molnar
2016-11-15 10:10 ` [PATCH v2] printk, locking/atomics, kref: Introduce new %pAr " kbuild test robot
2016-11-15 16:42 ` [PATCH] " Linus Torvalds
2016-11-16 8:13 ` Ingo Molnar
2016-11-15 7:33 ` [RFC][PATCH 2/7] kref: Add kref_read() Greg KH
2016-11-15 8:03 ` Peter Zijlstra
2016-11-15 20:53 ` Kees Cook
2016-11-16 8:21 ` Greg KH
2016-11-16 10:10 ` Peter Zijlstra
2016-11-16 10:18 ` Greg KH
2016-11-16 10:11 ` Daniel Borkmann
2016-11-16 10:19 ` Greg KH
2016-11-16 10:09 ` Peter Zijlstra
2016-11-16 18:58 ` Kees Cook
2016-11-17 8:34 ` Peter Zijlstra
2016-11-17 12:30 ` David Windsor
2016-11-17 12:43 ` Peter Zijlstra
2016-11-17 13:01 ` Reshetova, Elena
2016-11-17 13:22 ` Peter Zijlstra
2016-11-17 15:42 ` Reshetova, Elena
2016-11-17 18:02 ` Reshetova, Elena
2016-11-17 19:10 ` Peter Zijlstra
2016-11-17 19:29 ` Peter Zijlstra
2016-11-17 19:34 ` Kees Cook
2016-11-14 17:39 ` [RFC][PATCH 3/7] kref: Kill kref_sub() Peter Zijlstra
2016-11-14 17:39 ` [RFC][PATCH 4/7] kref: Use kref_get_unless_zero() more Peter Zijlstra
2016-11-14 17:39 ` [RFC][PATCH 5/7] kref: Implement kref_put_lock() Peter Zijlstra
2016-11-14 20:35 ` Kees Cook
2016-11-15 7:50 ` Peter Zijlstra
2016-11-14 17:39 ` [RFC][PATCH 6/7] kref: Avoid more abuse Peter Zijlstra
2016-11-14 17:39 ` [RFC][PATCH 7/7] kref: Implement using refcount_t Peter Zijlstra
2016-11-15 8:40 ` Ingo Molnar
2016-11-15 9:47 ` Peter Zijlstra
2016-11-15 10:03 ` Ingo Molnar
2016-11-15 10:46 ` Peter Zijlstra
2016-11-15 13:03 ` Ingo Molnar
2016-11-15 18:06 ` Kees Cook
2016-11-15 19:16 ` Peter Zijlstra
2016-11-15 19:23 ` Kees Cook
2016-11-16 8:31 ` Ingo Molnar
2016-11-16 8:51 ` Greg KH
2016-11-16 9:07 ` Ingo Molnar
2016-11-16 9:24 ` Greg KH
2016-11-16 10:15 ` Peter Zijlstra
2016-11-16 18:55 ` Kees Cook
2016-11-17 8:33 ` Peter Zijlstra
2016-11-17 19:50 ` Kees Cook
2016-11-16 18:41 ` Kees Cook
2016-11-15 12:33 ` Boqun Feng
2016-11-15 13:01 ` Peter Zijlstra
2016-11-15 14:19 ` Boqun Feng
2016-11-17 9:28 ` Peter Zijlstra
2016-11-17 9:48 ` Boqun Feng
2016-11-17 10:29 ` Peter Zijlstra
2016-11-17 10:39 ` Peter Zijlstra
2016-11-17 11:03 ` Greg KH
2016-11-17 12:48 ` Peter Zijlstra
[not found] ` <CAL0jBu-GnREUPSX4kUDp-Cc8ZGp6+Cb2q0HVandswcLzPRnChQ@mail.gmail.com>
2016-11-17 12:08 ` Peter Zijlstra
2016-11-17 12:08 ` Will Deacon
2016-11-17 16:11 ` Peter Zijlstra
2016-11-17 16:36 ` Will Deacon
2016-11-18 8:26 ` Boqun Feng
2016-11-18 10:16 ` Will Deacon
2016-11-18 10:07 ` Reshetova, Elena
2016-11-18 11:37 ` Peter Zijlstra
2016-11-18 17:06 ` Will Deacon
2016-11-18 18:57 ` Peter Zijlstra
2016-11-21 4:06 ` Boqun Feng
2016-11-21 7:48 ` Ingo Molnar [this message]
2016-11-21 8:38 ` Boqun Feng
2016-11-21 8:44 ` Boqun Feng
2016-11-21 9:02 ` Peter Zijlstra
2016-11-21 9:37 ` Boqun Feng
2016-11-18 10:47 ` Reshetova, Elena
2016-11-18 10:52 ` Peter Zijlstra
2016-11-18 16:58 ` Reshetova, Elena
2016-11-18 18:53 ` Peter Zijlstra
2016-11-19 7:14 ` Reshetova, Elena
2016-11-19 11:45 ` Peter Zijlstra
2017-01-26 23:14 ` Kees Cook
2017-01-27 9:58 ` Peter Zijlstra
2017-01-27 21:07 ` Kees Cook
2017-01-30 13:40 ` Peter Zijlstra
2016-11-15 7:27 ` [RFC][PATCH 0/7] kref improvements Greg KH
2016-11-15 7:42 ` Ingo Molnar
2016-11-15 15:05 ` Greg KH
2016-11-15 7:48 ` Peter Zijlstra
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=20161121074826.GA29412@gmail.com \
--to=mingo@kernel.org \
--cc=arnd@arndb.de \
--cc=boqun.feng@gmail.com \
--cc=dave@progbits.org \
--cc=elena.reshetova@intel.com \
--cc=gregkh@linuxfoundation.org \
--cc=hpa@zytor.com \
--cc=keescook@chromium.org \
--cc=linux-kernel@vger.kernel.org \
--cc=peterz@infradead.org \
--cc=tglx@linutronix.de \
--cc=will.deacon@arm.com \
/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 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).