Changes in / [c742954:c483fca] in mainline


Ignore:
Files:
23 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/ia64/src/drivers/ski.c

    rc742954 rc483fca  
    3737#include <console/console.h>
    3838#include <console/chardev.h>
     39#include <ddi/ddi.h>
    3940#include <sysinfo/sysinfo.h>
    4041#include <stdint.h>
     
    6970
    7071static ski_instance_t *instance = NULL;
     72static parea_t ski_parea;
    7173
    7274/** Ask debug console if a key was pressed.
     
    105107        int count = POLL_LIMIT;
    106108
     109        if (ski_parea.mapped && !console_override)
     110                return;
     111
    107112        while (count > 0) {
    108113                wchar_t ch = ski_getchar();
     
    122127
    123128        while (true) {
    124                 // TODO FIXME:
    125                 // This currently breaks the kernel console
    126                 // before we get the override from uspace.
    127                 if (console_override)
    128                         poll_keyboard(instance);
    129 
     129                poll_keyboard(instance);
    130130                thread_usleep(POLL_INTERVAL);
    131131        }
     
    140140static void ski_init(void)
    141141{
     142        uintptr_t faddr;
     143
    142144        if (instance)
    143145                return;
     
    150152            : "r15", "r8"
    151153        );
     154
     155        faddr = frame_alloc(1, FRAME_LOWMEM | FRAME_ATOMIC, 0);
     156        if (faddr == 0)
     157                panic("Cannot allocate page for ski console.");
     158
     159        ddi_parea_init(&ski_parea);
     160        ski_parea.pbase = faddr;
     161        ski_parea.frames = 1;
     162        ski_parea.unpriv = false;
     163        ski_parea.mapped = false;
     164        ddi_parea_register(&ski_parea);
     165
     166        sysinfo_set_item_val("ski.paddr", NULL, (sysarg_t) faddr);
    152167
    153168        instance = malloc(sizeof(ski_instance_t));
     
    190205static void ski_putwchar(outdev_t *dev, wchar_t ch)
    191206{
    192         // TODO FIXME:
    193         // This currently breaks the kernel console
    194         // before we get the override from uspace.
    195         if (console_override) {
    196                 if (ascii_check(ch)) {
    197                         if (ch == '\n')
    198                                 ski_do_putchar('\r');
    199 
    200                         ski_do_putchar(ch);
    201                 } else {
    202                         ski_do_putchar('?');
    203                 }
     207        if (ski_parea.mapped && !console_override)
     208                return;
     209
     210        if (ascii_check(ch)) {
     211                if (ch == '\n')
     212                        ski_do_putchar('\r');
     213
     214                ski_do_putchar(ch);
     215        } else {
     216                ski_do_putchar('?');
    204217        }
    205218}
  • kernel/generic/include/mm/as.h

    rc742954 rc483fca  
    268268
    269269extern as_t *as_create(unsigned int);
    270 extern void as_destroy(as_t *);
    271270extern void as_hold(as_t *);
    272271extern void as_release(as_t *);
  • kernel/generic/src/console/console.c

    rc742954 rc483fca  
    209209void grab_console(void)
    210210{
     211        sysinfo_set_item_val("kconsole", NULL, true);
    211212        event_notify_1(EVENT_KCONSOLE, false, true);
    212213        bool prev = console_override;
     
    226227void release_console(void)
    227228{
     229        sysinfo_set_item_val("kconsole", NULL, false);
    228230        console_override = false;
    229231        event_notify_1(EVENT_KCONSOLE, false, false);
  • kernel/generic/src/mm/as.c

    rc742954 rc483fca  
    187187 *
    188188 */
    189 void as_destroy(as_t *as)
     189static void as_destroy(as_t *as)
    190190{
    191191        DEADLOCK_PROBE_INIT(p_asidlock);
  • kernel/generic/src/proc/program.c

    rc742954 rc483fca  
    150150        prg->loader_status = elf_load((elf_header_t *) image_addr, as);
    151151        if (prg->loader_status != EE_OK) {
    152                 as_destroy(as);
     152                as_release(as);
    153153                prg->task = NULL;
    154154                prg->main_thread = NULL;
     
    176176        void *loader = program_loader;
    177177        if (!loader) {
    178                 as_destroy(as);
     178                as_release(as);
    179179                log(LF_OTHER, LVL_ERROR,
    180180                    "Cannot spawn loader as none was registered");
     
    184184        prg->loader_status = elf_load((elf_header_t *) program_loader, as);
    185185        if (prg->loader_status != EE_OK) {
    186                 as_destroy(as);
     186                as_release(as);
    187187                log(LF_OTHER, LVL_ERROR, "Cannot spawn loader (%s)",
    188188                    elf_error(prg->loader_status));
  • tools/xcw/bin/helenos-bld-config

    rc742954 rc483fca  
    3333
    3434SRC_ROOT="$(dirname "$0")/../../.."
    35 MAKEFILE_COMMON="$SRC_ROOT"/Makefile.common
    36 MAKEFILE_CONFIG="$SRC_ROOT"/Makefile.config
    37 CONFIG_MK="$SRC_ROOT"/uspace/export/config.mk
     35if [ -z "$EXPORT_DIR" ]; then
     36        EXPORT_DIR="$SRC_ROOT/uspace/export"
     37fi
     38MAKEFILE_COMMON="$EXPORT_DIR"/Makefile.common
     39MAKEFILE_CONFIG="$EXPORT_DIR"/Makefile.config
     40CONFIG_MK="$EXPORT_DIR"/config.mk
    3841
    3942# Extract simple 'name = value' variable definition from Makefile
  • tools/xcw/bin/helenos-cc

    rc742954 rc483fca  
    3434XCW="$(dirname "$0")"
    3535SRC_ROOT="$XCW/../../.."
     36if [ -z "$EXPORT_DIR" ]; then
     37        EXPORT_DIR="$SRC_ROOT/uspace/export"
     38fi
    3639UARCH="$("$XCW"/helenos-bld-config --uarch)"
    3740CC="$("$XCW"/helenos-bld-config --cc)"
     
    4952    "$@" \
    5053    -I"$XCW"/../include \
    51     -I"$SRC_ROOT"/uspace/lib/c/include \
    52     -I"$SRC_ROOT"/abi/include \
    53     -I"$SRC_ROOT"/uspace/lib/c/arch/"$UARCH"/include
     54    -I"$EXPORT_DIR"/include/libc \
     55    -I"$EXPORT_DIR"/include
  • tools/xcw/bin/helenos-ld

    rc742954 rc483fca  
    3434XCW="$(dirname "$0")"
    3535SRC_ROOT="$XCW/../../.."
     36if [ -z "$EXPORT_DIR" ]; then
     37        EXPORT_DIR="$SRC_ROOT/uspace/export"
     38fi
    3639UARCH="$("$XCW"/helenos-bld-config --uarch)"
    3740CFLAGS="$("$XCW"/helenos-bld-config --cflags)"
     
    4346    $CFLAGS \
    4447    "$@" \
    45     "$SRC_ROOT"/uspace/lib/c/crt0.o \
    46     "$SRC_ROOT"/uspace/lib/c/crt1.o \
    47     "$SRC_ROOT"/uspace/lib/c/libc.a \
     48    "$EXPORT_DIR"/lib/crt0.o \
     49    "$EXPORT_DIR"/lib/crt1.o \
     50    "$EXPORT_DIR"/lib/libc.a \
    4851    -lgcc
  • tools/xcw/bin/helenos-pkg-config

    rc742954 rc483fca  
    3535SRC_ROOT="$XCW/../../.."
    3636UARCH="$("$XCW"/helenos-bld-config --uarch)"
     37if [ -z "$EXPORT_DIR" ]; then
     38        EXPORT_DIR="$SRC_ROOT/uspace/export"
     39fi
     40INCLUDE_DIR="$EXPORT_DIR/include"
     41LIB_DIR="$EXPORT_DIR/lib"
    3742
    38 libmath_cflags="-I$SRC_ROOT/uspace/lib/math/include\
    39     -I$SRC_ROOT/uspace/lib/math/arch/$UARCH/include"
    40 libmath_libs="$SRC_ROOT/uspace/lib/math/libmath.a"
     43libmath_cflags="-I$INCLUDE_DIR/libmath"
     44libmath_libs="$LIB_DIR/libmath.a"
    4145
    42 libgui_cflags="-I$SRC_ROOT/uspace/lib/gui"
    43 libgui_libs="$SRC_ROOT/uspace/lib/gui/libgui.a"
     46libgui_cflags="-I$INCLUDE_DIR/libgui"
     47libgui_libs="$LIB_DIR/libgui.a"
    4448
    45 libdraw_cflags="-I$SRC_ROOT/uspace/lib/draw"
    46 libdraw_libs="$SRC_ROOT/uspace/lib/draw/libdraw.a \
    47     $SRC_ROOT/uspace/lib/softrend/libsoftrend.a"
     49libdraw_cflags="-I$INCLUDE_DIR/libdraw"
     50libdraw_libs="$LIB_DIR/libdraw.a $LIB_DIR/libsoftrend.a"
    4851
    49 libhound_cflags="-I$SRC_ROOT/uspace/lib/hound/include"
    50 libhound_libs="$SRC_ROOT/uspace/lib/hound/libhound.a"
     52libhound_cflags="-I$INCLUDE_DIR/libhound"
     53libhound_libs="$LIB_DIR/libhound.a"
    5154
    52 libpcm_cflags="-I$SRC_ROOT/uspace/lib/pcm/include"
    53 libpcm_libs="$SRC_ROOT/uspace/lib/pcm/libpcm.a"
     55libpcm_cflags="-I$INCLUDE_DIR/libpcm"
     56libpcm_libs="$LIB_DIR/libpcm.a"
    5457
    5558action=none
  • uspace/Makefile

    rc742954 rc483fca  
    273273        $(MAKE) -r -C $(basename $@) all-test PRECHECK=$(PRECHECK)
    274274
    275 export: lib/posix.build lib/math.build lib/clui.build
     275export: $(BUILDS)
    276276        $(MAKE) -r -C lib/posix export EXPORT_DIR=$(EXPORT_DIR)
    277277
  • uspace/app/fontviewer/fontviewer.c

    rc742954 rc483fca  
    170170        source_t leading_bg = rgb(170, 238, 255);
    171171        source_t leading_fg = rgb(0, 170, 212);
    172 
    173         font_t *font;
     172        font_t *info_font = NULL;
     173        font_t *font = NULL;
     174
    174175        errno_t rc = create_font(&font, points);
    175176        if (rc != EOK) {
    176177                printf("Failed creating font\n");
    177                 return rc;
    178         }
    179 
    180         font_t *info_font;
     178                goto out_err;
     179        }
     180
    181181        rc = embedded_font_create(&info_font, 16);
    182182        if (rc != EOK) {
    183183                printf("Failed creating info font\n");
    184                 return rc;
     184                goto out_err;
    185185        }
    186186
     
    188188        rc = font_get_metrics(font, &font_metrics);
    189189        if (rc != EOK)
    190                 return rc;
     190                goto out_err;
    191191
    192192        surface_coord_t top = 50;
     
    238238        }
    239239
    240         font_release(font);
    241         return EOK;
     240out_err:
     241        if (font)
     242                font_release(font);
     243        if (info_font)
     244                font_release(info_font);
     245        return rc;
    242246}
    243247
  • uspace/drv/char/ski-con/ski-con.c

    rc742954 rc483fca  
    11/*
    22 * Copyright (c) 2005 Jakub Jermar
    3  * Copyright (c) 2017 Jiri Svoboda
     3 * Copyright (c) 2018 Jiri Svoboda
    44 * All rights reserved.
    55 *
     
    3131 */
    3232
     33#include <as.h>
    3334#include <async.h>
    3435#include <ddf/driver.h>
    3536#include <ddf/log.h>
     37#include <ddi.h>
    3638#include <errno.h>
    3739#include <fibril.h>
     
    4042#include <stdlib.h>
    4143#include <stdbool.h>
     44#include <sysinfo.h>
    4245
    4346#include "ski-con.h"
     
    6871        ddf_fun_t *fun = NULL;
    6972        bool bound = false;
     73        uintptr_t faddr;
     74        void *addr = AS_AREA_ANY;
    7075        errno_t rc;
    7176
     
    8792        con->cds.sarg = con;
    8893
     94        rc = sysinfo_get_value("ski.paddr", &faddr);
     95        if (rc != EOK)
     96                faddr = 0; /* No kernel driver to arbitrate with */
     97
     98        if (faddr != 0) {
     99                addr = AS_AREA_ANY;
     100                rc = physmem_map(faddr, 1, AS_AREA_READ | AS_AREA_CACHEABLE,
     101                    &addr);
     102                if (rc != EOK) {
     103                        ddf_msg(LVL_ERROR, "Cannot map kernel driver arbitration area.");
     104                        goto error;
     105                }
     106        }
     107
    89108        rc = ddf_fun_bind(fun);
    90109        if (rc != EOK) {
     
    107126        return EOK;
    108127error:
     128        if (addr != AS_AREA_ANY)
     129                as_area_destroy(addr);
    109130        if (bound)
    110131                ddf_fun_unbind(fun);
     
    127148}
    128149
     150/** Detect if SKI console is in use by the kernel.
     151 *
     152 * This is needed since the kernel has no way of fencing off the user-space
     153 * driver.
     154 *
     155 * @return @c true if in use by the kernel.
     156 */
     157static bool ski_con_disabled(void)
     158{
     159        sysarg_t kconsole;
     160
     161        /*
     162         * XXX Ideally we should get information from our kernel counterpart
     163         * driver. But there needs to be a mechanism for the kernel console
     164         * to inform the kernel driver.
     165         */
     166        if (sysinfo_get_value("kconsole", &kconsole) != EOK)
     167                return false;
     168
     169        return kconsole != false;
     170}
     171
    129172/** Poll Ski for keypresses. */
    130173static errno_t ski_con_fibril(void *arg)
     
    135178
    136179        while (true) {
    137                 while (true) {
     180                while (!ski_con_disabled()) {
    138181                        c = ski_con_getchar();
    139182                        if (c == 0)
     
    246289        uint8_t *dp = (uint8_t *) data;
    247290
    248         for (i = 0; i < size; i++)
    249                 ski_con_putchar(con, dp[i]);
     291        if (!ski_con_disabled()) {
     292                for (i = 0; i < size; i++) {
     293                        ski_con_putchar(con, dp[i]);
     294                }
     295        }
    250296
    251297        *nwr = size;
  • uspace/drv/char/ski-con/ski-con.h

    rc742954 rc483fca  
    5656        fibril_mutex_t buf_lock;
    5757        fibril_condvar_t buf_cv;
     58        /** Memory area mapped to arbitrate with the kernel driver */
     59        void *mem_area;
    5860} ski_con_t;
    5961
  • uspace/lib/c/generic/loader.c

    rc742954 rc483fca  
    200200        }
    201201
    202         rc = loader_set_program(ldr, path, fd);
     202        rc = loader_set_program(ldr, abspath, fd);
    203203        vfs_put(fd);
    204204        return rc;
  • uspace/lib/draw/font/bitmap_backend.c

    rc742954 rc483fca  
    212212
    213213        data->decoder->release(data->decoder_data);
     214        free(data);
    214215}
    215216
  • uspace/lib/drv/generic/driver.c

    rc742954 rc483fca  
    145145        }
    146146
    147         /* Add one reference that will be dropped by driver_dev_remove() */
    148         dev_add_ref(dev);
    149147        dev->handle = dev_handle;
    150148        dev->name = dev_name;
     
    733731                return NULL;
    734732
    735         /* Add one reference that will be dropped by ddf_fun_destroy() */
    736733        fun->dev = dev;
    737         fun_add_ref(fun);
     734        dev_add_ref(fun->dev);
    738735
    739736        fun->bound = false;
     
    743740                fun->name = str_dup(name);
    744741                if (fun->name == NULL) {
    745                         delete_function(fun);
     742                        fun_del_ref(fun);       /* fun is destroyed */
    746743                        return NULL;
    747744                }
  • uspace/lib/hound/src/protocol.c

    rc742954 rc483fca  
    615615                        break;
    616616                default:
    617                         async_answer_0(&call, ENOTSUP);
     617                        /*
     618                         * In case we called async_get_call() after we had
     619                         * already received IPC_M_PHONE_HUNGUP deeper in the
     620                         * protocol handling, the capability handle will be
     621                         * invalid, so act carefully here.
     622                         */
     623                        if (call.cap_handle != CAP_NIL)
     624                                async_answer_0(&call, ENOTSUP);
    618625                        return;
    619626                }
  • uspace/lib/posix/Makefile

    rc742954 rc483fca  
    3636        ../math/libmath.a \
    3737        ../clui/libclui.a \
     38        ../gui/libgui.a \
     39        ../draw/libdraw.a \
     40        ../softrend/libsoftrend.a \
     41        ../hound/libhound.a \
     42        ../pcm/libpcm.a \
    3843        $(LIBC_PREFIX)/libc.a \
    3944        $(LIBC_PREFIX)/crt0.o \
     
    9398include $(USPACE_PREFIX)/Makefile.common
    9499
    95 export: $(EXPORT_DIR)/config.mk $(EXPORT_DIR)/config.rc
     100export: $(EXPORT_DIR)/config.mk $(EXPORT_DIR)/config.rc \
     101    $(EXPORT_DIR)/Makefile.common $(EXPORT_DIR)/Makefile.config
    96102
    97103$(EXPORT_DIR)/config.mk: export-libs export-includes
     
    111117        sed 's:$$(HELENOS_EXPORT_ROOT):$$HELENOS_EXPORT_ROOT:g' < $< >$@
    112118
     119$(EXPORT_DIR)/Makefile.common: ../../../Makefile.common
     120        cp $< $@
     121
     122$(EXPORT_DIR)/Makefile.config: ../../../Makefile.config
     123        cp $< $@
     124
    113125export-libs: $(EXPORT_FILES) export-includes
    114126        mkdir -p $(EXPORT_DIR)/lib
     
    124136        cp -L ../clui/tinput.h $(EXPORT_DIR)/include.new/libclui
    125137        rm -rf $(EXPORT_DIR)/include
     138        mkdir -p $(EXPORT_DIR)/include.new/libdraw
     139        cp -r -L -t $(EXPORT_DIR)/include.new/libdraw ../draw/*.h
     140        mkdir -p $(EXPORT_DIR)/include.new/libdraw/codec
     141        cp -r -L -t $(EXPORT_DIR)/include.new/libdraw/codec ../draw/codec/*.h
     142        mkdir -p $(EXPORT_DIR)/include.new/libgui
     143        cp -L -t $(EXPORT_DIR)/include.new/libgui ../gui/*.h
     144        mkdir -p $(EXPORT_DIR)/include.new/libhound
     145        cp -r -L -t $(EXPORT_DIR)/include.new/libhound ../hound/include/*
     146        mkdir -p $(EXPORT_DIR)/include.new/libpcm
     147        cp -r -L -t $(EXPORT_DIR)/include.new/libpcm ../pcm/include/*
    126148        mv $(EXPORT_DIR)/include.new $(EXPORT_DIR)/include
  • uspace/lib/usbhost/src/bus.c

    rc742954 rc483fca  
    370370int bus_endpoint_add(device_t *device, const usb_endpoint_descriptors_t *desc, endpoint_t **out_ep)
    371371{
    372         int err;
     372        int err = EINVAL;
    373373        assert(device);
    374374
     
    392392        assert((ep->required_transfer_buffer_policy & ~ep->transfer_buffer_policy) == 0);
    393393
    394         /* Bus reference */
    395         endpoint_add_ref(ep);
    396 
    397394        const size_t idx = bus_endpoint_index(ep->endpoint, ep->direction);
    398395        if (idx >= ARRAY_SIZE(device->endpoints)) {
     
    425422        }
    426423        fibril_mutex_unlock(&device->guard);
    427         if (err) {
    428                 endpoint_del_ref(ep);
    429                 return err;
    430         }
     424        if (err)
     425                goto drop;
    431426
    432427        if (out_ep) {
     
    438433        return EOK;
    439434drop:
    440         /* Bus reference */
    441435        endpoint_del_ref(ep);
    442         return EINVAL;
     436        return err;
    443437}
    444438
  • uspace/srv/devman/devtree.c

    rc742954 rc483fca  
    144144        }
    145145
    146         fun_add_ref(fun);
    147         insert_fun_node(tree, fun, str_dup(""), NULL);
     146        if (!insert_fun_node(tree, fun, str_dup(""), NULL)) {
     147                fun_del_ref(fun);       /* fun is destroyed */
     148                fibril_rwlock_write_unlock(&tree->rwlock);
     149                return false;
     150        }
    148151
    149152        match_id_t *id = create_match_id();
     
    162165        }
    163166
    164         dev_add_ref(dev);
    165167        insert_dev_node(tree, dev, fun);
    166168
  • uspace/srv/devman/driver.c

    rc742954 rc483fca  
    462462                        list_remove(&dev->driver_devices);
    463463                        fibril_mutex_unlock(&driver->driver_mutex);
     464                        /* Give an extra reference to driver_reassign_fibril */
     465                        dev_add_ref(dev);
    464466                        fid_t fid = fibril_create(driver_reassign_fibril, dev);
    465467                        if (fid == 0) {
    466468                                log_msg(LOG_DEFAULT, LVL_ERROR,
    467469                                    "Error creating fibril to assign driver.");
     470                                dev_del_ref(dev);
    468471                        }
    469472                        fibril_add_ready(fid);
  • uspace/srv/devman/drv_conn.c

    rc742954 rc483fca  
    284284
    285285        fun_node_t *fun = create_fun_node();
    286         /* One reference for creation, one for us */
    287         fun_add_ref(fun);
     286        /*
     287         * Hold a temporary reference while we work with fun. The reference from
     288         * create_fun_node() moves to the device tree.
     289         */
    288290        fun_add_ref(fun);
    289291        fun->ftype = ftype;
     
    300302                fun_busy_unlock(fun);
    301303                fun_del_ref(fun);
    302                 delete_fun_node(fun);
     304                fun_del_ref(fun);       /* fun is destroyed */
    303305                async_answer_0(call, ENOMEM);
    304306                return;
  • uspace/srv/devman/fun.c

    rc742954 rc483fca  
    317317
    318318                insert_dev_node(&device_tree, dev, fun);
    319                 dev_add_ref(dev);
    320319        }
    321320
Note: See TracChangeset for help on using the changeset viewer.