From: Greg Ungerer <gregungerer@westnet.com.au>
To: Matthew Wilcox <willy@infradead.org>
Cc: linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org,
linux-arch@vger.kernel.org, torvalds@linux-foundation.org,
Nicholas Piggin <npiggin@gmail.com>
Subject: Re: [PATCH 09/17] m68k: Implement xor_unlock_is_negative_byte
Date: Tue, 19 Sep 2023 00:37:47 +1000 [thread overview]
Message-ID: <cb763591-a697-ab74-171e-fcd7f4e70137@westnet.com.au> (raw)
In-Reply-To: <ZQW849TfSCK6u2f8@casper.infradead.org>
On 17/9/23 00:34, Matthew Wilcox wrote:
> On Sat, Sep 16, 2023 at 11:11:32PM +1000, Greg Ungerer wrote:
>> On 16/9/23 04:36, Matthew Wilcox (Oracle) wrote:
>>> Using EOR to clear the guaranteed-to-be-set lock bit will test the
>>> negative flag just like the x86 implementation. This should be
>>> more efficient than the generic implementation in filemap.c. It
>>> would be better if m68k had __GCC_ASM_FLAG_OUTPUTS__.
>>>
>>> Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
>>> ---
>>> arch/m68k/include/asm/bitops.h | 14 ++++++++++++++
>>> 1 file changed, 14 insertions(+)
>>>
>>> diff --git a/arch/m68k/include/asm/bitops.h b/arch/m68k/include/asm/bitops.h
>>> index e984af71df6b..909ebe7cab5d 100644
>>> --- a/arch/m68k/include/asm/bitops.h
>>> +++ b/arch/m68k/include/asm/bitops.h
>>> @@ -319,6 +319,20 @@ arch___test_and_change_bit(unsigned long nr, volatile unsigned long *addr)
>>> return test_and_change_bit(nr, addr);
>>> }
>>> +static inline bool xor_unlock_is_negative_byte(unsigned long mask,
>>> + volatile unsigned long *p)
>>> +{
>>> + char result;
>>> + char *cp = (char *)p + 3; /* m68k is big-endian */
>>> +
>>> + __asm__ __volatile__ ("eor.b %1, %2; smi %0"
>>
>> The ColdFire members of the 68k family do not support byte size eor:
>>
>> CC mm/filemap.o
>> {standard input}: Assembler messages:
>> {standard input}:824: Error: invalid instruction for this architecture; needs 68000 or higher (68000 [68ec000, 68hc000, 68hc001, 68008, 68302, 68306, 68307, 68322, 68356], 68010, 68020 [68k, 68ec020], 68030 [68ec030], 68040 [68ec040], 68060 [68ec060], cpu32 [68330, 68331, 68332, 68333, 68334, 68336, 68340, 68341, 68349, 68360], fidoa [fido]) -- statement `eor.b #1,3(%a0)' ignored
>
> Well, that sucks. What do you suggest for Coldfire?
I am not seeing an easy way to not fall back to something like the MIPS
implementation for ColdFire. Could obviously assemblerize this to do better
than gcc, but if it has to be atomic I think we are stuck with the irq locking.
static inline bool cf_xor_is_negative_byte(unsigned long mask,
volatile unsigned long *addr)
{
unsigned long flags;
unsigned long data;
local_irq_save(flags)
data = *addr;
*addr = data ^ mask;
local_irq_restore(flags);
return (data & BIT(7)) != 0;
}
Regards
Greg
> (Shame you didn't join in on the original discussion:
> https://lore.kernel.org/linux-m68k/ZLmKq2VLjYGBVhMI@casper.infradead.org/ )
next prev parent reply other threads:[~2023-09-18 16:33 UTC|newest]
Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-09-15 18:36 [PATCH 00/17] Add folio_end_read Matthew Wilcox (Oracle)
2023-09-15 18:36 ` [PATCH 01/17] iomap: Hold state_lock over call to ifs_set_range_uptodate() Matthew Wilcox (Oracle)
2023-09-15 18:36 ` [PATCH 02/17] iomap: Protect read_bytes_pending with the state_lock Matthew Wilcox (Oracle)
2023-09-16 0:11 ` Linus Torvalds
2023-09-16 0:15 ` Linus Torvalds
2023-09-16 15:50 ` Matthew Wilcox
2023-09-15 18:36 ` [PATCH 03/17] mm: Add folio_end_read() Matthew Wilcox (Oracle)
2023-09-15 18:36 ` [PATCH 04/17] ext4: Use folio_end_read() Matthew Wilcox (Oracle)
2023-09-15 18:36 ` [PATCH 05/17] buffer: " Matthew Wilcox (Oracle)
2023-09-15 18:36 ` [PATCH 06/17] iomap: " Matthew Wilcox (Oracle)
2023-09-15 18:36 ` [PATCH 07/17] bitops: Add xor_unlock_is_negative_byte() Matthew Wilcox (Oracle)
2023-09-15 18:36 ` [PATCH 08/17] alpha: Implement xor_unlock_is_negative_byte Matthew Wilcox (Oracle)
2023-09-16 0:27 ` Linus Torvalds
2023-09-16 0:38 ` Matthew Wilcox
2023-09-16 2:01 ` Linus Torvalds
2023-09-16 2:14 ` Linus Torvalds
2023-09-16 15:59 ` Matthew Wilcox
2023-09-15 18:36 ` [PATCH 09/17] m68k: " Matthew Wilcox (Oracle)
2023-09-16 13:11 ` Greg Ungerer
2023-09-16 14:34 ` Matthew Wilcox
2023-09-18 14:37 ` Greg Ungerer [this message]
2023-09-20 7:45 ` Greg Ungerer
2023-09-20 16:58 ` Linus Torvalds
2023-09-19 13:23 ` David Laight
2023-09-19 14:26 ` Matthew Wilcox
2023-09-19 14:35 ` David Laight
2023-09-19 15:14 ` Matthew Wilcox
2023-09-19 15:22 ` David Laight
2023-09-19 15:47 ` Matthew Wilcox
2023-09-19 15:57 ` David Laight
2023-09-20 7:15 ` Greg Ungerer
2023-09-20 7:22 ` Greg Ungerer
2023-10-02 20:07 ` Matthew Wilcox
2023-10-03 14:14 ` Greg Ungerer
2023-10-03 20:07 ` Matthew Wilcox
2023-10-04 12:06 ` Greg Ungerer
2023-09-15 18:37 ` [PATCH 10/17] mips: " Matthew Wilcox (Oracle)
2023-09-15 18:37 ` [PATCH 11/17] powerpc: Implement arch_xor_unlock_is_negative_byte on 32-bit Matthew Wilcox (Oracle)
2023-09-15 18:37 ` [PATCH 12/17] riscv: Implement xor_unlock_is_negative_byte Matthew Wilcox (Oracle)
2023-09-15 18:37 ` [PATCH 13/17] s390: Implement arch_xor_unlock_is_negative_byte Matthew Wilcox (Oracle)
2023-09-15 18:37 ` [PATCH 14/17] mm: Delete checks for xor_unlock_is_negative_byte() Matthew Wilcox (Oracle)
2023-09-15 18:37 ` [PATCH 15/17] mm: Add folio_xor_flags_has_waiters() Matthew Wilcox (Oracle)
2023-09-15 18:37 ` [PATCH 16/17] mm: Make __end_folio_writeback() return void Matthew Wilcox (Oracle)
2023-09-15 18:37 ` [PATCH 17/17] mm: Use folio_xor_flags_has_waiters() in folio_end_writeback() Matthew Wilcox (Oracle)
2023-09-16 0:31 ` [PATCH 00/17] Add folio_end_read Linus Torvalds
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=cb763591-a697-ab74-171e-fcd7f4e70137@westnet.com.au \
--to=gregungerer@westnet.com.au \
--cc=linux-arch@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=npiggin@gmail.com \
--cc=torvalds@linux-foundation.org \
--cc=willy@infradead.org \
/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
all inboxes | Powered by JetHome®