aboutsummaryrefslogtreecommitdiff
path: root/coverage-report/core/pool.c.gcov.html
blob: ee71ae8f5ebce0dc5514567f99e96897c1b36604 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html lang="en">

<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <title>LCOV - skiboot.info - core/pool.c</title>
  <link rel="stylesheet" type="text/css" href="../gcov.css">
</head>

<body>

  <table width="100%" border=0 cellspacing=0 cellpadding=0>
    <tr><td class="title">LCOV - code coverage report</td></tr>
    <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>

    <tr>
      <td width="100%">
        <table cellpadding=1 border=0 width="100%">
          <tr>
            <td width="10%" class="headerItem">Current view:</td>
            <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">core</a> - pool.c<span style="font-size: 80%;"> (source / <a href="pool.c.func-sort-c.html">functions</a>)</span></td>
            <td width="5%"></td>
            <td width="15%"></td>
            <td width="10%" class="headerCovTableHead">Hit</td>
            <td width="10%" class="headerCovTableHead">Total</td>
            <td width="15%" class="headerCovTableHead">Coverage</td>
          </tr>
          <tr>
            <td class="headerItem">Test:</td>
            <td class="headerValue">skiboot.info</td>
            <td></td>
            <td class="headerItem">Lines:</td>
            <td class="headerCovTableEntry">26</td>
            <td class="headerCovTableEntry">27</td>
            <td class="headerCovTableEntryHi">96.3 %</td>
          </tr>
          <tr>
            <td class="headerItem">Date:</td>
            <td class="headerValue">2023-01-20 16:44:11</td>
            <td></td>
            <td class="headerItem">Functions:</td>
            <td class="headerCovTableEntry">3</td>
            <td class="headerCovTableEntry">3</td>
            <td class="headerCovTableEntryHi">100.0 %</td>
          </tr>
          <tr>
            <td></td>
            <td></td>
            <td></td>
            <td class="headerItem">Branches:</td>
            <td class="headerCovTableEntry">0</td>
            <td class="headerCovTableEntry">0</td>
            <td class="headerCovTableEntryHi">-</td>
          </tr>
          <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
        </table>
      </td>
    </tr>

    <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
  </table>

  <table cellpadding=0 cellspacing=0 border=0>
    <tr>
      <td><br></td>
    </tr>
    <tr>
      <td>
