Changeset 4c6fd56 in mainline for uspace/srv/bd


Ignore:
Timestamp:
2023-09-16T19:58:18Z (2 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
master, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
7d7f5e3
Parents:
6a0b2cc
git-author:
Jiri Svoboda <jiri@…> (2023-09-16 19:48:07)
git-committer:
Jiri Svoboda <jiri@…> (2023-09-16 19:58:18)
Message:

loc_server_register() should be callable more than once (API only)

Now loc_server_register() returns a pointer to a loc_srv_t object,
that is then passed to loc_service_register() and
loc_service_add_to_cat().

Added loc_server_unregister() that unregisters the server
and frees the loc_srv_t object.

Updated all callers. The implementation, however, is a stub.
It is not actually possible to call loc_server_register() more
than once, yet.

Location:
uspace/srv/bd
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/bd/file_bd/file_bd.c

    r6a0b2cc r4c6fd56  
    11/*
    2  * Copyright (c) 2009 Jiri Svoboda
     2 * Copyright (c) 2023 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    6161static aoff64_t num_blocks;
    6262static FILE *img;
     63static loc_srv_t *srv;
    6364
    6465static service_id_t service_id;
     
    137138                return -1;
    138139
    139         rc = loc_service_register(device_name, &service_id);
     140        rc = loc_service_register(srv, device_name, &service_id);
    140141        if (rc != EOK) {
    141142                printf("%s: Unable to register device '%s': %s.\n",
     
    150151        }
    151152
    152         rc = loc_service_add_to_cat(service_id, disk_cat);
     153        rc = loc_service_add_to_cat(srv, service_id, disk_cat);
    153154        if (rc != EOK) {
    154155                printf("%s: Failed adding %s to category: %s",
     
    176177
    177178        async_set_fallback_port_handler(file_bd_connection, NULL);
    178         errno_t rc = loc_server_register(NAME);
     179        errno_t rc = loc_server_register(NAME, &srv);
    179180        if (rc != EOK) {
    180181                printf("%s: Unable to register driver.\n", NAME);
     
    183184
    184185        img = fopen(fname, "rb+");
    185         if (img == NULL)
    186                 return EINVAL;
     186        if (img == NULL) {
     187                rc = EINVAL;
     188                goto error;
     189        }
    187190
    188191        if (fseek(img, 0, SEEK_END) != 0) {
    189                 fclose(img);
    190                 return EIO;
     192                rc = EIO;
     193                goto error;
    191194        }
    192195
    193196        off64_t img_size = ftell(img);
    194197        if (img_size < 0) {
     198                rc = EIO;
     199                goto error;
     200        }
     201
     202        num_blocks = img_size / block_size;
     203
     204        fibril_mutex_initialize(&dev_lock);
     205
     206        return EOK;
     207error:
     208        if (img != NULL) {
    195209                fclose(img);
    196                 return EIO;
    197         }
    198 
    199         num_blocks = img_size / block_size;
    200 
    201         fibril_mutex_initialize(&dev_lock);
    202 
    203         return EOK;
     210                img = NULL;
     211        }
     212
     213        if (srv != NULL) {
     214                loc_server_unregister(srv);
     215                srv = NULL;
     216        }
     217
     218        return rc;
    204219}
    205220
  • uspace/srv/bd/rd/rd.c

    r6a0b2cc r4c6fd56  
    11/*
     2 * Copyright (c) 2023 Jiri Svoboda
    23 * Copyright (c) 2007 Michal Konopa
    34 * Copyright (c) 2007 Martin Jelen
     
    9394
    9495static bd_srvs_t bd_srvs;
     96static loc_srv_t *srv;
    9597
    9698static void rd_client_conn(ipc_call_t *icall, void *arg)
     
    178180
    179181        async_set_fallback_port_handler(rd_client_conn, NULL);
    180         ret = loc_server_register(NAME);
     182        ret = loc_server_register(NAME, &srv);
    181183        if (ret != EOK) {
    182184                printf("%s: Unable to register driver: %s\n", NAME, str_error(ret));
     
    185187
    186188        service_id_t service_id;
    187         ret = loc_service_register("bd/initrd", &service_id);
     189        ret = loc_service_register(srv, "bd/initrd", &service_id);
    188190        if (ret != EOK) {
    189191                printf("%s: Unable to register device service\n", NAME);
  • uspace/srv/bd/sata_bd/sata_bd.c

    r6a0b2cc r4c6fd56  
    11/*
     2 * Copyright (c) 2023 Jiri Svoboda
    23 * Copyright (c) 2012 Petr Jerman
    34 * All rights reserved.
     
    5758#define MAXDISKS  256
    5859
     60static loc_srv_t *srv;
    5961static sata_bd_dev_t disk[MAXDISKS];
    6062static int disk_count;
     
    249251
    250252        async_set_fallback_port_handler(sata_bd_connection, NULL);
    251         rc = loc_server_register(NAME);
     253        rc = loc_server_register(NAME, &srv);
    252254        if (rc != EOK) {
    253255                printf(NAME ": Unable to register driver: %s.\n", str_error(rc));
     
    270272                char name[1024];
    271273                snprintf(name, 1024, "%s/%s", NAMESPACE, disk[i].dev_name);
    272                 rc = loc_service_register(name, &disk[i].service_id);
     274                rc = loc_service_register(srv, name, &disk[i].service_id);
    273275                if (rc != EOK) {
    274276                        printf(NAME ": Unable to register device %s: %s\n", name, str_error(rc));
     
    276278                }
    277279
    278                 rc = loc_service_add_to_cat(disk[i].service_id, disk_cat);
     280                rc = loc_service_add_to_cat(srv, disk[i].service_id, disk_cat);
    279281                if (rc != EOK) {
    280282                        printf("%s: Failed adding %s to category: %s.",
  • uspace/srv/bd/vbd/disk.c

    r6a0b2cc r4c6fd56  
    11/*
    2  * Copyright (c) 2016 Jiri Svoboda
     2 * Copyright (c) 2023 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    5151#include "types/vbd.h"
    5252
     53loc_srv_t *vbds_srv;
     54
    5355static fibril_mutex_t vbds_disks_lock;
    5456static list_t vbds_disks; /* of vbds_disk_t */
     
    11221124        log_msg(LOG_DEFAULT, LVL_DEBUG, "loc_service_register('%s')",
    11231125            name);
    1124         rc = loc_service_register(name, &psid);
     1126        rc = loc_service_register(vbds_srv, name, &psid);
    11251127        if (rc != EOK) {
    11261128                log_msg(LOG_DEFAULT, LVL_ERROR, "Failed registering "
     
    11311133        }
    11321134
    1133         rc = loc_service_add_to_cat(psid, part_cid);
     1135        rc = loc_service_add_to_cat(vbds_srv, psid, part_cid);
    11341136        if (rc != EOK) {
    11351137                log_msg(LOG_DEFAULT, LVL_ERROR, "Failled adding partition "
     
    11381140                free(part);
    11391141
    1140                 rc = loc_service_unregister(psid);
     1142                rc = loc_service_unregister(vbds_srv, psid);
    11411143                if (rc != EOK) {
    11421144                        log_msg(LOG_DEFAULT, LVL_ERROR, "Error unregistering "
     
    11601162            "disk->svc_name='%s', id=%zu)", part->disk->svc_name, part->svc_id);
    11611163
    1162         rc = loc_service_unregister(part->svc_id);
     1164        rc = loc_service_unregister(vbds_srv, part->svc_id);
    11631165        if (rc != EOK)
    11641166                return EIO;
  • uspace/srv/bd/vbd/disk.h

    r6a0b2cc r4c6fd56  
    11/*
    2  * Copyright (c) 2015 Jiri Svoboda
     2 * Copyright (c) 2023 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    5757extern void vbds_bd_conn(ipc_call_t *, void *);
    5858
     59extern loc_srv_t *vbds_srv;
     60
    5961#endif
    6062
  • uspace/srv/bd/vbd/vbd.c

    r6a0b2cc r4c6fd56  
    11/*
    2  * Copyright (c) 2015 Jiri Svoboda
     2 * Copyright (c) 2023 Jiri Svoboda
    33 * All rights reserved.
    44 *
     
    6868        async_set_fallback_port_handler(vbds_client_conn, NULL);
    6969
    70         rc = loc_server_register(NAME);
     70        rc = loc_server_register(NAME, &vbds_srv);
    7171        if (rc != EOK) {
    7272                log_msg(LOG_DEFAULT, LVL_ERROR, "Failed registering server: %s.", str_error(rc));
     
    7474        }
    7575
    76         rc = loc_service_register(SERVICE_NAME_VBD, &ctl_sid);
     76        rc = loc_service_register(vbds_srv, SERVICE_NAME_VBD, &ctl_sid);
    7777        if (rc != EOK) {
    7878                log_msg(LOG_DEFAULT, LVL_ERROR, "Failed registering service: %s.", str_error(rc));
Note: See TracChangeset for help on using the changeset viewer.