您当前的位置:首页 > IT编程 > C++
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:C++ ubi_dbg_dump_stack函数代码示例

51自学网 2021-06-03 09:04:45
  C++
这篇教程C++ ubi_dbg_dump_stack函数代码示例写得很实用,希望能帮到您。

本文整理汇总了C++中ubi_dbg_dump_stack函数的典型用法代码示例。如果您正苦于以下问题:C++ ubi_dbg_dump_stack函数的具体用法?C++ ubi_dbg_dump_stack怎么用?C++ ubi_dbg_dump_stack使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。

在下文中一共展示了ubi_dbg_dump_stack函数的18个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: do_sync_erase

/** * do_sync_erase - synchronously erase a physical eraseblock. * @ubi: UBI device description object * @pnum: the physical eraseblock number to erase * * This function synchronously erases physical eraseblock @pnum and returns * zero in case of success and a negative error code in case of failure. If * %-EIO is returned, the physical eraseblock most probably went bad. */static int do_sync_erase(struct ubi_device *ubi, int pnum){	int err, retries = 0;	struct erase_info ei;	wait_queue_head_t wq;	dbg_io("erase PEB %d", pnum);retry:	init_waitqueue_head(&wq);	memset(&ei, 0, sizeof(struct erase_info));	ei.mtd      = ubi->mtd;	ei.addr     = (loff_t)pnum * ubi->peb_size;	ei.len      = ubi->peb_size;	ei.callback = erase_callback;	ei.priv     = (unsigned long)&wq;	err = ubi->mtd->erase(ubi->mtd, &ei);	if (err) {		if (retries++ < UBI_IO_RETRIES) {			dbg_io("error %d while erasing PEB %d, retry",			       err, pnum);			yield();			goto retry;		}		ubi_err("cannot erase PEB %d, error %d", pnum, err);		ubi_dbg_dump_stack();		return err;	}	err = wait_event_interruptible(wq, ei.state == MTD_ERASE_DONE ||					   ei.state == MTD_ERASE_FAILED);	if (err) {		ubi_err("interrupted PEB %d erasure", pnum);		return -EINTR;	}	if (ei.state == MTD_ERASE_FAILED) {		if (retries++ < UBI_IO_RETRIES) {			dbg_io("error while erasing PEB %d, retry", pnum);			yield();			goto retry;		}		ubi_err("cannot erase PEB %d", pnum);		ubi_dbg_dump_stack();		return -EIO;	}	err = ubi_dbg_check_all_ff(ubi, pnum, 0, ubi->peb_size);	if (err)		return err;	if (ubi_dbg_is_erase_failure() && !err) {		dbg_err("cannot erase PEB %d (emulated)", pnum);		return -EIO;	}	return 0;}
开发者ID:KaZoom,项目名称:buildroot-linux-kernel-m3,代码行数:69,


示例2: paranoid_check_peb_ec_hdr

/** * paranoid_check_peb_ec_hdr - check erase counter header. * @ubi: UBI device description object * @pnum: the physical eraseblock number to check * * This function returns zero if the erase counter header is all right and and * a negative error code if not or if an error occurred. */static int paranoid_check_peb_ec_hdr(const struct ubi_device *ubi, int pnum){	int err;	uint32_t crc, hdr_crc;	struct ubi_ec_hdr *ec_hdr;	ec_hdr = kzalloc(ubi->ec_hdr_alsize, GFP_NOFS);	if (!ec_hdr)		return -ENOMEM;	err = ubi_io_read(ubi, ec_hdr, pnum, 0, UBI_EC_HDR_SIZE);	if (err && err != UBI_IO_BITFLIPS && err != -EBADMSG)		goto exit;	crc = crc32(UBI_CRC32_INIT, ec_hdr, UBI_EC_HDR_SIZE_CRC);	hdr_crc = be32_to_cpu(ec_hdr->hdr_crc);	if (hdr_crc != crc) {		ubi_err("bad CRC, calculated %#08x, read %#08x", crc, hdr_crc);		ubi_err("paranoid check failed for PEB %d", pnum);		ubi_dbg_dump_ec_hdr(ec_hdr);		ubi_dbg_dump_stack();		err = -EINVAL;		goto exit;	}	err = paranoid_check_ec_hdr(ubi, pnum, ec_hdr);exit:	kfree(ec_hdr);	return err;}
开发者ID:KaZoom,项目名称:buildroot-linux-kernel-m3,代码行数:39,


示例3: paranoid_check_peb_vid_hdr

