]> git.pld-linux.org Git - packages/fio.git/commitdiff
- use SIGKILL instead of cpuid
authorlisu <lisu@pld-linux.org>
Mon, 12 Jul 2010 10:55:16 +0000 (10:55 +0000)
committercvs2git <feedback@pld-linux.org>
Sun, 24 Jun 2012 12:13:13 +0000 (12:13 +0000)
Changed files:
    fio-crc32c-intel.patch -> 1.1

fio-crc32c-intel.patch [new file with mode: 0644]

diff --git a/fio-crc32c-intel.patch b/fio-crc32c-intel.patch
new file mode 100644 (file)
index 0000000..b2b29d9
--- /dev/null
@@ -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 */
This page took 0.074444 seconds and 4 git commands to generate.