<pre class="sourceHeading">           Branch data     Line data    Source code</pre>
<pre class="source">
<a name="1"><span class="lineNum">       1 </span>                :            : // SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later</a>
<a name="2"><span class="lineNum">       2 </span>                :            : /*</a>
<a name="3"><span class="lineNum">       3 </span>                :            :  * This file provides some functions to manage a pool of pre-allocated</a>
<a name="4"><span class="lineNum">       4 </span>                :            :  * objects. It also provides a method to reserve a pre-defined number</a>
<a name="5"><span class="lineNum">       5 </span>                :            :  * of objects for higher priorty requests. The allocations follow the</a>
<a name="6"><span class="lineNum">       6 </span>                :            :  * following rules:</a>
<a name="7"><span class="lineNum">       7 </span>                :            :  *</a>
<a name="8"><span class="lineNum">       8 </span>                :            :  * 1. An allocation will succeed at any priority if there is more than</a>
<a name="9"><span class="lineNum">       9 </span>                :            :  *    the reserved number of objects free.</a>
<a name="10"><span class="lineNum">      10 </span>                :            :  * 2. Only high priority allocations will succeed when there are less</a>
<a name="11"><span class="lineNum">      11 </span>                :            :  *    than the reserved number of objects free.</a>
<a name="12"><span class="lineNum">      12 </span>                :            :  * 3. When an allocation is freed it is always added to the high priority</a>
<a name="13"><span class="lineNum">      13 </span>                :            :  *    pool if there are less than the reserved number of allocations</a>
<a name="14"><span class="lineNum">      14 </span>                :            :  *    available.</a>
<a name="15"><span class="lineNum">      15 </span>                :            :  *</a>
<a name="16"><span class="lineNum">      16 </span>                :            :  * Copyright 2013-2014 IBM Corp.</a>
<a name="17"><span class="lineNum">      17 </span>                :            :  */</a>
<a name="18"><span class="lineNum">      18 </span>                :            : </a>
<a name="19"><span class="lineNum">      19 </span>                :            : #include &lt;pool.h&gt;</a>
<a name="20"><span class="lineNum">      20 </span>                :            : #include &lt;string.h&gt;</a>
<a name="21"><span class="lineNum">      21 </span>                :            : #include &lt;stdlib.h&gt;</a>
<a name="22"><span class="lineNum">      22 </span>                :            : #include &lt;ccan/list/list.h&gt;</a>
<a name="23"><span class="lineNum">      23 </span>                :            : </a>
<a name="24"><span class="lineNum">      24 </span>                :<span class="lineCov">         13 : void* pool_get(struct pool *pool, enum pool_priority priority)</span></a>
<a name="25"><span class="lineNum">      25 </span>                :            : {</a>
<a name="26"><span class="lineNum">      26 </span>                :            :         void *obj;</a>
<a name="27"><span class="lineNum">      27 </span>                :            : </a>
<a name="28"><span class="lineNum">      28 </span>                :<span class="lineCov">         13 :         if (!pool-&gt;free_count ||</span></a>
<a name="29"><span class="lineNum">      29 </span>                :<span class="lineCov">         13 :             ((pool-&gt;free_count &lt;= pool-&gt;reserved) &amp;&amp; priority == POOL_NORMAL))</span></a>
<a name="30"><span class="lineNum">      30 </span>                :<span class="lineCov">          1 :                 return NULL;</span></a>
<a name="31"><span class="lineNum">      31 </span>                :            : </a>
<a name="32"><span class="lineNum">      32 </span>                :<span class="lineCov">         12 :         pool-&gt;free_count--;</span></a>
<a name="33"><span class="lineNum">      33 </span>                :<span class="lineCov">         12 :         obj = (void *) list_pop_(&amp;pool-&gt;free_list, 0);</span></a>
<a name="34"><span class="lineNum">      34 </span>                :<span class="lineCov">         12 :         assert(obj);</span></a>
<a name="35"><span class="lineNum">      35 </span>                :<span class="lineCov">         12 :         memset(obj, 0, pool-&gt;obj_size);</span></a>
<a name="36"><span class="lineNum">      36 </span>                :<span class="lineCov">         12 :         return obj;</span></a>
<a name="37"><span class="lineNum">      37 </span>                :            : }</a>
<a name="38"><span class="lineNum">      38 </span>                :            : </a>
<a name="39"><span class="lineNum">      39 </span>                :<span class="lineCov">          2 : void pool_free_object(struct pool *pool, void *obj)</span></a>
<a name="40"><span class="lineNum">      40 </span>                :            : {</a>
<a name="41"><span class="lineNum">      41 </span>                :<span class="lineCov">          2 :         pool-&gt;free_count++;</span></a>
<a name="42"><span class="lineNum">      42 </span>                :<span class="lineCov">          2 :         list_add_tail(&amp;pool-&gt;free_list,</span></a>
<a name="43"><span class="lineNum">      43 </span>                :            :                       (struct list_node *) (obj));</a>
<a name="44"><span class="lineNum">      44 </span>                :<span class="lineCov">          2 : }</span></a>
<a name="45"><span class="lineNum">      45 </span>                :            : </a>
<a name="46"><span class="lineNum">      46 </span>                :<span class="lineCov">          1 : int pool_init(struct pool *pool, size_t obj_size, int count, int reserved)</span></a>
<a name="47"><span class="lineNum">      47 </span>                :            : {</a>
<a name="48"><span class="lineNum">      48 </span>                :            :         int i;</a>
<a name="49"><span class="lineNum">      49 </span>                :            : </a>
<a name="50"><span class="lineNum">      50 </span>                :<span class="lineCov">          1 :         if (obj_size &lt; sizeof(struct list_node))</span></a>
<a name="51"><span class="lineNum">      51 </span>                :<span class="lineCov">          1 :                 obj_size = sizeof(struct list_node);</span></a>
<a name="52"><span class="lineNum">      52 </span>                :            : </a>
<a name="53"><span class="lineNum">      53 </span>                :<span class="lineCov">          1 :         assert(count &gt;= reserved);</span></a>
<a name="54"><span class="lineNum">      54 </span>                :<span class="lineCov">          1 :         pool-&gt;buf = malloc(obj_size*count);</span></a>
<a name="55"><span class="lineNum">      55 </span>                :<span class="lineCov">          1 :         if (!pool-&gt;buf)</span></a>
<a name="56"><span class="lineNum">      56 </span>                :<span class="lineNoCov">          0 :                 return -1;</span></a>
<a name="57"><span class="lineNum">      57 </span>                :            : </a>
<a name="58"><span class="lineNum">      58 </span>                :<span class="lineCov">          1 :         pool-&gt;obj_size = obj_size;</span></a>
<a name="59"><span class="lineNum">      59 </span>                :<span class="lineCov">          1 :         pool-&gt;free_count = count;</span></a>
<a name="60"><span class="lineNum">      60 </span>                :<span class="lineCov">          1 :         pool-&gt;reserved = reserved;</span></a>
<a name="61"><span class="lineNum">      61 </span>                :<span class="lineCov">          1 :         list_head_init(&amp;pool-&gt;free_list);</span></a>
<a name="62"><span class="lineNum">      62 </span>                :            : </a>
<a name="63"><span class="lineNum">      63 </span>                :<span class="lineCov">         11 :         for(i = 0; i &lt; count; i++)</span></a>
<a name="64"><span class="lineNum">      64 </span>                :<span class="lineCov">         10 :                 list_add_tail(&amp;pool-&gt;free_list,</span></a>
<a name="65"><span class="lineNum">      65 </span>                :            :                               (struct list_node *) (pool-&gt;buf + obj_size*i));</a>
<a name="66"><span class="lineNum">      66 </span>                :            : </a>
<a name="67"><span class="lineNum">      67 </span>                :<span class="lineCov">          1 :         return 0;</span></a>
<a name="68"><span class="lineNum">      68 </span>                :            : }</a>
</pre>
      </td>
    </tr>
  </table>
  <br>

  <table width="100%" border=0 cellspacing=0 cellpadding=0>
    <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr>
    <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.14</a></td></tr>
  </table>
  <br>

</body>
</html>