forked from mirrors/linux
		
	bitfield.h: add FIELD_FIT() helper
Add a helper for checking at runtime that a value will fit inside a specified field/mask. Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
		
							parent
							
								
									4f2bd6b35b
								
							
						
					
					
						commit
						1697599ee3
					
				
					 2 changed files with 13 additions and 2 deletions
				
			
		|  | @ -39,8 +39,6 @@ | ||||||
| #include <linux/list.h> | #include <linux/list.h> | ||||||
| #include <linux/types.h> | #include <linux/types.h> | ||||||
| 
 | 
 | ||||||
| #define FIELD_FIT(mask, val)  (!((((u64)val) << __bf_shf(mask)) & ~(mask))) |  | ||||||
| 
 |  | ||||||
| /* For branch fixup logic use up-most byte of branch instruction as scratch
 | /* For branch fixup logic use up-most byte of branch instruction as scratch
 | ||||||
|  * area.  Remember to clear this before sending instructions to HW! |  * area.  Remember to clear this before sending instructions to HW! | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
|  | @ -62,6 +62,19 @@ | ||||||
| 					      (1ULL << __bf_shf(_mask))); \ | 					      (1ULL << __bf_shf(_mask))); \ | ||||||
| 	}) | 	}) | ||||||
| 
 | 
 | ||||||
|  | /**
 | ||||||
|  |  * FIELD_FIT() - check if value fits in the field | ||||||
|  |  * @_mask: shifted mask defining the field's length and position | ||||||
|  |  * @_val:  value to test against the field | ||||||
|  |  * | ||||||
|  |  * Return: true if @_val can fit inside @_mask, false if @_val is too big. | ||||||
|  |  */ | ||||||
|  | #define FIELD_FIT(_mask, _val)						\ | ||||||
|  | 	({								\ | ||||||
|  | 		__BF_FIELD_CHECK(_mask, 0ULL, _val, "FIELD_FIT: ");	\ | ||||||
|  | 		!((((typeof(_mask))_val) << __bf_shf(_mask)) & ~(_mask)); \ | ||||||
|  | 	}) | ||||||
|  | 
 | ||||||
| /**
 | /**
 | ||||||
|  * FIELD_PREP() - prepare a bitfield element |  * FIELD_PREP() - prepare a bitfield element | ||||||
|  * @_mask: shifted mask defining the field's length and position |  * @_mask: shifted mask defining the field's length and position | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 Jakub Kicinski
						Jakub Kicinski