Re: [PATCH v6 1/2] tty: hvc: pass DMA capable memory to put_chars()
From: Xianting TIan <hidden>
Date: 2021-08-13 16:07:09
Also in:
lkml, oe-kbuild-all
在 2021/8/13 下午1:53, Jiri Slaby 写道:
Hi, On 12. 08. 21, 14:26, kernel test robot wrote:quoted
quoted
quoted
drivers/tty/hvc/hvc_console.c:190:26: warning: variable 'hp' is uninitialized when used here [-Wuninitialized]spin_unlock_irqrestore(&hp->c_lock, flags); ^~ drivers/tty/hvc/hvc_console.c:149:23: note: initialize the variable 'hp' to silence this warning struct hvc_struct *hp; ^ = NULLSo you clearly didn't test your change as it would crash quite instantly. I wonder, where do you intend to get hp from in the console::print() hook? thanks,
According to analysis, this issue may can be solved just by adjust the alignment to L1_CACHE_BYTES: #define __ALIGNED__ __attribute__((__aligned__(L1_CACHE_BYTES))) Our analysis as below, the original __ALIGNED__ is sizeof(long) which is 8 for 64bit cpu. char c[N_OUTBUF] __ALIGNED__; //c[16] __ALIGNED__; For 4K page, c[16] may cross the page when alignemnt is 8. In the case the physical address of c[16] is noncontiguous. |------8----|..........|-----8-----| PAGE_1 ..........................|-----------16----------| c[16] .........................................|-----8-----|.............|-----8-----| PAGE_2 But when the alignment is L1_CACHE_BYTES(eg, 64), or at least N_OUTBUF(16), we have no dma issue as c[16] won't cross the page, the physical address of c[16] is contiguous. |--------64--------|.........|--------64---------| PAGE_3 ..................................|--c[16]--| Could you help comments this? thanks