/** * paranoid_check_peb_vid_hdr - check volume identifier header. * @ubi: UBI device description object * @pnum: the physical eraseblock number to check * * This function returns zero if the volume identifier header is all right, * and a negative error code if not or if an error occurred. */static int paranoid_check_peb_vid_hdr(const struct ubi_device *ubi, int pnum){	int err;	uint32_t crc, hdr_crc;	struct ubi_vid_hdr *vid_hdr;	void *p;	vid_hdr = ubi_zalloc_vid_hdr(ubi, GFP_NOFS);	if (!vid_hdr)		return -ENOMEM;	p = (char *)vid_hdr - ubi->vid_hdr_shift;	err = ubi_io_read(ubi, p, pnum, ubi->vid_hdr_aloffset,			  ubi->vid_hdr_alsize);	if (err && err != UBI_IO_BITFLIPS && err != -EBADMSG)		goto exit;	crc = crc32(UBI_CRC32_INIT, vid_hdr, UBI_EC_HDR_SIZE_CRC);	hdr_crc = be32_to_cpu(vid_hdr->hdr_crc);	if (hdr_crc != crc) {		ubi_err("bad VID header CRC at PEB %d, calculated %#08x, "			"read %#08x", pnum, crc, hdr_crc);		ubi_err("paranoid check failed for PEB %d", pnum);		ubi_dbg_dump_vid_hdr(vid_hdr);		ubi_dbg_dump_stack();		err = -EINVAL;		goto exit;	}	err = paranoid_check_vid_hdr(ubi, pnum, vid_hdr);exit:	ubi_free_vid_hdr(ubi, vid_hdr);	return err;}
开发者ID:KaZoom,项目名称:buildroot-linux-kernel-m3,代码行数:43,


示例4: paranoid_check_vid_hdr

/** * paranoid_check_vid_hdr - check that a volume identifier header is all right. * @ubi: UBI device description object * @pnum: physical eraseblock number the volume identifier header belongs to * @vid_hdr: the volume identifier header to check * * This function returns zero if the volume identifier header is all right, and * %-EINVAL if not. */static int paranoid_check_vid_hdr(const struct ubi_device *ubi, int pnum,				  const struct ubi_vid_hdr *vid_hdr){	int err;	uint32_t magic;	magic = be32_to_cpu(vid_hdr->magic);	if (magic != UBI_VID_HDR_MAGIC) {		ubi_err("bad VID header magic %#08x at PEB %d, must be %#08x",			magic, pnum, UBI_VID_HDR_MAGIC);		goto fail;	}	err = validate_vid_hdr(ubi, vid_hdr);	if (err) {		ubi_err("paranoid check failed for PEB %d", pnum);		goto fail;	}	return err;fail:	ubi_err("paranoid check failed for PEB %d", pnum);	ubi_dbg_dump_vid_hdr(vid_hdr);	ubi_dbg_dump_stack();	return -EINVAL;}
开发者ID:KaZoom,项目名称:buildroot-linux-kernel-m3,代码行数:37,


示例5: ubi_io_write_oob

/* Write one page with oob one time */int ubi_io_write_oob(const struct ubi_device *ubi, void *databuf, void *oobbuf,                int pnum, int offset){        int err;        loff_t addr;        struct mtd_oob_ops ops;        dbg_io("read from PEB %d:%d", pnum, offset);        ubi_assert(pnum >= 0 && pnum < ubi->peb_count);        ubi_assert(offset >= 0 && offset + ubi->mtd->writesize <= ubi->peb_size);        addr = (loff_t)pnum * ubi->peb_size + offset;        ops.mode = MTD_OPS_AUTO_OOB;        ops.ooblen = ubi->mtd->oobavail;        ops.oobbuf = oobbuf;        ops.ooboffs = 0;        ops.len = ubi->mtd->writesize;        ops.datbuf = databuf;        ops.retlen = ops.oobretlen = 0;        err = mtd_write_oob(ubi->mtd, addr, &ops);        if (err) {                ubi_err("error %d while writing to addr %lld, written ",                        err, addr);                ubi_dbg_dump_stack();        } else                ubi_assert(ops.retlen == ops.len);        return err;}
开发者ID:blackrebel75,项目名称:HUAWEI89_WE_KK_700,代码行数:33,


示例6: ubi_dbg_check_all_ff

/** * ubi_dbg_check_all_ff - check that a region of flash is empty. * @ubi: UBI device description object * @pnum: the physical eraseblock number to check * @offset: the starting offset within the physical eraseblock to check * @len: the length of the region to check * * This function returns zero if only 0xFF bytes are present at offset * @offset of the physical eraseblock @pnum, and a negative error code if not * or if an error occurred. */int ubi_dbg_check_all_ff(struct ubi_device *ubi, int pnum, int offset, int len){	size_t read;	int err;	loff_t addr = (loff_t)pnum * ubi->peb_size + offset;	mutex_lock(&ubi->dbg_buf_mutex);	err = ubi->mtd->read(ubi->mtd, addr, len, &read, ubi->dbg_peb_buf);	if (err && err != -EUCLEAN) {		ubi_err("error %d while reading %d bytes from PEB %d:%d, "			"read %zd bytes", err, len, pnum, offset, read);		goto error;	}	err = check_pattern(ubi->dbg_peb_buf, 0xFF, len);	if (err == 0) {		ubi_err("flash region at PEB %d:%d, length %d does not "			"contain all 0xFF bytes", pnum, offset, len);		goto fail;	}	mutex_unlock(&ubi->dbg_buf_mutex);	return 0;fail:	ubi_err("paranoid check failed for PEB %d", pnum);	ubi_msg("hex dump of the %d-%d region", offset, offset + len);	print_hex_dump(KERN_DEBUG, "", DUMP_PREFIX_OFFSET, 32, 1,		       ubi->dbg_peb_buf, len, 1);	err = -EINVAL;error:	ubi_dbg_dump_stack();	mutex_unlock(&ubi->dbg_buf_mutex);	return err;}
开发者ID:KaZoom,项目名称:buildroot-linux-kernel-m3,代码行数:46,


