LCOV - code coverage report
Current view: top level - zephyr/xen/public - sched.h Hit Total Coverage
Test: new.info Lines: 0 40 0.0 %
Date: 2024-12-22 00:14:23

          Line data    Source code
       1           0 : /* SPDX-License-Identifier: MIT */
       2             : 
       3             : /******************************************************************************
       4             :  * sched.h
       5             :  *
       6             :  * Scheduler state interactions
       7             :  *
       8             :  * Permission is hereby granted, free of charge, to any person obtaining a copy
       9             :  * of this software and associated documentation files (the "Software"), to
      10             :  * deal in the Software without restriction, including without limitation the
      11             :  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
      12             :  * sell copies of the Software, and to permit persons to whom the Software is
      13             :  * furnished to do so, subject to the following conditions:
      14             :  *
      15             :  * The above copyright notice and this permission notice shall be included in
      16             :  * all copies or substantial portions of the Software.
      17             :  *
      18             :  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
      19             :  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
      20             :  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
      21             :  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
      22             :  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
      23             :  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
      24             :  * DEALINGS IN THE SOFTWARE.
      25             :  *
      26             :  * Copyright (c) 2005, Keir Fraser <keir@xensource.com>
      27             :  */
      28             : 
      29             : #ifndef __XEN_PUBLIC_SCHED_H__
      30             : #define __XEN_PUBLIC_SCHED_H__
      31             : 
      32             : #include "event_channel.h"
      33             : 
      34             : /*
      35             :  * `incontents 150 sched Guest Scheduler Operations
      36             :  *
      37             :  * The SCHEDOP interface provides mechanisms for a guest to interact
      38             :  * with the scheduler, including yield, blocking and shutting itself
      39             :  * down.
      40             :  */
      41             : 
      42             : /*
      43             :  * The prototype for this hypercall is:
      44             :  * ` long HYPERVISOR_sched_op(enum sched_op cmd, void *arg, ...)
      45             :  *
      46             :  * @cmd == SCHEDOP_??? (scheduler operation).
      47             :  * @arg == Operation-specific extra argument(s), as described below.
      48             :  * ...  == Additional Operation-specific extra arguments, described below.
      49             :  *
      50             :  * Versions of Xen prior to 3.0.2 provided only the following legacy version
      51             :  * of this hypercall, supporting only the commands yield, block and shutdown:
      52             :  *  long sched_op(int cmd, unsigned long arg)
      53             :  * @cmd == SCHEDOP_??? (scheduler operation).
      54             :  * @arg == 0 (SCHEDOP_yield and SCHEDOP_block)
      55             :  *      == SHUTDOWN_* code (SCHEDOP_shutdown)
      56             :  *
      57             :  * This legacy version is available to new guests as:
      58             :  * ` long HYPERVISOR_sched_op_compat(enum sched_op cmd, unsigned long arg)
      59             :  */
      60             : 
      61             : /*
      62             :  * Voluntarily yield the CPU.
      63             :  * @arg == NULL.
      64             :  */
      65           0 : #define SCHEDOP_yield           0
      66             : 
      67             : /*
      68             :  * Block execution of this VCPU until an event is received for processing.
      69             :  * If called with event upcalls masked, this operation will atomically
      70             :  * reenable event delivery and check for pending events before blocking the
      71             :  * VCPU. This avoids a "wakeup waiting" race.
      72             :  * @arg == NULL.
      73             :  */
      74           0 : #define SCHEDOP_block           1
      75             : 
      76             : /*
      77             :  * Halt execution of this domain (all VCPUs) and notify the system controller.
      78             :  * @arg == pointer to sched_shutdown_t structure.
      79             :  *
      80             :  * If the sched_shutdown_t reason is SHUTDOWN_suspend then
      81             :  * x86 PV guests must also set RDX (EDX for 32-bit guests) to the MFN
      82             :  * of the guest's start info page.  RDX/EDX is the third hypercall
      83             :  * argument.
      84             :  *
      85             :  * In addition, which reason is SHUTDOWN_suspend this hypercall
      86             :  * returns 1 if suspend was cancelled or the domain was merely
      87             :  * checkpointed, and 0 if it is resuming in a new domain.
      88             :  */
      89           0 : #define SCHEDOP_shutdown        2
      90             : 
      91             : /*
      92             :  * Poll a set of event-channel ports. Return when one or more are pending. An
      93             :  * optional timeout may be specified.
      94             :  * @arg == pointer to sched_poll_t structure.
      95             :  */
      96           0 : #define SCHEDOP_poll            3
      97             : 
      98             : /*
      99             :  * Declare a shutdown for another domain. The main use of this function is
     100             :  * in interpreting shutdown requests and reasons for fully-virtualized
     101             :  * domains.  A para-virtualized domain may use SCHEDOP_shutdown directly.
     102             :  * @arg == pointer to sched_remote_shutdown_t structure.
     103             :  */
     104           0 : #define SCHEDOP_remote_shutdown 4
     105             : 
     106             : /*
     107             :  * Latch a shutdown code, so that when the domain later shuts down it
     108             :  * reports this code to the control tools.
     109             :  * @arg == sched_shutdown_t, as for SCHEDOP_shutdown.
     110             :  */
     111           0 : #define SCHEDOP_shutdown_code   5
     112             : 
     113             : /*
     114             :  * Setup, poke and destroy a domain watchdog timer.
     115             :  * @arg == pointer to sched_watchdog_t structure.
     116             :  * With id == 0, setup a domain watchdog timer to cause domain shutdown
     117             :  *                         after timeout, returns watchdog id.
     118             :  * With id != 0 and timeout == 0, destroy domain watchdog timer.
     119             :  * With id != 0 and timeout != 0, poke watchdog timer and set new timeout.
     120             :  */
     121           0 : #define SCHEDOP_watchdog        6
     122             : 
     123             : /*
     124             :  * Override the current vcpu affinity by pinning it to one physical cpu or
     125             :  * undo this override restoring the previous affinity.
     126             :  * @arg == pointer to sched_pin_override_t structure.
     127             :  *
     128             :  * A negative pcpu value will undo a previous pin override and restore the
     129             :  * previous cpu affinity.
     130             :  * This call is allowed for the hardware domain only and requires the cpu
     131             :  * to be part of the domain's cpupool.
     132             :  */
     133           0 : #define SCHEDOP_pin_override    7
     134             : 
     135           0 : struct sched_shutdown {
     136           0 :         unsigned int reason; /* SHUTDOWN_* => enum sched_shutdown_reason */
     137             : };
     138           0 : typedef struct sched_shutdown sched_shutdown_t;
     139           0 : DEFINE_XEN_GUEST_HANDLE(sched_shutdown_t);
     140             : 
     141           0 : struct sched_poll {
     142           0 :         XEN_GUEST_HANDLE(evtchn_port_t) ports;
     143           0 :         unsigned int nr_ports;
     144           0 :         uint64_t timeout;
     145             : };
     146           0 : typedef struct sched_poll sched_poll_t;
     147           0 : DEFINE_XEN_GUEST_HANDLE(sched_poll_t);
     148             : 
     149           0 : struct sched_remote_shutdown {
     150           0 :         domid_t domain_id;      /* Remote domain ID */
     151           0 :         unsigned int reason;    /* SHUTDOWN_* => enum sched_shutdown_reason */
     152             : };
     153           0 : typedef struct sched_remote_shutdown sched_remote_shutdown_t;
     154           0 : DEFINE_XEN_GUEST_HANDLE(sched_remote_shutdown_t);
     155             : 
     156           0 : struct sched_watchdog {
     157           0 :         uint32_t id;            /* watchdog ID */
     158           0 :         uint32_t timeout;       /* timeout */
     159             : };
     160           0 : typedef struct sched_watchdog sched_watchdog_t;
     161           0 : DEFINE_XEN_GUEST_HANDLE(sched_watchdog_t);
     162             : 
     163           0 : struct sched_pin_override {
     164           0 :         int32_t pcpu;
     165             : };
     166           0 : typedef struct sched_pin_override sched_pin_override_t;
     167           0 : DEFINE_XEN_GUEST_HANDLE(sched_pin_override_t);
     168             : 
     169             : /*
     170             :  * Reason codes for SCHEDOP_shutdown. These may be interpreted by control
     171             :  * software to determine the appropriate action. For the most part, Xen does
     172             :  * not care about the shutdown code.
     173             :  */
     174             : /* Domain exited normally. Clean up and kill. */
     175           0 : #define SHUTDOWN_poweroff       0
     176             : 
     177             : /* Clean up, kill, and then restart. */
     178           0 : #define SHUTDOWN_reboot         1
     179             : 
     180             : /* Clean up, save suspend info, kill. */
     181           0 : #define SHUTDOWN_suspend        2
     182             : 
     183             : /* Tell controller we've crashed. */
     184           0 : #define SHUTDOWN_crash          3
     185             : 
     186             : /* Restart because watchdog time expired. */
     187           0 : #define SHUTDOWN_watchdog       4
     188             : 
     189             : /*
     190             :  * Domain asked to perform 'soft reset' for it. The expected behavior is to
     191             :  * reset internal Xen state for the domain returning it to the point where it
     192             :  * was created but leaving the domain's memory contents and vCPU contexts
     193             :  * intact. This will allow the domain to start over and set up all Xen specific
     194             :  * interfaces again.
     195             :  */
     196           0 : #define SHUTDOWN_soft_reset     5
     197             : 
     198             : /* Maximum valid shutdown reason. */
     199           0 : #define SHUTDOWN_MAX            5
     200             : 
     201             : #endif /* __XEN_PUBLIC_SCHED_H__ */

Generated by: LCOV version 1.14