Tags: SamsungDS/linux
Tags
nvme: hold the mm read lock when pinning. Signed-off-by: Joel Granados <[email protected]>
nvme/cdq: implement PRP list handling Replace kernel memory allocation with user space memory mapping for CDQ entries. Add comprehensive PRP (Physical Region Page) list setup to handle scatter-gather memory layouts with proper DMA mapping. Remove file descriptor based approach in favor of direct user memory access. Key changes: - Add nvme_cdq_alloc_from_usr() to pin and map user pages - Implement nvme_cdq_setup_prps() for multi-page PRP list creation - Remove anon_inode file descriptor mechanism - Update UAPI to accept user virtual address instead of returning fd - Add proper cleanup for PRP lists after command submission This enables direct user space access to CDQ memory while maintaining proper DMA coherency and memory management." Signed-off-by: Joel Granados <[email protected]>
nvme/cdq: Remove all code to traverse CDQ With the CDQ memory being mmaped into user space. The responsibility of making sense of that memory is now on user space. The kernel remains responsible of signaling an eventfd when it detects that a ONE_SHOT CDQ AEN. Interface is simplified as there is no need to define the number of entries; we can get away with just the total CDQ size in number of bytes. There is only need for the MOS and the CDS for CDQ creation, the rest is removed. We are left with six values at CDQ creation: size of the CDQ in bytes, eventfd for the TPT, the returned cdq identifier and the internal kernel file descriptor, CQS and MOS. Signed-off-by: Joel Granados <[email protected]>
nvme: Add AEN handler for CDQ tail pointer events Add a new "one shot" ASYNC type event that will be called in nvme_complete_async_event. Use the new "one shot" path to handle Controller Data Queue Tail Pointer events that arrive through AENs. For now we just print to the kernel log that an event has been received, The logic of what to do with the CDQ AEN should be added to nvme_cdq_aen_tpevent. Signed-off-by: Joel Granados <[email protected]>
nvme: use cdqp_mask instead of hardcoded 0x1 in phase bit toggle Replace hardcoded 0x1 with cdqp_mask for phase bit toggling in nvme_cdq_next() to support variable phase bit widths. Signed-off-by: Joel Granados <[email protected]>
nvme/cdq: Add a free_cdqs to controller init Signed-off-by: Joel Granados <[email protected]>
nvme/cdq: nvme_pci_cdq_travers needs to return ssize_t in order to be… … used for reading Signed-off-by: Joel Granados <[email protected]>
Enable build system on macOS hosts This patch allows for building the Linux kernel for arm64 in macOS with LLVM. macOS does not provide certain headers that are available in a GNU/Linux distribution with development headers installed, usually provided by the GNU C Library (glibc) and/or other projects. These missing headers are needed as build dependencies. To address this, users need to provide these headers manually. To assist with provisioning and setting up the environment, the Bee Headers Project [1][2][3] provides the necessary headers, along with a pkg-config file to locate the include directory and an initialization script to configure the environment. However, this is optional and users can choose to set up their own environments and manually provide the required headers. In that case, the project can be used as a reference. Here’s a quick overview of the setup process using Bee Headers: Set up a case sensitive volume to fetch Linux and build: diskutil apfs addVolume /dev/disk<N> "Case-sensitive APFS" linux Install dependencies: brew install coreutils findutils gnu-sed gnu-tar grep llvm make pkg-config brew tap bee-headers/bee-headers brew install bee-headers/bee-headers/bee-headers Initialize the environment with `bee-init` and run it in each new shell: source bee-init Start build: make LLVM=1 defconfig make LLVM=1 -j$(nproc) For more details and manual steps, refer to the README [4] of the Bee Headers project. [1] Project: https://github.com/bee-headers [2] Headers repository: https://github.com/bee-headers/headers.git [3] Homebrew Tap formula: https://github.com/bee-headers/homebrew-bee-headers.git [4] https://github.com/bee-headers/homebrew-bee-headers/blob/main/README.md To: Lucas De Marchi <[email protected]> To: Thomas Hellström <[email protected]> To: Rodrigo Vivi <[email protected]> To: Maarten Lankhorst <[email protected]> To: Maxime Ripard <[email protected]> To: Thomas Zimmermann <[email protected]> To: David Airlie <[email protected]> To: Simona Vetter <[email protected]> To: Nathan Chancellor <[email protected]> To: Nick Desaulniers <[email protected]> To: Bill Wendling <[email protected]> To: Justin Stitt <[email protected]> Cc: Masahiro Yamada <[email protected]> Cc: [email protected] Cc: [email protected] Cc: [email protected] Cc: [email protected] Cc: Barry Song <[email protected]> Cc: Finn Behrens <[email protected]> Cc: Daniel Gomez (Samsung) <[email protected]> Cc: [email protected] <[email protected]> Cc: Nick Desaulniers <[email protected]> Cc: Klaus Jensen <[email protected]> Cc: Jeff Xie <[email protected]> Signed-off-by: Daniel Gomez <[email protected]> --- Changes in v3: - Update drm/xe patch to replace program_invocation_short_name with argv[0] instead of using getprogname + ifdef as suggested by Masahiro. - Patch merged: "[PATCH v2 1/8] scripts: subarch.include: fix SUBARCH on macOS hosts". - "file2alias: fix uuid_t definitions for macos" patch is dropped. User requires to set up this in the build environment with something like: export HOSTCFLAGS="-D_UUID_T -D__GETHOSTUUID_H" - Drop documentation patch. Environment setup and headers should now be provided by the user. The project Bee Headers can be used to help with the steps and documentation. - HOSTCFLAGS should be used to provide the missing headers as well as the above defines. Example using Bee Headers: export HOSTCFLAGS="$(pkg-config --cflags bee-headers) -D_UUID_T -D__GETHOSTUUID_H" - PATH needs to have all tools the kernel build system depends on. Something like this: PATH="#{HOMEBREW_PREFIX}/opt/coreutils/libexec/gnubin:$PATH" PATH="#{HOMEBREW_PREFIX}/opt/findutils/libexec/gnubin:$PATH" PATH="#{HOMEBREW_PREFIX}/opt/gawk/libexec/gnubin:$PATH" PATH="#{HOMEBREW_PREFIX}/opt/gnu-sed/libexec/gnubin:$PATH" PATH="#{HOMEBREW_PREFIX}/opt/gnu-tar/libexec/gnubin:$PATH" PATH="#{HOMEBREW_PREFIX}/opt/grep/libexec/gnubin:$PATH" PATH="#{HOMEBREW_PREFIX}/opt/make/libexec/gnubin:$PATH" PATH="#{HOMEBREW_PREFIX}/opt/llvm/bin:$PATH" - Drop patches below as they've been replaced by a new 2nd version [8]: selinux: move genheaders to security/selinux/ selinux: do not include <linux/*.h> headers from host programs [8] Subject: [PATCH v2 1/2] selinux: do not include <linux/*.h> headers from host programs https://lore.kernel.org/all/[email protected]/#t Note: This has been specified as dependency with b4 and message-id in the cover letter. - Link to v2: https://lore.kernel.org/r/[email protected] Changes in v2: - Add documentation and set this 'feature' as experimental. - Update cover letter. - Drop unnecessary changes. Patches removed: - kbuild: add header_install dependency to scripts - include: add endian.h support - include: add elf.h support - Update Makefiles to find Bee Headers with pkg-config. - Update file2alias to solve uuid_t conflicts inside Makefile as suggested by Nicolas Schier. - Adapt xe_gen_wa_oob to solve getprogname()/ program_invocation_short_name in runtime. as suggested by Lucas De Marchi. - Remove linux/version.h in accessibility/speakup as suggested by Masahiro Yamada. - Replace selinux patches with new Masahiro Yamada's patches: Message-id: [email protected] Link: https://lore.kernel.org/all/[email protected]/ - Replace tty/vt with new Masahiro Yamada's patch: Message-id: [email protected] Link: https://lore.kernel.org/all/[email protected]/ (Already merged in the linux-next tag used) - Replace scripts/kallsyms patch with Masahiro Yamada's patch: Message-id: [email protected] Link: https://lore.kernel.org/all/[email protected]/ (Already merged in the linux-next tag used) - Link to v1: https://lore.kernel.org/r/[email protected] --- Daniel Gomez (1): drm/xe: xe_gen_wa_oob: replace program_invocation_short_name drivers/gpu/drm/xe/xe_gen_wa_oob.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) --- base-commit: ef545bc03a65438cabe87beb1b9a15b0ffcb6ace change-id: 20240807-macos-build-support-9ca0d77adb17 prerequisite-message-id: <[email protected]> prerequisite-patch-id: 5d49a803cc75a57174d16745222d1602809aeb96 prerequisite-patch-id: b2da334443fa81626d742053ca5005074e9e1355 Best regards,
[RFC] blktrace: add i/o alignment information This patch introduces support for tracing maximum I/O alignment boundaries in terms of Logical Block Addressing (LBA) and size within blktrace for issued I/Os. Note: the term alignment has been previously discussed here [1], where it was suggested to use "largest block size granularity". In this RFC, alignment term is kept, though further suggestions for an appropriate term are welcomed. [1] https://lore.kernel.org/all/[email protected] Tracing alignment information is important for high-capacity and QLC SSDs with Indirection Units greater than 4 KiB. These devices are still 4 KiB in Logical Block Size (LBS) but because they work at higher IUs, unaligned writes to the IU boundaries can imply in a read-modify-write (RMW). More information about the motivation can be found in the first LBS patch series [2]. [2] Subject: [RFC 00/23] Enable block size > page size in XFS https://lore.kernel.org/lkml/[email protected]/ Additionally, Dan Helmick's talk [3] provides further context on the importance of I/O granularity and alignment, specifically in the context of NVMe. [3] SDC2022 – Optimal Performance Parameters for NVMe SSDs The graph below is a representation of the device IU vs what is considered here the I/O block alignment. |--- IU Boundaries ----| |-PS-| a) [====][====][====][====][····][····][····]-- | | b) [····][====][====][====][====][····][····]-- | | c) [····][····][====][====][····][····][····]-- | | LBA 0 4 Key: [====] = I/O Block [····] = Memory in Page Size (PS) chunks PS: System base Page Size (e.g. x86_64 is 4 KiB) a) I/O matches IU boundaries (LBA and block size). I/O is aligned to IU boundaries. b) The size of the I/O matches the IU size but the I/O is not aligned to the IU boundaries. I/O is unaligned. c) I/O does not match in either size or LBA. I/O is unaligned. This patch enables blktrace to report alignment details via new alignment parameter, which will be calculated during I/O tracing. For the example above, the following values would be reported: a) |16384|: I/O aligned to 16 KiB boundaries. b) |4096|: I/O aligned to 4 KiB boundaries. c) |8192|: I/O aligned to 8 KiB boundaries. Finally, this patch requires some minor changes [4] in the blktrace tool. If this moves forward, the changes will be submitted accordingly. [4] https://github.com/dkruces/blktrace/tree/algn To: Jens Axboe <[email protected]> To: Steven Rostedt <[email protected]> To: Masami Hiramatsu <[email protected]> To: Mathieu Desnoyers <[email protected]> Cc: [email protected] Cc: [email protected] Cc: [email protected] Cc: <[email protected]> Cc: John Garry <[email protected]> Cc: Dave Chinner <[email protected]> Cc: Luis Chamberlain <[email protected]> Cc: Pankaj Raghav <[email protected]> Cc: Dan Helmick <[email protected]> Cc: Daniel Gomez <[email protected]> Signed-off-by: Daniel Gomez <[email protected]> --- Daniel Gomez (1): blktrace: add i/o alignment information include/linux/blktrace_api.h | 2 ++ include/uapi/linux/blktrace_api.h | 1 + kernel/trace/blktrace.c | 38 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 41 insertions(+) --- base-commit: 4f3e012 change-id: 20240916-blktrace-algn-a11320353182 Best regards,
PreviousNext