Skip to content

Commit 92ce4c3

Browse files
Matthew Wilcoxtorvalds
Matthew Wilcox
authored andcommitted
alpha: add support for memset16
Alpha already had an optimised fill-memory-with-16-bit-quantity assembler routine called memsetw(). It has a slightly different calling convention from memset16() in that it takes a byte count, not a count of words. That's the same convention used by ARM's __memset routines, so rename Alpha's routine to match and add a memset16() wrapper around it. Then convert Alpha's scr_memsetw() to call memset16() instead of memsetw(). Link: http://lkml.kernel.org/r/20170720184539.31609-6-willy@infradead.org Signed-off-by: Matthew Wilcox <mawilcox@microsoft.com> Cc: Richard Henderson <rth@twiddle.net> Cc: Ivan Kokshaysky <ink@jurassic.park.msu.ru> Cc: Matt Turner <mattst88@gmail.com> Cc: "H. Peter Anvin" <hpa@zytor.com> Cc: "James E.J. Bottomley" <jejb@linux.vnet.ibm.com> Cc: "Martin K. Petersen" <martin.petersen@oracle.com> Cc: David Miller <davem@davemloft.net> Cc: Ingo Molnar <mingo@elte.hu> Cc: Michael Ellerman <mpe@ellerman.id.au> Cc: Minchan Kim <minchan@kernel.org> Cc: Ralf Baechle <ralf@linux-mips.org> Cc: Russell King <rmk+kernel@armlinux.org.uk> Cc: Sam Ravnborg <sam@ravnborg.org> Cc: Sergey Senozhatsky <sergey.senozhatsky@gmail.com> Cc: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
1 parent fd1d362 commit 92ce4c3

File tree

3 files changed

+14
-13
lines changed

3 files changed

+14
-13
lines changed

arch/alpha/include/asm/string.h

+8-7
Original file line numberDiff line numberDiff line change
@@ -65,13 +65,14 @@ extern void * memchr(const void *, int, size_t);
6565
aligned values. The DEST and COUNT parameters must be even for
6666
correct operation. */
6767

68-
#define __HAVE_ARCH_MEMSETW
69-
extern void * __memsetw(void *dest, unsigned short, size_t count);
70-
71-
#define memsetw(s, c, n) \
72-
(__builtin_constant_p(c) \
73-
? __constant_c_memset((s),0x0001000100010001UL*(unsigned short)(c),(n)) \
74-
: __memsetw((s),(c),(n)))
68+
#define __HAVE_ARCH_MEMSET16
69+
extern void * __memset16(void *dest, unsigned short, size_t count);
70+
static inline void *memset16(uint16_t *p, uint16_t v, size_t n)
71+
{
72+
if (__builtin_constant_p(v))
73+
return __constant_c_memset(p, 0x0001000100010001UL * v, n * 2);
74+
return __memset16(p, v, n * 2);
75+
}
7576

7677
#endif /* __KERNEL__ */
7778

arch/alpha/include/asm/vga.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ static inline void scr_memsetw(u16 *s, u16 c, unsigned int count)
3434
if (__is_ioaddr(s))
3535
memsetw_io((u16 __iomem *) s, c, count);
3636
else
37-
memsetw(s, c, count);
37+
memset16(s, c, count / 2);
3838
}
3939

4040
/* Do not trust that the usage will be correct; analyze the arguments. */

arch/alpha/lib/memset.S

+5-5
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
.globl memset
2121
.globl __memset
2222
.globl ___memset
23-
.globl __memsetw
23+
.globl __memset16
2424
.globl __constant_c_memset
2525

2626
.ent ___memset
@@ -110,8 +110,8 @@ EXPORT_SYMBOL(___memset)
110110
EXPORT_SYMBOL(__constant_c_memset)
111111

112112
.align 5
113-
.ent __memsetw
114-
__memsetw:
113+
.ent __memset16
114+
__memset16:
115115
.prologue 0
116116

117117
inswl $17,0,$1 /* E0 */
@@ -123,8 +123,8 @@ __memsetw:
123123
or $1,$4,$17 /* E0 */
124124
br __constant_c_memset /* .. E1 */
125125

126-
.end __memsetw
127-
EXPORT_SYMBOL(__memsetw)
126+
.end __memset16
127+
EXPORT_SYMBOL(__memset16)
128128

129129
memset = ___memset
130130
__memset = ___memset

0 commit comments

Comments
 (0)