[bpf-next:master 19/30] htmldocs: Documentation/bpf/standardization/instruction-set.rst:157: WARNING: Malformed table.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



tree:   https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git master
head:   eb03993a60780589e06e04a4dc23fda62b905ca6
commit: 245d4c40c09bd8d5a71640950eeb074880925b9a [19/30] docs/bpf: Add documentation for new instructions
reproduce: (https://download.01.org/0day-ci/archive/20230729/202307291840.Cqhj7uox-lkp@xxxxxxxxx/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@xxxxxxxxx>
| Closes: https://lore.kernel.org/oe-kbuild-all/202307291840.Cqhj7uox-lkp@xxxxxxxxx/

All warnings (new ones prefixed by >>):

>> Documentation/bpf/standardization/instruction-set.rst:157: WARNING: Malformed table.
>> Documentation/bpf/standardization/instruction-set.rst:354: WARNING: Unknown target name: "sign-extension load operations".

vim +157 Documentation/bpf/standardization/instruction-set.rst

   156	
 > 157	========  =====  =======  ==========================================================
   158	code      value  offset   description
   159	========  =====  =======  ==========================================================
   160	BPF_ADD   0x00   0        dst += src
   161	BPF_SUB   0x10   0        dst -= src
   162	BPF_MUL   0x20   0        dst \*= src
   163	BPF_DIV   0x30   0        dst = (src != 0) ? (dst / src) : 0
   164	BPF_SDIV  0x30   1        dst = (src != 0) ? (dst s/ src) : 0
   165	BPF_OR    0x40   0        dst \|= src
   166	BPF_AND   0x50   0        dst &= src
   167	BPF_LSH   0x60   0        dst <<= (src & mask)
   168	BPF_RSH   0x70   0        dst >>= (src & mask)
   169	BPF_NEG   0x80   0        dst = -dst
   170	BPF_MOD   0x90   0        dst = (src != 0) ? (dst % src) : dst
   171	BPF_SMOD  0x90   1        dst = (src != 0) ? (dst s% src) : dst
   172	BPF_XOR   0xa0   0        dst ^= src
   173	BPF_MOV   0xb0   0        dst = src
   174	BPF_MOVSX 0xb0   8/16/32  dst = (s8,s16,s32)src
   175	BPF_ARSH  0xc0   0        sign extending dst >>= (src & mask)
   176	BPF_END   0xd0   0        byte swap operations (see `Byte swap instructions`_ below)
   177	========  =====  ============  ==========================================================
   178	
   179	Underflow and overflow are allowed during arithmetic operations, meaning
   180	the 64-bit or 32-bit value will wrap. If eBPF program execution would
   181	result in division by zero, the destination register is instead set to zero.
   182	If execution would result in modulo by zero, for ``BPF_ALU64`` the value of
   183	the destination register is unchanged whereas for ``BPF_ALU`` the upper
   184	32 bits of the destination register are zeroed.
   185	
   186	``BPF_ADD | BPF_X | BPF_ALU`` means::
   187	
   188	  dst = (u32) ((u32) dst + (u32) src)
   189	
   190	where '(u32)' indicates that the upper 32 bits are zeroed.
   191	
   192	``BPF_ADD | BPF_X | BPF_ALU64`` means::
   193	
   194	  dst = dst + src
   195	
   196	``BPF_XOR | BPF_K | BPF_ALU`` means::
   197	
   198	  dst = (u32) dst ^ (u32) imm32
   199	
   200	``BPF_XOR | BPF_K | BPF_ALU64`` means::
   201	
   202	  dst = dst ^ imm32
   203	
   204	Note that most instructions have instruction offset of 0. But three instructions
   205	(BPF_SDIV, BPF_SMOD, BPF_MOVSX) have non-zero offset.
   206	
   207	The devision and modulo operations support both unsigned and signed flavors.
   208	For unsigned operation (BPF_DIV and BPF_MOD), for ``BPF_ALU``, 'imm' is first
   209	interpreted as an unsigned 32-bit value, whereas for ``BPF_ALU64``, 'imm' is
   210	first sign extended to 64 bits and the result interpreted as an unsigned 64-bit
   211	value.  For signed operation (BPF_SDIV and BPF_SMOD), for ``BPF_ALU``, 'imm' is
   212	interpreted as a signed value. For ``BPF_ALU64``, the 'imm' is sign extended
   213	from 32 to 64 and interpreted as a signed 64-bit value.
   214	
   215	Instruction BPF_MOVSX does move operation with sign extension.
   216	``BPF_ALU | MOVSX`` sign extendes 8-bit and 16-bit into 32-bit and upper 32-bit are zeroed.
   217	``BPF_ALU64 | MOVSX`` sign extends 8-bit, 16-bit and 32-bit into 64-bit.
   218	
   219	Shift operations use a mask of 0x3F (63) for 64-bit operations and 0x1F (31)
   220	for 32-bit operations.
   221	
   222	Byte swap instructions
   223	~~~~~~~~~~~~~~~~~~~~~~
   224	
   225	The byte swap instructions use instruction classes of ``BPF_ALU`` and ``BPF_ALU64``
   226	and a 4-bit 'code' field of ``BPF_END``.
   227	
   228	The byte swap instructions operate on the destination register
   229	only and do not use a separate source register or immediate value.
   230	
   231	For ``BPF_ALU``, the 1-bit source operand field in the opcode is used to select what byte
   232	order the operation convert from or to. For ``BPF_ALU64``, the 1-bit source operand
   233	field in the opcode is not used and must be 0.
   234	
   235	=========  =========  =====  =================================================
   236	class      source     value  description
   237	=========  =========  =====  =================================================
   238	BPF_ALU    BPF_TO_LE  0x00   convert between host byte order and little endian
   239	BPF_ALU    BPF_TO_BE  0x08   convert between host byte order and big endian
   240	BPF_ALU64  BPF_TO_LE  0x00   do byte swap unconditionally
   241	=========  =========  =====  =================================================
   242	
   243	The 'imm' field encodes the width of the swap operations.  The following widths
   244	are supported: 16, 32 and 64.
   245	
   246	Examples:
   247	
   248	``BPF_ALU | BPF_TO_LE | BPF_END`` with imm = 16 means::
   249	
   250	  dst = htole16(dst)
   251	
   252	``BPF_ALU | BPF_TO_BE | BPF_END`` with imm = 64 means::
   253	
   254	  dst = htobe64(dst)
   255	
   256	``BPF_ALU64 | BPF_TO_LE | BPF_END`` with imm = 16/32/64 means::
   257	
   258	  dst = bswap16 dst
   259	  dst = bswap32 dst
   260	  dst = bswap64 dst
   261	
   262	Jump instructions
   263	-----------------
   264	
   265	``BPF_JMP32`` uses 32-bit wide operands while ``BPF_JMP`` uses 64-bit wide operands for
   266	otherwise identical operations.
   267	The 'code' field encodes the operation as below:
   268	
   269	========  =====  ===  ===========================================  =========================================
   270	code      value  src  description                                  notes
   271	========  =====  ===  ===========================================  =========================================
   272	BPF_JA    0x0    0x0  PC += offset                                 BPF_JMP class
   273	BPF_JA    0x0    0x0  PC += imm                                    BPF_JMP32 class
   274	BPF_JEQ   0x1    any  PC += offset if dst == src
   275	BPF_JGT   0x2    any  PC += offset if dst > src                    unsigned
   276	BPF_JGE   0x3    any  PC += offset if dst >= src                   unsigned
   277	BPF_JSET  0x4    any  PC += offset if dst & src
   278	BPF_JNE   0x5    any  PC += offset if dst != src
   279	BPF_JSGT  0x6    any  PC += offset if dst > src                    signed
   280	BPF_JSGE  0x7    any  PC += offset if dst >= src                   signed
   281	BPF_CALL  0x8    0x0  call helper function by address              see `Helper functions`_
   282	BPF_CALL  0x8    0x1  call PC += offset                            see `Program-local functions`_
   283	BPF_CALL  0x8    0x2  call helper function by BTF ID               see `Helper functions`_
   284	BPF_EXIT  0x9    0x0  return                                       BPF_JMP only
   285	BPF_JLT   0xa    any  PC += offset if dst < src                    unsigned
   286	BPF_JLE   0xb    any  PC += offset if dst <= src                   unsigned
   287	BPF_JSLT  0xc    any  PC += offset if dst < src                    signed
   288	BPF_JSLE  0xd    any  PC += offset if dst <= src                   signed
   289	========  =====  ===  ===========================================  =========================================
   290	
   291	The eBPF program needs to store the return value into register R0 before doing a
   292	``BPF_EXIT``.
   293	
   294	Example:
   295	
   296	``BPF_JSGE | BPF_X | BPF_JMP32`` (0x7e) means::
   297	
   298	  if (s32)dst s>= (s32)src goto +offset
   299	
   300	where 's>=' indicates a signed '>=' comparison.
   301	
   302	``BPF_JA | BPF_K | BPF_JMP32`` (0x06) means::
   303	
   304	  gotol +imm
   305	
   306	where 'imm' means the branch offset comes from insn 'imm' field.
   307	
   308	Note there are two flavors of BPF_JA instrions. BPF_JMP class permits 16-bit jump offset while
   309	BPF_JMP32 permits 32-bit jump offset. A >16bit conditional jmp can be converted to a <16bit
   310	conditional jmp plus a 32-bit unconditional jump.
   311	
   312	Helper functions
   313	~~~~~~~~~~~~~~~~
   314	
   315	Helper functions are a concept whereby BPF programs can call into a
   316	set of function calls exposed by the underlying platform.
   317	
   318	Historically, each helper function was identified by an address
   319	encoded in the imm field.  The available helper functions may differ
   320	for each program type, but address values are unique across all program types.
   321	
   322	Platforms that support the BPF Type Format (BTF) support identifying
   323	a helper function by a BTF ID encoded in the imm field, where the BTF ID
   324	identifies the helper name and type.
   325	
   326	Program-local functions
   327	~~~~~~~~~~~~~~~~~~~~~~~
   328	Program-local functions are functions exposed by the same BPF program as the
   329	caller, and are referenced by offset from the call instruction, similar to
   330	``BPF_JA``.  A ``BPF_EXIT`` within the program-local function will return to
   331	the caller.
   332	
   333	Load and store instructions
   334	===========================
   335	
   336	For load and store instructions (``BPF_LD``, ``BPF_LDX``, ``BPF_ST``, and ``BPF_STX``), the
   337	8-bit 'opcode' field is divided as:
   338	
   339	============  ======  =================
   340	3 bits (MSB)  2 bits  3 bits (LSB)
   341	============  ======  =================
   342	mode          size    instruction class
   343	============  ======  =================
   344	
   345	The mode modifier is one of:
   346	
   347	  =============  =====  ====================================  =============
   348	  mode modifier  value  description                           reference
   349	  =============  =====  ====================================  =============
   350	  BPF_IMM        0x00   64-bit immediate instructions         `64-bit immediate instructions`_
   351	  BPF_ABS        0x20   legacy BPF packet access (absolute)   `Legacy BPF Packet access instructions`_
   352	  BPF_IND        0x40   legacy BPF packet access (indirect)   `Legacy BPF Packet access instructions`_
   353	  BPF_MEM        0x60   regular load and store operations     `Regular load and store operations`_
 > 354	  BPF_MEMSX      0x80   sign-extension load operations        `Sign-extension load operations`_
   355	  BPF_ATOMIC     0xc0   atomic operations                     `Atomic operations`_
   356	  =============  =====  ====================================  =============
   357	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki



[Index of Archives]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Linux FS]     [Yosemite Forum]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]

  Powered by Linux