函数逻辑报告

Linux Kernel

v5.5.9

Brick Technologies Co., Ltd

Source Code:lib\842\842_compress.c Create Date:2022-07-27 07:54:39
Last Modify:2020-03-12 14:18:49 Copyright©Brick
首页 函数Tree
注解内核,赢得工具下载SCCTEnglish

函数名称:sw842_compress* Compress the uncompressed buffer of length @ilen at @in to the output buffer*@out, using no more than @olen bytes, using the 842 compression format

函数原型:int sw842_compress(const u8 *in, unsigned int ilen, u8 *out, unsigned int *olen, void *wmem)

返回类型:int

参数:

类型参数名称
const u8 *in
unsigned intilen
u8 *out
unsigned int *olen
void *wmem
480  p等于wmem
483  repeat_count等于0
486  BUILD_BUG_ON - break compile if a condition is true(p的长度 > SW842_MEM_COMPRESS)
488  init_hashtable_nodes(p, 8)
489  init_hashtable_nodes(p, 4)
490  init_hashtable_nodes(p, 2)
492  in等于in
493  instart等于in
494  ilen等于ilen
495  out等于out
496  olen等于olen
497  bit等于0
499  total等于olen
501  olen等于0
504  如果By default, we allow compressing input buffers of any length, but we must* use the non-standard "short data" template so the decompressor can correctly* reproduce the uncompressed data buffer at the right lengthilen取模8则
505  打印错误信息("Using strict mode, can't compress len %d\n", ilen)
506  返回:负EINVAL
510  如果此条件成立可能性小(为编译器优化)(ilen < 8)则转到:skip_comp
514  last等于get_unaligned((u64 * )in)的反
516 ilen大于7循环
517  next等于get_unaligned((u64 * )in)
522  get_next_data(p)
528  如果next恒等于last
530  如果repeat_count先自加小于等于REPEAT_BITS_MAX则转到:repeat
533  如果repeat_count
535  repeat_count等于0
536  如果next恒等于last则转到:repeat
540  如果next恒等于0则ret等于add_zeros_template(p)
542  否则ret等于d the next template to use, and add it* the p->dataN fields must already be set for the current 8 byte block
545  如果ret则返回:ret
548  repeat :
549  last等于next
550  pdate the hashtable entries.* only call this after finding/adding the current template* the dataN fields for the current 8 byte block must be already updated
551  in加等于8
552  ilen减等于8
555  如果repeat_count
556  ret等于add_repeat_template(p, repeat_count)
557  如果ret则返回:ret
561  skip_comp :
562  如果ilen大于0则
563  ret等于add_short_data_template(p, ilen)
564  如果ret则返回:ret
567  in加等于ilen
568  ilen等于0
571  ret等于add_end_template(p)
572  如果ret则返回:ret
582  crc等于crc32_be(0, in, ilen)
583  ret等于add_bits(p, crc, CRC_BITS)
584  如果ret则返回:ret
587  如果bit
588  out自加
589  olen自减
590  bit等于0
594  pad等于8减totalolen的差取模8的差取模8
595  如果pad
596  如果pad大于olen则返回:负ENOSPC
598  memset(out, 0, pad)
599  out加等于pad
600  olen减等于pad
603  如果此条件成立可能性小(为编译器优化)((total - olen) > UINT_MAX)则返回:负ENOSPC
606  olen等于totalolen
608  返回:0