Re: [RFC] net: mvneta: 64bit platform support
On Wednesday 30 March 2016 21:45:35 Jisheng Zhang wrote: > oh, missing some code: > #ifdef CONFIG_64BIT > data = ((u64)rx_desc->reserved5 << 32) | rx_desc->buf_cookie; > #else > data = (void*)rx_desc->buf_cookie; > #endif > > Please use the upper_32_bits() and lower_32_bits() macros to split up the pointer into two halves, and use the 64-bit version of the code above unconditionally, that should both work on all architectures without introducing any overhead. Arnd
Re: [RFC] net: mvneta: 64bit platform support
On Wed, 30 Mar 2016 21:37:00 +0800 Jisheng Zhang wrote: > Hi all, > > Obviously, current mvneta driver can't work on 64bit platforms. For one thing > the BM feature should be explicitly disabled, I just sent out one patch for > this purpose. > > What's more, the buf_cookie in mvneta_rx_desc need to be carefully considered. > The driver use the buf_cookie(u32 type) to store the buffer virtual address, > obviously it can't store the virtual address on 64bit platforms. I have two > solutions: > > solution A: let one reserved type in current mvneta_rx_desc, e.g reserved5 > to store the high 32bit virt address, and hack code as the following: > #ifdef CONFIG_64BIT > rx_desc->reserved5 = high32(data); > #endif oh, missing some code: #ifdef CONFIG_64BIT data = ((u64)rx_desc->reserved5 << 32) | rx_desc->buf_cookie; #else data = (void*)rx_desc->buf_cookie; #endif > > solution B: add one member void **buf_virt_ptrs in mvneta_rx_queue, and point > all buf_cookie usage to the according buf_virt_ptrs[i] > > > Is there any elegant solutions? > > Thanks, > Jisheng > > ___ > linux-arm-kernel mailing list > linux-arm-ker...@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
[RFC] net: mvneta: 64bit platform support
Hi all, Obviously, current mvneta driver can't work on 64bit platforms. For one thing the BM feature should be explicitly disabled, I just sent out one patch for this purpose. What's more, the buf_cookie in mvneta_rx_desc need to be carefully considered. The driver use the buf_cookie(u32 type) to store the buffer virtual address, obviously it can't store the virtual address on 64bit platforms. I have two solutions: solution A: let one reserved type in current mvneta_rx_desc, e.g reserved5 to store the high 32bit virt address, and hack code as the following: #ifdef CONFIG_64BIT rx_desc->reserved5 = high32(data); #endif solution B: add one member void **buf_virt_ptrs in mvneta_rx_queue, and point all buf_cookie usage to the according buf_virt_ptrs[i] Is there any elegant solutions? Thanks, Jisheng