Commit 738d5fab authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'parisc-5.5-1' of git://git.kernel.org/pub/scm/linux/kernel/git/deller/parisc-linux

Pull parisc updates from Helge Deller:
 "Just trivial small updates: An assembler register optimization in the
  inlined networking checksum functions, a compiler warning fix and
  don't unneccesary print a runtime warning on machines which wouldn't
  be affected anyway"

* 'parisc-5.5-1' of git://git.kernel.org/pub/scm/linux/kernel/git/deller/parisc-linux:
  parisc: Avoid spurious inequivalent alias kernel error messages
  kexec: Fix pointer-to-int-cast warnings
  parisc: Do not hardcode registers in checksum functions
parents 7794b1d4 e9c837c6
...@@ -42,31 +42,32 @@ extern __wsum csum_partial_copy_from_user(const void __user *src, ...@@ -42,31 +42,32 @@ extern __wsum csum_partial_copy_from_user(const void __user *src,
static inline __sum16 ip_fast_csum(const void *iph, unsigned int ihl) static inline __sum16 ip_fast_csum(const void *iph, unsigned int ihl)
{ {
unsigned int sum; unsigned int sum;
unsigned long t0, t1, t2;
__asm__ __volatile__ ( __asm__ __volatile__ (
" ldws,ma 4(%1), %0\n" " ldws,ma 4(%1), %0\n"
" addib,<= -4, %2, 2f\n" " addib,<= -4, %2, 2f\n"
"\n" "\n"
" ldws 4(%1), %%r20\n" " ldws 4(%1), %4\n"
" ldws 8(%1), %%r21\n" " ldws 8(%1), %5\n"
" add %0, %%r20, %0\n" " add %0, %4, %0\n"
" ldws,ma 12(%1), %%r19\n" " ldws,ma 12(%1), %3\n"
" addc %0, %%r21, %0\n" " addc %0, %5, %0\n"
" addc %0, %%r19, %0\n" " addc %0, %3, %0\n"
"1: ldws,ma 4(%1), %%r19\n" "1: ldws,ma 4(%1), %3\n"
" addib,< 0, %2, 1b\n" " addib,< 0, %2, 1b\n"
" addc %0, %%r19, %0\n" " addc %0, %3, %0\n"
"\n" "\n"
" extru %0, 31, 16, %%r20\n" " extru %0, 31, 16, %4\n"
" extru %0, 15, 16, %%r21\n" " extru %0, 15, 16, %5\n"
" addc %%r20, %%r21, %0\n" " addc %4, %5, %0\n"
" extru %0, 15, 16, %%r21\n" " extru %0, 15, 16, %5\n"
" add %0, %%r21, %0\n" " add %0, %5, %0\n"
" subi -1, %0, %0\n" " subi -1, %0, %0\n"
"2:\n" "2:\n"
: "=r" (sum), "=r" (iph), "=r" (ihl) : "=r" (sum), "=r" (iph), "=r" (ihl), "=r" (t0), "=r" (t1), "=r" (t2)
: "1" (iph), "2" (ihl) : "1" (iph), "2" (ihl)
: "r19", "r20", "r21", "memory"); : "memory");
return (__force __sum16)sum; return (__force __sum16)sum;
} }
...@@ -126,6 +127,10 @@ static __inline__ __sum16 csum_ipv6_magic(const struct in6_addr *saddr, ...@@ -126,6 +127,10 @@ static __inline__ __sum16 csum_ipv6_magic(const struct in6_addr *saddr,
__u32 len, __u8 proto, __u32 len, __u8 proto,
__wsum sum) __wsum sum)
{ {
unsigned long t0, t1, t2, t3;
len += proto; /* add 16-bit proto + len */
__asm__ __volatile__ ( __asm__ __volatile__ (
#if BITS_PER_LONG > 32 #if BITS_PER_LONG > 32
...@@ -136,20 +141,19 @@ static __inline__ __sum16 csum_ipv6_magic(const struct in6_addr *saddr, ...@@ -136,20 +141,19 @@ static __inline__ __sum16 csum_ipv6_magic(const struct in6_addr *saddr,
** Try to keep 4 registers with "live" values ahead of the ALU. ** Try to keep 4 registers with "live" values ahead of the ALU.
*/ */
" ldd,ma 8(%1), %%r19\n" /* get 1st saddr word */ " ldd,ma 8(%1), %4\n" /* get 1st saddr word */
" ldd,ma 8(%2), %%r20\n" /* get 1st daddr word */ " ldd,ma 8(%2), %5\n" /* get 1st daddr word */
" add %8, %3, %3\n"/* add 16-bit proto + len */ " add %4, %0, %0\n"
" add %%r19, %0, %0\n" " ldd,ma 8(%1), %6\n" /* 2nd saddr */
" ldd,ma 8(%1), %%r21\n" /* 2cd saddr */ " ldd,ma 8(%2), %7\n" /* 2nd daddr */
" ldd,ma 8(%2), %%r22\n" /* 2cd daddr */ " add,dc %5, %0, %0\n"
" add,dc %%r20, %0, %0\n" " add,dc %6, %0, %0\n"
" add,dc %%r21, %0, %0\n" " add,dc %7, %0, %0\n"
" add,dc %%r22, %0, %0\n"
" add,dc %3, %0, %0\n" /* fold in proto+len | carry bit */ " add,dc %3, %0, %0\n" /* fold in proto+len | carry bit */
" extrd,u %0, 31, 32, %%r19\n" /* copy upper half down */ " extrd,u %0, 31, 32, %4\n"/* copy upper half down */
" depdi 0, 31, 32, %0\n" /* clear upper half */ " depdi 0, 31, 32, %0\n"/* clear upper half */
" add %%r19, %0, %0\n" /* fold into 32-bits */ " add %4, %0, %0\n" /* fold into 32-bits */
" addc 0, %0, %0\n" /* add carry */ " addc 0, %0, %0\n" /* add carry */
#else #else
...@@ -158,30 +162,29 @@ static __inline__ __sum16 csum_ipv6_magic(const struct in6_addr *saddr, ...@@ -158,30 +162,29 @@ static __inline__ __sum16 csum_ipv6_magic(const struct in6_addr *saddr,
** Insn stream is serialized on the carry bit here too. ** Insn stream is serialized on the carry bit here too.
** result from the previous operation (eg r0 + x) ** result from the previous operation (eg r0 + x)
*/ */
" ldw,ma 4(%1), %4\n" /* get 1st saddr word */
" ldw,ma 4(%1), %%r19\n" /* get 1st saddr word */ " ldw,ma 4(%2), %5\n" /* get 1st daddr word */
" ldw,ma 4(%2), %%r20\n" /* get 1st daddr word */ " add %4, %0, %0\n"
" add %8, %3, %3\n" /* add 16-bit proto + len */ " ldw,ma 4(%1), %6\n" /* 2nd saddr */
" add %%r19, %0, %0\n" " addc %5, %0, %0\n"
" ldw,ma 4(%1), %%r21\n" /* 2cd saddr */ " ldw,ma 4(%2), %7\n" /* 2nd daddr */
" addc %%r20, %0, %0\n" " addc %6, %0, %0\n"
" ldw,ma 4(%2), %%r22\n" /* 2cd daddr */ " ldw,ma 4(%1), %4\n" /* 3rd saddr */
" addc %%r21, %0, %0\n" " addc %7, %0, %0\n"
" ldw,ma 4(%1), %%r19\n" /* 3rd saddr */ " ldw,ma 4(%2), %5\n" /* 3rd daddr */
" addc %%r22, %0, %0\n" " addc %4, %0, %0\n"
" ldw,ma 4(%2), %%r20\n" /* 3rd daddr */ " ldw,ma 4(%1), %6\n" /* 4th saddr */
" addc %%r19, %0, %0\n" " addc %5, %0, %0\n"
" ldw,ma 4(%1), %%r21\n" /* 4th saddr */ " ldw,ma 4(%2), %7\n" /* 4th daddr */
" addc %%r20, %0, %0\n" " addc %6, %0, %0\n"
" ldw,ma 4(%2), %%r22\n" /* 4th daddr */ " addc %7, %0, %0\n"
" addc %%r21, %0, %0\n"
" addc %%r22, %0, %0\n"
" addc %3, %0, %0\n" /* fold in proto+len, catch carry */ " addc %3, %0, %0\n" /* fold in proto+len, catch carry */
#endif #endif
: "=r" (sum), "=r" (saddr), "=r" (daddr), "=r" (len) : "=r" (sum), "=r" (saddr), "=r" (daddr), "=r" (len),
: "0" (sum), "1" (saddr), "2" (daddr), "3" (len), "r" (proto) "=r" (t0), "=r" (t1), "=r" (t2), "=r" (t3)
: "r19", "r20", "r21", "r22", "memory"); : "0" (sum), "1" (saddr), "2" (daddr), "3" (len)
: "memory");
return csum_fold(sum); return csum_fold(sum);
} }
......
...@@ -365,7 +365,7 @@ void flush_dcache_page(struct page *page) ...@@ -365,7 +365,7 @@ void flush_dcache_page(struct page *page)
if (old_addr == 0 || (old_addr & (SHM_COLOUR - 1)) if (old_addr == 0 || (old_addr & (SHM_COLOUR - 1))
!= (addr & (SHM_COLOUR - 1))) { != (addr & (SHM_COLOUR - 1))) {
__flush_cache_page(mpnt, addr, page_to_phys(page)); __flush_cache_page(mpnt, addr, page_to_phys(page));
if (old_addr) if (parisc_requires_coherency() && old_addr)
printk(KERN_ERR "INEQUIVALENT ALIASES 0x%lx and 0x%lx in file %pD\n", old_addr, addr, mpnt->vm_file); printk(KERN_ERR "INEQUIVALENT ALIASES 0x%lx and 0x%lx in file %pD\n", old_addr, addr, mpnt->vm_file);
old_addr = addr; old_addr = addr;
} }
......
...@@ -1304,7 +1304,7 @@ int crash_prepare_elf64_headers(struct crash_mem *mem, int kernel_map, ...@@ -1304,7 +1304,7 @@ int crash_prepare_elf64_headers(struct crash_mem *mem, int kernel_map,
if (kernel_map) { if (kernel_map) {
phdr->p_type = PT_LOAD; phdr->p_type = PT_LOAD;
phdr->p_flags = PF_R|PF_W|PF_X; phdr->p_flags = PF_R|PF_W|PF_X;
phdr->p_vaddr = (Elf64_Addr)_text; phdr->p_vaddr = (unsigned long) _text;
phdr->p_filesz = phdr->p_memsz = _end - _text; phdr->p_filesz = phdr->p_memsz = _end - _text;
phdr->p_offset = phdr->p_paddr = __pa_symbol(_text); phdr->p_offset = phdr->p_paddr = __pa_symbol(_text);
ehdr->e_phnum++; ehdr->e_phnum++;
...@@ -1321,7 +1321,7 @@ int crash_prepare_elf64_headers(struct crash_mem *mem, int kernel_map, ...@@ -1321,7 +1321,7 @@ int crash_prepare_elf64_headers(struct crash_mem *mem, int kernel_map,
phdr->p_offset = mstart; phdr->p_offset = mstart;
phdr->p_paddr = mstart; phdr->p_paddr = mstart;
phdr->p_vaddr = (unsigned long long) __va(mstart); phdr->p_vaddr = (unsigned long) __va(mstart);
phdr->p_filesz = phdr->p_memsz = mend - mstart + 1; phdr->p_filesz = phdr->p_memsz = mend - mstart + 1;
phdr->p_align = 0; phdr->p_align = 0;
ehdr->e_phnum++; ehdr->e_phnum++;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment