spl: fit: Allocate buffers aligned to cache line size
authorStefan Herbrechtsmeier <stefan.herbrechtsmeier@weidmueller.com>
Tue, 14 Jun 2022 14:12:00 +0000 (16:12 +0200)
committerTom Rini <trini@konsulko.com>
Wed, 14 Sep 2022 19:23:03 +0000 (15:23 -0400)
Allocate memory for buffers at a cache-line boundary to avoid
misaligned buffer address for subsequent reads. This avoids an
additional sector-based memory copy in the fat file system driver:

FAT: Misaligned buffer address (...)

Signed-off-by: Stefan Herbrechtsmeier <stefan.herbrechtsmeier@weidmueller.com>
common/spl/spl_fit.c

index a35be52..c1ed31e 100644 (file)
@@ -10,7 +10,7 @@
 #include <gzip.h>
 #include <image.h>
 #include <log.h>
-#include <malloc.h>
+#include <memalign.h>
 #include <mapmem.h>
 #include <spl.h>
 #include <sysinfo.h>
@@ -429,7 +429,9 @@ static int spl_fit_append_fdt(struct spl_image_info *spl_image,
                                 * depending on how the overlay is stored, so
                                 * don't fail yet if the allocation failed.
                                 */
-                               tmpbuffer = malloc(CONFIG_SPL_LOAD_FIT_APPLY_OVERLAY_BUF_SZ);
+                               size_t size = CONFIG_SPL_LOAD_FIT_APPLY_OVERLAY_BUF_SZ;
+
+                               tmpbuffer = malloc_cache_aligned(size);
                                if (!tmpbuffer)
                                        debug("%s: unable to allocate space for overlays\n",
                                              __func__);
@@ -537,7 +539,7 @@ static void *spl_get_fit_load_buffer(size_t size)
 {
        void *buf;
 
-       buf = malloc(size);
+       buf = malloc_cache_aligned(size);
        if (!buf) {
                pr_err("Could not get FIT buffer of %lu bytes\n", (ulong)size);
                pr_err("\tcheck CONFIG_SYS_SPL_MALLOC_SIZE\n");