~ubuntu-branches/ubuntu/utopic/kde-workspace/utopic-proposed

« back to all changes in this revision

Viewing changes to kinfocenter/Modules/memory/memory_netbsd.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Michał Zając
  • Date: 2011-07-09 08:31:15 UTC
  • Revision ID: james.westby@ubuntu.com-20110709083115-ohyxn6z93mily9fc
Tags: upstream-4.6.90
Import upstream version 4.6.90

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
 
 
2
#include <sys/param.h>
 
3
#if __NetBSD_Version__ > 103080000
 
4
#define UVM
 
5
#endif
 
6
#if defined(__OpenBSD__)
 
7
#define UVM
 
8
#endif
 
9
 
 
10
#include <stdlib.h>
 
11
#include <unistd.h>
 
12
#include <sys/types.h>
 
13
#include <sys/sysctl.h>
 
14
#ifdef UVM
 
15
#include <uvm/uvm_extern.h>
 
16
#else
 
17
#include <vm/vm_swap.h>
 
18
#endif
 
19
 
 
20
void KCMMemory::fetchValues()
 
21
{
 
22
  int mib[2];
 
23
  size_t len;
 
24
#ifdef UVM
 
25
#if __NetBSD_Version__ > 106000000
 
26
  struct  uvmexp_sysctl uvmexp;
 
27
#else
 
28
  struct  uvmexp uvmexp;
 
29
#endif
 
30
#else
 
31
  struct swapent *swaplist;
 
32
  int64_t nswap, rnswap, totalswap, freeswap, usedswap;
 
33
#endif
 
34
#if __NetBSD_Version__ > 106170000 /* 1.6Q+ */
 
35
  quad_t memory;
 
36
#else
 
37
  int memory;
 
38
#endif
 
39
  
 
40
  /* memory */
 
41
#if __NetBSD_Version__ > 106170000 /* 1.6Q+ */
 
42
  mib[0] = CTL_HW;
 
43
  mib[1] = HW_PHYSMEM64; 
 
44
#else 
 
45
  mib[0] = CTL_HW;
 
46
  mib[1] = HW_PHYSMEM;
 
47
#endif
 
48
  len = sizeof(memory);
 
49
  if( sysctl(mib,2,&memory,&len,NULL,0)< 0 )
 
50
    memoryInfos[TOTAL_MEM]    = NO_MEMORY_INFO;
 
51
  else
 
52
    memoryInfos[TOTAL_MEM]    = memory;
 
53
 
 
54
#ifdef UVM
 
55
  mib[0] = CTL_VM;
 
56
#if __NetBSD_Version__ > 106000000
 
57
  mib[1] = VM_UVMEXP2;
 
58
#else
 
59
  mib[1] = VM_UVMEXP;
 
60
#endif
 
61
  len = sizeof(uvmexp);
 
62
  if ( sysctl(mib, 2, &uvmexp, &len, NULL, 0) < 0 ) {
 
63
    memoryInfos[FREE_MEM]     = NO_MEMORY_INFO;
 
64
    memoryInfos[ACTIVE_MEM]   = NO_MEMORY_INFO;
 
65
    memoryInfos[INACTIVE_MEM] = NO_MEMORY_INFO;
 
66
    memoryInfos[SWAP_MEM]     = NO_MEMORY_INFO;
 
67
    memoryInfos[FREESWAP_MEM] = NO_MEMORY_INFO;
 
68
    memoryInfos[CACHED_MEM]   = NO_MEMORY_INFO;
 
69
  } else {
 
70
    t_memsize pgsz = MEMORY(uvmexp.pagesize);
 
71
    memoryInfos[FREE_MEM]     = pgsz * uvmexp.free;
 
72
    memoryInfos[ACTIVE_MEM]   = pgsz * uvmexp.active;
 
73
    memoryInfos[INACTIVE_MEM] = pgsz * uvmexp.inactive;
 
74
    memoryInfos[SWAP_MEM]     = pgsz * uvmexp.swpages;
 
75
    memoryInfos[FREESWAP_MEM] = pgsz * (uvmexp.swpages - uvmexp.swpginuse);
 
76
#if __NetBSD_Version__ > 106000000
 
77
    memoryInfos[CACHED_MEM]   = pgsz * (uvmexp.filepages + uvmexp.execpages);
 
78
#else
 
79
    memoryInfos[CACHED_MEM]   = NO_MEMORY_INFO;
 
80
#endif
 
81
    }
 
82
#else
 
83
  memoryInfos[FREE_MEM]       = NO_MEMORY_INFO;
 
84
  memoryInfos[ACTIVE_MEM]     = NO_MEMORY_INFO;
 
85
  memoryInfos[INACTIVE_MEM]   = NO_MEMORY_INFO;
 
86
 
 
87
  /* swap */
 
88
  totalswap = freeswap = usedswap = 0;
 
89
  nswap = swapctl(SWAP_NSWAP,0,0);
 
90
  if ( nswap > 0 ) {
 
91
    if ( (swaplist = (struct swapent *)malloc(nswap * sizeof(*swaplist))) ) {
 
92
      rnswap = swapctl(SWAP_STATS,swaplist,nswap);
 
93
      if ( rnswap < 0 || rnswap > nswap )
 
94
        totalswap = freeswap = -1;      /* Error */
 
95
      else {
 
96
        while ( rnswap-- > 0 ) {
 
97
          totalswap += swaplist[rnswap].se_nblks;
 
98
          usedswap += swaplist[rnswap].se_inuse;
 
99
        }
 
100
        freeswap = totalswap - usedswap;
 
101
      }
 
102
    } else
 
103
      totalswap = freeswap = -1;        /* Error */
 
104
 
 
105
    if ( totalswap == -1 ) {
 
106
        memoryInfos[SWAP_MEM]     = NO_MEMORY_INFO;
 
107
        memoryInfos[FREESWAP_MEM] = NO_MEMORY_INFO;
 
108
    } else {                            
 
109
        memoryInfos[SWAP_MEM]     = MEMORY(totalswap);
 
110
        memoryInfos[FREESWAP_MEM] = MEMORY(freeswap);
 
111
    }
 
112
  }
 
113
#endif
 
114
}