forked from mirrors/linux
		
	random: simplify accounting logic
This logic is exactly equivalent to the old logic, but it should be easier to see what it's doing. The equivalence depends on one fact from outside this function: when 'r->limit' is false, 'reserved' is zero. (Well, two facts; the other is that 'reserved' is never negative.) Cc: Jiri Kosina <jkosina@suse.cz> Cc: "H. Peter Anvin" <hpa@zytor.com> Signed-off-by: Greg Price <price@mit.edu> Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
This commit is contained in:
		
							parent
							
								
									19fa5be1d9
								
							
						
					
					
						commit
						ee1de406ba
					
				
					 1 changed files with 4 additions and 8 deletions
				
			
		| 
						 | 
					@ -984,14 +984,10 @@ static size_t account(struct entropy_store *r, size_t nbytes, int min,
 | 
				
			||||||
		ibytes = 0;
 | 
							ibytes = 0;
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		/* If limited, never pull more than available */
 | 
							/* If limited, never pull more than available */
 | 
				
			||||||
		if (r->limit && ibytes + reserved >= have_bytes)
 | 
							if (r->limit)
 | 
				
			||||||
			ibytes = have_bytes - reserved;
 | 
								ibytes = min_t(size_t, ibytes, have_bytes - reserved);
 | 
				
			||||||
 | 
							entropy_count = max_t(int, 0,
 | 
				
			||||||
		if (have_bytes >= ibytes + reserved)
 | 
								    entropy_count - (ibytes << (ENTROPY_SHIFT + 3)));
 | 
				
			||||||
			entropy_count -= ibytes << (ENTROPY_SHIFT + 3);
 | 
					 | 
				
			||||||
		else
 | 
					 | 
				
			||||||
			entropy_count = reserved << (ENTROPY_SHIFT + 3);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		if (cmpxchg(&r->entropy_count, orig, entropy_count) != orig)
 | 
							if (cmpxchg(&r->entropy_count, orig, entropy_count) != orig)
 | 
				
			||||||
			goto retry;
 | 
								goto retry;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue