lkml.org 
[lkml]   [2022]   [Jan]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
SubjectRe: [PATCH v2] Fixed: Misaligned memory access. Fixed pointer comparison.
From
Date
On 23 Jan 2022, at 03:45, Michael T. Kloos <michael@michaelkloos.com> wrote:
>
> Rewrote the riscv memmove() assembly implementation. The
> previous implementation did not check memory alignment and it
> compared 2 pointers with a signed comparison. The misaligned
> memory access would cause the kernel to crash on systems that
> did not emulate it in firmware and did not support it in hardware.
> Firmware emulation is slow and may not exist. Additionally,
> hardware support may not exist and would likely still run slower
> than aligned accesses even if it did. The RISC-V spec does not
> guarantee that support for misaligned memory accesses will exist.
> It should not be depended on.
>
> This patch now checks for the maximum granularity of co-alignment
> between the pointers and copies them with that, using single-byte
> copy for any unaligned data at their terminations. It also now uses
> unsigned comparison for the pointers.
>
> Added half-word and, if built for 64-bit, double-word copy.
>
> Migrated to the newer assembler annotations from the now deprecated
> ones.
>
> Commit Message Edited on Jan 22 2022: Fixed some typos.
>
> [v2]
>
> Per kernel test robot, I have fixed the build under clang. This
> was broken due to a difference between gcc and clang, clang requiring
> explict zero offsets the jalr instruction. gcc allowed them to be
> omitted if zero.

Unlike LLVM, GCC does not have an assembler, that’s binutils’s GNU as.

Jess

\
 
 \ /
  Last update: 2022-01-23 16:45    [W:0.796 / U:0.172 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site