cachepc-qemu

Fork of AMDESE/qemu with changes for cachepc side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-qemu
Log | Files | Refs | Submodules | LICENSE | sfeed.txt

helper.h (1049B)


      1/*
      2 * Helper Functions
      3 *
      4 * Copyright (c) 2019 IBM Corp.
      5 *
      6 * Author(s): Jason J. Herne <jjherne@us.ibm.com>
      7 *
      8 * This work is licensed under the terms of the GNU GPL, version 2 or (at
      9 * your option) any later version. See the COPYING file in the top-level
     10 * directory.
     11 */
     12
     13#ifndef S390_CCW_HELPER_H
     14#define S390_CCW_HELPER_H
     15
     16#include "s390-ccw.h"
     17#include "s390-time.h"
     18
     19/* Avoids compiler warnings when casting a pointer to a u32 */
     20static inline uint32_t ptr2u32(void *ptr)
     21{
     22    IPL_assert((uint64_t)ptr <= 0xffffffffull, "ptr2u32: ptr too large");
     23    return (uint32_t)(uint64_t)ptr;
     24}
     25
     26/* Avoids compiler warnings when casting a u32 to a pointer */
     27static inline void *u32toptr(uint32_t n)
     28{
     29    return (void *)(uint64_t)n;
     30}
     31
     32static inline void yield(void)
     33{
     34    asm volatile ("diag %%r0,%%r0,0x44"
     35                  : :
     36                  : "memory", "cc");
     37}
     38
     39static inline void sleep(unsigned int seconds)
     40{
     41    ulong target = get_time_seconds() + seconds;
     42
     43    while (get_time_seconds() < target) {
     44        yield();
     45    }
     46}
     47
     48#endif