MCPcopy Create free account
hub / github.com/Bareflank/hypervisor / ext_main_entry

Function ext_main_entry

kernel/integration/bf_vp_op_destroy_vp.cpp:268–325  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

266 /// microkernel speak the same ABI.
267 ///
268 extern "C" void
269 ext_main_entry(bsl::uint32 const version) noexcept
270 {
271 bsl::errc_type mut_ret{};
272
273 /// NOTE:
274 /// - Initialize the bf_syscall_t. This will validate the ABI version,
275 /// open a handle to the microkernel and register the required
276 /// callbacks. If this fails, we call bf_control_op_exit, which is
277 /// similar to exit() from POSIX, except that the return value is
278 /// always the same.
279 ///
280
281 mut_ret = g_mut_sys.initialize( // --
282 bsl::to_u32(version), // --
283 &bootstrap_entry, // --
284 &vmexit_entry, // --
285 &fail_entry); // --
286
287 if (bsl::unlikely(!mut_ret)) {
288 bsl::print<bsl::V>() << bsl::here();
289 return bf_control_op_exit();
290 }
291
292 mut_ret = gs_initialize(g_mut_gs, g_mut_sys, g_mut_intrinsic);
293 if (bsl::unlikely(!mut_ret)) {
294 bsl::print<bsl::V>() << bsl::here();
295 return bf_control_op_exit();
296 }
297
298 /// NOTE:
299 /// - Initialize the vp_pool_t. This will give all of our vp_t's
300 /// their IDs so that they can be allocated.
301 ///
302
303 g_mut_vp_pool.initialize(g_mut_gs, g_mut_tls, g_mut_sys, g_mut_intrinsic);
304
305 /// NOTE:
306 /// - Initialize the vs_pool_t. This will give all of our vs_t's
307 /// their IDs so that they can be allocated.
308 ///
309
310 g_mut_vs_pool.initialize(g_mut_gs, g_mut_tls, g_mut_sys, g_mut_intrinsic);
311
312 /// NOTE:
313 /// - Wait for callbacks. Note that this function does not return.
314 /// The next time the extension is executed, it will be the
315 /// bootstrap callback that was just previously registered, which
316 /// will be called on each PP that is online. Failure to call this
317 /// function leads to undefined behaviour (likely a page fault).
318 /// - This is similar to the wait() function from POSIX after having
319 /// just started some processes, with the difference being that
320 /// this will never return, so there is no need to pass in status
321 /// as there is nothing to process after this call.
322 ///
323
324 return bf_control_op_wait();
325 }

Callers

nothing calls this directly

Calls 4

bf_control_op_exitFunction · 0.50
gs_initializeFunction · 0.50
bf_control_op_waitFunction · 0.50
initializeMethod · 0.45

Tested by

no test coverage detected