crash工具分析dma设备内存踩踏(一)

背景介绍

我们的客户在利用我们提供的SDK参考方案开发相关产品时,在产品方案上进行一些基础老化测试时,极低概率出现kernel随机panic问题,由于场景复杂,无法单独针对特定模块或功能进行拆解来进行实验排查,只能基于已有的log和复现抓kdump进行相关分析和定位。本文记录相关分析过程,以作后续参考和学习!

问题log分析

首次抓到现场的关键log如下所示:

[  153.081557] Unable to handle kernel paging request at virtual address 1800180018000
[  153.089255] Mem abort info:
[  153.092058]   Exception class = DABT (current EL), IL = 32 bits
[  153.097997]   SET = 0, FnV = 0
[  153.101068]   EA = 0, S1PTW = 0
[  153.104208] Data abort info:
[  153.107098]   ISV = 0, ISS = 0x00000004
[  153.110938]   CM = 0, WnR = 0
[  153.113916] [0001800180018000] address between user and kernel address ranges
[  153.121058] Internal error: Oops: 96000004 [#1] PREEMPT SMP
[  153.126630] Modules linked in: bcmdhd hci_uart bluetooth ecdh_generic crypto_engine pvrsrvkm
[  153.135082] CPU: 3 PID: 2723 Comm: MessageThread Tainted: G           O    4.14.61-00009-gc2eae318e529-dirty #14
[  153.151001] task: ffff800178125400 task.stack: ffff00000ad78000
[  153.156928] PC is at test_and_set_bit+0x18/0x38
[  153.161461] LR is at zs_page_migrate+0x104/0x560
[  153.166077] pc : [<ffff000008cf69a8>] lr : [<ffff00000828c814>] pstate: 40400145
[  153.173471] sp : ffff00000ad7b610
[  153.176784] x29: ffff00000ad7b6a0 x28: ffff8000eb502060 
[  153.182096] x27: 00000000000008e0 x26: ffff80005d715000 
[  153.187409] x25: ffff800178125400 x24: ffff8000eb502088 
[  153.192721] x23: ffff7e000175c550 x22: ffff7e0004615680 
[  153.198033] x21: ffff7e000175c540 x20: ffff800158629b00 
[  153.203345] x19: 00000000000008e0 x18: 0000000000000000 
[  153.208657] x17: 0000000000000001 x16: ffff80017ff16b00 
[  153.213969] x15: 0001182270000000 x14: ffff0000091d2018 
[  153.219280] x13: 00000000000000c1 x12: 0000000000000000 
[  153.224592] x11: 0000000000000140 x10: 0000000000000000 
[  153.229904] x9 : 0000000000000005 x8 : 8001800180018001 
[  153.235215] x7 : 8000800080008000 x6 : ffff8000d8228000 
[  153.240527] x5 : 0000000000000000 x4 : 0000000000000001 
[  153.245839] x3 : 0000000000000000 x2 : 0000000000000001 
[  153.251150] x1 : 8001800180018000 x0 : 0000000000000000 
[  153.256465] 
[  153.256465] X6: 0xffff8000d8227f80:
[  153.261428] 7f80  331c2a00 01200207 580e2a00 1120020c 80000000 80008000 80008000 80008000
[  153.269614] 7fa0  80008000 80008000 80008000 80008000 80008000 80008000 80008000 80008000
[  153.277797] 7fc0  80008000 80008000 80008000 80008000 80008000 80008000 80008000 80008000
[  153.285982] 7fe0  80008000 80008000 80008000 80008000 80008000 80008000 80008000 80008000
[  153.294166] 8000  e2c56740 0000e7c5 f804ae40 0000e7c5 0000000f 00000000 00000000 00000000
[  153.302351] 8020  00000000 00000000 00000000 408f4000 00000008 00000000 7375732a 646e6570
[  153.310535] 8040  6c6c6120 73696820 72676f74 00006d61 00000040 00000000 00000008 00000000
[  153.318719] 8060  00000010 00000000 e3e91c00 0000e7c5 e3e91c84 0000e7c5 e3e91d00 0000e7c5
[  153.326906] 
[  153.326906] X16: 0xffff80017ff16a80:
[  153.331956] 6a80  00000001 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[  153.340139] 6aa0  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[  153.348323] 6ac0  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[  153.356507] 6ae0  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[  153.364690] 6b00  0481b7e0 ffff7e00 03801ae0 ffff7e00 0357f8e0 ffff7e00 0357f8e0 ffff7e00
[  153.372875] 6b20  03b9fc60 ffff7e00 037034a0 ffff7e00 7ff16b30 ffff8001 7ff16b30 ffff8001
[  153.381059] 6b40  7ff16b40 ffff8001 7ff16b40 ffff8001 7ff16b50 ffff8001 7ff16b50 ffff8001
[  153.389243] 6b60  0000003c 00000000 03801a20 ffff7e00 03804520 ffff7e00 041091a0 ffff7e00
[  153.397428] 
[  153.397428] X20: 0xffff800158629a80:
[  153.402477] 9a80  000008ab 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[  153.410660] 9aa0  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[  153.418843] 9ac0  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[  153.425337] saf775x saf775d_ioctl The process is "Binder:3409_2" (pid 3456)
[  153.425340] radio cmd:SAF775D_RADIO_GETLEVEL 
[  153.425928] lllevel = -7 
[  153.440955] 9ae0  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[  153.449138] 9b00  054c054a 00000000 58629b08 ffff8001 58629b08 ffff8001 20753e28 ffff8001
[  153.457322] 9b20  234698e8 ffff8000 01499a68 ffff8001 cd9bb408 ffff8000 236ba9a8 ffff8000
[  153.465507] 9b40  4d7b3e58 ffff8000 000006d0 00000007 00000003 0000006b 00000000 00000000
[  153.473691] 9b60  00000003 00000000 00000003 00000000 00000092 00000000 0000042f 00000000
[  153.481877] 
[  153.481877] X24: 0xffff8000eb502008:
[  153.486927] 2008  00000007 00000000 0175c380 ffff7e00 eb502018 ffff8000 eb502018 ffff8000
[  153.495111] 2028  00000000 00000000 001609fb 00000002 ffffffff 00000000 0175c480 ffff7e00
[  153.503296] 2048  eb502048 ffff8000 eb502048 ffff8000 00000000 00000000 001619af 00000007
[  153.511480] 2068  00000007 00000000 0175c4c0 ffff7e00 eb502078 ffff8000 eb502078 ffff8000
[  153.519663] 2088  80000000 00000000 001601fb 00000002 ffffffff 00000000 036089c0 ffff7e00
[  153.527847] 20a8  eb5020d8 ffff8000 31ac4be8 ffff8000 00000000 00000000 001601fb 00000002
[  153.536031] 20c8  ffffffff 00000000 03608300 ffff7e00 f272daf8 ffff8000 eb5020a8 ffff8000
[  153.544215] 20e8  00000000 00000000 001603fb 00000001 ffffffff 00000000 048ce700 ffff7e00
[  153.552399] 
[  153.552399] X25: 0xffff800178125380:
[  153.557449] 5380  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[  153.565632] 53a0  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[  153.573816] 53c0  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[  153.582000] 53e0  00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[  153.590183] 5400  0000002a 00000000 ffffffff ffffffff 00000006 00000000 00000000 00000000
[  153.598367] 5420  0ad78000 ffff0000 00000003 00c04040 00000000 00000000 00000000 00000000
[  153.606552] 5440  00000001 00000003 0000001a 00000000 ffff7081 00000000 77402a00 ffff8001
[  153.614735] 5460  00000003 00000001 00000070 00000070 00000070 00000000 08d40d68 ffff0000
[  153.622920] 
[  153.622920] X26: 0xffff80005d714f80:
[  153.627970] 4f80  80018001 80018001 80018001 80018001 80018001 80018001 80018001 80018001
[  153.636154] 4fa0  80018001 80018001 80018001 80018001 80018001 80018001 80018001 80018001
[  153.644338] 4fc0  80018001 80018001 80018001 80018001 80018001 80018001 80018001 80018001
[  153.652523] 4fe0  80018001 80018001 80018001 80018001 80018001 80018001 80018001 80018001
[  153.660707] 5000  80018001 80018001 80018001 80018001 80018001 80018001 80018001 80018001
[  153.668890] 5020  80018001 80018001 80018001 80018001 80018001 80018001 80018001 80018001
[  153.677074] 5040  80018001 80018001 80018001 80018001 80018001 80018001 80018001 80018001
[  153.685259] 5060  80018001 80018001 80018001 80018001 80018001 80018001 80018001 80018001
[  153.693443] 
[  153.693443] X28: 0xffff8000eb501fe0:
[  153.698492] 1fe0  eb5e5018 ffff8000 00000000 00000000 00000000 00000000 00000000 00000000
[  153.706676] 2000  00162243 00000007 00000007 00000000 0175c380 ffff7e00 eb502018 ffff8000
[  153.714860] 2020  eb502018 ffff8000 00000000 00000000 001609fb 00000002 ffffffff 00000000
[  153.723044] 2040  0175c480 ffff7e00 eb502048 ffff8000 eb502048 ffff8000 00000000 00000000
[  153.731228] 2060  001619af 00000007 00000007 00000000 0175c4c0 ffff7e00 eb502078 ffff8000
[  153.739412] 2080  eb502078 ffff8000 80000000 00000000 001601fb 00000002 ffffffff 00000000
[  153.747596] 20a0  036089c0 ffff7e00 eb5020d8 ffff8000 31ac4be8 ffff8000 00000000 00000000
[  153.755780] 20c0  001601fb 00000002 ffffffff 00000000 03608300 ffff7e00 f272daf8 ffff8000
[  153.763965] 
[  153.765455] Process MessageThread (pid: 2723, stack limit = 0xffff00000ad78000)
[  153.772762] Call trace:
[  153.775208] Exception stack(0xffff00000ad7b4d0 to 0xffff00000ad7b610)
[  153.781649] b4c0:                                   0000000000000000 8001800180018000
[  153.789479] b4e0: 0000000000000001 0000000000000000 0000000000000001 0000000000000000
[  153.797309] b500: ffff8000d8228000 8000800080008000 8001800180018001 0000000000000005
[  153.805139] b520: 0000000000000000 0000000000000140 0000000000000000 00000000000000c1
[  153.812969] b540: ffff0000091d2018 0001182270000000 ffff80017ff16b00 0000000000000001
[  153.820798] b560: 0000000000000000 00000000000008e0 ffff800158629b00 ffff7e000175c540
[  153.828629] b580: ffff7e0004615680 ffff7e000175c550 ffff8000eb502088 ffff800178125400
[  153.836459] b5a0: ffff80005d715000 00000000000008e0 ffff8000eb502060 ffff00000ad7b6a0
[  153.844289] b5c0: ffff00000828c814 ffff00000ad7b610 ffff000008cf69a8 0000000040400145
[  153.852118] b5e0: ffff7e000175c300 0000000000000001 0000ffffffffffff ffff00000ad7b6e8
[  153.859947] b600: ffff00000ad7b6a0 ffff000008cf69a8
[  153.864825] [<ffff000008cf69a8>] test_and_set_bit+0x18/0x38
[  153.870399] [<ffff0000082770b4>] move_to_new_page+0x2bc/0x2e0
[  153.876145] [<ffff0000082755ec>] migrate_pages+0x62c/0x928
[  153.881632] [<ffff000008208400>] alloc_contig_range+0x194/0x4ac
[  153.887553] [<ffff00000828e4a4>] cma_alloc+0x144/0x2f4
[  153.892693] [<ffff0000086d5c04>] dma_alloc_from_contiguous+0x2c/0x34
[  153.899048] [<ffff00000809ea08>] __dma_alloc+0x150/0x298
[  153.904362] [<ffff00000893253c>] vb2_dc_alloc+0x104/0x164
[  153.909759] [<ffff00000892c798>] __vb2_queue_alloc+0x184/0x494
[  153.915592] [<ffff00000892bc6c>] vb2_core_reqbufs+0x264/0x42c
[  153.921337] [<ffff000008931294>] vb2_ioctl_reqbufs+0x6c/0x94
[  153.926997] [<ffff0000089174ec>] v4l_reqbufs+0x48/0x58
[  153.932135] [<ffff000008914f1c>] __video_do_ioctl+0x130/0x26c
[  153.937880] [<ffff000008914b00>] video_usercopy+0x2f0/0x5c0
[  153.943453] [<ffff000008914de4>] video_ioctl2+0x14/0x1c
[  153.948678] [<ffff0000089142e4>] v4l2_ioctl+0x9c/0xc4
[  153.953730] [<ffff0000082a913c>] do_vfs_ioctl+0x554/0x810
[  153.959129] [<ffff0000082a9564>] SyS_ioctl+0x88/0x94
[  153.964092] Exception stack(0xffff00000ad7bec0 to 0xffff00000ad7c000)
[  153.970532] bec0: 0000000000000009 00000000c0145608 0000f168e12bcab8 0000000000000003
[  153.978363] bee0: 0000000000000000 0000000000000018 fefff067e02aceff 7f7fff7fff7fff7f
[  153.986193] bf00: 000000000000001d 0000f168e12bc9b8 0000f168e12bc980 0000f168e12bc9b8
[  153.994023] bf20: 0000f168e12bca00 ffffffffffffffff 0000000000000004 ffffffffffffffff
[  154.001853] bf40: 0000f168e1328f18 0000f168e2890308 0000f168df8c8000 0000f168e12bd020
[  154.009682] bf60: 0000f168e2051000 0000000000000000 0000f168e12bca70 0000f168e12bd020
[  154.017512] bf80: 0000f168e12bcd50 0000f168e12bcd50 0000f168e12bd020 0000f168e3585020
[  154.025342] bfa0: 0000f168e1313708 0000f168e12bc9f0 0000f168e2890390 0000f168e12bc900
[  154.033172] bfc0: 0000f168e28d2888 00000000a0000000 0000000000000009 000000000000001d
[  154.041002] bfe0: 0000000000000000 0000000000000000 0000000000000000 0000000000000000
[  154.048832] [<ffff000008083ac0>] el0_svc_naked+0x34/0x38
[  154.054144] Code: d2800022 8b400c21 f9800031 9ac32044 (c85f7c22) 
[  154.060244] SMP: stopping secondary CPUs
[  154.064172] ---[ end trace d3ae0601ebdf78fc ]---
[  154.071764] Kernel panic - not syncing: Fatal exception
[  154.076996] SMP: stopping secondary CPUs
[  155.080920] SMP: failed to stop secondary CPUs 0-3

结合现场和对应kernel版本的vmlinux分析,可以推算出在test_and_set_bit()函数里出现了访问非法地址的行为,触发了data abort异常,对应汇编信息如下:

ffff000008cf6990 <test_and_set_bit>:
ffff000008cf6990:        12001403         and        w3, w0, #0x3f  //x3 = x0 & 0x3f          
ffff000008cf6994:        4a030000         eor        w0, w0, w3    //x0 = x0^x3
ffff000008cf6998:        d2800022         mov        x2, #0x1      // #1
ffff000008cf699c:        8b400c21         add        x1, x1, x0, lsr #3    //x1 = x1 + (x0 >> 3)
ffff000008cf69a0:        f9800031         prfm        pstl1strm, [x1]
ffff000008cf69a4:        9ac32044         lsl        x4, x2, x3
ffff000008cf69a8:        c85f7c22         ldxr        x2, [x1]  //panic, x1=0x8001800180018000, x0=0
ffff000008cf69ac:        9ac32440         lsr        x0, x2, x3
ffff000008cf69b0:        aa040042         orr        x2, x2, x4
ffff000008cf69b4:        c805fc22         stlxr        w5, x2, [x1]
ffff000008cf69b8:        35ffff85         cbnz        w5, ffff000008cf69a8 <test_and_set_bit+0x18>
ffff000008cf69bc:        d5033bbf         dmb        ish
ffff000008cf69c0:        92400000         and        x0, x0, #0x1
ffff000008cf69c4:        d65f03c0         ret

函数的调用路径及实现如下:

zs_page_migrate(struct address_space *mapping, struct page *newpage, struct page *page, enum migrate_mode mode)
    trypin_tag(unsigned long handle)
        bit_spin_trylock(int bitnum, unsigned long *addr)
static inline int trypin_tag(unsigned long handle)
{
	return bit_spin_trylock(HANDLE_PIN_BIT, (unsigned long *)handle);
}
...
static int zs_page_migrate(struct address_space *mapping, struct page *newpage,
		struct page *page, enum migrate_mode mode)
{
	struct zs_pool *pool;
	struct size_class *class;
	int class_idx;
	enum fullness_group fullness;
	struct zspage *zspage;
	struct page *dummy;
	void *s_addr, *d_addr, *addr;
	int offset, pos;
	unsigned long handle, head;
	unsigned long old_obj, new_obj;
	unsigned int obj_idx;
	int ret = -EAGAIN;

	/*
	 * We cannot support the _NO_COPY case here, because copy needs to
	 * happen under the zs lock, which does not work with
	 * MIGRATE_SYNC_NO_COPY workflow.
	 */
	if (mode == MIGRATE_SYNC_NO_COPY)
		return -EINVAL;

	VM_BUG_ON_PAGE(!PageMovable(page), page);
	VM_BUG_ON_PAGE(!PageIsolated(page), page);

	zspage = get_zspage(page);

	/* Concurrent compactor cannot migrate any subpage in zspage */
	migrate_write_lock(zspage);
	get_zspage_mapping(zspage, &class_idx, &fullness);
	pool = mapping->private_data;
	class = pool->size_class[class_idx];
	offset = get_first_obj_offset(page);

	spin_lock(&class->lock);
	if (!get_zspage_inuse(zspage)) {
		/*
		 * Set "offset" to end of the page so that every loops
		 * skips unnecessary object scanning.
		 */
		offset = PAGE_SIZE;
	}

	pos = offset;
	s_addr = kmap_atomic(page);
	while (pos < PAGE_SIZE) {
		head = obj_to_head(page, s_addr + pos);
		if (head & OBJ_ALLOCATED_TAG) {
			handle = head & ~OBJ_ALLOCATED_TAG;
			if (!trypin_tag(handle))
				goto unpin_objects;
		}
		pos += class->size;
	}

	/*
	 * Here, any user cannot access all objects in the zspage so let's move.
	 */
	d_addr = kmap_atomic(newpage);
	memcpy(d_addr, s_addr, PAGE_SIZE);
	kunmap_atomic(d_addr);

	for (addr = s_addr + offset; addr < s_addr + pos;
					addr += class->size) {
		head = obj_to_head(page, addr);
		if (head & OBJ_ALLOCATED_TAG) {
			handle = head & ~OBJ_ALLOCATED_TAG;
			if (!testpin_tag(handle))
				BUG();

			old_obj = handle_to_obj(handle);
			obj_to_location(old_obj, &dummy, &obj_idx);
			new_obj = (unsigned long)location_to_obj(newpage,
								obj_idx);
			new_obj |= BIT(HANDLE_PIN_BIT);
			record_obj(handle, new_obj);
		}
	}

	replace_sub_page(class, zspage, newpage, page);
	get_page(newpage);

	dec_zspage_isolation(zspage);

	/*
	 * Page migration is done so let's putback isolated zspage to
	 * the list if @page is final isolated subpage in the zspage.
	 */
	if (!is_zspage_isolated(zspage)) {
		/*
		 * We cannot race with zs_destroy_pool() here because we wait
		 * for isolation to hit zero before we start destroying.
		 * Also, we ensure that everyone can see pool->destroying before
		 * we start waiting.
		 */
		putback_zspage_deferred(pool, class, zspage);
		zs_pool_dec_isolated(pool);
	}

	if (page_zone(newpage) != page_zone(page)) {
		dec_zone_page_state(page, NR_ZSPAGES);
		inc_zone_page_state(newpage, NR_ZSPAGES);
	}

	reset_page(page);
	put_page(page);
	page = newpage;

	ret = MIGRATEPAGE_SUCCESS;
unpin_objects:
	for (addr = s_addr + offset; addr < s_addr + pos;
						addr += class->size) {
		head = obj_to_head(page, addr);
		if (head & OBJ_ALLOCATED_TAG) {
			handle = head & ~OBJ_ALLOCATED_TAG;
			if (!testpin_tag(handle))
				BUG();
			unpin_tag(handle);
		}
	}
	kunmap_atomic(s_addr);
	spin_unlock(&class->lock);
	migrate_write_unlock(zspage);

	return ret;
}

结合源码分析,可以确认是handler这个变量出现问题了,从现场寄存器信息来看,x1=8001800180018000,与panic时log提示的现场一致

分析上下文,因为在zs_page_migrate()函数中直接调用了test_and_set_bit(),所以通过zs_page_migrate()的汇编代码看看是否可以获取handler的值,从汇编信息看,zs_page_migrate()中调用了test_and_set_bit()的汇编如下所示:

...
ffff00000828c7e0:        910042b7         add        x23, x21, #0x10
ffff00000828c7e4:        f94002a8         ldr        x8, [x21]
ffff00000828c7e8:        8b1b0349         add        x9, x26, x27
ffff00000828c7ec:        f277011f         tst        x8, #0x200
ffff00000828c7f0:        9a970128         csel        x8, x9, x23, eq  // eq = none
ffff00000828c7f4:        f9400108         ldr        x8, [x8]
ffff00000828c7f8:        36000108         tbz        w8, #0, ffff00000828c818 <zs_page_migrate+0x108>
ffff00000828c7fc:        b9401329         ldr        w9, [x25, #16]
ffff00000828c800:        927ff901         and        x1, x8, #0xfffffffffffffffe
ffff00000828c804:        2a1f03e0         mov        w0, wzr
ffff00000828c808:        11000529         add        w9, w9, #0x1
ffff00000828c80c:        b9001329         str        w9, [x25, #16]
ffff00000828c810:        9429a860         bl        ffff000008cf6990 <test_and_set_bit>
ffff00000828c814:        350009c0         cbnz        w0, ffff00000828c94c <zs_page_migrate+0x23c>
ffff00000828c818:        b9404a88         ldr        w8, [x20, #72]
ffff00000828c81c:        0b130113         add        w19, w8, w19
ffff00000828c820:        7140067f         cmp        w19, #0x1, lsl #12
ffff00000828c824:        93407e7b         sxtw        x27, w19
ffff00000828c828:        54fffde3         b.cc        ffff00000828c7e4 <zs_page_migrate+0xd4>
...

因为test_and_set_bit()只有两个参数,x0和x1,从汇编分析,x0是0,x1 = x8 & 0xfffffffffffffffe, x8 = 0x8001800180018001, 所以x1 = 0x8001800180018000,因此,出现问题时,在zs_page_migrate()取到的x8的值就有问题,且x8表示head这个变量,0xfffffffffffffffe刚好是OBJ_ALLOCATED_TAG这个宏的取反,所有说明获取到的head变量已经出现不正确了,继续分析这个head变量的获取,源码如下:

static unsigned long obj_to_head(struct page *page, void *obj)
{
	if (unlikely(PageHugeObject(page))) {
		VM_BUG_ON_PAGE(!is_first_page(page), page);
		return page->index;
	} else
		return *(unsigned long *)obj;
}

结合源码,在zs_page_migrate()函数中,通过obj_to_head()函数返回到对应的head,结合汇编分析,可以看出x23表示page->index,x9是obj,obj参数是在zs_page_migrate()计算出来的,该函数返回page->index或者返回obj这个指针指向的内存数据。

结合源码,可以推算出,x26表示s_addr这个变量,x26=0xffff80005d715000, x27表示pos这个变量,x27=0x00000000000008e0,因此obj这个指针的值是0xffff80005d7158e0,page这个指针的值是page = 0xffff7e000175c540,而handler就是从这两块内存地址获取到的。

从panic现场打印的数据信息看,head的值大概率应该是从x26这块内存获取到的,就是返回了obj这个指针指向的内存数据,因为现场没有打印出page这个指针指向的内存数据,只能从数据上进行猜测,但从x26这块内存数据看,这一块内存的数据都被填充成0x80018001,大概率是dma设备发生了内存踩踏导致,需要分析数据规律来进一步定位。

[  153.622920] X26: 0xffff80005d714f80:
[  153.627970] 4f80  80018001 80018001 80018001 80018001 80018001 80018001 80018001 80018001
[  153.636154] 4fa0  80018001 80018001 80018001 80018001 80018001 80018001 80018001 80018001
[  153.644338] 4fc0  80018001 80018001 80018001 80018001 80018001 80018001 80018001 80018001
[  153.652523] 4fe0  80018001 80018001 80018001 80018001 80018001 80018001 80018001 80018001
[  153.660707] 5000  80018001 80018001 80018001 80018001 80018001 80018001 80018001 80018001
[  153.668890] 5020  80018001 80018001 80018001 80018001 80018001 80018001 80018001 80018001
[  153.677074] 5040  80018001 80018001 80018001 80018001 80018001 80018001 80018001 80018001
[  153.685259] 5060  80018001 80018001 80018001 80018001 80018001 80018001 80018001 80018001
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值