nvme: Do not allocate 8kB buffer on stack
Calling 'nvme scan' followed by 'nvme detail' crashes U-Boot on Turris
Omnia with the following error:
undefined instruction
pc : [<
0a000000>] lr : [<
7ff80bfc>]
reloc pc : [<
8a8c0000>] lr : [<
00840bfc>]
sp :
7fb2b908 ip :
0000002a fp :
02000000
r10:
04000000 r9 :
7fb2fed0 r8 :
e1000000
r7 :
0c000000 r6 :
03000000 r5 :
06000000 r4 :
01000000
r3 :
7fb30928 r2 :
7fb30928 r1 :
00000000 r0 :
00000000
Flags: nZCv IRQs off FIQs off Mode SVC_32
Code:
0f0fb4f0 0f0fb4f0 0f0fb4f0 0f0fb4f0 (
f0f04b0f)
Resetting CPU ...
This happens when nvme_print_info() tries to return to the caller. It
looks like this error is caused by trying to allocate 8 KiB of memory
on the stack by the two uses of ALLOC_CACHE_ALIGN_BUFFER().
Use malloc_cache_aligned() to allocate this memory dynamically instead.
This fixes 'nvme detail' on Turris Omnia.
Note that similar change was applied to file drivers/nvme/nvme.c in past by
commit
2f83481dff9c ("nvme: use page-aligned buffer for identify command").
Signed-off-by: Pali Rohár <pali@kernel.org>
Signed-off-by: Marek Behún <marek.behun@nic.cz>