From: Yoshinori Sato <ysato@users.sourceforge.jp>
To: Russell King - ARM Linux <linux@arm.linux.org.uk>
Cc: Dan Williams <dan.j.williams@intel.com>,
tomeu.vizoso@collabora.com, m.szyprowski@samsung.com,
"linux-arm-kernel@lists.infradead.org"
<linux-arm-kernel@lists.infradead.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"linux-nvdimm@lists.01.org" <linux-nvdimm@ml01.01.org>,
Stephen Rothwell <sfr@canb.auug.org.au>
Subject: Re: -next regression: "driver cohandle -EPROBE_DEFER from bus_type.match()"
Date: Fri, 18 Dec 2015 13:18:36 +0900 [thread overview]
Message-ID: <87r3ikjso3.wl-ysato@users.sourceforge.jp> (raw)
In-Reply-To: <20151217184641.GI8644@n2100.arm.linux.org.uk>
On Fri, 18 Dec 2015 03:46:41 +0900,
Russell King - ARM Linux wrote:
>
> On Thu, Dec 17, 2015 at 07:51:14AM -0800, Dan Williams wrote:
> > The commit below causes the libnvdimm sub-system to stop loading.
> > This is due to the fact that nvdimm_bus_match() returns the result of
> > test_bit() which may be negative. If there are any other bus match
> > functions using test_bit they may be similarly impacted.
> >
> > Can we queue a fixup like the following to libnvdimm, and maybe
> > others, ahead of this driver core change?
>
> This is rather annoying. Have we uncovered a latent bug in other
> architectures? Well, looking through the test_bit() implementations,
> it looks like it.
>
> I'll drop the patch set for the time being, we can't go around breaking
> stuff like this. However, I think the test_bit() result should be
> regularised across different architectures - it _looks_ to me like most
> implementations return 0/1 values, but there may be some that don't
> (maybe the assembly versions?)
>
> Here's the list I've pulled out so far from the "easy" cases, which all
> look like they're returning 0/1 values.
>
> asm-generic: 0/1
>
> /**
> * test_bit - Determine whether a bit is set
> * @nr: bit number to test
> * @addr: Address to start counting from
> */
> static inline int test_bit(int nr, const volatile unsigned long *addr)
> {
> return 1UL & (addr[BIT_WORD(nr)] >> (nr & (BITS_PER_LONG-1)));
> }
>
> alpha: 0/1
>
> static inline int
> test_bit(int nr, const volatile void * addr)
> {
> return (1UL & (((const int *) addr)[nr >> 5] >> (nr & 31))) != 0UL;
> }
>
> arm: 0/1
>
> test_bit(unsigned int nr, const volatile unsigned long *addr)
> {
> unsigned long mask;
>
> addr += nr >> 5;
>
> mask = 1UL << (nr & 0x1f);
>
> return ((mask & *addr) != 0);
> }
>
> blackfin: 0/1
>
> static inline int test_bit(int nr, const volatile unsigned long *addr)
> {
> volatile const unsigned long *a = addr + (nr >> 5);
> return __raw_bit_test_asm(a, nr & 0x1f) != 0;
> }
>
> frv: 0/1
>
> static inline int
> __constant_test_bit(unsigned long nr, const volatile void *addr)
> {
> return ((1UL << (nr & 31)) & (((const volatile unsigned int *) addr)[nr >> 5])) != 0;
> }
> (and similar for __test_bit)
>
> h8300 uses assembly... no idea
0/1
I think same return of other architecture.
> hexagon uses assembly as well... no idea
>
> ia64: 0/1
>
> static __inline__ int
> test_bit (int nr, const volatile void *addr)
> {
> return 1 & (((const volatile __u32 *) addr)[nr >> 5] >> (nr & 31));
> }
>
> m68k: 0/1
>
> static inline int test_bit(int nr, const unsigned long *vaddr)
> {
> return (vaddr[nr >> 5] & (1UL << (nr & 31))) != 0;
> }
>
> mn10300: 0/1
>
> static inline int test_bit(unsigned long nr, const volatile void *addr)
> {
> return 1UL & (((const volatile unsigned int *) addr)[nr >> 5] >> (nr & 31));
> }
>
> s390: 0/1
>
> static inline int test_bit(unsigned long nr, const volatile unsigned long *ptr)
> {
> const volatile unsigned char *addr;
>
> addr = ((const volatile unsigned char *)ptr);
> addr += (nr ^ (BITS_PER_LONG - 8)) >> 3;
> return (*addr >> (nr & 7)) & 1;
> }
>
> x86: 0/1 for constant, ? for variable
>
> static __always_inline int constant_test_bit(long nr, const volatile unsigned long *addr)
> {
> return ((1UL << (nr & (BITS_PER_LONG-1))) &
> (addr[nr >> _BITOPS_LONG_SHIFT])) != 0;
> }
> (presumably variable_test_bit is the same, but I don't know)
>
> --
> FTTC broadband for 0.8mile line: currently at 9.6Mbps down 400kbps up
> according to speedtest.net.
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
--
Yoshinori Sato
<ysato@users.sourceforge.jp>
WARNING: multiple messages have this Message-ID (diff)
From: ysato@users.sourceforge.jp (Yoshinori Sato)
To: linux-arm-kernel@lists.infradead.org
Subject: -next regression: "driver cohandle -EPROBE_DEFER from bus_type.match()"
Date: Fri, 18 Dec 2015 13:18:36 +0900 [thread overview]
Message-ID: <87r3ikjso3.wl-ysato@users.sourceforge.jp> (raw)
In-Reply-To: <20151217184641.GI8644@n2100.arm.linux.org.uk>
On Fri, 18 Dec 2015 03:46:41 +0900,
Russell King - ARM Linux wrote:
>
> On Thu, Dec 17, 2015 at 07:51:14AM -0800, Dan Williams wrote:
> > The commit below causes the libnvdimm sub-system to stop loading.
> > This is due to the fact that nvdimm_bus_match() returns the result of
> > test_bit() which may be negative. If there are any other bus match
> > functions using test_bit they may be similarly impacted.
> >
> > Can we queue a fixup like the following to libnvdimm, and maybe
> > others, ahead of this driver core change?
>
> This is rather annoying. Have we uncovered a latent bug in other
> architectures? Well, looking through the test_bit() implementations,
> it looks like it.
>
> I'll drop the patch set for the time being, we can't go around breaking
> stuff like this. However, I think the test_bit() result should be
> regularised across different architectures - it _looks_ to me like most
> implementations return 0/1 values, but there may be some that don't
> (maybe the assembly versions?)
>
> Here's the list I've pulled out so far from the "easy" cases, which all
> look like they're returning 0/1 values.
>
> asm-generic: 0/1
>
> /**
> * test_bit - Determine whether a bit is set
> * @nr: bit number to test
> * @addr: Address to start counting from
> */
> static inline int test_bit(int nr, const volatile unsigned long *addr)
> {
> return 1UL & (addr[BIT_WORD(nr)] >> (nr & (BITS_PER_LONG-1)));
> }
>
> alpha: 0/1
>
> static inline int
> test_bit(int nr, const volatile void * addr)
> {
> return (1UL & (((const int *) addr)[nr >> 5] >> (nr & 31))) != 0UL;
> }
>
> arm: 0/1
>
> test_bit(unsigned int nr, const volatile unsigned long *addr)
> {
> unsigned long mask;
>
> addr += nr >> 5;
>
> mask = 1UL << (nr & 0x1f);
>
> return ((mask & *addr) != 0);
> }
>
> blackfin: 0/1
>
> static inline int test_bit(int nr, const volatile unsigned long *addr)
> {
> volatile const unsigned long *a = addr + (nr >> 5);
> return __raw_bit_test_asm(a, nr & 0x1f) != 0;
> }
>
> frv: 0/1
>
> static inline int
> __constant_test_bit(unsigned long nr, const volatile void *addr)
> {
> return ((1UL << (nr & 31)) & (((const volatile unsigned int *) addr)[nr >> 5])) != 0;
> }
> (and similar for __test_bit)
>
> h8300 uses assembly... no idea
0/1
I think same return of other architecture.
> hexagon uses assembly as well... no idea
>
> ia64: 0/1
>
> static __inline__ int
> test_bit (int nr, const volatile void *addr)
> {
> return 1 & (((const volatile __u32 *) addr)[nr >> 5] >> (nr & 31));
> }
>
> m68k: 0/1
>
> static inline int test_bit(int nr, const unsigned long *vaddr)
> {
> return (vaddr[nr >> 5] & (1UL << (nr & 31))) != 0;
> }
>
> mn10300: 0/1
>
> static inline int test_bit(unsigned long nr, const volatile void *addr)
> {
> return 1UL & (((const volatile unsigned int *) addr)[nr >> 5] >> (nr & 31));
> }
>
> s390: 0/1
>
> static inline int test_bit(unsigned long nr, const volatile unsigned long *ptr)
> {
> const volatile unsigned char *addr;
>
> addr = ((const volatile unsigned char *)ptr);
> addr += (nr ^ (BITS_PER_LONG - 8)) >> 3;
> return (*addr >> (nr & 7)) & 1;
> }
>
> x86: 0/1 for constant, ? for variable
>
> static __always_inline int constant_test_bit(long nr, const volatile unsigned long *addr)
> {
> return ((1UL << (nr & (BITS_PER_LONG-1))) &
> (addr[nr >> _BITOPS_LONG_SHIFT])) != 0;
> }
> (presumably variable_test_bit is the same, but I don't know)
>
> --
> FTTC broadband for 0.8mile line: currently at 9.6Mbps down 400kbps up
> according to speedtest.net.
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo at vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
--
Yoshinori Sato
<ysato@users.sourceforge.jp>
next prev parent reply other threads:[~2015-12-18 4:18 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-12-17 15:51 -next regression: "driver cohandle -EPROBE_DEFER from bus_type.match()" Dan Williams
2015-12-17 15:51 ` Dan Williams
2015-12-17 15:51 ` Dan Williams
2015-12-17 16:48 ` Dan Williams
2015-12-17 16:48 ` Dan Williams
2015-12-17 16:48 ` Dan Williams
2015-12-17 17:07 ` Matthew Wilcox
2015-12-17 17:07 ` Matthew Wilcox
2015-12-17 17:07 ` Matthew Wilcox
2015-12-17 17:50 ` Ross Zwisler
2015-12-17 17:50 ` Ross Zwisler
2015-12-17 17:50 ` Ross Zwisler
2015-12-17 18:46 ` Russell King - ARM Linux
2015-12-17 18:46 ` Russell King - ARM Linux
2015-12-17 20:35 ` Dan Williams
2015-12-17 20:35 ` Dan Williams
2015-12-18 4:18 ` Yoshinori Sato [this message]
2015-12-18 4:18 ` Yoshinori Sato
2015-12-18 14:20 ` Marek Szyprowski
2015-12-18 14:20 ` Marek Szyprowski
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=87r3ikjso3.wl-ysato@users.sourceforge.jp \
--to=ysato@users.sourceforge.jp \
--cc=dan.j.williams@intel.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-nvdimm@ml01.01.org \
--cc=linux@arm.linux.org.uk \
--cc=m.szyprowski@samsung.com \
--cc=sfr@canb.auug.org.au \
--cc=tomeu.vizoso@collabora.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 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.