기존 이솝 임베디드 포럼의 지식인 서비스가 게시판 형태로 변경되었습니다.
와이파이로 고용량 데이터(대략 1mb이상) 전송시 다음과 같이 에러 메세지가 발생합니다.
[ 640.247596] ------------[ cut here ]------------
[ 640.252289] WARNING: at drivers/net/wireless/ath/ath6kl/sdio.c:489 ath6kl_sdio_irq_handler+0x6c/0x74 [ath6kl_sdio]()
[ 640.262935] Modules linked in: ath6kl_sdio
[ 640.267274] Backtrace:
[ 640.269848] [<c00130ac>] (dump_backtrace+0x0/0x10c) from [<c05a433c>] (dump_stack+0x18/0x1c)
[ 640.278407] r6:000001e9 r5:bf0014b0 r4:00000000 r3:c0813250
[ 640.284394] [<c05a4324>] (dump_stack+0x0/0x1c) from [<c00327dc>] (warn_slowpath_common+0x54/0x6c)
[ 640.293387] [<c0032788>] (warn_slowpath_common+0x0/0x6c) from [<c0032818>] (warn_slowpath_null+0x24/0x2c)
[ 640.303143] r8:00000001 r7:de2f0800 r6:ddc4c000 r5:00000001 r4:fffffff4
[ 640.310023] r3:00000009
[ 640.312901] [<c00327f4>] (warn_slowpath_null+0x0/0x2c) from [<bf0014b0>] (ath6kl_sdio_irq_handler+0x6c/0x74 [ath6kl_sdio])
[ 640.324197] [<bf001444>] (ath6kl_sdio_irq_handler+0x0/0x74 [ath6kl_sdio]) from [<c03e5014>] (sdio_irq_thread+0x198/0x3a4)
[ 640.335351] r6:ddfd4000 r5:00000000 r4:de21c400 r3:bf001444
[ 640.341481] [<c03e4e7c>] (sdio_irq_thread+0x0/0x3a4) from [<c0052500>] (kthread+0x90/0x9c)
[ 640.350070] [<c0052470>] (kthread+0x0/0x9c) from [<c0036674>] (do_exit+0x0/0x7c4)
[ 640.357774] r6:c0036674 r5:c0052470 r4:de10dbcc
[ 640.362734] Board Information: SMDK HW revision: 0, CPU EXYNOS5250 Rev1.0
[ 640.369612] ---[ end trace 488db3a0e5d24154 ]---
[ 640.375696] ath6kl: MsgPend, invalid endpoint in look-ahead: 201
[ 640.381884] ath6kl: failed to get pending recv messages: -12
이메세지가 반복적으로 발생합니다.
간단한 인터넷에서는 이런 메세지가 발생하지 않는데 youtube등의 영상 스트림이나
파일 전송시에는 이와 같이 문제가 발생하는데요...
혹시 저만 그런건가 해서 여쭤봅니다.
아직 실력이 미약해서 무선랜 안정화를 잡지 못하고 있어욤~
#define ATH6KL_HTC_ALIGN_BYTES 3 // 이 부분은 원래대로 3으로 두고
reserved = roundup((2 * L1_CACHE_BYTES) + ATH6KL_DATA_OFFSET +
sizeof(struct htc_packet) + ATH6KL_HTC_ALIGN_BYTES, 3);
dev->needed_headroom += roundup(sizeof(struct ath6kl_llc_snap_hdr) + sizeof(struct wmi_data_hdr) + HTC_HDR_LENGTH + WMI_MAX_TX_META_SZ + ATH6KL_HTC_ALIGN_BYTES, 3);
이 부분들도 4대신 3으로 넣어주면 10분정도 정상적으로 데이터를 주고 받다가
dw_mmc dw_mmc.1: data CRC error 에러를 필두로
[ 1105.375492] ath6kl: payload len 44135 exceeds max htc : 4090 ! [ 1105.382146] ath6kl: failed to get pending recv messages: -12 [ 1105.388292] ------------[ cut here ]------------ [ 1105.393526] WARNING: at drivers/net/wireless/ath/ath6kl/sdio.c:489 ath6kl_sdio_irq_handler+0x6c/0x74 [ath6kl_sdio]() [ 1105.404623] Modules linked in: ath6kl_sdio [ 1105.409568] Backtrace: [ 1105.412147] [<c00130ac>] (dump_backtrace+0x0/0x10c) from [<c05a433c>] (dump_stack+0x18/0x1c) [ 1105.420692] r6:000001e9 r5:bf0014b0 r4:00000000 r3:c0813250 [ 1105.426737] [<c05a4324>] (dump_stack+0x0/0x1c) from [<c00327dc>] (warn_slowpath_common+0x54/0x6c) [ 1105.435675] [<c0032788>] (warn_slowpath_common+0x0/0x6c) from [<c0032818>] (warn_slowpath_null+0x24/0x2c) [ 1105.445342] r8:00000001 r7:ddda1000 r6:ddc8c000 r5:00000001 r4:fffffff4 [ 1105.452269] r3:00000009 [ 1105.455046] [<c00327f4>] (warn_slowpath_null+0x0/0x2c) from [<bf0014b0>] (ath6kl_sdio_irq_handler+0x6c/0x74 [ath6kl_sdio]) [ 1105.466250] [<bf001444>] (ath6kl_sdio_irq_handler+0x0/0x74 [ath6kl_sdio]) from [<c03e5014>] (sdio_irq_thread+0x198/0x3a4) [ 1105.477354] r6:ddf5e000 r5:00000000 r4:de161800 [ 1105.481155] fence timeout on [dcec3b80] after 100ms [ 1105.481421] objs: [ 1105.481424] -------------- [ 1105.481428] s3c-fb sw_sync: 4508 [ 1105.481432] pt [email protected]: 4176 [ 1105.481436] pt active: 4509 [ 1105.481439] pt active: 4510 [ 1105.481443] pt active: 4511 [ 1105.481447] pt active: 4511 [ 1105.481450] [ 1105.481453] malitl_96_0x4125364c Mali: 2061 [ 1105.481457] pt [email protected]: 111(0) [ 1105.481461] pt [email protected]: 1923(0) [ 1105.481465] pt [email protected]: 1972(0) [ 1105.481474] pt [email protected]: 1974(0) [ 1105.481479] pt [email protected]: 2034(0) [ 1105.481483] pt [email protected]: 2061(0) [ 1105.481487] pt active: 2062(0) [ 1105.481491] [ 1105.481494] malitl_96_0x412d0be4 Mali: 4292 [ 1105.481498] pt [email protected]: 4292(0) [ 1105.481502] pt [email protected]: 4292(0) [ 1105.481506] pt active: 4293(0) [ 1105.481515] pt active: 4293(0) [ 1105.481519] pt active: 4294(0) [ 1105.481523] pt active: 4294(0) [ 1105.481526] [ 1105.481529] malitl_351_0x605acadc Mali: 0 [ 1105.481533] [ 1105.481536] malitl_453_0x5e37142c Mali: 0 [ 1105.481540] [ 1105.481542] malitl_453_0x5e3b0dc4 Mali: 272 [ 1105.481546] pt [email protected]: 272(0) [ 1105.481551] pt [email protected]: 271(0) [ 1105.481555] [ 1105.481557] malitl_453_0x5e5b9f7c Mali: 1 [ 1105.481566] pt [email protected]: 1(0) [ 1105.481570] [ 1105.481573] malitl_583_0x5c011c74 Mali: 0 [ 1105.481577] [ 1105.481579] malitl_453_0x5e8909d4 Mali: 0 [ 1105.481584] [ 1105.481586] malitl_583_0x5f80a2ac Mali: 0 [ 1105.481590] [ 1105.481593] malitl_1031_0x5e2c00dc Mali: 0 [ 1105.481597] [ 1105.481599] malitl_556_0x5cbd5114 Mali: 0 [ 1105.481604] [ 1105.481606] malitl_556_0x5cd9a1d4 Mali: 0 [ 1105.481610] [ 1105.481613] malitl_1031_0x6148f4f4 Mali: 0 [ 1105.481622] [ 1105.481625] malitl_453_0x5e8dabd4 Mali: 46 [ 1105.481629] pt [email protected]: 46(0) [ 1105.481633] pt [email protected]: 45(0) [ 1105.481638] [ 1105.481641] malitl_653_0x5edbb13c Mali: 0 [ 1105.481645] [ 1105.481648] malitl_653_0x5f36e3a4 Mali: 0 [ 1105.481652] [ 1105.481654] malitl_1157_0x5f158624 Mali: 0 [ 1105.481658] [ 1105.481661] malitl_1157_0x5fe6236c Mali: 1 [ 1105.481665] pt [email protected]: 1(0) [ 1105.481674] pt [email protected]: 1(0) [ 1105.481678] [ 1105.481681] fences: [ 1105.481684] -------------- [ 1105.481687] [de277580] mali_fence: signaled [ 1105.481692] malitl_96_0x4125364c_pt [email protected]: 111(0) / 2061 [ 1105.481697] [ 1105.481700] [dd422180] mali_fence: signaled [ 1105.481704] malitl_453_0x5e5b9f7c_pt [email protected]: 1(0) / 1 [ 1105.481709] [ 1105.481711] [dca3fd80] mali_fence: signaled [ 1105.481747] malitl_453_0x5e3b0dc4_pt [email protected]: 272(0) / 272 [ 1105.481754] [ 1105.481757] [dca3f880] NavigationBar:0: signaled [ 1105.481761] malitl_96_0x4125364c_pt [email protected]: 1923(0) / 2061 [ 1105.481766] malitl_453_0x5e3b0dc4_pt [email protected]: 271(0) / 272 [ 1105.481772] s3c-fb_pt [email protected]: 4176 / 4508 [ 1105.481782] [ 1105.481784] [dca7f080] mali_fence: signaled [ 1105.481789] malitl_1157_0x5fe6236c_pt [email protected]: 1(0) / 1 [ 1105.481794] [ 1105.481797] [dca3f280] mali_fence: signaled [ 1105.481801] malitl_96_0x4125364c_pt [email protected]: 1972(0) / 2061 [ 1105.481806] [ 1105.481809] [dcd29d80] mali_fence: signaled [ 1105.481817] malitl_96_0x4125364c_pt [email protected]: 1974(0) / 2061 [ 1105.481823] [ 1105.481825] [dca3f680] mali_fence: signaled [ 1105.481829] malitl_453_0x5e8dabd4_pt [email protected]: 46(0) / 46 [ 1105.481835] [ 1105.481837] [dca3f580] StatusBar:2: signaled [ 1105.481841] malitl_96_0x4125364c_pt [email protected]: 2034(0) / 2061 [ 1105.481851] malitl_453_0x5e8dabd4_pt [email protected]: 45(0) / 46 [ 1105.481857] [ 1105.481859] [dcec3380] mali_fence: signaled [ 1105.481863] malitl_96_0x412d0be4_pt [email protected]: 4292(0) / 4292 [ 1105.481869] [ 1105.481872] [dcebed80] FramebufferSurface:1: active [ 1105.481876] s3c-fb_pt active: 4509 / 4508 [ 1105.481880] malitl_96_0x412d0be4_pt [email protected]: 4292(0) / 4292 [ 1105.481890] [ 1105.481892] [dcec3500] mali_fence: signaled [ 1105.481897] malitl_96_0x4125364c_pt [email protected]: 2061(0) / 2061 [ 1105.481902] [ 1105.481904] [dcec3b80] mali_fence: active [ 1105.481909] malitl_96_0x412d0be4_pt active: 4293(0) / 4292 [ 1105.481914] [ 1105.481916] [dcec3880] FramebufferSurface:2: active [ 1105.481925] s3c-fb_pt active: 4510 / 4508 [ 1105.481929] malitl_96_0x412d0be4_pt active: 4293(0) / 4292 [ 1105.481934] [ 1105.481937] [dcec3680] mali_fence: active [ 1105.481940] malitl_96_0x4125364c_pt active: 2062(0) / 2061 [ 1105.481945] [ 1105.481947] [dcec3180] mali_fence: active [ 1105.481951] malitl_96_0x412d0be4_pt active: 4294(0) / 4292 [ 1105.481955] [ 1105.481958] [dcec3480] FramebufferSurface:0: active [ 1105.481964] s3c-fb_pt active: 4511 / 4508 [ 1105.481968] malitl_96_0x412d0be4_pt active: 4294(0) / 4292 [ 1105.481973] [ 1105.481975] [ddb77980] SurfaceView:0: active [ 1105.481979] malitl_1157_0x5fe6236c_pt [email protected]: 1(0) / 1 [ 1105.481983] s3c-fb_pt active: 4511 / 4508 [ 1105.481987] [ 1105.481994] s3c-fb exynos5-fb.1: synce_fence_wait() timeout [ 1105.965736] r3:bf001444 [ 1105.968447] [<c03e4e7c>] (sdio_irq_thread+0x0/0x3a4) from [<c0052500>] (kthread+0x90/0x9c) [ 1105.976850] [<c0052470>] (kthread+0x0/0x9c) from [<c0036674>] (do_exit+0x0/0x7c4) [ 1105.984497] r6:c0036674 r5:c0052470 r4:de10dbcc [ 1105.989372] Board Information: SMDK HW revision: 0, CPU EXYNOS5250 Rev1.0 [ 1105.996305] ---[ end trace 0c2f388e941b7598 ]---
해결했습니다.
패킷이 일정크기(MSU) 이상이면 데이터가 3바이트가 밀리는 현상이 있었습니다.
검색해보니 같은 문제로 해결하신분이 계셔서 저도 여기에 해결법을 올려봅니다.
kernel/drivers/net/wireless/ath/ath6kl/init.c
파일에서
*ath6kl_buf_alloc(int size) 함수를 살펴보면
ATH6KL_HTC_ALIGN_BYTES 이게 보일것입니다. 이게 현재 3으로
kernel/drivers/net/wireless/ath/ath6kl/core.h 에 설정되어있습니다.
core.h 에서 ATH6KL_HTC_ALIGN_BYTES의 define 값을 0으로 해주면 되긴 하는데
해결보신 분은 이것을 *ath6kl_buf_alloc(int size) 함수에서 계산해서 하게끔 해줬습니다.
함수 수정 부분을 올려봅니다.
struct sk_buff *ath6kl_buf_alloc(int size)
{
struct sk_buff *skb;
u16 reserved;
/* Add chacheline space at front and back of buffer */
reserved = roundup((2 * L1_CACHE_BYTES) + ATH6KL_DATA_OFFSET +
sizeof(struct htc_packet) + ATH6KL_HTC_ALIGN_BYTES, 4);
skb = dev_alloc_skb(size + reserved);
if (skb)
skb_reserve(skb, reserved - L1_CACHE_BYTES);
return skb;
}