示例7: paranoid_check_ec_hdr

/** * paranoid_check_ec_hdr - check if an erase counter header is all right. * @ubi: UBI device description object * @pnum: physical eraseblock number the erase counter header belongs to * @ec_hdr: the erase counter header to check * * This function returns zero if the erase counter header contains valid * values, and %-EINVAL if not. */static int paranoid_check_ec_hdr(const struct ubi_device *ubi, int pnum,				 const struct ubi_ec_hdr *ec_hdr){	int err;	uint32_t magic;	magic = be32_to_cpu(ec_hdr->magic);	if (magic != UBI_EC_HDR_MAGIC) {		ubi_err("bad magic %#08x, must be %#08x",			magic, UBI_EC_HDR_MAGIC);		goto fail;	}	err = validate_ec_hdr(ubi, ec_hdr);	if (err) {		ubi_err("paranoid check failed for PEB %d", pnum);		goto fail;	}	return 0;fail:	ubi_dbg_dump_ec_hdr(ec_hdr);	ubi_dbg_dump_stack();	return -EINVAL;}
开发者ID:KaZoom,项目名称:buildroot-linux-kernel-m3,代码行数:35,


示例8: ubi_io_read

/** * ubi_io_read - read data from a physical eraseblock. * @ubi: UBI device description object * @buf: buffer where to store the read data * @pnum: physical eraseblock number to read from * @offset: offset within the physical eraseblock from where to read * @len: how many bytes to read * * This function reads data from offset @offset of physical eraseblock @pnum * and stores the read data in the @buf buffer. The following return codes are * possible: * * o %0 if all the requested data were successfully read; * o %UBI_IO_BITFLIPS if all the requested data were successfully read, but *   correctable bit-flips were detected; this is harmless but may indicate *   that this eraseblock may become bad soon (but do not have to); * o %-EBADMSG if the MTD subsystem reported about data integrity problems, for *   example it can be an ECC error in case of NAND; this most probably means *   that the data is corrupted; * o %-EIO if some I/O error occurred; * o other negative error codes in case of other errors. */int ubi_io_read(const struct ubi_device *ubi, void *buf, int pnum, int offset,		int len){	int err, retries = 0;	size_t read;	loff_t addr;	dbg_io("read %d bytes from PEB %d:%d", len, pnum, offset);	ubi_assert(pnum >= 0 && pnum < ubi->peb_count);	ubi_assert(offset >= 0 && offset + len <= ubi->peb_size);	ubi_assert(len > 0);	err = paranoid_check_not_bad(ubi, pnum);	if (err)		return err > 0 ? -EINVAL : err;	addr = (loff_t)pnum * ubi->peb_size + offset;retry:	err = ubi->mtd->read(ubi->mtd, addr, len, &read, buf);	if (err) {		if (err == -EUCLEAN) {			/*			 * -EUCLEAN is reported if there was a bit-flip which			 * was corrected, so this is harmless.			 */			ubi_msg("fixable bit-flip detected at PEB %d", pnum);			ubi_assert(len == read);			return UBI_IO_BITFLIPS;		}		if (read != len && retries++ < UBI_IO_RETRIES) {			dbg_io("error %d while reading %d bytes from PEB %d:%d, "			       "read only %zd bytes, retry",			       err, len, pnum, offset, read);			yield();			goto retry;		}		ubi_err("error %d while reading %d bytes from PEB %d:%d, "			"read %zd bytes", err, len, pnum, offset, read);		ubi_dbg_dump_stack();	} else {		ubi_assert(len == read);		if (ubi_dbg_is_bitflip()) {			dbg_msg("bit-flip (emulated)");			err = UBI_IO_BITFLIPS;		}	}	return err;}
开发者ID:PennPanda,项目名称:linux-repo,代码行数:75,


示例9: ubi_dbg_check_write

