Changeset f787c8e in mainline for uspace/lib/c/generic


Ignore:
Timestamp:
2018-08-01T18:37:54Z (7 years ago)
Author:
Jiří Zárevúcky <jiri.zarevucky@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
82d9087
Parents:
1de92fb0
Message:

Move some internal interfaces to private headers.

Location:
uspace/lib/c/generic
Files:
10 edited
1 moved

Legend:

Unmodified
Added
Removed
  • uspace/lib/c/generic/async/ports.c

    r1de92fb0 rf787c8e  
    5151#include <abi/mm/as.h>
    5252#include "../private/libc.h"
     53#include "../private/fibril.h"
    5354
    5455/** Interface data */
  • uspace/lib/c/generic/io/kio.c

    r1de92fb0 rf787c8e  
    4444#include <macros.h>
    4545#include <libarch/config.h>
    46 #include <futex.h>
     46
     47#include "../private/futex.h"
    4748
    4849#define KIO_BUFFER_SIZE PAGE_SIZE
  • uspace/lib/c/generic/ipc.c

    r1de92fb0 rf787c8e  
    4646#include <errno.h>
    4747#include <adt/list.h>
    48 #include <futex.h>
    4948#include <fibril.h>
    5049#include <macros.h>
  • uspace/lib/c/generic/malloc.c

    r1de92fb0 rf787c8e  
    4444#include <bitops.h>
    4545#include <mem.h>
    46 #include <fibril_synch.h>
    4746#include <stdlib.h>
    4847#include <adt/gcdlcm.h>
     48
    4949#include "private/malloc.h"
     50#include "private/fibril.h"
    5051
    5152/** Magic used in heap headers. */
  • uspace/lib/c/generic/private/fibril.h

    r1de92fb0 rf787c8e  
    3535#include <abi/proc/uarg.h>
    3636#include <atomic.h>
    37 #include <futex.h>
     37#include <fibril.h>
     38
     39#include "./futex.h"
     40
     41typedef struct {
     42        fibril_t *fibril;
     43} fibril_event_t;
     44
     45#define FIBRIL_EVENT_INIT ((fibril_event_t) {0})
    3846
    3947struct fibril {
     
    7381extern void __fibrils_init(void);
    7482
     83extern void fibril_wait_for(fibril_event_t *);
     84extern errno_t fibril_wait_timeout(fibril_event_t *, const struct timeval *);
     85extern void fibril_notify(fibril_event_t *);
     86
     87extern errno_t fibril_ipc_wait(ipc_call_t *, const struct timeval *);
     88extern void fibril_ipc_poke(void);
     89
     90/**
     91 * "Restricted" fibril mutex.
     92 *
     93 * Similar to `fibril_mutex_t`, but has a set of restrictions placed on its
     94 * use. Within a rmutex critical section, you
     95 *         - may not use any other synchronization primitive,
     96 *           save for another `fibril_rmutex_t`. This includes nonblocking
     97 *           operations like cvar signal and mutex unlock, unless otherwise
     98 *           specified.
     99 *         - may not read IPC messages
     100 *         - may not start a new thread/fibril
     101 *           (creating fibril without starting is fine)
     102 *
     103 * Additionally, locking with a timeout is not possible on this mutex,
     104 * and there is no associated condition variable type.
     105 * This is a design constraint, not a lack of implementation effort.
     106 */
     107typedef struct {
     108        // TODO: At this point, this is just silly handwaving to hide current
     109        //       futex use behind a fibril based abstraction. Later, the imple-
     110        //       mentation will change, but the restrictions placed on this type
     111        //       will allow it to be simpler and faster than a regular mutex.
     112        //       There might also be optional debug checking of the assumptions.
     113        //
     114        //       Note that a consequence of the restrictions is that if we are
     115        //       running on a single thread, no other fibril can ever get to run
     116        //       while a fibril has a rmutex locked. That means that for
     117        //       single-threaded programs, we can reduce all rmutex locks and
     118        //       unlocks to simple branches on a global bool variable.
     119
     120        futex_t futex;
     121} fibril_rmutex_t;
     122
     123#define FIBRIL_RMUTEX_INITIALIZER(name) \
     124        { .futex = FUTEX_INITIALIZE(1) }
     125
     126#define FIBRIL_RMUTEX_INITIALIZE(name) \
     127        fibril_rmutex_t name = FIBRIL_RMUTEX_INITIALIZER(name)
     128
     129extern void fibril_rmutex_initialize(fibril_rmutex_t *);
     130extern void fibril_rmutex_lock(fibril_rmutex_t *);
     131extern bool fibril_rmutex_trylock(fibril_rmutex_t *);
     132extern void fibril_rmutex_unlock(fibril_rmutex_t *);
     133
     134
    75135#endif
  • uspace/lib/c/generic/thread/fibril.c

    r1de92fb0 rf787c8e  
    4242#include <as.h>
    4343#include <context.h>
    44 #include <futex.h>
    4544#include <assert.h>
    4645
     
    5150
    5251#include "../private/thread.h"
     52#include "../private/futex.h"
    5353#include "../private/fibril.h"
    5454#include "../private/libc.h"
  • uspace/lib/c/generic/thread/fibril_synch.c

    r1de92fb0 rf787c8e  
    3737#include <async.h>
    3838#include <adt/list.h>
    39 #include <futex.h>
    4039#include <sys/time.h>
    4140#include <errno.h>
     
    5049#include "../private/async.h"
    5150#include "../private/fibril.h"
     51#include "../private/futex.h"
    5252
    5353void fibril_rmutex_initialize(fibril_rmutex_t *m)
  • uspace/lib/c/generic/thread/futex.c

    r1de92fb0 rf787c8e  
    3333 */
    3434
    35 #include <futex.h>
    36 
    3735#include <assert.h>
    3836#include <atomic.h>
     
    4139
    4240#include "../private/fibril.h"
     41#include "../private/futex.h"
    4342
    4443//#define DPRINTF(...) kio_printf(__VA_ARGS__)
  • uspace/lib/c/generic/thread/mpsc.c

    r1de92fb0 rf787c8e  
    3636#include <mem.h>
    3737#include <stdlib.h>
     38
     39#include "../private/fibril.h"
    3840
    3941/*
  • uspace/lib/c/generic/thread/rcu.c

    r1de92fb0 rf787c8e  
    7373#include <compiler/barrier.h>
    7474#include <libarch/barrier.h>
    75 #include <futex.h>
    7675#include <macros.h>
    7776#include <async.h>
Note: See TracChangeset for help on using the changeset viewer.