Annotation of qemu/cache-utils.c, revision 1.1.1.2

1.1       root        1: #include "cache-utils.h"
                      2: 
                      3: #if defined(_ARCH_PPC)
                      4: struct qemu_cache_conf qemu_cache_conf = {
                      5:     .dcache_bsize = 16,
                      6:     .icache_bsize = 16
                      7: };
                      8: 
                      9: #if defined _AIX
                     10: #include <sys/systemcfg.h>
                     11: 
                     12: static void ppc_init_cacheline_sizes(void)
                     13: {
                     14:     qemu_cache_conf.icache_bsize = _system_configuration.icache_line;
                     15:     qemu_cache_conf.dcache_bsize = _system_configuration.dcache_line;
                     16: }
                     17: 
                     18: #elif defined __linux__
                     19: 
                     20: #define QEMU_AT_NULL        0
                     21: #define QEMU_AT_DCACHEBSIZE 19
                     22: #define QEMU_AT_ICACHEBSIZE 20
                     23: 
                     24: static void ppc_init_cacheline_sizes(char **envp)
                     25: {
                     26:     unsigned long *auxv;
                     27: 
                     28:     while (*envp++);
                     29: 
                     30:     for (auxv = (unsigned long *) envp; *auxv != QEMU_AT_NULL; auxv += 2) {
                     31:         switch (*auxv) {
                     32:         case QEMU_AT_DCACHEBSIZE: qemu_cache_conf.dcache_bsize = auxv[1]; break;
                     33:         case QEMU_AT_ICACHEBSIZE: qemu_cache_conf.icache_bsize = auxv[1]; break;
                     34:         default: break;
                     35:         }
                     36:     }
                     37: }
                     38: 
                     39: #elif defined __APPLE__
                     40: #include <stdio.h>
                     41: #include <sys/types.h>
                     42: #include <sys/sysctl.h>
                     43: 
                     44: static void ppc_init_cacheline_sizes(void)
                     45: {
                     46:     size_t len;
                     47:     unsigned cacheline;
                     48:     int name[2] = { CTL_HW, HW_CACHELINE };
                     49: 
                     50:     len = sizeof(cacheline);
                     51:     if (sysctl(name, 2, &cacheline, &len, NULL, 0)) {
                     52:         perror("sysctl CTL_HW HW_CACHELINE failed");
                     53:     } else {
                     54:         qemu_cache_conf.dcache_bsize = cacheline;
                     55:         qemu_cache_conf.icache_bsize = cacheline;
                     56:     }
                     57: }
                     58: #endif
                     59: 
1.1.1.2 ! root       60: #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
        !            61: #include <errno.h>
        !            62: #include <stdio.h>
        !            63: #include <stdlib.h>
        !            64: #include <string.h>
        !            65: #include <sys/types.h>
        !            66: #include <sys/sysctl.h>
        !            67: 
        !            68: static void ppc_init_cacheline_sizes(void)
        !            69: {
        !            70:     size_t len = 4;
        !            71:     unsigned cacheline;
        !            72: 
        !            73:     if (sysctlbyname ("machdep.cacheline_size", &cacheline, &len, NULL, 0)) {
        !            74:         fprintf(stderr, "sysctlbyname machdep.cacheline_size failed: %s\n",
        !            75:                 strerror(errno));
        !            76:         exit(1);
        !            77:     }
        !            78: 
        !            79:     qemu_cache_conf.dcache_bsize = cacheline;
        !            80:     qemu_cache_conf.icache_bsize = cacheline;
        !            81: }
        !            82: #endif    
        !            83: 
1.1       root       84: #ifdef __linux__
                     85: void qemu_cache_utils_init(char **envp)
                     86: {
                     87:     ppc_init_cacheline_sizes(envp);
                     88: }
                     89: #else
                     90: void qemu_cache_utils_init(char **envp)
                     91: {
                     92:     (void) envp;
                     93:     ppc_init_cacheline_sizes();
                     94: }
                     95: #endif
                     96: 
                     97: #endif /* _ARCH_PPC */

unix.superglobalmegacorp.com