packages: fio/fio-crc32c-intel.patch (NEW) - use SIGKILL instead of cpuid

lisu lisu at pld-linux.org
Mon Jul 12 12:55:21 CEST 2010


Author: lisu                         Date: Mon Jul 12 10:55:21 2010 GMT
Module: packages                      Tag: HEAD
---- Log message:
- use SIGKILL instead of cpuid

---- Files affected:
packages/fio:
   fio-crc32c-intel.patch (NONE -> 1.1)  (NEW)

---- Diffs:

================================================================
Index: packages/fio/fio-crc32c-intel.patch
diff -u /dev/null packages/fio/fio-crc32c-intel.patch:1.1
--- /dev/null	Mon Jul 12 12:55:21 2010
+++ packages/fio/fio-crc32c-intel.patch	Mon Jul 12 12:55:16 2010
@@ -0,0 +1,58 @@
+--- fio-1.41.6/crc/crc32c-intel.c	2010-07-09 13:48:14.000000000 +0200
++++ fio-1.41.4/crc/crc32c-intel.c	2010-06-24 10:39:02.000000000 +0200
+@@ -74,30 +74,37 @@
+ 	return crc;
+ }
+ 
+-static void do_cpuid(unsigned int *eax, unsigned int *ebx, unsigned int *ecx,
+-		     unsigned int *edx)
++static void sig_ill(int sig)
+ {
+-	int id = *eax;
+-
+-	asm("movl %4, %%eax;"
+-	    "cpuid;"
+-	    "movl %%eax, %0;"
+-	    "movl %%ebx, %1;"
+-	    "movl %%ecx, %2;"
+-	    "movl %%edx, %3;"
+-		: "=r" (*eax), "=r" (*ebx), "=r" (*ecx), "=r" (*edx)
+-		: "r" (id)
+-		: "eax", "ebx", "ecx", "edx");
+ }
+ 
+-int crc32c_intel_works(void)
++static void crc32c_test(void)
+ {
+-	unsigned int eax, ebx, ecx, edx;
++	unsigned char buf[4] = { 1, 2, 3, 4 };
++	struct sigaction act;
++
++	/*
++	 * Check if hw accelerated crc32c is available
++	 */
++	memset(&act, 0, sizeof(act));
++	act.sa_handler = sig_ill;
++	act.sa_flags = SA_RESETHAND;
++	sigaction(SIGILL, &act, NULL);
+ 
+-	eax = 1;
++	(void) crc32c_intel(buf, sizeof(buf));
++}
+ 
+-	do_cpuid(&eax, &ebx, &ecx, &edx);
+-	return (ecx & (1 << 20)) != 0;
++int crc32c_intel_works(void)
++{
++	if (!fork()) {
++		crc32c_test();
++		exit(0);
++	} else {
++		int status;
++
++		wait(&status);
++		return !WIFSIGNALED(status);
++	}
+ }
+ 
+ #endif /* ARCH_HAVE_SSE */
================================================================


More information about the pld-cvs-commit mailing list