1491 lines
126 KiB
HTML
1491 lines
126 KiB
HTML
<!-- HTML header for doxygen 1.9.1-->
|
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
|
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
|
<meta name="generator" content="Doxygen 1.15.0"/>
|
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
|
<title>L4Re Operating System Framework: Thread</title>
|
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
|
<script type="text/javascript" src="jquery.js"></script>
|
|
<script type="text/javascript" src="dynsections.js"></script>
|
|
<link href="navtree.css" rel="stylesheet" type="text/css"/>
|
|
<script type="text/javascript" src="navtreedata.js"></script>
|
|
<script type="text/javascript" src="navtree.js"></script>
|
|
<script type="text/javascript" src="cookie.js"></script>
|
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
|
<script type="text/javascript" src="search/search.js"></script>
|
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
|
<link href="doxygen-awesome.css" rel="stylesheet" type="text/css"/>
|
|
<link href="l4re-awesome.css" rel="stylesheet" type="text/css"/>
|
|
</head>
|
|
<body>
|
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
|
<div id="titlearea">
|
|
<table cellspacing="0" cellpadding="0">
|
|
<tbody>
|
|
<tr style="height: 56px;">
|
|
<td id="projectlogo"><img alt="Logo" src="L4Re_rgb_logo_quer_hg_h55.png"/></td>
|
|
<td id="projectalign" style="padding-left: 0.5em;">
|
|
<div id="projectname">L4Re Operating System Framework
|
|
</div>
|
|
<div id="projectbrief">Interface and Usage Documentation</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<!-- end header part -->
|
|
<!-- Generated by Doxygen 1.15.0 -->
|
|
<script type="text/javascript">
|
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
|
</script>
|
|
<script type="text/javascript">
|
|
$(function() { codefold.init(); });
|
|
</script>
|
|
<script type="text/javascript" src="menudata.js"></script>
|
|
<script type="text/javascript" src="menu.js"></script>
|
|
<script type="text/javascript">
|
|
$(function() {
|
|
initMenu('',true,false,'search.php','Search',true);
|
|
$(function() { init_search(); });
|
|
});
|
|
</script>
|
|
<div id="main-nav"></div>
|
|
</div><!-- top -->
|
|
<div id="side-nav" class="ui-resizable side-nav-resizable">
|
|
<div id="nav-tree">
|
|
<div id="nav-tree-contents">
|
|
<div id="nav-sync" class="sync"></div>
|
|
</div>
|
|
</div>
|
|
<div id="splitbar" style="-moz-user-select:none;"
|
|
class="ui-resizable-handle">
|
|
</div>
|
|
</div>
|
|
<script type="text/javascript">
|
|
$(function(){initNavTree('group__l4__thread__api.html','',''); });
|
|
</script>
|
|
<div id="container">
|
|
<div id="doc-content">
|
|
<!-- window showing the filter options -->
|
|
<div id="MSearchSelectWindow"
|
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
|
</div>
|
|
|
|
<!-- iframe showing the search results (closed by default) -->
|
|
<div id="MSearchResultsWindow">
|
|
<div id="MSearchResults">
|
|
<div class="SRPage">
|
|
<div id="SRIndex">
|
|
<div id="SRResults"></div>
|
|
<div class="SRStatus" id="Loading">Loading...</div>
|
|
<div class="SRStatus" id="Searching">Searching...</div>
|
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="header">
|
|
<div class="headertitle"><div class="title">Thread <div class="ingroups"><a class="el" href="group__l4__api.html">Base API</a> » <a class="el" href="group__l4__kernel__object__api.html">Kernel Objects</a></div></div></div>
|
|
</div><!--header-->
|
|
<div class="contents">
|
|
|
|
<p>C Thread object interface, see <a class="el" href="classL4_1_1Thread.html" title="C++ L4 kernel thread interface, see Thread for the C interface.">L4::Thread</a> for the C++ interface.
|
|
<a href="#details">More...</a></p>
|
|
<div id="dynsection-0" onclick="return dynsection.toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;"><span class="dynarrow"><span class="arrowhead closed"></span></span>Collaboration diagram for Thread:</div>
|
|
<div id="dynsection-0-summary" class="dynsummary" style="display:block;">
|
|
</div>
|
|
<div id="dynsection-0-content" class="dyncontent" style="display:none;">
|
|
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="group__l4__thread__api.svg" width="406" height="86"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
|
|
</div>
|
|
<table class="memberdecls">
|
|
<tr class="heading"><td colspan="2"><h2 id="header-groups" class="groupheader"><a id="groups" name="groups"></a>
|
|
Topics</h2></td></tr>
|
|
<tr class="memitem:l4_5Fthread_5Fcontrol_5Fapi" id="r_l4_5Fthread_5Fcontrol_5Fapi"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__l4__thread__control__api.html">Thread control </a></td></tr>
|
|
<tr class="memdesc:group__l4__thread__control__api"><td class="mdescLeft"> </td><td class="mdescRight">API for Thread Control method. <br /></td></tr>
|
|
<tr class="memitem:l4_5Fvcpu_5Fapi" id="r_l4_5Fvcpu_5Fapi"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="group__l4__vcpu__api.html">vCPU API </a></td></tr>
|
|
<tr class="memdesc:group__l4__vcpu__api"><td class="mdescLeft"> </td><td class="mdescRight">vCPU API. <br /></td></tr>
|
|
</table><table class="memberdecls">
|
|
<tr class="heading"><td colspan="2"><h2 id="header-enum-members" class="groupheader"><a id="enum-members" name="enum-members"></a>
|
|
Enumerations</h2></td></tr>
|
|
<tr class="memitem:ga7ac6f1aa334f0638cc45e1c0ae591925" id="r_ga7ac6f1aa334f0638cc45e1c0ae591925"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="#ga7ac6f1aa334f0638cc45e1c0ae591925">L4_thread_control_flags</a> { <a class="el" href="#gga7ac6f1aa334f0638cc45e1c0ae591925a05916c8b8ff1dc3af791319a4947011d">L4_THREAD_CONTROL_SET_PAGER</a> = 0x0010000
|
|
, <a class="el" href="#gga7ac6f1aa334f0638cc45e1c0ae591925a2069ba7ba4f79568dfb9e360600a9789">L4_THREAD_CONTROL_BIND_TASK</a> = 0x0200000
|
|
, <a class="el" href="#gga7ac6f1aa334f0638cc45e1c0ae591925a4fc822df7c8c2f0a5937031466919de2">L4_THREAD_CONTROL_ALIEN</a> = 0x0400000
|
|
, <a class="el" href="#gga7ac6f1aa334f0638cc45e1c0ae591925a910fc3b6b20a2efe8b2f9b600e9ce768">L4_THREAD_CONTROL_SET_EXC_HANDLER</a> = 0x1000000
|
|
}</td></tr>
|
|
<tr class="memdesc:ga7ac6f1aa334f0638cc45e1c0ae591925"><td class="mdescLeft"> </td><td class="mdescRight">Flags for the thread control operation. <a href="#ga7ac6f1aa334f0638cc45e1c0ae591925">More...</a><br /></td></tr>
|
|
<tr class="memitem:gada4810653b18bca5841f3aa8387502a0" id="r_gada4810653b18bca5841f3aa8387502a0"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="#gada4810653b18bca5841f3aa8387502a0">L4_thread_control_mr_indices</a> { <br />
|
|
  <a class="el" href="#ggada4810653b18bca5841f3aa8387502a0ae15c7a84fad7b912acfcb81265caa2f7">L4_THREAD_CONTROL_MR_IDX_FLAGS</a> = 0
|
|
, <a class="el" href="#ggada4810653b18bca5841f3aa8387502a0a424b3194b01d0d2b2aa60e8ea113e00a">L4_THREAD_CONTROL_MR_IDX_PAGER</a> = 1
|
|
, <a class="el" href="#ggada4810653b18bca5841f3aa8387502a0a48b2e97a497f3a616fde1e6bb539f616">L4_THREAD_CONTROL_MR_IDX_EXC_HANDLER</a> = 2
|
|
, <a class="el" href="#ggada4810653b18bca5841f3aa8387502a0a2114b332ccffd11438e23c7a4030f210">L4_THREAD_CONTROL_MR_IDX_FLAG_VALS</a> = 4
|
|
, <br />
|
|
  <a class="el" href="#ggada4810653b18bca5841f3aa8387502a0ae82a43035e80a26cdf53465a0f65b8f3">L4_THREAD_CONTROL_MR_IDX_BIND_UTCB</a> = 5
|
|
, <a class="el" href="#ggada4810653b18bca5841f3aa8387502a0a43e990553f65b5cfffc6300b4d36a57d">L4_THREAD_CONTROL_MR_IDX_BIND_TASK</a> = 6
|
|
<br />
|
|
}</td></tr>
|
|
<tr class="memdesc:gada4810653b18bca5841f3aa8387502a0"><td class="mdescLeft"> </td><td class="mdescRight">Indices for the values in the message register for thread control. <a href="#gada4810653b18bca5841f3aa8387502a0">More...</a><br /></td></tr>
|
|
<tr class="memitem:ga288a4500e4be2587d2f16d754d1a2e16" id="r_ga288a4500e4be2587d2f16d754d1a2e16"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="#ga288a4500e4be2587d2f16d754d1a2e16">L4_thread_ex_regs_flags</a> { <a class="el" href="#gga288a4500e4be2587d2f16d754d1a2e16aa13ff4d1b899982508b9ad36c61fe47a">L4_THREAD_EX_REGS_CANCEL</a> = 0x10000UL
|
|
, <a class="el" href="#gga288a4500e4be2587d2f16d754d1a2e16abed26b392ea6e1ee9f468246ae19bf35">L4_THREAD_EX_REGS_TRIGGER_EXCEPTION</a> = 0x20000UL
|
|
, <a class="el" href="#gga288a4500e4be2587d2f16d754d1a2e16ab083c24a18872362e491050d43b5cdf3">L4_THREAD_EX_REGS_ARCH_MASK</a> = 0xff000000UL
|
|
}</td></tr>
|
|
<tr class="memdesc:ga288a4500e4be2587d2f16d754d1a2e16"><td class="mdescLeft"> </td><td class="mdescRight">Flags for the thread ex-regs operation. <a href="#ga288a4500e4be2587d2f16d754d1a2e16">More...</a><br /></td></tr>
|
|
<tr class="memitem:ga1733954711051b531a3d8db16b72bd1b" id="r_ga1733954711051b531a3d8db16b72bd1b"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="#ga1733954711051b531a3d8db16b72bd1b">L4_thread_ex_regs_flags_arm</a> { <a class="el" href="#gga1733954711051b531a3d8db16b72bd1ba797b4f9440f6fc4e4fba440c3d749392">L4_THREAD_EX_REGS_ARM_SET_EL_MASK</a> = 0x3 << 24
|
|
, <a class="el" href="#gga1733954711051b531a3d8db16b72bd1bae4c5265ed6bee495086b916dc28da28e">L4_THREAD_EX_REGS_ARM_SET_EL_KEEP</a> = 0x0 << 24
|
|
, <a class="el" href="#gga1733954711051b531a3d8db16b72bd1ba7a4d7695872eb3a05eedbc9e869de3c5">L4_THREAD_EX_REGS_ARM_SET_EL_EL0</a> = 0x1 << 24
|
|
, <a class="el" href="#gga1733954711051b531a3d8db16b72bd1ba01450979020a54adcc29b5a9028eb095">L4_THREAD_EX_REGS_ARM_SET_EL_EL1</a> = 0x2 << 24
|
|
}</td></tr>
|
|
<tr class="memdesc:ga1733954711051b531a3d8db16b72bd1b"><td class="mdescLeft"> </td><td class="mdescRight">Arm specific <a class="el" href="classL4_1_1Thread.html#aacd56bbf983577cfc591f21fd511d3b6" title="Exchange basic thread registers.">L4::Thread::ex_regs()</a> flags. <a href="#ga1733954711051b531a3d8db16b72bd1b">More...</a><br /></td></tr>
|
|
<tr class="memitem:ga3037921d1968785807972a315c9f0b2c" id="r_ga3037921d1968785807972a315c9f0b2c"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="#ga3037921d1968785807972a315c9f0b2c">L4_thread_ex_regs_flags_arm64</a> { <a class="el" href="#gga3037921d1968785807972a315c9f0b2caa1601514e1859d40be606eef5108764b">L4_THREAD_EX_REGS_ARM64_SET_EL_MASK</a> = 0x3 << 24
|
|
, <a class="el" href="#gga3037921d1968785807972a315c9f0b2ca68b995e3dea03b694601498e948a9587">L4_THREAD_EX_REGS_ARM64_SET_EL_KEEP</a> = 0x0 << 24
|
|
, <a class="el" href="#gga3037921d1968785807972a315c9f0b2caa4a8ccfcfa032b18b37007e37dec30d3">L4_THREAD_EX_REGS_ARM64_SET_EL_EL0</a> = 0x1 << 24
|
|
, <a class="el" href="#gga3037921d1968785807972a315c9f0b2ca612cc2acc98acbe07ffef46969eabec0">L4_THREAD_EX_REGS_ARM64_SET_EL_EL1</a> = 0x2 << 24
|
|
}</td></tr>
|
|
<tr class="memdesc:ga3037921d1968785807972a315c9f0b2c"><td class="mdescLeft"> </td><td class="mdescRight">Arm64 specific <a class="el" href="classL4_1_1Thread.html#aacd56bbf983577cfc591f21fd511d3b6" title="Exchange basic thread registers.">L4::Thread::ex_regs()</a> flags. <a href="#ga3037921d1968785807972a315c9f0b2c">More...</a><br /></td></tr>
|
|
</table><table class="memberdecls">
|
|
<tr class="heading"><td colspan="2"><h2 id="header-func-members" class="groupheader"><a id="func-members" name="func-members"></a>
|
|
Functions</h2></td></tr>
|
|
<tr class="memitem:ga1ea29499c679caeae810516d16f4347c" id="r_ga1ea29499c679caeae810516d16f4347c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="#ga1ea29499c679caeae810516d16f4347c">l4_thread_ex_regs</a> (<a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a> thread, <a class="el" href="group__l4__basic__types.html#ga4087b991c40c0d2fcde9ca331049a4d4">l4_addr_t</a> ip, <a class="el" href="group__l4__basic__types.html#ga4087b991c40c0d2fcde9ca331049a4d4">l4_addr_t</a> sp, <a class="el" href="group__l4__basic__types.html#ga1c2c4b333f75b1d05b59855910f2b9cb">l4_umword_t</a> flags) <a class="el" href="group__l4sys__defines.html#ga362dfa378e662dd04f710a23fc7ea931">L4_NOTHROW</a></td></tr>
|
|
<tr class="memdesc:ga1ea29499c679caeae810516d16f4347c"><td class="mdescLeft"> </td><td class="mdescRight">Exchange basic thread registers. <br /></td></tr>
|
|
<tr class="memitem:ga9387fbfe618c3ede0eae63261ce1662e" id="r_ga9387fbfe618c3ede0eae63261ce1662e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="#ga9387fbfe618c3ede0eae63261ce1662e">l4_thread_ex_regs_u</a> (<a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a> thread, <a class="el" href="group__l4__basic__types.html#ga4087b991c40c0d2fcde9ca331049a4d4">l4_addr_t</a> ip, <a class="el" href="group__l4__basic__types.html#ga4087b991c40c0d2fcde9ca331049a4d4">l4_addr_t</a> sp, <a class="el" href="group__l4__basic__types.html#ga1c2c4b333f75b1d05b59855910f2b9cb">l4_umword_t</a> flags, <a class="el" href="group__l4__utcb__api.html#ga89be8a86d11c1d532b636cc2df1330fb">l4_utcb_t</a> *utcb) <a class="el" href="group__l4sys__defines.html#ga362dfa378e662dd04f710a23fc7ea931">L4_NOTHROW</a></td></tr>
|
|
<tr class="memdesc:ga9387fbfe618c3ede0eae63261ce1662e"><td class="mdescLeft"> </td><td class="mdescRight">Exchange basic thread registers. <br /></td></tr>
|
|
<tr class="memitem:ga828e4612273914dcae12c442bcdd2ea1" id="r_ga828e4612273914dcae12c442bcdd2ea1"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="#ga828e4612273914dcae12c442bcdd2ea1">l4_thread_ex_regs_ret</a> (<a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a> thread, <a class="el" href="group__l4__basic__types.html#ga4087b991c40c0d2fcde9ca331049a4d4">l4_addr_t</a> *ip, <a class="el" href="group__l4__basic__types.html#ga4087b991c40c0d2fcde9ca331049a4d4">l4_addr_t</a> *sp, <a class="el" href="group__l4__basic__types.html#ga1c2c4b333f75b1d05b59855910f2b9cb">l4_umword_t</a> *flags) <a class="el" href="group__l4sys__defines.html#ga362dfa378e662dd04f710a23fc7ea931">L4_NOTHROW</a></td></tr>
|
|
<tr class="memdesc:ga828e4612273914dcae12c442bcdd2ea1"><td class="mdescLeft"> </td><td class="mdescRight">Exchange basic thread registers and return previous values. <br /></td></tr>
|
|
<tr class="memitem:ga5e191cd9b1cbc5d0ac9166fb2bdd5a18" id="r_ga5e191cd9b1cbc5d0ac9166fb2bdd5a18"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="#ga5e191cd9b1cbc5d0ac9166fb2bdd5a18">l4_thread_ex_regs_ret_u</a> (<a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a> thread, <a class="el" href="group__l4__basic__types.html#ga4087b991c40c0d2fcde9ca331049a4d4">l4_addr_t</a> *ip, <a class="el" href="group__l4__basic__types.html#ga4087b991c40c0d2fcde9ca331049a4d4">l4_addr_t</a> *sp, <a class="el" href="group__l4__basic__types.html#ga1c2c4b333f75b1d05b59855910f2b9cb">l4_umword_t</a> *flags, <a class="el" href="group__l4__utcb__api.html#ga89be8a86d11c1d532b636cc2df1330fb">l4_utcb_t</a> *utcb) <a class="el" href="group__l4sys__defines.html#ga362dfa378e662dd04f710a23fc7ea931">L4_NOTHROW</a></td></tr>
|
|
<tr class="memdesc:ga5e191cd9b1cbc5d0ac9166fb2bdd5a18"><td class="mdescLeft"> </td><td class="mdescRight">Exchange basic thread registers and return previous values. <br /></td></tr>
|
|
<tr class="memitem:ga5e47131f486f920826b5f72dad82bafe" id="r_ga5e47131f486f920826b5f72dad82bafe"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="#ga5e47131f486f920826b5f72dad82bafe">l4_thread_yield</a> (void) <a class="el" href="group__l4sys__defines.html#ga362dfa378e662dd04f710a23fc7ea931">L4_NOTHROW</a></td></tr>
|
|
<tr class="memdesc:ga5e47131f486f920826b5f72dad82bafe"><td class="mdescLeft"> </td><td class="mdescRight">Yield current time slice. <br /></td></tr>
|
|
<tr class="memitem:gabc6b8e906087c1fc7b9bb691c47adcbd" id="r_gabc6b8e906087c1fc7b9bb691c47adcbd"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="#gabc6b8e906087c1fc7b9bb691c47adcbd">l4_thread_switch</a> (<a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a> to_thread) <a class="el" href="group__l4sys__defines.html#ga362dfa378e662dd04f710a23fc7ea931">L4_NOTHROW</a></td></tr>
|
|
<tr class="memdesc:gabc6b8e906087c1fc7b9bb691c47adcbd"><td class="mdescLeft"> </td><td class="mdescRight">Switch to another thread (and donate the remaining time slice). <br /></td></tr>
|
|
<tr class="memitem:ga87feff7f1cdf9b67cccdf4f1b8492e8f" id="r_ga87feff7f1cdf9b67cccdf4f1b8492e8f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="#ga87feff7f1cdf9b67cccdf4f1b8492e8f">l4_thread_stats_time</a> (<a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a> thread, <a class="el" href="group__l4__basic__types.html#gab71da24eb7cda2c035f18b862309b101">l4_kernel_clock_t</a> *us) <a class="el" href="group__l4sys__defines.html#ga362dfa378e662dd04f710a23fc7ea931">L4_NOTHROW</a></td></tr>
|
|
<tr class="memdesc:ga87feff7f1cdf9b67cccdf4f1b8492e8f"><td class="mdescLeft"> </td><td class="mdescRight">Get consumed time of thread in µs. <br /></td></tr>
|
|
<tr class="memitem:ga6e0620f6b1119d84eac90adad52eabf8" id="r_ga6e0620f6b1119d84eac90adad52eabf8"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="#ga6e0620f6b1119d84eac90adad52eabf8">l4_thread_vcpu_resume_start</a> (void) <a class="el" href="group__l4sys__defines.html#ga362dfa378e662dd04f710a23fc7ea931">L4_NOTHROW</a></td></tr>
|
|
<tr class="memdesc:ga6e0620f6b1119d84eac90adad52eabf8"><td class="mdescLeft"> </td><td class="mdescRight">vCPU return from event handler. <br /></td></tr>
|
|
<tr class="memitem:gaaf8bb1c28a014326dd381bc2d3478da8" id="r_gaaf8bb1c28a014326dd381bc2d3478da8"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="#gaaf8bb1c28a014326dd381bc2d3478da8">l4_thread_vcpu_resume_commit</a> (<a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a> thread, <a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a> tag) <a class="el" href="group__l4sys__defines.html#ga362dfa378e662dd04f710a23fc7ea931">L4_NOTHROW</a></td></tr>
|
|
<tr class="memdesc:gaaf8bb1c28a014326dd381bc2d3478da8"><td class="mdescLeft"> </td><td class="mdescRight">Commit vCPU resume. <br /></td></tr>
|
|
<tr class="memitem:gac3263f4949c90adda83dba763b195988" id="r_gac3263f4949c90adda83dba763b195988"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="#gac3263f4949c90adda83dba763b195988">l4_thread_vcpu_control</a> (<a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a> thread, <a class="el" href="group__l4__basic__types.html#ga4087b991c40c0d2fcde9ca331049a4d4">l4_addr_t</a> vcpu_state) <a class="el" href="group__l4sys__defines.html#ga362dfa378e662dd04f710a23fc7ea931">L4_NOTHROW</a></td></tr>
|
|
<tr class="memdesc:gac3263f4949c90adda83dba763b195988"><td class="mdescLeft"> </td><td class="mdescRight">Enable the vCPU feature for the thread. <br /></td></tr>
|
|
<tr class="memitem:ga8ebc0dd643266610d76860cf0fb77f53" id="r_ga8ebc0dd643266610d76860cf0fb77f53"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="#ga8ebc0dd643266610d76860cf0fb77f53">l4_thread_vcpu_control_u</a> (<a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a> thread, <a class="el" href="group__l4__basic__types.html#ga4087b991c40c0d2fcde9ca331049a4d4">l4_addr_t</a> vcpu_state, <a class="el" href="group__l4__utcb__api.html#ga89be8a86d11c1d532b636cc2df1330fb">l4_utcb_t</a> *utcb) <a class="el" href="group__l4sys__defines.html#ga362dfa378e662dd04f710a23fc7ea931">L4_NOTHROW</a></td></tr>
|
|
<tr class="memdesc:ga8ebc0dd643266610d76860cf0fb77f53"><td class="mdescLeft"> </td><td class="mdescRight">Enable the vCPU feature for the thread. <br /></td></tr>
|
|
<tr class="memitem:ga592d99fe80a0091a837f6001d0d5c25b" id="r_ga592d99fe80a0091a837f6001d0d5c25b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="#ga592d99fe80a0091a837f6001d0d5c25b">l4_thread_vcpu_control_ext</a> (<a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a> thread, <a class="el" href="group__l4__basic__types.html#ga4087b991c40c0d2fcde9ca331049a4d4">l4_addr_t</a> ext_vcpu_state) <a class="el" href="group__l4sys__defines.html#ga362dfa378e662dd04f710a23fc7ea931">L4_NOTHROW</a></td></tr>
|
|
<tr class="memdesc:ga592d99fe80a0091a837f6001d0d5c25b"><td class="mdescLeft"> </td><td class="mdescRight">Enable the extended vCPU feature for the thread. <br /></td></tr>
|
|
<tr class="memitem:ga1015c5500bcfeaa01d209ee116cf57ec" id="r_ga1015c5500bcfeaa01d209ee116cf57ec"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="#ga1015c5500bcfeaa01d209ee116cf57ec">l4_thread_vcpu_control_ext_u</a> (<a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a> thread, <a class="el" href="group__l4__basic__types.html#ga4087b991c40c0d2fcde9ca331049a4d4">l4_addr_t</a> ext_vcpu_state, <a class="el" href="group__l4__utcb__api.html#ga89be8a86d11c1d532b636cc2df1330fb">l4_utcb_t</a> *utcb) <a class="el" href="group__l4sys__defines.html#ga362dfa378e662dd04f710a23fc7ea931">L4_NOTHROW</a></td></tr>
|
|
<tr class="memdesc:ga1015c5500bcfeaa01d209ee116cf57ec"><td class="mdescLeft"> </td><td class="mdescRight">Enable the extended vCPU feature for the thread. <br /></td></tr>
|
|
<tr class="memitem:ga9dded96485c96c7a3389ea00f5a305d1" id="r_ga9dded96485c96c7a3389ea00f5a305d1"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="#ga9dded96485c96c7a3389ea00f5a305d1">l4_thread_register_del_irq</a> (<a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a> thread, <a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a> irq) <a class="el" href="group__l4sys__defines.html#ga362dfa378e662dd04f710a23fc7ea931">L4_NOTHROW</a></td></tr>
|
|
<tr class="memdesc:ga9dded96485c96c7a3389ea00f5a305d1"><td class="mdescLeft"> </td><td class="mdescRight">Register an IRQ that will trigger upon deletion events. <br /></td></tr>
|
|
<tr class="memitem:ga06ff88cfe27ad4f6c67fa0dc36e6c261" id="r_ga06ff88cfe27ad4f6c67fa0dc36e6c261"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="#ga06ff88cfe27ad4f6c67fa0dc36e6c261">l4_thread_modify_sender_start</a> (void) <a class="el" href="group__l4sys__defines.html#ga362dfa378e662dd04f710a23fc7ea931">L4_NOTHROW</a></td></tr>
|
|
<tr class="memdesc:ga06ff88cfe27ad4f6c67fa0dc36e6c261"><td class="mdescLeft"> </td><td class="mdescRight">Start a thread sender modification sequence. <br /></td></tr>
|
|
<tr class="memitem:ga424473745319d388b8c1378699cec20d" id="r_ga424473745319d388b8c1378699cec20d"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="#ga424473745319d388b8c1378699cec20d">l4_thread_modify_sender_add</a> (<a class="el" href="group__l4__basic__types.html#ga1c2c4b333f75b1d05b59855910f2b9cb">l4_umword_t</a> match_mask, <a class="el" href="group__l4__basic__types.html#ga1c2c4b333f75b1d05b59855910f2b9cb">l4_umword_t</a> match, <a class="el" href="group__l4__basic__types.html#ga1c2c4b333f75b1d05b59855910f2b9cb">l4_umword_t</a> del_bits, <a class="el" href="group__l4__basic__types.html#ga1c2c4b333f75b1d05b59855910f2b9cb">l4_umword_t</a> add_bits, <a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a> *tag) <a class="el" href="group__l4sys__defines.html#ga362dfa378e662dd04f710a23fc7ea931">L4_NOTHROW</a></td></tr>
|
|
<tr class="memdesc:ga424473745319d388b8c1378699cec20d"><td class="mdescLeft"> </td><td class="mdescRight">Add a modification pattern to a sender modification sequence. <br /></td></tr>
|
|
<tr class="memitem:gab4f2106933cf35dc0d4fb2e97e093aef" id="r_gab4f2106933cf35dc0d4fb2e97e093aef"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="#gab4f2106933cf35dc0d4fb2e97e093aef">l4_thread_modify_sender_commit</a> (<a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a> thread, <a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a> tag) <a class="el" href="group__l4sys__defines.html#ga362dfa378e662dd04f710a23fc7ea931">L4_NOTHROW</a></td></tr>
|
|
<tr class="memdesc:gab4f2106933cf35dc0d4fb2e97e093aef"><td class="mdescLeft"> </td><td class="mdescRight">Apply (commit) a sender modification sequence. <br /></td></tr>
|
|
<tr class="memitem:gaba7f8764bd91304b3407d94d90aa6578" id="r_gaba7f8764bd91304b3407d94d90aa6578"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="#gaba7f8764bd91304b3407d94d90aa6578">l4_thread_register_doorbell_irq</a> (<a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a> thread, <a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a> irq) <a class="el" href="group__l4sys__defines.html#ga362dfa378e662dd04f710a23fc7ea931">L4_NOTHROW</a></td></tr>
|
|
<tr class="memdesc:gaba7f8764bd91304b3407d94d90aa6578"><td class="mdescLeft"> </td><td class="mdescRight">Register an IRQ that will trigger when a forwarded virtual interrupt is pending. <br /></td></tr>
|
|
<tr class="memitem:gaeece555b052848e5abaa2d01f0bd773d" id="r_gaeece555b052848e5abaa2d01f0bd773d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="#gaeece555b052848e5abaa2d01f0bd773d">l4_thread_arm_set_tpidruro</a> (<a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a> thread, <a class="el" href="group__l4__basic__types.html#ga4087b991c40c0d2fcde9ca331049a4d4">l4_addr_t</a> tpidruro) <a class="el" href="group__l4sys__defines.html#ga362dfa378e662dd04f710a23fc7ea931">L4_NOTHROW</a></td></tr>
|
|
<tr class="memdesc:gaeece555b052848e5abaa2d01f0bd773d"><td class="mdescLeft"> </td><td class="mdescRight">Set the TPIDRURO thread specific register. <br /></td></tr>
|
|
</table>
|
|
<a name="details" id="details"></a><h2 id="header-details" class="groupheader">Detailed Description</h2>
|
|
<p>C Thread object interface, see <a class="el" href="classL4_1_1Thread.html" title="C++ L4 kernel thread interface, see Thread for the C interface.">L4::Thread</a> for the C++ interface. </p>
|
|
<p>An <a class="el" href="namespaceL4.html" title="L4 low-level kernel interface.">L4</a> thread is a thread of execution in the <a class="el" href="namespaceL4.html" title="L4 low-level kernel interface.">L4</a> context. Usually user-level and kernel threads are mapped 1:1 to each other. Thread kernel objects are created using a factory, see <a class="el" href="group__l4__factory__api.html">Factory</a> (<a class="el" href="group__l4__factory__api.html#ga26aad57304812d2a73597b591f1b3630" title="Create a new thread.">l4_factory_create_thread()</a>).</p>
|
|
<p>Amongst other things an <a class="el" href="namespaceL4.html" title="L4 low-level kernel interface.">L4</a> thread encapsulates:</p><ul>
|
|
<li>CPU state<ul>
|
|
<li>General-purpose registers</li>
|
|
<li>Program counter</li>
|
|
<li>Stack pointer</li>
|
|
</ul>
|
|
</li>
|
|
<li>FPU state</li>
|
|
<li>Scheduling parameters, see the <a class="el" href="group__l4__scheduler__api.html">Scheduler</a> API</li>
|
|
<li>Execution state<ul>
|
|
<li>Blocked, Runnable, Running</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
<p>Thread objects provide an API for</p><ul>
|
|
<li>Thread configuration and manipulation</li>
|
|
<li>Thread switching.</li>
|
|
</ul>
|
|
<p>The thread control functions are used to control various aspects of a thread. See <a class="el" href="group__l4__thread__control__api.html#gae37baad7d9eaae8c2d90be7cfadb4271" title="Start a thread control API sequence.">l4_thread_control_start()</a> for more information.</p>
|
|
<p>On ARM newly created threads run in EL0 by default and the exception level can be changed there with ex_regs().</p>
|
|
<dl class="section user"><dt>Include File</dt><dd><div class="fragment"><div class="line"><span class="preprocessor">#include <l4/sys/thread.h></span> </div>
|
|
</div><!-- fragment --></dd></dl>
|
|
<p>For the C++ interface refer to <a class="el" href="classL4_1_1Thread.html" title="C++ L4 kernel thread interface, see Thread for the C interface.">L4::Thread</a>. </p>
|
|
<a name="doc-enum-members" id="doc-enum-members"></a><h2 id="header-doc-enum-members" class="groupheader">Enumeration Type Documentation</h2>
|
|
<a id="ga7ac6f1aa334f0638cc45e1c0ae591925" name="ga7ac6f1aa334f0638cc45e1c0ae591925"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#ga7ac6f1aa334f0638cc45e1c0ae591925">◆ </a></span>L4_thread_control_flags</h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">enum <a class="el" href="#ga7ac6f1aa334f0638cc45e1c0ae591925">L4_thread_control_flags</a></td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
|
|
<p>Flags for the thread control operation. </p>
|
|
<table class="fieldtable">
|
|
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga7ac6f1aa334f0638cc45e1c0ae591925a05916c8b8ff1dc3af791319a4947011d" name="gga7ac6f1aa334f0638cc45e1c0ae591925a05916c8b8ff1dc3af791319a4947011d"></a>L4_THREAD_CONTROL_SET_PAGER </td><td class="fielddoc"><p>The pager will be given. </p>
|
|
</td></tr>
|
|
<tr><td class="fieldname"><a id="gga7ac6f1aa334f0638cc45e1c0ae591925a2069ba7ba4f79568dfb9e360600a9789" name="gga7ac6f1aa334f0638cc45e1c0ae591925a2069ba7ba4f79568dfb9e360600a9789"></a>L4_THREAD_CONTROL_BIND_TASK </td><td class="fielddoc"><p>The task to bind the thread to will be given. </p>
|
|
</td></tr>
|
|
<tr><td class="fieldname"><a id="gga7ac6f1aa334f0638cc45e1c0ae591925a4fc822df7c8c2f0a5937031466919de2" name="gga7ac6f1aa334f0638cc45e1c0ae591925a4fc822df7c8c2f0a5937031466919de2"></a>L4_THREAD_CONTROL_ALIEN </td><td class="fielddoc"><p>Alien state of the thread is set. </p>
|
|
</td></tr>
|
|
<tr><td class="fieldname"><a id="gga7ac6f1aa334f0638cc45e1c0ae591925a910fc3b6b20a2efe8b2f9b600e9ce768" name="gga7ac6f1aa334f0638cc45e1c0ae591925a910fc3b6b20a2efe8b2f9b600e9ce768"></a>L4_THREAD_CONTROL_SET_EXC_HANDLER </td><td class="fielddoc"><p>The exception handler of the thread will be given. </p>
|
|
</td></tr>
|
|
</table>
|
|
|
|
<p class="definition">Definition at line <a class="el" href="l4_2sys_2thread_8h_source.html#l00761">761</a> of file <a class="el" href="l4_2sys_2thread_8h_source.html">thread.h</a>.</p>
|
|
|
|
</div>
|
|
</div>
|
|
<a id="gada4810653b18bca5841f3aa8387502a0" name="gada4810653b18bca5841f3aa8387502a0"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#gada4810653b18bca5841f3aa8387502a0">◆ </a></span>L4_thread_control_mr_indices</h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">enum <a class="el" href="#gada4810653b18bca5841f3aa8387502a0">L4_thread_control_mr_indices</a></td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
|
|
<p>Indices for the values in the message register for thread control. </p>
|
|
<table class="fieldtable">
|
|
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ggada4810653b18bca5841f3aa8387502a0ae15c7a84fad7b912acfcb81265caa2f7" name="ggada4810653b18bca5841f3aa8387502a0ae15c7a84fad7b912acfcb81265caa2f7"></a>L4_THREAD_CONTROL_MR_IDX_FLAGS </td><td class="fielddoc"><dl class="section see"><dt>See also</dt><dd><a class="el" href="#ga7ac6f1aa334f0638cc45e1c0ae591925" title="Flags for the thread control operation.">L4_thread_control_flags</a>. </dd></dl>
|
|
</td></tr>
|
|
<tr><td class="fieldname"><a id="ggada4810653b18bca5841f3aa8387502a0a424b3194b01d0d2b2aa60e8ea113e00a" name="ggada4810653b18bca5841f3aa8387502a0a424b3194b01d0d2b2aa60e8ea113e00a"></a>L4_THREAD_CONTROL_MR_IDX_PAGER </td><td class="fielddoc"><p>Index for pager cap. </p>
|
|
</td></tr>
|
|
<tr><td class="fieldname"><a id="ggada4810653b18bca5841f3aa8387502a0a48b2e97a497f3a616fde1e6bb539f616" name="ggada4810653b18bca5841f3aa8387502a0a48b2e97a497f3a616fde1e6bb539f616"></a>L4_THREAD_CONTROL_MR_IDX_EXC_HANDLER </td><td class="fielddoc"><p>Index for exception handler. </p>
|
|
</td></tr>
|
|
<tr><td class="fieldname"><a id="ggada4810653b18bca5841f3aa8387502a0a2114b332ccffd11438e23c7a4030f210" name="ggada4810653b18bca5841f3aa8387502a0a2114b332ccffd11438e23c7a4030f210"></a>L4_THREAD_CONTROL_MR_IDX_FLAG_VALS </td><td class="fielddoc"><p>Index for feature values. </p>
|
|
</td></tr>
|
|
<tr><td class="fieldname"><a id="ggada4810653b18bca5841f3aa8387502a0ae82a43035e80a26cdf53465a0f65b8f3" name="ggada4810653b18bca5841f3aa8387502a0ae82a43035e80a26cdf53465a0f65b8f3"></a>L4_THREAD_CONTROL_MR_IDX_BIND_UTCB </td><td class="fielddoc"><p>Index for UTCB address for bind. </p>
|
|
</td></tr>
|
|
<tr><td class="fieldname"><a id="ggada4810653b18bca5841f3aa8387502a0a43e990553f65b5cfffc6300b4d36a57d" name="ggada4810653b18bca5841f3aa8387502a0a43e990553f65b5cfffc6300b4d36a57d"></a>L4_THREAD_CONTROL_MR_IDX_BIND_TASK </td><td class="fielddoc"><p>Index for task flexpage for bind. </p>
|
|
</td></tr>
|
|
</table>
|
|
|
|
<p class="definition">Definition at line <a class="el" href="l4_2sys_2thread_8h_source.html#l00782">782</a> of file <a class="el" href="l4_2sys_2thread_8h_source.html">thread.h</a>.</p>
|
|
|
|
</div>
|
|
</div>
|
|
<a id="ga288a4500e4be2587d2f16d754d1a2e16" name="ga288a4500e4be2587d2f16d754d1a2e16"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#ga288a4500e4be2587d2f16d754d1a2e16">◆ </a></span>L4_thread_ex_regs_flags</h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">enum <a class="el" href="#ga288a4500e4be2587d2f16d754d1a2e16">L4_thread_ex_regs_flags</a></td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
|
|
<p>Flags for the thread ex-regs operation. </p>
|
|
<table class="fieldtable">
|
|
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga288a4500e4be2587d2f16d754d1a2e16aa13ff4d1b899982508b9ad36c61fe47a" name="gga288a4500e4be2587d2f16d754d1a2e16aa13ff4d1b899982508b9ad36c61fe47a"></a>L4_THREAD_EX_REGS_CANCEL </td><td class="fielddoc"><p>Cancel ongoing IPC in the thread. </p>
|
|
</td></tr>
|
|
<tr><td class="fieldname"><a id="gga288a4500e4be2587d2f16d754d1a2e16abed26b392ea6e1ee9f468246ae19bf35" name="gga288a4500e4be2587d2f16d754d1a2e16abed26b392ea6e1ee9f468246ae19bf35"></a>L4_THREAD_EX_REGS_TRIGGER_EXCEPTION </td><td class="fielddoc"><p>Trigger artificial exception in thread. </p>
|
|
</td></tr>
|
|
<tr><td class="fieldname"><a id="gga288a4500e4be2587d2f16d754d1a2e16ab083c24a18872362e491050d43b5cdf3" name="gga288a4500e4be2587d2f16d754d1a2e16ab083c24a18872362e491050d43b5cdf3"></a>L4_THREAD_EX_REGS_ARCH_MASK </td><td class="fielddoc"><p>Arch specific flags. </p>
|
|
</td></tr>
|
|
</table>
|
|
|
|
<p class="definition">Definition at line <a class="el" href="l4_2sys_2thread_8h_source.html#l00797">797</a> of file <a class="el" href="l4_2sys_2thread_8h_source.html">thread.h</a>.</p>
|
|
|
|
</div>
|
|
</div>
|
|
<a id="ga1733954711051b531a3d8db16b72bd1b" name="ga1733954711051b531a3d8db16b72bd1b"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#ga1733954711051b531a3d8db16b72bd1b">◆ </a></span>L4_thread_ex_regs_flags_arm</h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">enum <a class="el" href="#ga1733954711051b531a3d8db16b72bd1b">L4_thread_ex_regs_flags_arm</a></td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
|
|
<p>Arm specific <a class="el" href="classL4_1_1Thread.html#aacd56bbf983577cfc591f21fd511d3b6" title="Exchange basic thread registers.">L4::Thread::ex_regs()</a> flags. </p>
|
|
<p>Only one option must be used in calls to <a class="el" href="classL4_1_1Thread.html#aacd56bbf983577cfc591f21fd511d3b6" title="Exchange basic thread registers.">L4::Thread::ex_regs()</a>. Using more than one option results in undefined behaviour. </p>
|
|
<table class="fieldtable">
|
|
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga1733954711051b531a3d8db16b72bd1ba797b4f9440f6fc4e4fba440c3d749392" name="gga1733954711051b531a3d8db16b72bd1ba797b4f9440f6fc4e4fba440c3d749392"></a>L4_THREAD_EX_REGS_ARM_SET_EL_MASK </td><td class="fielddoc"><p>Exception level set mask. </p>
|
|
</td></tr>
|
|
<tr><td class="fieldname"><a id="gga1733954711051b531a3d8db16b72bd1bae4c5265ed6bee495086b916dc28da28e" name="gga1733954711051b531a3d8db16b72bd1bae4c5265ed6bee495086b916dc28da28e"></a>L4_THREAD_EX_REGS_ARM_SET_EL_KEEP </td><td class="fielddoc"><p>Keep current exception level of thread (default). </p>
|
|
</td></tr>
|
|
<tr><td class="fieldname"><a id="gga1733954711051b531a3d8db16b72bd1ba7a4d7695872eb3a05eedbc9e869de3c5" name="gga1733954711051b531a3d8db16b72bd1ba7a4d7695872eb3a05eedbc9e869de3c5"></a>L4_THREAD_EX_REGS_ARM_SET_EL_EL0 </td><td class="fielddoc"><p>Set exception level of thread to EL0 (usr mode). </p>
|
|
</td></tr>
|
|
<tr><td class="fieldname"><a id="gga1733954711051b531a3d8db16b72bd1ba01450979020a54adcc29b5a9028eb095" name="gga1733954711051b531a3d8db16b72bd1ba01450979020a54adcc29b5a9028eb095"></a>L4_THREAD_EX_REGS_ARM_SET_EL_EL1 </td><td class="fielddoc"><p>Set exception level of thread to EL1 (sys mode). </p>
|
|
</td></tr>
|
|
</table>
|
|
|
|
<p class="definition">Definition at line <a class="el" href="arm_2l4_2sys_2thread_8h_source.html#l00039">39</a> of file <a class="el" href="arm_2l4_2sys_2thread_8h_source.html">thread.h</a>.</p>
|
|
|
|
</div>
|
|
</div>
|
|
<a id="ga3037921d1968785807972a315c9f0b2c" name="ga3037921d1968785807972a315c9f0b2c"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#ga3037921d1968785807972a315c9f0b2c">◆ </a></span>L4_thread_ex_regs_flags_arm64</h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">enum <a class="el" href="#ga3037921d1968785807972a315c9f0b2c">L4_thread_ex_regs_flags_arm64</a></td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
|
|
<p>Arm64 specific <a class="el" href="classL4_1_1Thread.html#aacd56bbf983577cfc591f21fd511d3b6" title="Exchange basic thread registers.">L4::Thread::ex_regs()</a> flags. </p>
|
|
<p>Only one option must be used in calls to <a class="el" href="classL4_1_1Thread.html#aacd56bbf983577cfc591f21fd511d3b6" title="Exchange basic thread registers.">L4::Thread::ex_regs()</a>. Using more than one option results in undefined behaviour. </p>
|
|
<table class="fieldtable">
|
|
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga3037921d1968785807972a315c9f0b2caa1601514e1859d40be606eef5108764b" name="gga3037921d1968785807972a315c9f0b2caa1601514e1859d40be606eef5108764b"></a>L4_THREAD_EX_REGS_ARM64_SET_EL_MASK </td><td class="fielddoc"><p>Exception level set mask. </p>
|
|
</td></tr>
|
|
<tr><td class="fieldname"><a id="gga3037921d1968785807972a315c9f0b2ca68b995e3dea03b694601498e948a9587" name="gga3037921d1968785807972a315c9f0b2ca68b995e3dea03b694601498e948a9587"></a>L4_THREAD_EX_REGS_ARM64_SET_EL_KEEP </td><td class="fielddoc"><p>Keep current exception level of thread (default). </p>
|
|
</td></tr>
|
|
<tr><td class="fieldname"><a id="gga3037921d1968785807972a315c9f0b2caa4a8ccfcfa032b18b37007e37dec30d3" name="gga3037921d1968785807972a315c9f0b2caa4a8ccfcfa032b18b37007e37dec30d3"></a>L4_THREAD_EX_REGS_ARM64_SET_EL_EL0 </td><td class="fielddoc"><p>Set exception level of thread to EL0. </p>
|
|
</td></tr>
|
|
<tr><td class="fieldname"><a id="gga3037921d1968785807972a315c9f0b2ca612cc2acc98acbe07ffef46969eabec0" name="gga3037921d1968785807972a315c9f0b2ca612cc2acc98acbe07ffef46969eabec0"></a>L4_THREAD_EX_REGS_ARM64_SET_EL_EL1 </td><td class="fielddoc"><p>Set exception level of thread to EL1t. </p>
|
|
</td></tr>
|
|
</table>
|
|
|
|
<p class="definition">Definition at line <a class="el" href="arm64_2l4_2sys_2thread_8h_source.html#l00046">46</a> of file <a class="el" href="arm64_2l4_2sys_2thread_8h_source.html">thread.h</a>.</p>
|
|
|
|
</div>
|
|
</div>
|
|
<a name="doc-func-members" id="doc-func-members"></a><h2 id="header-doc-func-members" class="groupheader">Function Documentation</h2>
|
|
<a id="gaeece555b052848e5abaa2d01f0bd773d" name="gaeece555b052848e5abaa2d01f0bd773d"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#gaeece555b052848e5abaa2d01f0bd773d">◆ </a></span>l4_thread_arm_set_tpidruro()</h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="mlabels">
|
|
<tr>
|
|
<td class="mlabels-left">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a> l4_thread_arm_set_tpidruro </td>
|
|
<td>(</td>
|
|
<td class="paramtype"><a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a></td> <td class="paramname"><span class="paramname"><em>thread</em></span>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype"><a class="el" href="group__l4__basic__types.html#ga4087b991c40c0d2fcde9ca331049a4d4">l4_addr_t</a></td> <td class="paramname"><span class="paramname"><em>tpidruro</em></span> )</td>
|
|
</tr>
|
|
</table>
|
|
</td>
|
|
<td class="mlabels-right">
|
|
<span class="mlabels"><span class="mlabel inline">inline</span></span> </td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
|
|
<p>Set the TPIDRURO thread specific register. </p>
|
|
<dl class="params"><dt>Parameters</dt><dd>
|
|
<table class="params">
|
|
<tr><td class="paramname">thread</td><td>Thread to manipulate </td></tr>
|
|
<tr><td class="paramname">tpidruro</td><td>The value to be set </td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<dl class="section return"><dt>Returns</dt><dd>System call return tag</dd></dl>
|
|
<dl class="section note"><dt>Note</dt><dd>When this function is invoked for a thread currently executing on a different core, then the changed register content will not be visible to that thread until a thread switch happens on that core. </dd></dl>
|
|
|
|
<p class="definition">Definition at line <a class="el" href="arm64_2l4_2sys_2thread_8h_source.html#l00072">72</a> of file <a class="el" href="arm64_2l4_2sys_2thread_8h_source.html">thread.h</a>.</p>
|
|
|
|
<p class="reference">References <a class="el" href="compiler_8h_source.html#l00161">L4_NOTHROW</a>, and <a class="el" href="l4_2sys_2utcb_8h_source.html#l00346">l4_utcb()</a>.</p>
|
|
<div id="dynsection-1" onclick="return dynsection.toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;"><span class="dynarrow"><span class="arrowhead closed"></span></span>Here is the call graph for this function:</div>
|
|
<div id="dynsection-1-summary" class="dynsummary" style="display:block;">
|
|
</div>
|
|
<div id="dynsection-1-content" class="dyncontent" style="display:none;">
|
|
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="group__l4__thread__api_gaeece555b052848e5abaa2d01f0bd773d_cgraph.svg" width="330" height="36"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
<a id="ga1ea29499c679caeae810516d16f4347c" name="ga1ea29499c679caeae810516d16f4347c"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#ga1ea29499c679caeae810516d16f4347c">◆ </a></span>l4_thread_ex_regs()</h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="mlabels">
|
|
<tr>
|
|
<td class="mlabels-left">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a> l4_thread_ex_regs </td>
|
|
<td>(</td>
|
|
<td class="paramtype"><a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a></td> <td class="paramname"><span class="paramname"><em>thread</em></span>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype"><a class="el" href="group__l4__basic__types.html#ga4087b991c40c0d2fcde9ca331049a4d4">l4_addr_t</a></td> <td class="paramname"><span class="paramname"><em>ip</em></span>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype"><a class="el" href="group__l4__basic__types.html#ga4087b991c40c0d2fcde9ca331049a4d4">l4_addr_t</a></td> <td class="paramname"><span class="paramname"><em>sp</em></span>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype"><a class="el" href="group__l4__basic__types.html#ga1c2c4b333f75b1d05b59855910f2b9cb">l4_umword_t</a></td> <td class="paramname"><span class="paramname"><em>flags</em></span> )</td>
|
|
</tr>
|
|
</table>
|
|
</td>
|
|
<td class="mlabels-right">
|
|
<span class="mlabels"><span class="mlabel inline">inline</span></span> </td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
|
|
<p>Exchange basic thread registers. </p>
|
|
<dl class="params"><dt>Parameters</dt><dd>
|
|
<table class="params">
|
|
<tr><td class="paramname">thread</td><td>Capability selector of the thread to manipulate. </td></tr>
|
|
<tr><td class="paramname">ip</td><td>New instruction pointer, use ~0UL to leave the instruction pointer unchanged. </td></tr>
|
|
<tr><td class="paramname">sp</td><td>New stack pointer, use ~0UL to leave the stack pointer unchanged. </td></tr>
|
|
<tr><td class="paramname">flags</td><td>Ex-regs flags, see <a class="el" href="#ga288a4500e4be2587d2f16d754d1a2e16" title="Flags for the thread ex-regs operation.">L4_thread_ex_regs_flags</a>.</td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<dl class="section return"><dt>Returns</dt><dd>System call return tag</dd></dl>
|
|
<p>This method allows to manipulate and start a thread. The basic functionality is to set the instruction pointer and the stack pointer of a thread. Additionally, this method allows also to cancel ongoing IPC operations and to force the thread to raise an artificial exception (see <span class="tt">flags</span>). If the thread is in an IPC operation or if <a class="el" href="#gga288a4500e4be2587d2f16d754d1a2e16abed26b392ea6e1ee9f468246ae19bf35" title="Trigger artificial exception in thread.">L4_THREAD_EX_REGS_TRIGGER_EXCEPTION</a> forces an IPC then changes in IP and SP take effect directly after returning from this IPC. On ARM this method allows to change the execption level, see <a class="el" href="#ga1733954711051b531a3d8db16b72bd1b" title="Arm specific L4::Thread::ex_regs() flags.">L4_thread_ex_regs_flags_arm</a> and <a class="el" href="#ga3037921d1968785807972a315c9f0b2c" title="Arm64 specific L4::Thread::ex_regs() flags.">L4_thread_ex_regs_flags_arm64</a>.</p>
|
|
<p>The thread is started using <a class="el" href="group__l4__scheduler__api.html#ga529821cb75f0c3d17ec66e4357f0f72c" title="Run a thread on a Scheduler.">l4_scheduler_run_thread()</a>. However, if at the time <a class="el" href="group__l4__scheduler__api.html#ga529821cb75f0c3d17ec66e4357f0f72c" title="Run a thread on a Scheduler.">l4_scheduler_run_thread()</a> is called, the instruction pointer of the thread is invalid, a later call to <a class="el" href="#ga1ea29499c679caeae810516d16f4347c" title="Exchange basic thread registers.">l4_thread_ex_regs()</a> with a valid instruction pointer might start the thread. </p>
|
|
<dl class="section examples"><dt>Examples</dt><dd><a class="el" href="examples_2sys_2aliens_2main_8c-example.html#a38">examples/sys/aliens/main.c</a>, <a class="el" href="examples_2sys_2singlestep_2main_8c-example.html#a19">examples/sys/singlestep/main.c</a>, <a class="el" href="examples_2sys_2start-with-exc_2main_8c-example.html#a18">examples/sys/start-with-exc/main.c</a>, and <a class="el" href="examples_2sys_2utcb-ipc_2main_8c-example.html#a29">examples/sys/utcb-ipc/main.c</a>.</dd>
|
|
</dl>
|
|
|
|
<p class="definition">Definition at line <a class="el" href="l4_2sys_2thread_8h_source.html#l00942">942</a> of file <a class="el" href="l4_2sys_2thread_8h_source.html">thread.h</a>.</p>
|
|
|
|
<p class="reference">References <a class="el" href="compiler_8h_source.html#l00161">L4_NOTHROW</a>, <a class="el" href="l4_2sys_2thread_8h_source.html#l00812">l4_thread_ex_regs_u()</a>, and <a class="el" href="l4_2sys_2utcb_8h_source.html#l00346">l4_utcb()</a>.</p>
|
|
<div id="dynsection-2" onclick="return dynsection.toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;"><span class="dynarrow"><span class="arrowhead closed"></span></span>Here is the call graph for this function:</div>
|
|
<div id="dynsection-2-summary" class="dynsummary" style="display:block;">
|
|
</div>
|
|
<div id="dynsection-2-content" class="dyncontent" style="display:none;">
|
|
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="group__l4__thread__api_ga1ea29499c679caeae810516d16f4347c_cgraph.svg" width="603" height="110"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
<a id="ga828e4612273914dcae12c442bcdd2ea1" name="ga828e4612273914dcae12c442bcdd2ea1"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#ga828e4612273914dcae12c442bcdd2ea1">◆ </a></span>l4_thread_ex_regs_ret()</h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="mlabels">
|
|
<tr>
|
|
<td class="mlabels-left">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a> l4_thread_ex_regs_ret </td>
|
|
<td>(</td>
|
|
<td class="paramtype"><a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a></td> <td class="paramname"><span class="paramname"><em>thread</em></span>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype"><a class="el" href="group__l4__basic__types.html#ga4087b991c40c0d2fcde9ca331049a4d4">l4_addr_t</a> *</td> <td class="paramname"><span class="paramname"><em>ip</em></span>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype"><a class="el" href="group__l4__basic__types.html#ga4087b991c40c0d2fcde9ca331049a4d4">l4_addr_t</a> *</td> <td class="paramname"><span class="paramname"><em>sp</em></span>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype"><a class="el" href="group__l4__basic__types.html#ga1c2c4b333f75b1d05b59855910f2b9cb">l4_umword_t</a> *</td> <td class="paramname"><span class="paramname"><em>flags</em></span> )</td>
|
|
</tr>
|
|
</table>
|
|
</td>
|
|
<td class="mlabels-right">
|
|
<span class="mlabels"><span class="mlabel inline">inline</span></span> </td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
|
|
<p>Exchange basic thread registers and return previous values. </p>
|
|
<dl class="params"><dt>Parameters</dt><dd>
|
|
<table class="params">
|
|
<tr><td class="paramdir"></td><td class="paramname">thread</td><td>Capability selector of the thread to manipulate. </td></tr>
|
|
<tr><td class="paramdir">[in,out]</td><td class="paramname">ip</td><td>New instruction pointer, use ~0UL to leave the instruction pointer unchanged, return previous instruction pointer. </td></tr>
|
|
<tr><td class="paramdir">[in,out]</td><td class="paramname">sp</td><td>New stack pointer, use ~0UL to leave the stack pointer unchanged, returns previous stack pointer. </td></tr>
|
|
<tr><td class="paramdir">[in,out]</td><td class="paramname">flags</td><td>Ex-regs flags, see <a class="el" href="#ga288a4500e4be2587d2f16d754d1a2e16" title="Flags for the thread ex-regs operation.">L4_thread_ex_regs_flags</a>, return previous CPU flags of the thread.</td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<dl class="section return"><dt>Returns</dt><dd>System call return tag</dd></dl>
|
|
<p>This method allows to manipulate and start a thread. The basic functionality is to set the instruction pointer and the stack pointer of a thread. Additionally, this method allows also to cancel ongoing IPC operations and to force the thread to raise an artificial exception (see <span class="tt">flags</span>). If the thread is in an IPC operation or if <a class="el" href="#gga288a4500e4be2587d2f16d754d1a2e16abed26b392ea6e1ee9f468246ae19bf35" title="Trigger artificial exception in thread.">L4_THREAD_EX_REGS_TRIGGER_EXCEPTION</a> forces an IPC then changes in IP and SP take effect directly after returning from this IPC. On ARM this method allows to change the execption level, see <a class="el" href="#ga1733954711051b531a3d8db16b72bd1b" title="Arm specific L4::Thread::ex_regs() flags.">L4_thread_ex_regs_flags_arm</a> and <a class="el" href="#ga3037921d1968785807972a315c9f0b2c" title="Arm64 specific L4::Thread::ex_regs() flags.">L4_thread_ex_regs_flags_arm64</a>.</p>
|
|
<p>The thread is started using <a class="el" href="group__l4__scheduler__api.html#ga529821cb75f0c3d17ec66e4357f0f72c" title="Run a thread on a Scheduler.">l4_scheduler_run_thread()</a>. However, if at the time <a class="el" href="group__l4__scheduler__api.html#ga529821cb75f0c3d17ec66e4357f0f72c" title="Run a thread on a Scheduler.">l4_scheduler_run_thread()</a> is called, the instruction pointer of the thread is invalid, a later call to <a class="el" href="#ga1ea29499c679caeae810516d16f4347c" title="Exchange basic thread registers.">l4_thread_ex_regs()</a> with a valid instruction pointer might start the thread.</p>
|
|
<p>Returned values are valid only if function returns successfully. </p>
|
|
|
|
<p class="definition">Definition at line <a class="el" href="l4_2sys_2thread_8h_source.html#l00949">949</a> of file <a class="el" href="l4_2sys_2thread_8h_source.html">thread.h</a>.</p>
|
|
|
|
<p class="reference">References <a class="el" href="compiler_8h_source.html#l00161">L4_NOTHROW</a>, <a class="el" href="l4_2sys_2thread_8h_source.html#l00823">l4_thread_ex_regs_ret_u()</a>, and <a class="el" href="l4_2sys_2utcb_8h_source.html#l00346">l4_utcb()</a>.</p>
|
|
<div id="dynsection-3" onclick="return dynsection.toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;"><span class="dynarrow"><span class="arrowhead closed"></span></span>Here is the call graph for this function:</div>
|
|
<div id="dynsection-3-summary" class="dynsummary" style="display:block;">
|
|
</div>
|
|
<div id="dynsection-3-content" class="dyncontent" style="display:none;">
|
|
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="group__l4__thread__api_ga828e4612273914dcae12c442bcdd2ea1_cgraph.svg" width="858" height="111"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
<a id="ga5e191cd9b1cbc5d0ac9166fb2bdd5a18" name="ga5e191cd9b1cbc5d0ac9166fb2bdd5a18"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#ga5e191cd9b1cbc5d0ac9166fb2bdd5a18">◆ </a></span>l4_thread_ex_regs_ret_u()</h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="mlabels">
|
|
<tr>
|
|
<td class="mlabels-left">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a> l4_thread_ex_regs_ret_u </td>
|
|
<td>(</td>
|
|
<td class="paramtype"><a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a></td> <td class="paramname"><span class="paramname"><em>thread</em></span>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype"><a class="el" href="group__l4__basic__types.html#ga4087b991c40c0d2fcde9ca331049a4d4">l4_addr_t</a> *</td> <td class="paramname"><span class="paramname"><em>ip</em></span>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype"><a class="el" href="group__l4__basic__types.html#ga4087b991c40c0d2fcde9ca331049a4d4">l4_addr_t</a> *</td> <td class="paramname"><span class="paramname"><em>sp</em></span>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype"><a class="el" href="group__l4__basic__types.html#ga1c2c4b333f75b1d05b59855910f2b9cb">l4_umword_t</a> *</td> <td class="paramname"><span class="paramname"><em>flags</em></span>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype"><a class="el" href="group__l4__utcb__api.html#ga89be8a86d11c1d532b636cc2df1330fb">l4_utcb_t</a> *</td> <td class="paramname"><span class="paramname"><em>utcb</em></span> )</td>
|
|
</tr>
|
|
</table>
|
|
</td>
|
|
<td class="mlabels-right">
|
|
<span class="mlabels"><span class="mlabel inline">inline</span></span> </td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
|
|
<p>Exchange basic thread registers and return previous values. </p>
|
|
<dl class="params"><dt>Parameters</dt><dd>
|
|
<table class="params">
|
|
<tr><td class="paramdir"></td><td class="paramname">thread</td><td>Capability selector of the thread to manipulate. </td></tr>
|
|
<tr><td class="paramdir">[in,out]</td><td class="paramname">ip</td><td>New instruction pointer, use ~0UL to leave the instruction pointer unchanged, return previous instruction pointer. </td></tr>
|
|
<tr><td class="paramdir">[in,out]</td><td class="paramname">sp</td><td>New stack pointer, use ~0UL to leave the stack pointer unchanged, returns previous stack pointer. </td></tr>
|
|
<tr><td class="paramdir">[in,out]</td><td class="paramname">flags</td><td>Ex-regs flags, see <a class="el" href="#ga288a4500e4be2587d2f16d754d1a2e16" title="Flags for the thread ex-regs operation.">L4_thread_ex_regs_flags</a>, return previous CPU flags of the thread. </td></tr>
|
|
<tr><td class="paramdir"></td><td class="paramname">utcb</td><td>UTCB to be used for this operation, shall be the UTCB of the calling thread. Defaults to <a class="el" href="group__l4__utcb__api.html#gadc099b4a59e1d99638c72c11a8c8b644" title="Get the UTCB address.">l4_utcb</a>.</td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<dl class="section return"><dt>Returns</dt><dd>System call return tag. [out] parameters are only valid if the function returns successfully. Use <a class="el" href="group__l4__ipc__err__api.html#ga05c11e3e10b6c2aa941396ac2018899f" title="Get IPC error code if any or message tag label otherwise for an IPC call.">l4_error()</a> to check.</dd></dl>
|
|
<p>This method allows to manipulate and start a thread. The basic functionality is to set the instruction pointer and the stack pointer of a thread. Additionally, this method allows also to cancel ongoing IPC operations and to force the thread to raise an artificial exception (see <span class="tt">flags</span>). If the thread is in an IPC operation or if <a class="el" href="#gga288a4500e4be2587d2f16d754d1a2e16abed26b392ea6e1ee9f468246ae19bf35" title="Trigger artificial exception in thread.">L4_THREAD_EX_REGS_TRIGGER_EXCEPTION</a> forces an IPC then changes in IP and SP take effect directly after returning from this IPC. On ARM this method allows to change the execption level, see <a class="el" href="#ga1733954711051b531a3d8db16b72bd1b" title="Arm specific L4::Thread::ex_regs() flags.">L4_thread_ex_regs_flags_arm</a> and <a class="el" href="#ga3037921d1968785807972a315c9f0b2c" title="Arm64 specific L4::Thread::ex_regs() flags.">L4_thread_ex_regs_flags_arm64</a>.</p>
|
|
<p>The thread is started using <a class="el" href="classL4_1_1Scheduler.html#acc86cb4df9b2aad35730b209e0c98089" title="Run a thread on a Scheduler.">L4::Scheduler::run_thread()</a>. However, if at the time <a class="el" href="classL4_1_1Scheduler.html#acc86cb4df9b2aad35730b209e0c98089" title="Run a thread on a Scheduler.">L4::Scheduler::run_thread()</a> is called, the instruction pointer of the thread is invalid, a later call to ex_regs() with a valid instruction pointer might start the thread. </p>
|
|
|
|
<p class="definition">Definition at line <a class="el" href="l4_2sys_2thread_8h_source.html#l00823">823</a> of file <a class="el" href="l4_2sys_2thread_8h_source.html">thread.h</a>.</p>
|
|
|
|
<p class="reference">References <a class="el" href="compiler_8h_source.html#l00161">L4_NOTHROW</a>, <a class="el" href="l4_2sys_2thread_8h_source.html#l00812">l4_thread_ex_regs_u()</a>, and <a class="el" href="l4_2sys_2utcb_8h_source.html#l00069">l4_msg_regs_t::mr</a>.</p>
|
|
|
|
<p class="reference">Referenced by <a class="el" href="sys_2thread_source.html#l00119">L4::Thread::ex_regs()</a>, and <a class="el" href="l4_2sys_2thread_8h_source.html#l00949">l4_thread_ex_regs_ret()</a>.</p>
|
|
<div id="dynsection-4" onclick="return dynsection.toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;"><span class="dynarrow"><span class="arrowhead closed"></span></span>Here is the call graph for this function:</div>
|
|
<div id="dynsection-4-summary" class="dynsummary" style="display:block;">
|
|
</div>
|
|
<div id="dynsection-4-content" class="dyncontent" style="display:none;">
|
|
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="group__l4__thread__api_ga5e191cd9b1cbc5d0ac9166fb2bdd5a18_cgraph.svg" width="643" height="86"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
|
|
</div>
|
|
<div id="dynsection-5" onclick="return dynsection.toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;"><span class="dynarrow"><span class="arrowhead closed"></span></span>Here is the caller graph for this function:</div>
|
|
<div id="dynsection-5-summary" class="dynsummary" style="display:block;">
|
|
</div>
|
|
<div id="dynsection-5-content" class="dyncontent" style="display:none;">
|
|
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="group__l4__thread__api_ga5e191cd9b1cbc5d0ac9166fb2bdd5a18_icgraph.svg" width="407" height="86"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
<a id="ga9387fbfe618c3ede0eae63261ce1662e" name="ga9387fbfe618c3ede0eae63261ce1662e"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#ga9387fbfe618c3ede0eae63261ce1662e">◆ </a></span>l4_thread_ex_regs_u()</h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="mlabels">
|
|
<tr>
|
|
<td class="mlabels-left">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a> l4_thread_ex_regs_u </td>
|
|
<td>(</td>
|
|
<td class="paramtype"><a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a></td> <td class="paramname"><span class="paramname"><em>thread</em></span>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype"><a class="el" href="group__l4__basic__types.html#ga4087b991c40c0d2fcde9ca331049a4d4">l4_addr_t</a></td> <td class="paramname"><span class="paramname"><em>ip</em></span>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype"><a class="el" href="group__l4__basic__types.html#ga4087b991c40c0d2fcde9ca331049a4d4">l4_addr_t</a></td> <td class="paramname"><span class="paramname"><em>sp</em></span>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype"><a class="el" href="group__l4__basic__types.html#ga1c2c4b333f75b1d05b59855910f2b9cb">l4_umword_t</a></td> <td class="paramname"><span class="paramname"><em>flags</em></span>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype"><a class="el" href="group__l4__utcb__api.html#ga89be8a86d11c1d532b636cc2df1330fb">l4_utcb_t</a> *</td> <td class="paramname"><span class="paramname"><em>utcb</em></span> )</td>
|
|
</tr>
|
|
</table>
|
|
</td>
|
|
<td class="mlabels-right">
|
|
<span class="mlabels"><span class="mlabel inline">inline</span></span> </td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
|
|
<p>Exchange basic thread registers. </p>
|
|
<dl class="params"><dt>Parameters</dt><dd>
|
|
<table class="params">
|
|
<tr><td class="paramname">thread</td><td>Capability selector of the thread to manipulate. </td></tr>
|
|
<tr><td class="paramname">ip</td><td>New instruction pointer, use ~0UL to leave the instruction pointer unchanged. </td></tr>
|
|
<tr><td class="paramname">sp</td><td>New stack pointer, use ~0UL to leave the stack pointer unchanged. </td></tr>
|
|
<tr><td class="paramname">flags</td><td>Ex-regs flags, see <a class="el" href="#ga288a4500e4be2587d2f16d754d1a2e16" title="Flags for the thread ex-regs operation.">L4_thread_ex_regs_flags</a>. </td></tr>
|
|
<tr><td class="paramname">utcb</td><td>UTCB to be used for this operation, shall be the UTCB of the calling thread. Defaults to <a class="el" href="group__l4__utcb__api.html#gadc099b4a59e1d99638c72c11a8c8b644" title="Get the UTCB address.">l4_utcb</a>.</td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<dl class="section return"><dt>Returns</dt><dd>System call return tag.</dd></dl>
|
|
<p>This method allows to manipulate and start a thread. The basic functionality is to set the instruction pointer and the stack pointer of a thread. Additionally, this method allows also to cancel ongoing IPC operations and to force the thread to raise an artificial exception (see <span class="tt">flags</span>). If the thread is in an IPC operation or if <a class="el" href="#gga288a4500e4be2587d2f16d754d1a2e16abed26b392ea6e1ee9f468246ae19bf35" title="Trigger artificial exception in thread.">L4_THREAD_EX_REGS_TRIGGER_EXCEPTION</a> forces an IPC then changes in IP and SP take effect directly after returning from this IPC. On ARM this method allows to change the execption level, see <a class="el" href="#ga1733954711051b531a3d8db16b72bd1b" title="Arm specific L4::Thread::ex_regs() flags.">L4_thread_ex_regs_flags_arm</a> and <a class="el" href="#ga3037921d1968785807972a315c9f0b2c" title="Arm64 specific L4::Thread::ex_regs() flags.">L4_thread_ex_regs_flags_arm64</a>.</p>
|
|
<p>The thread is started using <a class="el" href="classL4_1_1Scheduler.html#acc86cb4df9b2aad35730b209e0c98089" title="Run a thread on a Scheduler.">L4::Scheduler::run_thread()</a>. However, if at the time <a class="el" href="classL4_1_1Scheduler.html#acc86cb4df9b2aad35730b209e0c98089" title="Run a thread on a Scheduler.">L4::Scheduler::run_thread()</a> is called, the instruction pointer of the thread is invalid, a later call to ex_regs() with a valid instruction pointer might start the thread. </p>
|
|
|
|
<p class="definition">Definition at line <a class="el" href="l4_2sys_2thread_8h_source.html#l00812">812</a> of file <a class="el" href="l4_2sys_2thread_8h_source.html">thread.h</a>.</p>
|
|
|
|
<p class="reference">References <a class="el" href="l4_2sys_2ipc_8h_source.html#l00565">l4_ipc_call()</a>, <a class="el" href="____timeout_8h_source.html#l00076">L4_IPC_NEVER</a>, <a class="el" href="l4_2sys_2types_8h_source.html#l00405">l4_msgtag()</a>, <a class="el" href="compiler_8h_source.html#l00161">L4_NOTHROW</a>, <a class="el" href="l4_2sys_2types_8h_source.html#l00054">L4_PROTO_THREAD</a>, <a class="el" href="l4_2sys_2thread_8h_source.html#l00735">L4_THREAD_EX_REGS_OP</a>, and <a class="el" href="l4_2sys_2utcb_8h_source.html#l00069">l4_msg_regs_t::mr</a>.</p>
|
|
|
|
<p class="reference">Referenced by <a class="el" href="sys_2thread_source.html#l00084">L4::Thread::ex_regs()</a>, <a class="el" href="l4_2sys_2thread_8h_source.html#l00942">l4_thread_ex_regs()</a>, and <a class="el" href="l4_2sys_2thread_8h_source.html#l00823">l4_thread_ex_regs_ret_u()</a>.</p>
|
|
<div id="dynsection-6" onclick="return dynsection.toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;"><span class="dynarrow"><span class="arrowhead closed"></span></span>Here is the call graph for this function:</div>
|
|
<div id="dynsection-6-summary" class="dynsummary" style="display:block;">
|
|
</div>
|
|
<div id="dynsection-6-content" class="dyncontent" style="display:none;">
|
|
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="group__l4__thread__api_ga9387fbfe618c3ede0eae63261ce1662e_cgraph.svg" width="414" height="86"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
|
|
</div>
|
|
<div id="dynsection-7" onclick="return dynsection.toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;"><span class="dynarrow"><span class="arrowhead closed"></span></span>Here is the caller graph for this function:</div>
|
|
<div id="dynsection-7-summary" class="dynsummary" style="display:block;">
|
|
</div>
|
|
<div id="dynsection-7-content" class="dyncontent" style="display:none;">
|
|
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="group__l4__thread__api_ga9387fbfe618c3ede0eae63261ce1662e_icgraph.svg" width="611" height="159"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
<a id="ga424473745319d388b8c1378699cec20d" name="ga424473745319d388b8c1378699cec20d"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#ga424473745319d388b8c1378699cec20d">◆ </a></span>l4_thread_modify_sender_add()</h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="mlabels">
|
|
<tr>
|
|
<td class="mlabels-left">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname">int l4_thread_modify_sender_add </td>
|
|
<td>(</td>
|
|
<td class="paramtype"><a class="el" href="group__l4__basic__types.html#ga1c2c4b333f75b1d05b59855910f2b9cb">l4_umword_t</a></td> <td class="paramname"><span class="paramname"><em>match_mask</em></span>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype"><a class="el" href="group__l4__basic__types.html#ga1c2c4b333f75b1d05b59855910f2b9cb">l4_umword_t</a></td> <td class="paramname"><span class="paramname"><em>match</em></span>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype"><a class="el" href="group__l4__basic__types.html#ga1c2c4b333f75b1d05b59855910f2b9cb">l4_umword_t</a></td> <td class="paramname"><span class="paramname"><em>del_bits</em></span>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype"><a class="el" href="group__l4__basic__types.html#ga1c2c4b333f75b1d05b59855910f2b9cb">l4_umword_t</a></td> <td class="paramname"><span class="paramname"><em>add_bits</em></span>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a> *</td> <td class="paramname"><span class="paramname"><em>tag</em></span> )</td>
|
|
</tr>
|
|
</table>
|
|
</td>
|
|
<td class="mlabels-right">
|
|
<span class="mlabels"><span class="mlabel inline">inline</span></span> </td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
|
|
<p>Add a modification pattern to a sender modification sequence. </p>
|
|
<dl class="params"><dt>Parameters</dt><dd>
|
|
<table class="params">
|
|
<tr><td class="paramname">tag</td><td>Tag received from <a class="el" href="#ga06ff88cfe27ad4f6c67fa0dc36e6c261" title="Start a thread sender modification sequence.">l4_thread_modify_sender_start()</a> or previous <a class="el" href="#ga424473745319d388b8c1378699cec20d" title="Add a modification pattern to a sender modification sequence.">l4_thread_modify_sender_add()</a> calls from the same sequence. </td></tr>
|
|
<tr><td class="paramname">match_mask</td><td>Bitmask of bits to match the label. </td></tr>
|
|
<tr><td class="paramname">match</td><td>Bitmask that must be equal to the label after applying match_mask. </td></tr>
|
|
<tr><td class="paramname">del_bits</td><td>Bits to be deleted from the label. </td></tr>
|
|
<tr><td class="paramname">add_bits</td><td>Bits to be added to the label.</td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<dl class="section return"><dt>Returns</dt><dd>0 on sucess, <0 on error</dd></dl>
|
|
<p>In pseudo code: if ((sender_label & match_mask) == match) { sender_label = (sender_label & ~del_bits) | add_bits; }</p>
|
|
<p>Only the first match is applied.</p>
|
|
<dl class="section see"><dt>See also</dt><dd><a class="el" href="#ga06ff88cfe27ad4f6c67fa0dc36e6c261" title="Start a thread sender modification sequence.">l4_thread_modify_sender_start</a> </dd>
|
|
<dd>
|
|
<a class="el" href="#gab4f2106933cf35dc0d4fb2e97e093aef" title="Apply (commit) a sender modification sequence.">l4_thread_modify_sender_commit</a> </dd></dl>
|
|
|
|
<p class="definition">Definition at line <a class="el" href="l4_2sys_2thread_8h_source.html#l01116">1116</a> of file <a class="el" href="l4_2sys_2thread_8h_source.html">thread.h</a>.</p>
|
|
|
|
<p class="reference">References <a class="el" href="compiler_8h_source.html#l00161">L4_NOTHROW</a>, and <a class="el" href="l4_2sys_2utcb_8h_source.html#l00346">l4_utcb()</a>.</p>
|
|
<div id="dynsection-8" onclick="return dynsection.toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;"><span class="dynarrow"><span class="arrowhead closed"></span></span>Here is the call graph for this function:</div>
|
|
<div id="dynsection-8-summary" class="dynsummary" style="display:block;">
|
|
</div>
|
|
<div id="dynsection-8-content" class="dyncontent" style="display:none;">
|
|
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="group__l4__thread__api_ga424473745319d388b8c1378699cec20d_cgraph.svg" width="346" height="36"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
<a id="gab4f2106933cf35dc0d4fb2e97e093aef" name="gab4f2106933cf35dc0d4fb2e97e093aef"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#gab4f2106933cf35dc0d4fb2e97e093aef">◆ </a></span>l4_thread_modify_sender_commit()</h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="mlabels">
|
|
<tr>
|
|
<td class="mlabels-left">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a> l4_thread_modify_sender_commit </td>
|
|
<td>(</td>
|
|
<td class="paramtype"><a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a></td> <td class="paramname"><span class="paramname"><em>thread</em></span>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a></td> <td class="paramname"><span class="paramname"><em>tag</em></span> )</td>
|
|
</tr>
|
|
</table>
|
|
</td>
|
|
<td class="mlabels-right">
|
|
<span class="mlabels"><span class="mlabel inline">inline</span></span> </td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
|
|
<p>Apply (commit) a sender modification sequence. </p>
|
|
<p>The modification rules are applied to all IPCs to the thread (whether directly or by IPC gate) that are already in flight, that is that the sender is already blocking on.</p>
|
|
<dl class="section note"><dt>Note</dt><dd>Modifying the senders of a thread running on a different CPU core is not supported.</dd>
|
|
<dd>
|
|
To ensure that no in-flight senders are missed, either the thread itself must execute modify_senders, or the thread executing the modify_senders must synchronize with the target thread. This synchronization must ensure the following:<ol type="1">
|
|
<li>Before modify_senders is executed the target thread must execute at least shortly (so that pending DRQs are handled).</li>
|
|
<li>The target thread must pause its IPC dispatch, until modify_senders is completed. In other words, the target thread must not be receive ready, because otherwise an IPC message with an unmodified label can be transferred to its UTCB or vCPU state.</li>
|
|
</ol>
|
|
</dd></dl>
|
|
<dl class="section see"><dt>See also</dt><dd><a class="el" href="#ga06ff88cfe27ad4f6c67fa0dc36e6c261" title="Start a thread sender modification sequence.">l4_thread_modify_sender_start</a> </dd>
|
|
<dd>
|
|
<a class="el" href="#ga424473745319d388b8c1378699cec20d" title="Add a modification pattern to a sender modification sequence.">l4_thread_modify_sender_add</a> </dd></dl>
|
|
|
|
<p class="definition">Definition at line <a class="el" href="l4_2sys_2thread_8h_source.html#l01127">1127</a> of file <a class="el" href="l4_2sys_2thread_8h_source.html">thread.h</a>.</p>
|
|
|
|
<p class="reference">References <a class="el" href="compiler_8h_source.html#l00161">L4_NOTHROW</a>, and <a class="el" href="l4_2sys_2utcb_8h_source.html#l00346">l4_utcb()</a>.</p>
|
|
<div id="dynsection-9" onclick="return dynsection.toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;"><span class="dynarrow"><span class="arrowhead closed"></span></span>Here is the call graph for this function:</div>
|
|
<div id="dynsection-9-summary" class="dynsummary" style="display:block;">
|
|
</div>
|
|
<div id="dynsection-9-content" class="dyncontent" style="display:none;">
|
|
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="group__l4__thread__api_gab4f2106933cf35dc0d4fb2e97e093aef_cgraph.svg" width="315" height="51"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
<a id="ga06ff88cfe27ad4f6c67fa0dc36e6c261" name="ga06ff88cfe27ad4f6c67fa0dc36e6c261"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#ga06ff88cfe27ad4f6c67fa0dc36e6c261">◆ </a></span>l4_thread_modify_sender_start()</h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="mlabels">
|
|
<tr>
|
|
<td class="mlabels-left">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a> l4_thread_modify_sender_start </td>
|
|
<td>(</td>
|
|
<td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td>
|
|
<td></td>
|
|
</tr>
|
|
</table>
|
|
</td>
|
|
<td class="mlabels-right">
|
|
<span class="mlabels"><span class="mlabel inline">inline</span></span> </td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
|
|
<p>Start a thread sender modification sequence. </p>
|
|
<p>Add modification rules with <a class="el" href="#ga424473745319d388b8c1378699cec20d" title="Add a modification pattern to a sender modification sequence.">l4_thread_modify_sender_add()</a> and commit with <a class="el" href="#gab4f2106933cf35dc0d4fb2e97e093aef" title="Apply (commit) a sender modification sequence.">l4_thread_modify_sender_commit()</a>. Do not touch the UTCB between <a class="el" href="#ga06ff88cfe27ad4f6c67fa0dc36e6c261" title="Start a thread sender modification sequence.">l4_thread_modify_sender_start()</a> and <a class="el" href="#gab4f2106933cf35dc0d4fb2e97e093aef" title="Apply (commit) a sender modification sequence.">l4_thread_modify_sender_commit()</a>.</p>
|
|
<p>This mechanism shall be used to change the source object labels of every pending IPC of an IPC gate or an IRQ if the labels in such pending IPC become invalid for the receiving thread, potentially because:</p><ul>
|
|
<li>an IPC gate / IRQ was unbound from a thread, or</li>
|
|
<li>an IPC gate / IRQ was removed, or</li>
|
|
<li>the label of an IPC gate /IRQ bound to a thread was changed.</li>
|
|
</ul>
|
|
<p>It is not required to perform the modify_sender mechanism after an IPC gate or an IRQ was bound to a thread for the first time.</p>
|
|
<dl class="section see"><dt>See also</dt><dd><a class="el" href="#ga424473745319d388b8c1378699cec20d" title="Add a modification pattern to a sender modification sequence.">l4_thread_modify_sender_add</a> </dd>
|
|
<dd>
|
|
<a class="el" href="#gab4f2106933cf35dc0d4fb2e97e093aef" title="Apply (commit) a sender modification sequence.">l4_thread_modify_sender_commit</a> </dd></dl>
|
|
|
|
<p class="definition">Definition at line <a class="el" href="l4_2sys_2thread_8h_source.html#l01110">1110</a> of file <a class="el" href="l4_2sys_2thread_8h_source.html">thread.h</a>.</p>
|
|
|
|
<p class="reference">References <a class="el" href="compiler_8h_source.html#l00161">L4_NOTHROW</a>, and <a class="el" href="l4_2sys_2utcb_8h_source.html#l00346">l4_utcb()</a>.</p>
|
|
<div id="dynsection-10" onclick="return dynsection.toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;"><span class="dynarrow"><span class="arrowhead closed"></span></span>Here is the call graph for this function:</div>
|
|
<div id="dynsection-10-summary" class="dynsummary" style="display:block;">
|
|
</div>
|
|
<div id="dynsection-10-content" class="dyncontent" style="display:none;">
|
|
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="group__l4__thread__api_ga06ff88cfe27ad4f6c67fa0dc36e6c261_cgraph.svg" width="315" height="51"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
<a id="ga9dded96485c96c7a3389ea00f5a305d1" name="ga9dded96485c96c7a3389ea00f5a305d1"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#ga9dded96485c96c7a3389ea00f5a305d1">◆ </a></span>l4_thread_register_del_irq()</h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="mlabels">
|
|
<tr>
|
|
<td class="mlabels-left">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a> l4_thread_register_del_irq </td>
|
|
<td>(</td>
|
|
<td class="paramtype"><a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a></td> <td class="paramname"><span class="paramname"><em>thread</em></span>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype"><a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a></td> <td class="paramname"><span class="paramname"><em>irq</em></span> )</td>
|
|
</tr>
|
|
</table>
|
|
</td>
|
|
<td class="mlabels-right">
|
|
<span class="mlabels"><span class="mlabel inline">inline</span></span> </td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
|
|
<p>Register an IRQ that will trigger upon deletion events. </p>
|
|
<dl class="params"><dt>Parameters</dt><dd>
|
|
<table class="params">
|
|
<tr><td class="paramname">thread</td><td>Thread to register IRQ for. </td></tr>
|
|
<tr><td class="paramname">irq</td><td>Capability selector for the IRQ object to be triggered.</td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<dl class="section return"><dt>Returns</dt><dd>System call return tag containing the return code.</dd></dl>
|
|
<dl class="retval"><dt>Return values</dt><dd>
|
|
<table class="retval">
|
|
<tr><td class="paramname">-L4_EPERM</td><td>Insufficient permissions; see precondition.</td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<dl class="section pre"><dt>Precondition</dt><dd>The capability <span class="tt">irq</span> must have the permission <a class="el" href="group__l4__fpage__api.html#ggaee60789a48cab2782f5a368237591b39a561054fb4021ff4a22ab1881c7a7de5a" title="Interface specific 'W' right for capability flexpages.">L4_CAP_FPAGE_W</a>.</dd></dl>
|
|
<p>In case the <span class="tt">irq</span> is already bound to an interrupt source, it is unbound first. When <span class="tt">irq</span> is deleted, it will be deregistered first. A registered deletion Irq can only be deregistered by deleting the Irq or the thread.</p>
|
|
<p>List of deletion events:</p><ul>
|
|
<li>deletion of one or several IPC gates bound to this thread.</li>
|
|
</ul>
|
|
<p>When the deletion event is delivered, there is no indication about which IPC gate was deleted. </p>
|
|
|
|
<p class="definition">Definition at line <a class="el" href="l4_2sys_2thread_8h_source.html#l01037">1037</a> of file <a class="el" href="l4_2sys_2thread_8h_source.html">thread.h</a>.</p>
|
|
|
|
<p class="reference">References <a class="el" href="compiler_8h_source.html#l00161">L4_NOTHROW</a>, and <a class="el" href="l4_2sys_2utcb_8h_source.html#l00346">l4_utcb()</a>.</p>
|
|
<div id="dynsection-11" onclick="return dynsection.toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;"><span class="dynarrow"><span class="arrowhead closed"></span></span>Here is the call graph for this function:</div>
|
|
<div id="dynsection-11-summary" class="dynsummary" style="display:block;">
|
|
</div>
|
|
<div id="dynsection-11-content" class="dyncontent" style="display:none;">
|
|
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="group__l4__thread__api_ga9dded96485c96c7a3389ea00f5a305d1_cgraph.svg" width="268" height="51"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
<a id="gaba7f8764bd91304b3407d94d90aa6578" name="gaba7f8764bd91304b3407d94d90aa6578"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#gaba7f8764bd91304b3407d94d90aa6578">◆ </a></span>l4_thread_register_doorbell_irq()</h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="mlabels">
|
|
<tr>
|
|
<td class="mlabels-left">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a> l4_thread_register_doorbell_irq </td>
|
|
<td>(</td>
|
|
<td class="paramtype"><a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a></td> <td class="paramname"><span class="paramname"><em>thread</em></span>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype"><a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a></td> <td class="paramname"><span class="paramname"><em>irq</em></span> )</td>
|
|
</tr>
|
|
</table>
|
|
</td>
|
|
<td class="mlabels-right">
|
|
<span class="mlabels"><span class="mlabel inline">inline</span></span> </td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
|
|
<p>Register an IRQ that will trigger when a forwarded virtual interrupt is pending. </p>
|
|
<dl class="params"><dt>Parameters</dt><dd>
|
|
<table class="params">
|
|
<tr><td class="paramname">thread</td><td>Thread to register IRQ for. </td></tr>
|
|
<tr><td class="paramname">irq</td><td>Capability selector for the IRQ object to be triggered.</td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<dl class="section return"><dt>Returns</dt><dd>System call return tag containing the return code.</dd></dl>
|
|
<dl class="retval"><dt>Return values</dt><dd>
|
|
<table class="retval">
|
|
<tr><td class="paramname">-L4_EPERM</td><td>Insufficient permissions; see precondition.</td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<dl class="section pre"><dt>Precondition</dt><dd>The capability <span class="tt">irq</span> must have the permission <a class="el" href="group__l4__fpage__api.html#ggaee60789a48cab2782f5a368237591b39a561054fb4021ff4a22ab1881c7a7de5a" title="Interface specific 'W' right for capability flexpages.">L4_CAP_FPAGE_W</a>.</dd></dl>
|
|
<p>See <a class="el" href="group__l4__irq__api.html#gab0e8143bf2fc59bccaab2941026b698c" title="Bind a thread to this Irq for vCPU interrupt forwarding.">l4_irq_bind_vcpu()</a> for more details about how interrupts can be forwarded directly by the kernel to extended vCPU user mode.</p>
|
|
<p>In case the <span class="tt">irq</span> is already bound to an interrupt source, it is unbound first. When <span class="tt">irq</span> is deleted, it will be deregistered first. A registered deletion Irq can only be deregistered by deleting the Irq or the thread. </p>
|
|
|
|
<p class="definition">Definition at line <a class="el" href="l4_2sys_2thread_8h_source.html#l01146">1146</a> of file <a class="el" href="l4_2sys_2thread_8h_source.html">thread.h</a>.</p>
|
|
|
|
<p class="reference">References <a class="el" href="compiler_8h_source.html#l00161">L4_NOTHROW</a>, and <a class="el" href="l4_2sys_2utcb_8h_source.html#l00346">l4_utcb()</a>.</p>
|
|
<div id="dynsection-12" onclick="return dynsection.toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;"><span class="dynarrow"><span class="arrowhead closed"></span></span>Here is the call graph for this function:</div>
|
|
<div id="dynsection-12-summary" class="dynsummary" style="display:block;">
|
|
</div>
|
|
<div id="dynsection-12-content" class="dyncontent" style="display:none;">
|
|
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="group__l4__thread__api_gaba7f8764bd91304b3407d94d90aa6578_cgraph.svg" width="268" height="51"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
<a id="ga87feff7f1cdf9b67cccdf4f1b8492e8f" name="ga87feff7f1cdf9b67cccdf4f1b8492e8f"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#ga87feff7f1cdf9b67cccdf4f1b8492e8f">◆ </a></span>l4_thread_stats_time()</h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="mlabels">
|
|
<tr>
|
|
<td class="mlabels-left">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a> l4_thread_stats_time </td>
|
|
<td>(</td>
|
|
<td class="paramtype"><a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a></td> <td class="paramname"><span class="paramname"><em>thread</em></span>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype"><a class="el" href="group__l4__basic__types.html#gab71da24eb7cda2c035f18b862309b101">l4_kernel_clock_t</a> *</td> <td class="paramname"><span class="paramname"><em>us</em></span> )</td>
|
|
</tr>
|
|
</table>
|
|
</td>
|
|
<td class="mlabels-right">
|
|
<span class="mlabels"><span class="mlabel inline">inline</span></span> </td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
|
|
<p>Get consumed time of thread in µs. </p>
|
|
<dl class="params"><dt>Parameters</dt><dd>
|
|
<table class="params">
|
|
<tr><td class="paramdir"></td><td class="paramname">thread</td><td>Thread to get the consumed time from. </td></tr>
|
|
<tr><td class="paramdir">[out]</td><td class="paramname">us</td><td>Consumed time in µs.</td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<dl class="section return"><dt>Returns</dt><dd>system call return tag </dd></dl>
|
|
|
|
<p class="definition">Definition at line <a class="el" href="l4_2sys_2thread_8h_source.html#l01005">1005</a> of file <a class="el" href="l4_2sys_2thread_8h_source.html">thread.h</a>.</p>
|
|
|
|
<p class="reference">References <a class="el" href="compiler_8h_source.html#l00161">L4_NOTHROW</a>, and <a class="el" href="l4_2sys_2utcb_8h_source.html#l00346">l4_utcb()</a>.</p>
|
|
<div id="dynsection-13" onclick="return dynsection.toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;"><span class="dynarrow"><span class="arrowhead closed"></span></span>Here is the call graph for this function:</div>
|
|
<div id="dynsection-13-summary" class="dynsummary" style="display:block;">
|
|
</div>
|
|
<div id="dynsection-13-content" class="dyncontent" style="display:none;">
|
|
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="group__l4__thread__api_ga87feff7f1cdf9b67cccdf4f1b8492e8f_cgraph.svg" width="287" height="36"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
<a id="gabc6b8e906087c1fc7b9bb691c47adcbd" name="gabc6b8e906087c1fc7b9bb691c47adcbd"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#gabc6b8e906087c1fc7b9bb691c47adcbd">◆ </a></span>l4_thread_switch()</h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="mlabels">
|
|
<tr>
|
|
<td class="mlabels-left">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a> l4_thread_switch </td>
|
|
<td>(</td>
|
|
<td class="paramtype"><a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a></td> <td class="paramname"><span class="paramname"><em>to_thread</em></span></td><td>)</td>
|
|
<td></td>
|
|
</tr>
|
|
</table>
|
|
</td>
|
|
<td class="mlabels-right">
|
|
<span class="mlabels"><span class="mlabel inline">inline</span></span> </td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
|
|
<p>Switch to another thread (and donate the remaining time slice). </p>
|
|
<dl class="params"><dt>Parameters</dt><dd>
|
|
<table class="params">
|
|
<tr><td class="paramname">to_thread</td><td>The thread to switch to.</td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<dl class="section return"><dt>Returns</dt><dd>system call return tag </dd></dl>
|
|
|
|
<p class="definition">Definition at line <a class="el" href="l4_2sys_2thread_8h_source.html#l00996">996</a> of file <a class="el" href="l4_2sys_2thread_8h_source.html">thread.h</a>.</p>
|
|
|
|
<p class="reference">References <a class="el" href="compiler_8h_source.html#l00161">L4_NOTHROW</a>, and <a class="el" href="l4_2sys_2utcb_8h_source.html#l00346">l4_utcb()</a>.</p>
|
|
<div id="dynsection-14" onclick="return dynsection.toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;"><span class="dynarrow"><span class="arrowhead closed"></span></span>Here is the call graph for this function:</div>
|
|
<div id="dynsection-14-summary" class="dynsummary" style="display:block;">
|
|
</div>
|
|
<div id="dynsection-14-content" class="dyncontent" style="display:none;">
|
|
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="group__l4__thread__api_gabc6b8e906087c1fc7b9bb691c47adcbd_cgraph.svg" width="260" height="36"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
<a id="gac3263f4949c90adda83dba763b195988" name="gac3263f4949c90adda83dba763b195988"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#gac3263f4949c90adda83dba763b195988">◆ </a></span>l4_thread_vcpu_control()</h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="mlabels">
|
|
<tr>
|
|
<td class="mlabels-left">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a> l4_thread_vcpu_control </td>
|
|
<td>(</td>
|
|
<td class="paramtype"><a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a></td> <td class="paramname"><span class="paramname"><em>thread</em></span>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype"><a class="el" href="group__l4__basic__types.html#ga4087b991c40c0d2fcde9ca331049a4d4">l4_addr_t</a></td> <td class="paramname"><span class="paramname"><em>vcpu_state</em></span> )</td>
|
|
</tr>
|
|
</table>
|
|
</td>
|
|
<td class="mlabels-right">
|
|
<span class="mlabels"><span class="mlabel inline">inline</span></span> </td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
|
|
<p>Enable the vCPU feature for the thread. </p>
|
|
<dl class="params"><dt>Parameters</dt><dd>
|
|
<table class="params">
|
|
<tr><td class="paramname">thread</td><td>Capability selector of the thread for which the vCPU feature shall be enabled. </td></tr>
|
|
<tr><td class="paramname">vcpu_state</td><td>The virtual address where the kernel shall store the vCPU state in case of vCPU exits. The address must be a valid kernel-user-memory address (see <a class="el" href="group__l4__task__api.html#ga433356d17f678aa259c6b616aeb476ef" title="Add kernel-user memory.">l4_task_add_ku_mem()</a>).</td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<dl class="section return"><dt>Returns</dt><dd>Syscall return tag.</dd></dl>
|
|
<p>This function enables the vCPU feature of the <span class="tt">thread</span>.</p>
|
|
<p>The kernel-user memory area starting at <span class="tt">vcpu_state</span> must be at least 128-byte aligned and must cover the size of <a class="el" href="structl4__vcpu__state__t.html" title="State of a vCPU.">l4_vcpu_state_t</a>.</p>
|
|
<dl class="section note"><dt>Note</dt><dd>Disabling of the vCPU feature is optional and currently not supported. </dd></dl>
|
|
|
|
<p class="definition">Definition at line <a class="el" href="l4_2sys_2thread_8h_source.html#l01054">1054</a> of file <a class="el" href="l4_2sys_2thread_8h_source.html">thread.h</a>.</p>
|
|
|
|
<p class="reference">References <a class="el" href="compiler_8h_source.html#l00161">L4_NOTHROW</a>, <a class="el" href="l4_2sys_2thread_8h_source.html#l01044">l4_thread_vcpu_control_u()</a>, and <a class="el" href="l4_2sys_2utcb_8h_source.html#l00346">l4_utcb()</a>.</p>
|
|
<div id="dynsection-15" onclick="return dynsection.toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;"><span class="dynarrow"><span class="arrowhead closed"></span></span>Here is the call graph for this function:</div>
|
|
<div id="dynsection-15-summary" class="dynsummary" style="display:block;">
|
|
</div>
|
|
<div id="dynsection-15-content" class="dyncontent" style="display:none;">
|
|
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="group__l4__thread__api_gac3263f4949c90adda83dba763b195988_cgraph.svg" width="667" height="110"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
<a id="ga592d99fe80a0091a837f6001d0d5c25b" name="ga592d99fe80a0091a837f6001d0d5c25b"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#ga592d99fe80a0091a837f6001d0d5c25b">◆ </a></span>l4_thread_vcpu_control_ext()</h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="mlabels">
|
|
<tr>
|
|
<td class="mlabels-left">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a> l4_thread_vcpu_control_ext </td>
|
|
<td>(</td>
|
|
<td class="paramtype"><a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a></td> <td class="paramname"><span class="paramname"><em>thread</em></span>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype"><a class="el" href="group__l4__basic__types.html#ga4087b991c40c0d2fcde9ca331049a4d4">l4_addr_t</a></td> <td class="paramname"><span class="paramname"><em>ext_vcpu_state</em></span> )</td>
|
|
</tr>
|
|
</table>
|
|
</td>
|
|
<td class="mlabels-right">
|
|
<span class="mlabels"><span class="mlabel inline">inline</span></span> </td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
|
|
<p>Enable the extended vCPU feature for the thread. </p>
|
|
<dl class="params"><dt>Parameters</dt><dd>
|
|
<table class="params">
|
|
<tr><td class="paramname">thread</td><td>Capability selector of the thread for which the extended vCPU feature shall be enabled. </td></tr>
|
|
<tr><td class="paramname">ext_vcpu_state</td><td>The virtual address where the kernel shall store the vCPU state in case of vCPU exits. The address must be a valid kernel-user-memory address (see <a class="el" href="group__l4__task__api.html#ga433356d17f678aa259c6b616aeb476ef" title="Add kernel-user memory.">l4_task_add_ku_mem()</a>).</td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<dl class="section return"><dt>Returns</dt><dd>Syscall return tag.</dd></dl>
|
|
<p>The extended vCPU feature allows the use of hardware-virtualization features such as Intel's VT or AMD's SVM.</p>
|
|
<p>This function enables the extended vCPU feature of the <span class="tt">thread</span>. Enabling the extended vCPU feature also enables the vCPU feature.</p>
|
|
<p>The kernel-user memory area starting at <span class="tt">ext_vcpu_state</span> must be at least 4 KiB aligned and must cover a size of L4_PAGESIZE. It includes the data of <a class="el" href="structl4__vcpu__state__t.html" title="State of a vCPU.">l4_vcpu_state_t</a> at offset 0, the extended vCPU state at offset L4_VCPU_OFFSET_EXT_STATE, and, on some platforms, the extended vCPU information at offset L4_VCPU_OFFSET_EXT_INFOS.</p>
|
|
<dl class="section note"><dt>Note</dt><dd>Enabling the extended vCPU feature for a thread running on a different CPU core is currently not supported. </dd>
|
|
<dd>
|
|
Disabling of the extended vCPU feature is currently not supported. </dd>
|
|
<dd>
|
|
Upgrading from non-extended vCPU feature to extended vCPU feature is currently not supported. </dd></dl>
|
|
|
|
<p class="definition">Definition at line <a class="el" href="l4_2sys_2thread_8h_source.html#l01069">1069</a> of file <a class="el" href="l4_2sys_2thread_8h_source.html">thread.h</a>.</p>
|
|
|
|
<p class="reference">References <a class="el" href="compiler_8h_source.html#l00161">L4_NOTHROW</a>, <a class="el" href="l4_2sys_2thread_8h_source.html#l01059">l4_thread_vcpu_control_ext_u()</a>, and <a class="el" href="l4_2sys_2utcb_8h_source.html#l00346">l4_utcb()</a>.</p>
|
|
<div id="dynsection-16" onclick="return dynsection.toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;"><span class="dynarrow"><span class="arrowhead closed"></span></span>Here is the call graph for this function:</div>
|
|
<div id="dynsection-16-summary" class="dynsummary" style="display:block;">
|
|
</div>
|
|
<div id="dynsection-16-content" class="dyncontent" style="display:none;">
|
|
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="group__l4__thread__api_ga592d99fe80a0091a837f6001d0d5c25b_cgraph.svg" width="680" height="118"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
<a id="ga1015c5500bcfeaa01d209ee116cf57ec" name="ga1015c5500bcfeaa01d209ee116cf57ec"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#ga1015c5500bcfeaa01d209ee116cf57ec">◆ </a></span>l4_thread_vcpu_control_ext_u()</h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="mlabels">
|
|
<tr>
|
|
<td class="mlabels-left">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a> l4_thread_vcpu_control_ext_u </td>
|
|
<td>(</td>
|
|
<td class="paramtype"><a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a></td> <td class="paramname"><span class="paramname"><em>thread</em></span>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype"><a class="el" href="group__l4__basic__types.html#ga4087b991c40c0d2fcde9ca331049a4d4">l4_addr_t</a></td> <td class="paramname"><span class="paramname"><em>ext_vcpu_state</em></span>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype"><a class="el" href="group__l4__utcb__api.html#ga89be8a86d11c1d532b636cc2df1330fb">l4_utcb_t</a> *</td> <td class="paramname"><span class="paramname"><em>utcb</em></span> )</td>
|
|
</tr>
|
|
</table>
|
|
</td>
|
|
<td class="mlabels-right">
|
|
<span class="mlabels"><span class="mlabel inline">inline</span></span> </td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
|
|
<p>Enable the extended vCPU feature for the thread. </p>
|
|
<dl class="params"><dt>Parameters</dt><dd>
|
|
<table class="params">
|
|
<tr><td class="paramname">thread</td><td>Capability selector of the thread for which the extended vCPU feature shall be enabled. </td></tr>
|
|
<tr><td class="paramname">ext_vcpu_state</td><td>The virtual address where the kernel shall store the vCPU state in case of vCPU exits. The address must be a valid kernel-user-memory address (see <a class="el" href="classL4_1_1Task.html#a9e741ff1d27ca776c65abaff1de2f139" title="Add kernel-user memory.">L4::Task::add_ku_mem()</a>). </td></tr>
|
|
<tr><td class="paramname">utcb</td><td>UTCB to be used for this operation, shall be the UTCB of the calling thread. Defaults to <a class="el" href="group__l4__utcb__api.html#gadc099b4a59e1d99638c72c11a8c8b644" title="Get the UTCB address.">l4_utcb</a>.</td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<dl class="section return"><dt>Returns</dt><dd>Syscall return tag.</dd></dl>
|
|
<p>The extended vCPU feature allows the use of hardware-virtualization features such as Intel's VT-x (VMX) or AMD's AMD-V (SVM).</p>
|
|
<p>This function enables the extended vCPU feature of <span class="tt">this</span> thread. Enabling the extended vCPU feature also enables the vCPU feature.</p>
|
|
<p>The kernel-user memory area starting at <span class="tt">ext_vcpu_state</span> must be at least 4 KiB aligned and must cover a size of L4_PAGESIZE. It includes the data of <a class="el" href="structl4__vcpu__state__t.html" title="State of a vCPU.">l4_vcpu_state_t</a> at offset 0, the extended vCPU state at offset L4_VCPU_OFFSET_EXT_STATE, and, on some platforms, the extended vCPU information at offset L4_VCPU_OFFSET_EXT_INFOS.</p>
|
|
<p>On Intel's VT-x (VMX), the extended vCPU state is <a class="el" href="structl4__vm__vmx__vcpu__vmcs__t.html" title="VMX software VMCS.">l4_vm_vmx_vcpu_vmcs_t</a> and the extended vCPU information is <a class="el" href="structl4__vm__vmx__vcpu__infos__t.html" title="VMX information members.">l4_vm_vmx_vcpu_infos_t</a>. Furthermore, the extended vCPU state needs to be associated with a vCPU context (see <a class="el" href="group__l4__vm__vmx__api.html#ga6f10feba83a036b0e88a56f4784862be" title="Associate the software VMCS with a vCPU context, i.e.">l4_vm_vmx_set_hw_vmcs()</a>).</p>
|
|
<p>On AMD's AMD-V (SVM), the extended vCPU state is <a class="el" href="structl4__vm__svm__vmcb__t.html" title="Control structure for SVM VMs.">l4_vm_svm_vmcb_t</a>.</p>
|
|
<dl class="section note"><dt>Note</dt><dd>Enabling the extended vCPU feature for a thread running on a different CPU core is currently not supported. </dd>
|
|
<dd>
|
|
Disabling of the extended vCPU feature is currently not supported. </dd>
|
|
<dd>
|
|
Upgrading from non-extended vCPU feature to extended vCPU feature is currently not supported. </dd></dl>
|
|
|
|
<p class="definition">Definition at line <a class="el" href="l4_2sys_2thread_8h_source.html#l01059">1059</a> of file <a class="el" href="l4_2sys_2thread_8h_source.html">thread.h</a>.</p>
|
|
|
|
<p class="reference">References <a class="el" href="l4_2sys_2ipc_8h_source.html#l00565">l4_ipc_call()</a>, <a class="el" href="____timeout_8h_source.html#l00076">L4_IPC_NEVER</a>, <a class="el" href="l4_2sys_2types_8h_source.html#l00405">l4_msgtag()</a>, <a class="el" href="compiler_8h_source.html#l00161">L4_NOTHROW</a>, <a class="el" href="l4_2sys_2types_8h_source.html#l00054">L4_PROTO_THREAD</a>, and <a class="el" href="l4_2sys_2utcb_8h_source.html#l00069">l4_msg_regs_t::mr</a>.</p>
|
|
|
|
<p class="reference">Referenced by <a class="el" href="l4_2sys_2thread_8h_source.html#l01069">l4_thread_vcpu_control_ext()</a>, and <a class="el" href="sys_2thread_source.html#l00398">L4::Thread::vcpu_control_ext()</a>.</p>
|
|
<div id="dynsection-17" onclick="return dynsection.toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;"><span class="dynarrow"><span class="arrowhead closed"></span></span>Here is the call graph for this function:</div>
|
|
<div id="dynsection-17-summary" class="dynsummary" style="display:block;">
|
|
</div>
|
|
<div id="dynsection-17-content" class="dyncontent" style="display:none;">
|
|
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="group__l4__thread__api_ga1015c5500bcfeaa01d209ee116cf57ec_cgraph.svg" width="431" height="86"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
|
|
</div>
|
|
<div id="dynsection-18" onclick="return dynsection.toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;"><span class="dynarrow"><span class="arrowhead closed"></span></span>Here is the caller graph for this function:</div>
|
|
<div id="dynsection-18-summary" class="dynsummary" style="display:block;">
|
|
</div>
|
|
<div id="dynsection-18-content" class="dyncontent" style="display:none;">
|
|
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="group__l4__thread__api_ga1015c5500bcfeaa01d209ee116cf57ec_icgraph.svg" width="442" height="86"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
<a id="ga8ebc0dd643266610d76860cf0fb77f53" name="ga8ebc0dd643266610d76860cf0fb77f53"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#ga8ebc0dd643266610d76860cf0fb77f53">◆ </a></span>l4_thread_vcpu_control_u()</h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="mlabels">
|
|
<tr>
|
|
<td class="mlabels-left">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a> l4_thread_vcpu_control_u </td>
|
|
<td>(</td>
|
|
<td class="paramtype"><a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a></td> <td class="paramname"><span class="paramname"><em>thread</em></span>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype"><a class="el" href="group__l4__basic__types.html#ga4087b991c40c0d2fcde9ca331049a4d4">l4_addr_t</a></td> <td class="paramname"><span class="paramname"><em>vcpu_state</em></span>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype"><a class="el" href="group__l4__utcb__api.html#ga89be8a86d11c1d532b636cc2df1330fb">l4_utcb_t</a> *</td> <td class="paramname"><span class="paramname"><em>utcb</em></span> )</td>
|
|
</tr>
|
|
</table>
|
|
</td>
|
|
<td class="mlabels-right">
|
|
<span class="mlabels"><span class="mlabel inline">inline</span></span> </td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
|
|
<p>Enable the vCPU feature for the thread. </p>
|
|
<dl class="params"><dt>Parameters</dt><dd>
|
|
<table class="params">
|
|
<tr><td class="paramname">thread</td><td>Capability selector of the thread for which the vCPU feature shall be enabled. </td></tr>
|
|
<tr><td class="paramname">vcpu_state</td><td>A virtual address pointing to a <a class="el" href="structl4__vcpu__state__t.html" title="State of a vCPU.">l4_vcpu_state_t</a>. It must be a valid kernel-user-memory address (see <a class="el" href="classL4_1_1Task.html#a9e741ff1d27ca776c65abaff1de2f139" title="Add kernel-user memory.">L4::Task::add_ku_mem()</a>). </td></tr>
|
|
<tr><td class="paramname">utcb</td><td>UTCB to be used for this operation, shall be the UTCB of the calling thread. Defaults to <a class="el" href="group__l4__utcb__api.html#gadc099b4a59e1d99638c72c11a8c8b644" title="Get the UTCB address.">l4_utcb</a>.</td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<dl class="section return"><dt>Returns</dt><dd>Syscall return tag.</dd></dl>
|
|
<p>This function enables the vCPU feature of <span class="tt">this</span> thread</p>
|
|
<p>The kernel-user memory starting at <span class="tt">vcpu_state</span> must be at least 128-byte aligned and must cover the size of <a class="el" href="structl4__vcpu__state__t.html" title="State of a vCPU.">l4_vcpu_state_t</a>.</p>
|
|
<p>The asynchronous IPC handling is described at <a class="el" href="group__l4__vcpu__api.html">vCPU API</a>.</p>
|
|
<dl class="section note"><dt>Note</dt><dd>Disabling of the vCPU feature is optional and currently not supported. </dd></dl>
|
|
|
|
<p class="definition">Definition at line <a class="el" href="l4_2sys_2thread_8h_source.html#l01044">1044</a> of file <a class="el" href="l4_2sys_2thread_8h_source.html">thread.h</a>.</p>
|
|
|
|
<p class="reference">References <a class="el" href="l4_2sys_2ipc_8h_source.html#l00565">l4_ipc_call()</a>, <a class="el" href="____timeout_8h_source.html#l00076">L4_IPC_NEVER</a>, <a class="el" href="l4_2sys_2types_8h_source.html#l00405">l4_msgtag()</a>, <a class="el" href="compiler_8h_source.html#l00161">L4_NOTHROW</a>, <a class="el" href="l4_2sys_2types_8h_source.html#l00054">L4_PROTO_THREAD</a>, <a class="el" href="l4_2sys_2thread_8h_source.html#l00741">L4_THREAD_VCPU_CONTROL_OP</a>, and <a class="el" href="l4_2sys_2utcb_8h_source.html#l00069">l4_msg_regs_t::mr</a>.</p>
|
|
|
|
<p class="reference">Referenced by <a class="el" href="l4_2sys_2thread_8h_source.html#l01054">l4_thread_vcpu_control()</a>, and <a class="el" href="sys_2thread_source.html#l00358">L4::Thread::vcpu_control()</a>.</p>
|
|
<div id="dynsection-19" onclick="return dynsection.toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;"><span class="dynarrow"><span class="arrowhead closed"></span></span>Here is the call graph for this function:</div>
|
|
<div id="dynsection-19-summary" class="dynsummary" style="display:block;">
|
|
</div>
|
|
<div id="dynsection-19-content" class="dyncontent" style="display:none;">
|
|
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="group__l4__thread__api_ga8ebc0dd643266610d76860cf0fb77f53_cgraph.svg" width="446" height="86"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
|
|
</div>
|
|
<div id="dynsection-20" onclick="return dynsection.toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;"><span class="dynarrow"><span class="arrowhead closed"></span></span>Here is the caller graph for this function:</div>
|
|
<div id="dynsection-20-summary" class="dynsummary" style="display:block;">
|
|
</div>
|
|
<div id="dynsection-20-content" class="dyncontent" style="display:none;">
|
|
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="group__l4__thread__api_ga8ebc0dd643266610d76860cf0fb77f53_icgraph.svg" width="428" height="86"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
<a id="gaaf8bb1c28a014326dd381bc2d3478da8" name="gaaf8bb1c28a014326dd381bc2d3478da8"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#gaaf8bb1c28a014326dd381bc2d3478da8">◆ </a></span>l4_thread_vcpu_resume_commit()</h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="mlabels">
|
|
<tr>
|
|
<td class="mlabels-left">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a> l4_thread_vcpu_resume_commit </td>
|
|
<td>(</td>
|
|
<td class="paramtype"><a class="el" href="group__l4__cap__api.html#ga1445e923ce73029130d569d6e69a4dd8">l4_cap_idx_t</a></td> <td class="paramname"><span class="paramname"><em>thread</em></span>, </td>
|
|
</tr>
|
|
<tr>
|
|
<td class="paramkey"></td>
|
|
<td></td>
|
|
<td class="paramtype"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a></td> <td class="paramname"><span class="paramname"><em>tag</em></span> )</td>
|
|
</tr>
|
|
</table>
|
|
</td>
|
|
<td class="mlabels-right">
|
|
<span class="mlabels"><span class="mlabel inline">inline</span></span> </td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
|
|
<p>Commit vCPU resume. </p>
|
|
<dl class="params"><dt>Parameters</dt><dd>
|
|
<table class="params">
|
|
<tr><td class="paramname">thread</td><td>Thread to be resumed, the invalid cap can be used for the current thread. </td></tr>
|
|
<tr><td class="paramname">tag</td><td>Tag to use, returned by <a class="el" href="#ga6e0620f6b1119d84eac90adad52eabf8" title="vCPU return from event handler.">l4_thread_vcpu_resume_start()</a></td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<dl class="section return"><dt>Returns</dt><dd>Syscall return tag containing one of the following return codes.</dd></dl>
|
|
<dl class="retval"><dt>Return values</dt><dd>
|
|
<table class="retval">
|
|
<tr><td class="paramname">0</td><td>Indicates a VM exit, provided that <span class="tt">thread</span> is in extended vCPU mode with virtual interrupts cleared. </td></tr>
|
|
<tr><td class="paramname">1</td><td>Indicates an incoming IPC message, provided that the <span class="tt">thread</span> is in extended vCPU mode with virtual interrupts cleared. </td></tr>
|
|
<tr><td class="paramname">-L4_EPERM</td><td>The user task capability set in the vCPU state is missing the <a class="el" href="group__l4__fpage__api.html#ggaee60789a48cab2782f5a368237591b39acb2b2e95f6be245f64937ac48a068066" title="Interface specific 'S' right for capability flexpages.">L4_CAP_FPAGE_S</a> right. On Intel's VT-x (VMX): The vCPU context capability set in the extended vCPU state is missing the <a class="el" href="group__l4__fpage__api.html#ggaee60789a48cab2782f5a368237591b39acb2b2e95f6be245f64937ac48a068066" title="Interface specific 'S' right for capability flexpages.">L4_CAP_FPAGE_S</a> right. </td></tr>
|
|
<tr><td class="paramname">-L4_ENOENT</td><td>The user task capability set in the vCPU state is invalid. </td></tr>
|
|
<tr><td class="paramname">-L4_EINVAL</td><td><span class="tt">thread</span> is not the current running thread, or does not have the vCPU feature enabled. On Intel's VT-x (VMX): No vCPU context associated with the extended vCPU state. </td></tr>
|
|
<tr><td class="paramname">-L4_EBUSY</td><td>On Intel's VT-x (VMX): The vCPU context associated with the extended vCPU state is already active on a different CPU. </td></tr>
|
|
<tr><td class="paramname">-L4_ENODEV</td><td>On Intel's VT-x (VMX): The vCPU context associated with the extended vCPU state cannot be initialized or activated. </td></tr>
|
|
<tr><td class="paramname"><0</td><td>A supplied mapping failed.</td></tr>
|
|
</table>
|
|
</dd>
|
|
</dl>
|
|
<p>All flexpages in the UTCB (added with <a class="el" href="group__l4__ipc__api.html#gad2fef5fd3d173495d89c122883e909d6" title="Add a flexpage to be sent to the UTCB.">l4_sndfpage_add()</a> after <a class="el" href="#ga6e0620f6b1119d84eac90adad52eabf8" title="vCPU return from event handler.">l4_thread_vcpu_resume_start()</a>) are unconditionally mapped into the user task configured in the vCPU state.</p>
|
|
<p>To resume into another address space, the capability to the target <a class="el" href="group__l4__task__api.html">Task</a> (or <a class="el" href="classL4_1_1Vm.html" title="Virtual machine host address space.">L4::Vm</a>) must be set in <a class="el" href="structl4__vcpu__state__t.html#ade963d62e21e225390c94f8e24a6bec1" title="User task to use.">l4_vcpu_state_t::user_task</a> together with <a class="el" href="group__l4__vcpu__api.html#gga648aa99b07fd60d941c5ebb25f746967a14d8e402739cff88ebf7e2810f306c4b" title="User task will be used.">L4_VCPU_F_USER_MODE</a>. The capability selector must have all lower bits clear (see <a class="el" href="group__l4__cap__api.html#ggafee0421c2fe0e5cfc59f17f16ea10879aba3e1dbcc462d842d56df9fc928e796b" title="Mask to get only the relevant bits of an l4_cap_idx_t.">L4_CAP_MASK</a>). The kernel adds the <a class="el" href="group__l4__ipc__api.html#ggaecfdf101783a02772b67b94793f3a915a5b352c0582c47836abceacaa0ecb8f2e" title="Send-phase flag.">L4_SYSF_SEND</a> flag there to indicate that the capability has been referenced in the kernel. Consecutive resumes will not reference the task capability again until all lower bits are cleared again. To release a task use a different task capability or use an invalid capability with the <a class="el" href="group__l4__ipc__api.html#ggaecfdf101783a02772b67b94793f3a915a21d07c1e159b0e4b2bd824ac052e4508" title="Reply flag.">L4_SYSF_REPLY</a> flag set.</p>
|
|
<dl class="section see"><dt>See also</dt><dd><a class="el" href="structl4__vcpu__state__t.html" title="State of a vCPU.">l4_vcpu_state_t</a> </dd></dl>
|
|
|
|
<p class="definition">Definition at line <a class="el" href="l4_2sys_2thread_8h_source.html#l01017">1017</a> of file <a class="el" href="l4_2sys_2thread_8h_source.html">thread.h</a>.</p>
|
|
|
|
<p class="reference">References <a class="el" href="compiler_8h_source.html#l00161">L4_NOTHROW</a>, and <a class="el" href="l4_2sys_2utcb_8h_source.html#l00346">l4_utcb()</a>.</p>
|
|
<div id="dynsection-21" onclick="return dynsection.toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;"><span class="dynarrow"><span class="arrowhead closed"></span></span>Here is the call graph for this function:</div>
|
|
<div id="dynsection-21-summary" class="dynsummary" style="display:block;">
|
|
</div>
|
|
<div id="dynsection-21-content" class="dyncontent" style="display:none;">
|
|
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="group__l4__thread__api_gaaf8bb1c28a014326dd381bc2d3478da8_cgraph.svg" width="306" height="51"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
<a id="ga6e0620f6b1119d84eac90adad52eabf8" name="ga6e0620f6b1119d84eac90adad52eabf8"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#ga6e0620f6b1119d84eac90adad52eabf8">◆ </a></span>l4_thread_vcpu_resume_start()</h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="mlabels">
|
|
<tr>
|
|
<td class="mlabels-left">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a> l4_thread_vcpu_resume_start </td>
|
|
<td>(</td>
|
|
<td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td>
|
|
<td></td>
|
|
</tr>
|
|
</table>
|
|
</td>
|
|
<td class="mlabels-right">
|
|
<span class="mlabels"><span class="mlabel inline">inline</span></span> </td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
|
|
<p>vCPU return from event handler. </p>
|
|
<dl class="section return"><dt>Returns</dt><dd>Message tag to be used for <a class="el" href="group__l4__ipc__api.html#gad2fef5fd3d173495d89c122883e909d6" title="Add a flexpage to be sent to the UTCB.">l4_sndfpage_add()</a> and <a class="el" href="#gaaf8bb1c28a014326dd381bc2d3478da8" title="Commit vCPU resume.">l4_thread_vcpu_resume_commit()</a></dd></dl>
|
|
<p>The vCPU resume functionality is split in multiple functions to allow the specification of additional send-flexpages using <a class="el" href="group__l4__ipc__api.html#gad2fef5fd3d173495d89c122883e909d6" title="Add a flexpage to be sent to the UTCB.">l4_sndfpage_add()</a>. </p>
|
|
|
|
<p class="definition">Definition at line <a class="el" href="l4_2sys_2thread_8h_source.html#l01011">1011</a> of file <a class="el" href="l4_2sys_2thread_8h_source.html">thread.h</a>.</p>
|
|
|
|
<p class="reference">References <a class="el" href="compiler_8h_source.html#l00161">L4_NOTHROW</a>, and <a class="el" href="l4_2sys_2utcb_8h_source.html#l00346">l4_utcb()</a>.</p>
|
|
<div id="dynsection-22" onclick="return dynsection.toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;"><span class="dynarrow"><span class="arrowhead closed"></span></span>Here is the call graph for this function:</div>
|
|
<div id="dynsection-22-summary" class="dynsummary" style="display:block;">
|
|
</div>
|
|
<div id="dynsection-22-content" class="dyncontent" style="display:none;">
|
|
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="group__l4__thread__api_ga6e0620f6b1119d84eac90adad52eabf8_cgraph.svg" width="306" height="51"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
<a id="ga5e47131f486f920826b5f72dad82bafe" name="ga5e47131f486f920826b5f72dad82bafe"></a>
|
|
<h2 class="memtitle"><span class="permalink"><a href="#ga5e47131f486f920826b5f72dad82bafe">◆ </a></span>l4_thread_yield()</h2>
|
|
|
|
<div class="memitem">
|
|
<div class="memproto">
|
|
<table class="mlabels">
|
|
<tr>
|
|
<td class="mlabels-left">
|
|
<table class="memname">
|
|
<tr>
|
|
<td class="memname"><a class="el" href="structl4__msgtag__t.html">l4_msgtag_t</a> l4_thread_yield </td>
|
|
<td>(</td>
|
|
<td class="paramtype">void</td> <td class="paramname"><span class="paramname"><em></em></span></td><td>)</td>
|
|
<td></td>
|
|
</tr>
|
|
</table>
|
|
</td>
|
|
<td class="mlabels-right">
|
|
<span class="mlabels"><span class="mlabel inline">inline</span></span> </td>
|
|
</tr>
|
|
</table>
|
|
</div><div class="memdoc">
|
|
|
|
<p>Yield current time slice. </p>
|
|
<dl class="section return"><dt>Returns</dt><dd>system call return tag </dd></dl>
|
|
|
|
<p class="definition">Definition at line <a class="el" href="l4_2sys_2thread_8h_source.html#l00891">891</a> of file <a class="el" href="l4_2sys_2thread_8h_source.html">thread.h</a>.</p>
|
|
|
|
<p class="reference">References <a class="el" href="l4_2sys_2consts_8h_source.html#l00153">L4_INVALID_CAP</a>, <a class="el" href="____timeout_8h_source.html#l00079">L4_IPC_BOTH_TIMEOUT_0</a>, <a class="el" href="l4_2sys_2ipc_8h_source.html#l00602">l4_ipc_receive()</a>, <a class="el" href="l4_2sys_2types_8h_source.html#l00405">l4_msgtag()</a>, and <a class="el" href="compiler_8h_source.html#l00161">L4_NOTHROW</a>.</p>
|
|
<div id="dynsection-23" onclick="return dynsection.toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;"><span class="dynarrow"><span class="arrowhead closed"></span></span>Here is the call graph for this function:</div>
|
|
<div id="dynsection-23-summary" class="dynsummary" style="display:block;">
|
|
</div>
|
|
<div id="dynsection-23-content" class="dyncontent" style="display:none;">
|
|
<div class="center"><iframe scrolling="no" loading="lazy" frameborder="0" src="group__l4__thread__api_ga5e47131f486f920826b5f72dad82bafe_cgraph.svg" width="404" height="86"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
</div><!-- contents -->
|
|
</div><!-- doc-content -->
|
|
<div id="page-nav" class="page-nav-panel">
|
|
<div id="page-nav-resize-handle"></div>
|
|
<div id="page-nav-tree">
|
|
<div id="page-nav-contents">
|
|
</div><!-- page-nav-contents -->
|
|
</div><!-- page-nav-tree -->
|
|
</div><!-- page-nav -->
|
|
</div><!-- container -->
|
|
<!-- HTML footer for doxygen 1.9.1-->
|
|
<!-- start footer part -->
|
|
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
|
<ul>
|
|
<li class="footer">Generated on <span class="timestamp"></span> for L4Re Operating System Framework by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.15.0 </li>
|
|
</ul>
|
|
</div>
|
|
</body>
|
|
</html>
|