forked from mirrors/linux
		
	 242cdad873
			
		
	
	
		242cdad873
		
	
	
	
	
		
			
			This fixes a regression introduced byfaa16bc404("lib: Use existing define with polynomial"). The cleanup added a dependency on include/linux, which broke the PowerPC boot wrapper/decompresser when KERNEL_XZ is enabled: BOOTCC arch/powerpc/boot/decompress.o In file included from arch/powerpc/boot/../../../lib/decompress_unxz.c:233, from arch/powerpc/boot/decompress.c:42: arch/powerpc/boot/../../../lib/xz/xz_crc32.c:18:10: fatal error: linux/crc32poly.h: No such file or directory #include <linux/crc32poly.h> ^~~~~~~~~~~~~~~~~~~ The powerpc decompresser is a hairy corner of the kernel. Even while building a 64-bit kernel it needs to build a 32-bit binary and therefore avoid including files from include/linux. This allows users of the xz library to avoid including headers from 'include/linux/' while still achieving the cleanup of the magic number. Fixes:faa16bc404("lib: Use existing define with polynomial") Reported-by: Meelis Roos <mroos@linux.ee> Reported-by: kbuild test robot <lkp@intel.com> Suggested-by: Christophe LEROY <christophe.leroy@c-s.fr> Signed-off-by: Joel Stanley <joel@jms.id.au> Tested-by: Meelis Roos <mroos@linux.ee> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
		
			
				
	
	
		
			59 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			59 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * CRC32 using the polynomial from IEEE-802.3
 | |
|  *
 | |
|  * Authors: Lasse Collin <lasse.collin@tukaani.org>
 | |
|  *          Igor Pavlov <http://7-zip.org/>
 | |
|  *
 | |
|  * This file has been put into the public domain.
 | |
|  * You can do whatever you want with this file.
 | |
|  */
 | |
| 
 | |
| /*
 | |
|  * This is not the fastest implementation, but it is pretty compact.
 | |
|  * The fastest versions of xz_crc32() on modern CPUs without hardware
 | |
|  * accelerated CRC instruction are 3-5 times as fast as this version,
 | |
|  * but they are bigger and use more memory for the lookup table.
 | |
|  */
 | |
| 
 | |
| #include "xz_private.h"
 | |
| 
 | |
| /*
 | |
|  * STATIC_RW_DATA is used in the pre-boot environment on some architectures.
 | |
|  * See <linux/decompress/mm.h> for details.
 | |
|  */
 | |
| #ifndef STATIC_RW_DATA
 | |
| #	define STATIC_RW_DATA static
 | |
| #endif
 | |
| 
 | |
| STATIC_RW_DATA uint32_t xz_crc32_table[256];
 | |
| 
 | |
| XZ_EXTERN void xz_crc32_init(void)
 | |
| {
 | |
| 	const uint32_t poly = CRC32_POLY_LE;
 | |
| 
 | |
| 	uint32_t i;
 | |
| 	uint32_t j;
 | |
| 	uint32_t r;
 | |
| 
 | |
| 	for (i = 0; i < 256; ++i) {
 | |
| 		r = i;
 | |
| 		for (j = 0; j < 8; ++j)
 | |
| 			r = (r >> 1) ^ (poly & ~((r & 1) - 1));
 | |
| 
 | |
| 		xz_crc32_table[i] = r;
 | |
| 	}
 | |
| 
 | |
| 	return;
 | |
| }
 | |
| 
 | |
| XZ_EXTERN uint32_t xz_crc32(const uint8_t *buf, size_t size, uint32_t crc)
 | |
| {
 | |
| 	crc = ~crc;
 | |
| 
 | |
| 	while (size != 0) {
 | |
| 		crc = xz_crc32_table[*buf++ ^ (crc & 0xFF)] ^ (crc >> 8);
 | |
| 		--size;
 | |
| 	}
 | |
| 
 | |
| 	return ~crc;
 | |
| }
 |