/** * ubi_dbg_check_write - make sure write succeeded. * @ubi: UBI device description object * @buf: buffer with data which were written * @pnum: physical eraseblock number the data were written to * @offset: offset within the physical eraseblock the data were written to * @len: how many bytes were written * * This functions reads data which were recently written and compares it with * the original data buffer - the data have to match. Returns zero if the data * match and a negative error code if not or in case of failure. */int ubi_dbg_check_write(struct ubi_device *ubi, const void *buf, int pnum,			int offset, int len){	int err, i;	size_t read;	void *buf1;	loff_t addr = (loff_t)pnum * ubi->peb_size + offset;	if (!ubi->dbg->chk_io)		return 0;	buf1 = kmalloc(len, GFP_KERNEL);	if (!buf1) {		ubi_err("cannot allocate memory to check writes");		return 0;	}	err = mtd_read(ubi->mtd, addr, len, &read, buf1);	if (err && !mtd_is_bitflip(err))		goto out_free;	for (i = 0; i < len; i++) {		uint8_t c = ((uint8_t *)buf)[i];		uint8_t c1 = ((uint8_t *)buf1)[i];		int dump_len;		if (c == c1)			continue;		ubi_err("paranoid check failed for PEB %d:%d, len %d",			pnum, offset, len);		ubi_msg("data differ at position %d", i);		dump_len = max_t(int, 128, len - i);		ubi_msg("hex dump of the original buffer from %d to %d",			i, i + dump_len);		print_hex_dump(KERN_DEBUG, "", DUMP_PREFIX_OFFSET, 32, 1,			       buf + i, dump_len, 1);		ubi_msg("hex dump of the read buffer from %d to %d",			i, i + dump_len);		print_hex_dump(KERN_DEBUG, "", DUMP_PREFIX_OFFSET, 32, 1,			       buf1 + i, dump_len, 1);		ubi_dbg_dump_stack();		err = -EINVAL;		goto out_free;	}	kfree(buf1);	return 0;out_free:	kfree(buf1);	return err;}
开发者ID:blackrebel75,项目名称:HUAWEI89_WE_KK_700,代码行数:65,


示例10: paranoid_check_not_bad

/** * paranoid_check_not_bad - ensure that a physical eraseblock is not bad. * @ubi: UBI device description object * @pnum: physical eraseblock number to check * * This function returns zero if the physical eraseblock is good, %-EINVAL if * it is bad and a negative error code if an error occurred. */static int paranoid_check_not_bad(const struct ubi_device *ubi, int pnum){	int err;	err = ubi_io_is_bad(ubi, pnum);	if (!err)		return err;	ubi_err("paranoid check failed for PEB %d", pnum);	ubi_dbg_dump_stack();	return err > 0 ? -EINVAL : err;}
开发者ID:KaZoom,项目名称:buildroot-linux-kernel-m3,代码行数:20,


示例11: validate_ec_hdr

/** * validate_ec_hdr - validate an erase counter header. * @ubi: UBI device description object * @ec_hdr: the erase counter header to check * * This function returns zero if the erase counter header is OK, and %1 if * not. */static int validate_ec_hdr(const struct ubi_device *ubi,			   const struct ubi_ec_hdr *ec_hdr){	long long ec;	int vid_hdr_offset, leb_start;	ec = be64_to_cpu(ec_hdr->ec);	vid_hdr_offset = be32_to_cpu(ec_hdr->vid_hdr_offset);	leb_start = be32_to_cpu(ec_hdr->data_offset);	if (ec_hdr->version != UBI_VERSION) {		ubi_err("node with incompatible UBI version found: "			"this UBI version is %d, image version is %d",			UBI_VERSION, (int)ec_hdr->version);		goto bad;	}	//printf("ELVIS---ec_hdr->vid_hdr_offset:%d, ubi->vid_hdr_offset:%d",	//		vid_hdr_offset, ubi->vid_hdr_offset);	if (vid_hdr_offset != ubi->vid_hdr_offset) {		ubi_err("bad VID header offset %d, expected %d",			vid_hdr_offset, ubi->vid_hdr_offset);		goto bad;	}	if (leb_start != ubi->leb_start) {		ubi_err("bad data offset %d, expected %d",			leb_start, ubi->leb_start);		goto bad;	}	if (ec < 0 || ec > UBI_MAX_ERASECOUNTER) {		ubi_err("bad erase counter %lld", ec);		goto bad;	}	return 0;bad:	ubi_err("bad EC header");	ubi_dbg_dump_ec_hdr(ec_hdr);	ubi_dbg_dump_stack();	return 1;}
开发者ID:Pivosgroup,项目名称:buildroot-uboot,代码行数:52,


示例12: ubi_dbg_check_all_ff

/** * ubi_dbg_check_all_ff - check that a region of flash is empty. * @ubi: UBI device description object * @pnum: the physical eraseblock number to check * @offset: the starting offset within the physical eraseblock to check * @len: the length of the region to check * * This function returns zero if only 0xFF bytes are present at offset * @offset of the physical eraseblock @pnum, and a negative error code if not * or if an error occurred. */int ubi_dbg_check_all_ff(struct ubi_device *ubi, int pnum, int offset, int len){	size_t read;	int err;	void *buf;	loff_t addr = (loff_t)pnum * ubi->peb_size + offset;	if (!ubi->dbg->chk_io)		return 0;	buf = kmalloc(len, GFP_KERNEL);	if (!buf) {		ubi_err("cannot allocate memory to check for 0xFFs");		return 0;	}	err = mtd_read(ubi->mtd, addr, len, &read, buf);	if (err && !mtd_is_bitflip(err)) {		ubi_err("error %d while reading %d bytes from PEB %d:%d, "			"read %zd bytes", err, len, pnum, offset, read);		goto error;	}	err = ubi_check_pattern(buf, 0xFF, len);	if (err == 0) {		ubi_err("flash region at PEB %d:%d, length %d does not "			"contain all 0xFF bytes", pnum, offset, len);		goto fail;	}	kfree(buf);	return 0;fail:	ubi_err("paranoid check failed for PEB %d", pnum);	ubi_msg("hex dump of the %d-%d region", offset, offset + len);	print_hex_dump(KERN_DEBUG, "", DUMP_PREFIX_OFFSET, 32, 1, buf, len, 1);	err = -EINVAL;error:	ubi_dbg_dump_stack();	kfree(buf);	return err;}
开发者ID:blackrebel75,项目名称:HUAWEI89_WE_KK_700,代码行数:54,


示例13: ubi_dbg_check_write

/** * ubi_dbg_check_write - make sure write succeeded. * @ubi: UBI device description object * @buf: buffer with data which were written * @pnum: physical eraseblock number the data were written to * @offset: offset within the physical eraseblock the data were written to * @len: how many bytes were written * * This functions reads data which were recently written and compares it with * the original data buffer - the data have to match. Returns zero if the data * match and a negative error code if not or in case of failure. */int ubi_dbg_check_write(struct ubi_device *ubi, const void *buf, int pnum,			int offset, int len){	int err, i;	mutex_lock(&ubi->dbg_buf_mutex);	err = ubi_io_read(ubi, ubi->dbg_peb_buf, pnum, offset, len);	if (err)		goto out_unlock;	for (i = 0; i < len; i++) {		uint8_t c = ((uint8_t *)buf)[i];		uint8_t c1 = ((uint8_t *)ubi->dbg_peb_buf)[i];		int dump_len;		if (c == c1)			continue;		ubi_err("paranoid check failed for PEB %d:%d, len %d",			pnum, offset, len);		ubi_msg("data differ at position %d", i);		dump_len = max_t(int, 128, len - i);		ubi_msg("hex dump of the original buffer from %d to %d",			i, i + dump_len);		print_hex_dump(KERN_DEBUG, "", DUMP_PREFIX_OFFSET, 32, 1,			       buf + i, dump_len, 1);		ubi_msg("hex dump of the read buffer from %d to %d",			i, i + dump_len);		print_hex_dump(KERN_DEBUG, "", DUMP_PREFIX_OFFSET, 32, 1,			       ubi->dbg_peb_buf + i, dump_len, 1);		ubi_dbg_dump_stack();		err = -EINVAL;		goto out_unlock;	}	mutex_unlock(&ubi->dbg_buf_mutex);	return 0;out_unlock:	mutex_unlock(&ubi->dbg_buf_mutex);	return err;}
开发者ID:KaZoom,项目名称:buildroot-linux-kernel-m3,代码行数:54,


示例14: ubi_io_write

/** * ubi_io_write - write data to a physical eraseblock. * @ubi: UBI device description object * @buf: buffer with the data to write * @pnum: physical eraseblock number to write to * @offset: offset within the physical eraseblock where to write * @len: how many bytes to write * * This function writes @len bytes of data from buffer @buf to offset @offset * of physical eraseblock @pnum. If all the data were successfully written, * zero is returned. If an error occurred, this function returns a negative * error code. If %-EIO is returned, the physical eraseblock most probably went * bad. * * Note, in case of an error, it is possible that something was still written * to the flash media, but may be some garbage. */int ubi_io_write(struct ubi_device *ubi, const void *buf, int pnum, int offset,		 int len){	int err;	size_t written;	loff_t addr;	dbg_io("write %d bytes to PEB %d:%d", len, pnum, offset);	ubi_assert(pnum >= 0 && pnum < ubi->peb_count);	ubi_assert(offset >= 0 && offset + len <= ubi->peb_size);	ubi_assert(offset % ubi->hdrs_min_io_size == 0);	ubi_assert(len > 0 && len % ubi->hdrs_min_io_size == 0);	if (ubi->ro_mode) {		ubi_err("read-only mode");		return -EROFS;	}	/* The below has to be compiled out if paranoid checks are disabled */	err = paranoid_check_not_bad(ubi, pnum);	if (err)		return err;	/* The area we are writing to has to contain all 0xFF bytes */	err = ubi_dbg_check_all_ff(ubi, pnum, offset, len);	if (err)		return err;	if (offset >= ubi->leb_start) {		/*		 * We write to the data area of the physical eraseblock. Make		 * sure it has valid EC and VID headers.		 */		err = paranoid_check_peb_ec_hdr(ubi, pnum);		if (err)			return err;		err = paranoid_check_peb_vid_hdr(ubi, pnum);		if (err)			return err;	}	if (ubi_dbg_is_write_failure()) {		dbg_err("cannot write %d bytes to PEB %d:%d "			"(emulated)", len, pnum, offset);		ubi_dbg_dump_stack();		return -EIO;	}	addr = (loff_t)pnum * ubi->peb_size + offset;	err = ubi->mtd->write(ubi->mtd, addr, len, &written, buf);	if (err) {		ubi_err("error %d while writing %d bytes to PEB %d:%d, written "			"%zd bytes", err, len, pnum, offset, written);		ubi_dbg_dump_stack();		ubi_dbg_dump_flash(ubi, pnum, offset, len);	} else		ubi_assert(written == len);	if (!err) {		err = ubi_dbg_check_write(ubi, buf, pnum, offset, len);		if (err)			return err;		/*		 * Since we always write sequentially, the rest of the PEB has		 * to contain only 0xFF bytes.		 */		offset += len;		len = ubi->peb_size - offset;		if (len)			err = ubi_dbg_check_all_ff(ubi, pnum, offset, len);	}	return err;}
开发者ID:KaZoom,项目名称:buildroot-linux-kernel-m3,代码行数:94,


示例15: ubi_io_read

/** * ubi_io_read - read data from a physical eraseblock. * @ubi: UBI device description object * @buf: buffer where to store the read data * @pnum: physical eraseblock number to read from * @offset: offset within the physical eraseblock from where to read * @len: how many bytes to read * * This function reads data from offset @offset of physical eraseblock @pnum * and stores the read data in the @buf buffer. The following return codes are * possible: * * o %0 if all the requested data were successfully read; * o %UBI_IO_BITFLIPS if all the requested data were successfully read, but *   correctable bit-flips were detected; this is harmless but may indicate *   that this eraseblock may become bad soon (but do not have to); * o %-EBADMSG if the MTD subsystem reported about data integrity problems, for *   example it can be an ECC error in case of NAND; this most probably means *   that the data is corrupted; * o %-EIO if some I/O error occurred; * o other negative error codes in case of other errors. */int ubi_io_read(const struct ubi_device *ubi, void *buf, int pnum, int offset,		int len){	int err, retries = 0;	size_t read;	loff_t addr;	dbg_io("read %d bytes from PEB %d:%d", len, pnum, offset);	ubi_assert(pnum >= 0 && pnum < ubi->peb_count);	ubi_assert(offset >= 0 && offset + len <= ubi->peb_size);	ubi_assert(len > 0);	err = paranoid_check_not_bad(ubi, pnum);	if (err)		return err;	addr = (loff_t)pnum * ubi->peb_size + offset;retry:	err = ubi->mtd->read(ubi->mtd, addr, len, &read, buf);	if (err == -EUCLEAN)	err = 0;	//added by Elvis, for ignore EUCLEAN	if (err) {		if (err == -EUCLEAN) {			/*			 * -EUCLEAN is reported if there was a bit-flip which			 * was corrected, so this is harmless.			 *			 * We do not report about it here unless debugging is			 * enabled. A corresponding message will be printed			 * later, when it is has been scrubbed.			 */			dbg_msg("fixable bit-flip detected at PEB %d", pnum);			ubi_assert(len == read);			return UBI_IO_BITFLIPS;		}		if (read != len && retries++ < UBI_IO_RETRIES) {			dbg_io("error %d while reading %d bytes from PEB %d:%d,"			       " read only %zd bytes, retry",			       err, len, pnum, offset, read);			yield();			goto retry;		}		ubi_err("error %d while reading %d bytes from PEB %d:%d, "			"read %zd bytes", err, len, pnum, offset, read);		ubi_dbg_dump_stack();		/*		 * The driver should never return -EBADMSG if it failed to read		 * all the requested data. But some buggy drivers might do		 * this, so we change it to -EIO.		 */		if (read != len && err == -EBADMSG) {			ubi_assert(0);			err = -EIO;		}	} else {		ubi_assert(len == read);		if (ubi_dbg_is_bitflip()) {			dbg_gen("bit-flip (emulated)");			err = UBI_IO_BITFLIPS;		}	}	return err;}
开发者ID:KaZoom,项目名称:buildroot-linux-kernel-m3,代码行数:90,


示例16: ubi_io_read

/** * ubi_io_read - read data from a physical eraseblock. * @ubi: UBI device description object * @buf: buffer where to store the read data * @pnum: physical eraseblock number to read from * @offset: offset within the physical eraseblock from where to read * @len: how many bytes to read * * This function reads data from offset @offset of physical eraseblock @pnum * and stores the read data in the @buf buffer. The following return codes are * possible: * * o %0 if all the requested data were successfully read; * o %UBI_IO_BITFLIPS if all the requested data were successfully read, but *   correctable bit-flips were detected; this is harmless but may indicate *   that this eraseblock may become bad soon (but do not have to); * o %-EBADMSG if the MTD subsystem reported about data integrity problems, for *   example it can be an ECC error in case of NAND; this most probably means *   that the data is corrupted; * o %-EIO if some I/O error occurred; * o other negative error codes in case of other errors. */int ubi_io_read(const struct ubi_device *ubi, void *buf, int pnum, int offset,		int len){	int err, retries = 0;	size_t read;	loff_t addr;	dbg_io("read %d bytes from PEB %d:%d", len, pnum, offset);	ubi_assert(pnum >= 0 && pnum < ubi->peb_count);	ubi_assert(offset >= 0 && offset + len <= ubi->peb_size);	ubi_assert(len > 0);	err = paranoid_check_not_bad(ubi, pnum);	if (err)		return err > 0 ? -EINVAL : err;	addr = (loff_t)pnum * ubi->peb_size + offset;retry:	err = ubi->mtd->read(ubi->mtd, addr, len, &read, buf);	if (err) {		if (err == -EUCLEAN) {			/*			 * -EUCLEAN is reported if there was a bit-flip which			 * was corrected, so this is harmless.			 */			ubi_msg("fixable bit-flip detected at PEB %d", pnum);			ubi_assert(len == read);			return UBI_IO_BITFLIPS;		}		if (read != len && retries++ < UBI_IO_RETRIES) {			dbg_io("error %d while reading %d bytes from PEB %d:%d, "			       "read only %zd bytes, retry",			       err, len, pnum, offset, read);			yield();			goto retry;		}		ubi_err("error %d while reading %d bytes from PEB %d:%d, "			"read %zd bytes", err, len, pnum, offset, read);		ubi_dbg_dump_stack();		/*		 * The driver should never return -EBADMSG if it failed to read		 * all the requested data. But some buggy drivers might do		 * this, so we change it to -EIO.		 */		if (read != len && err == -EBADMSG) {			ubi_assert(0);			printk("%s[%d] not here/n", __func__, __LINE__);/*			err = -EIO; */		}	} else {		ubi_assert(len == read);		if (ubi_dbg_is_bitflip()) {			dbg_msg("bit-flip (emulated)");			err = UBI_IO_BITFLIPS;		}	}	return err;}
开发者ID:Jokymon,项目名称:barebox,代码行数:86,


示例17: validate_vid_hdr

//.........这里部分代码省略.........	int data_crc = be32_to_cpu(vid_hdr->data_crc);	int usable_leb_size = ubi->leb_size - data_pad;	if (copy_flag != 0 && copy_flag != 1) {		dbg_err("bad copy_flag");		goto bad;	}	if (vol_id < 0 || lnum < 0 || data_size < 0 || used_ebs < 0 ||	    data_pad < 0) {		dbg_err("negative values");		goto bad;	}	if (vol_id >= UBI_MAX_VOLUMES && vol_id < UBI_INTERNAL_VOL_START) {		dbg_err("bad vol_id");		goto bad;	}	if (vol_id < UBI_INTERNAL_VOL_START && compat != 0) {		dbg_err("bad compat");		goto bad;	}	if (vol_id >= UBI_INTERNAL_VOL_START && compat != UBI_COMPAT_DELETE &&	    compat != UBI_COMPAT_RO && compat != UBI_COMPAT_PRESERVE &&	    compat != UBI_COMPAT_REJECT) {		dbg_err("bad compat");		goto bad;	}	if (vol_type != UBI_VID_DYNAMIC && vol_type != UBI_VID_STATIC) {		dbg_err("bad vol_type");		goto bad;	}	if (data_pad >= ubi->leb_size / 2) {		dbg_err("bad data_pad");		goto bad;	}	if (vol_type == UBI_VID_STATIC) {		/*		 * Although from high-level point of view static volumes may		 * contain zero bytes of data, but no VID headers can contain		 * zero at these fields, because they empty volumes do not have		 * mapped logical eraseblocks.		 */		if (used_ebs == 0) {			dbg_err("zero used_ebs");			goto bad;		}		if (data_size == 0) {			dbg_err("zero data_size");			goto bad;		}		if (lnum < used_ebs - 1) {			if (data_size != usable_leb_size) {				dbg_err("bad data_size");				goto bad;			}		} else if (lnum == used_ebs - 1) {			if (data_size == 0) {				dbg_err("bad data_size at last LEB");				goto bad;			}		} else {			dbg_err("too high lnum");			goto bad;		}	} else {		if (copy_flag == 0) {			if (data_crc != 0) {				dbg_err("non-zero data CRC");				goto bad;			}			if (data_size != 0) {				dbg_err("non-zero data_size");				goto bad;			}		} else {			if (data_size == 0) {				dbg_err("zero data_size of copy");				goto bad;			}		}		if (used_ebs != 0) {			dbg_err("bad used_ebs");			goto bad;		}	}	return 0;bad:	ubi_err("bad VID header");	ubi_dbg_dump_vid_hdr(vid_hdr);	ubi_dbg_dump_stack();	return 1;}
开发者ID:KaZoom,项目名称:buildroot-linux-kernel-m3,代码行数:101,


示例18: ubi_io_read

/** * ubi_io_read - read data from a physical eraseblock. * @ubi: UBI device description object * @buf: buffer where to store the read data * @pnum: physical eraseblock number to read from * @offset: offset within the physical eraseblock from where to read * @len: how many bytes to read * * This function reads data from offset @offset of physical eraseblock @pnum * and stores the read data in the @buf buffer. The following return codes are * possible: * * o %0 if all the requested data were successfully read; * o %UBI_IO_BITFLIPS if all the requested data were successfully read, but *   correctable bit-flips were detected; this is harmless but may indicate *   that this eraseblock may become bad soon (but do not have to); * o %-EBADMSG if the MTD subsystem reported about data integrity problems, for *   example it can be an ECC error in case of NAND; this most probably means *   that the data is corrupted; * o %-EIO if some I/O error occurred; * o other negative error codes in case of other errors. */int ubi_io_read(const struct ubi_device *ubi, void *buf, int pnum, int offset,		int len){	int err, retries = 0;	size_t read;	loff_t addr;	dbg_io("read %d bytes from PEB %d:%d", len, pnum, offset);	ubi_assert(pnum >= 0 && pnum < ubi->peb_count);	ubi_assert(offset >= 0 && offset + len <= ubi->peb_size);	ubi_assert(len > 0);	err = paranoid_check_not_bad(ubi, pnum);	if (err)		return err;	/*	 * Deliberately corrupt the buffer to improve robustness. Indeed, if we	 * do not do this, the following may happen:	 * 1. The buffer contains data from previous operation, e.g., read from	 *    another PEB previously. The data looks like expected, e.g., if we	 *    just do not read anything and return - the caller would not	 *    notice this. E.g., if we are reading a VID header, the buffer may	 *    contain a valid VID header from another PEB.	 * 2. The driver is buggy and returns us success or -EBADMSG or	 *    -EUCLEAN, but it does not actually put any data to the buffer.	 *	 * This may confuse UBI or upper layers - they may think the buffer	 * contains valid data while in fact it is just old data. This is	 * especially possible because UBI (and UBIFS) relies on CRC, and	 * treats data as correct even in case of ECC errors if the CRC is	 * correct.	 *	 * Try to prevent this situation by changing the first byte of the	 * buffer.	 */	*((uint8_t *)buf) ^= 0xFF;	addr = (loff_t)pnum * ubi->peb_size + offset;retry:	err = mtd_read(ubi->mtd, addr, len, &read, buf);	if (err) {		const char *errstr = mtd_is_eccerr(err) ? " (ECC error)" : "";		if (mtd_is_bitflip(err)) {			/*			 * -EUCLEAN is reported if there was a bit-flip which			 * was corrected, so this is harmless.			 *			 * We do not report about it here unless debugging is			 * enabled. A corresponding message will be printed			 * later, when it is has been scrubbed.			 */			dbg_msg("fixable bit-flip detected at PEB %d", pnum);			ubi_assert(len == read);			return UBI_IO_BITFLIPS;		}		if (retries++ < UBI_IO_RETRIES) {			dbg_io("error %d%s while reading %d bytes from PEB "			       "%d:%d, read only %zd bytes, retry",			       err, errstr, len, pnum, offset, read);			yield();			goto retry;		}		ubi_err("error %d%s while reading %d bytes from PEB %d:%d, "			"read %zd bytes", err, errstr, len, pnum, offset, read);		ubi_dbg_dump_stack();		/*		 * The driver should never return -EBADMSG if it failed to read		 * all the requested data. But some buggy drivers might do		 * this, so we change it to -EIO.		 */		if (read != len && mtd_is_eccerr(err)) {			ubi_assert(0);//.........这里部分代码省略.........
开发者ID:blackrebel75,项目名称:HUAWEI89_WE_KK_700,代码行数:101,



注:本文中的ubi_dbg_dump_stack函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


C++ ubi_dbg_dump_vid_hdr函数代码示例
C++ ubi_assert函数代码示例
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。