]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[refcnt] Add ref_init() wrapper function
authorMichael Brown <mcb30@ipxe.org>
Tue, 15 Jun 2010 16:33:23 +0000 (17:33 +0100)
committerMichael Brown <mcb30@ipxe.org>
Tue, 22 Jun 2010 13:26:40 +0000 (14:26 +0100)
Standardise on using ref_init() to initialise an embedded reference
count, to match the coding style used by other embedded objects.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
22 files changed:
src/core/downloader.c
src/core/hw.c
src/core/image.c
src/core/posix_io.c
src/core/resolv.c
src/drivers/block/srp.c
src/image/embedded.c
src/include/ipxe/refcnt.h
src/net/aoe.c
src/net/dhcppkt.c
src/net/infiniband/ib_cmrc.c
src/net/netdevice.c
src/net/tcp.c
src/net/tcp/ftp.c
src/net/tcp/http.c
src/net/tcp/iscsi.c
src/net/tls.c
src/net/udp.c
src/net/udp/dhcp.c
src/net/udp/dns.c
src/net/udp/slam.c
src/net/udp/tftp.c

index 9285efa204481b6d7ee8d7d47c5851fb94eb3103..5499ddaba3fbd34ba35c752140421acc5e1451eb 100644 (file)
@@ -264,7 +264,7 @@ int create_downloader ( struct job_interface *job, struct image *image,
        downloader = zalloc ( sizeof ( *downloader ) );
        if ( ! downloader )
                return -ENOMEM;
-       downloader->refcnt.free = downloader_free;
+       ref_init ( &downloader->refcnt, downloader_free );
        job_init ( &downloader->job, &downloader_job_operations,
                   &downloader->refcnt );
        xfer_init ( &downloader->xfer, &downloader_xfer_operations,
index f8dc6be4a4a1f8d9ea321b146ccfc6c00e987cbe..b4a190271f3d0995f3d3b8fe37471d39b3c66ce8 100644 (file)
@@ -59,6 +59,7 @@ static int hw_open ( struct xfer_interface *xfer, struct uri *uri __unused ) {
        hw = zalloc ( sizeof ( *hw ) );
        if ( ! hw )
                return -ENOMEM;
+       ref_init ( &hw->refcnt, NULL );
        xfer_init ( &hw->xfer, &hw_xfer_operations, &hw->refcnt );
        process_init ( &hw->process, hw_step, &hw->refcnt );
 
index c6ef71f4710a664448fa8b5d83b56f8913b9d78e..f530cafd4bec44109ecbe899d795b0020f39f253 100644 (file)
@@ -64,7 +64,7 @@ struct image * alloc_image ( void ) {
 
        image = zalloc ( sizeof ( *image ) );
        if ( image ) {
-               image->refcnt.free = free_image;
+               ref_init ( &image->refcnt, free_image );
        }
        return image;
 }
index 05077c8b27d09ccf94f6caaa2b2f9ad9213bee97..2ecb15410bcb3d9619a2dd9e31be9c40eeb1b8f2 100644 (file)
@@ -198,7 +198,7 @@ int open ( const char *uri_string ) {
        file = zalloc ( sizeof ( *file ) );
        if ( ! file )
                return -ENOMEM;
-       file->refcnt.free = posix_file_free;
+       ref_init ( &file->refcnt, posix_file_free );
        file->fd = fd;
        file->rc = -EINPROGRESS;
        xfer_init ( &file->xfer, &posix_file_xfer_operations,
index 9c96b9fca06848555d33c049cfc07f223056cd99..ec7a556ce56522716fb61bea5257d8399a44f792 100644 (file)
@@ -121,6 +121,7 @@ static int numeric_resolv ( struct resolv_interface *resolv,
        numeric = zalloc ( sizeof ( *numeric ) );
        if ( ! numeric )
                return -ENOMEM;
+       ref_init ( &numeric->refcnt, NULL );
        resolv_init ( &numeric->resolv, &null_resolv_ops, &numeric->refcnt );
        process_init ( &numeric->process, numeric_step, &numeric->refcnt );
        memcpy ( &numeric->sa, sa, sizeof ( numeric->sa ) );
@@ -256,6 +257,7 @@ int resolv ( struct resolv_interface *resolv, const char *name,
        mux = zalloc ( sizeof ( *mux ) + name_len );
        if ( ! mux )
                return -ENOMEM;
+       ref_init ( &mux->refcnt, NULL );
        resolv_init ( &mux->parent, &null_resolv_ops, &mux->refcnt );
        resolv_init ( &mux->child, &resolv_mux_child_ops, &mux->refcnt );
        mux->resolver = table_start ( RESOLVERS );
@@ -389,6 +391,7 @@ int xfer_open_named_socket ( struct xfer_interface *xfer, int semantics,
        named = zalloc ( sizeof ( *named ) );
        if ( ! named )
                return -ENOMEM;
+       ref_init ( &named->refcnt, NULL );
        xfer_init ( &named->xfer, &named_xfer_ops, &named->refcnt );
        resolv_init ( &named->resolv, &named_resolv_ops, &named->refcnt );
        named->semantics = semantics;
index d90401e5e1f4d4cc2152b219914d10b10a067cfb..49fb214ea7471a46ab5a89234c18e2f58f9a0916 100644 (file)
@@ -482,6 +482,7 @@ int srp_attach ( struct scsi_device *scsi, const char *root_path ) {
                rc = -ENOMEM;
                goto err_alloc;
        }
+       ref_init ( &srp->refcnt, NULL );
        xfer_init ( &srp->socket, &srp_xfer_operations, &srp->refcnt );
        srp->transport = transport;
        DBGC ( srp, "SRP %p using %s\n", srp, root_path );
index b3ed8ccfa6d0bb71d5ec9de2b9b29e27bcfd2996..89905d7fdbd87d49d850e49b3ea5fc24e8cf0177 100644 (file)
@@ -41,7 +41,7 @@ EMBED_ALL
 /* Image structures for all embedded images */
 #undef EMBED
 #define EMBED( _index, _path, _name ) {                                        \
-       .refcnt = { .free = embedded_image_free, },                     \
+       .refcnt = REF_INIT ( embedded_image_free ),                     \
        .name = _name,                                                  \
        .data = ( userptr_t ) ( embedded_image_ ## _index ## _data ),   \
        .len = ( size_t ) embedded_image_ ## _index ## _len,            \
index 4b023225e3c7f6e0e002a0f24b0ab195dd6dc843..f359ac9c151085342388f234d4d302243fe1aa81 100644 (file)
@@ -40,6 +40,41 @@ struct refcnt {
        void ( * free ) ( struct refcnt *refcnt );
 };
 
+/**
+ * Initialise a reference counter
+ *
+ * @v refcnt           Reference counter
+ * @v free             Freeing function
+ */
+static inline __attribute__ (( always_inline )) void
+ref_init ( struct refcnt *refcnt,
+          void ( * free ) ( struct refcnt *refcnt ) ) {
+       refcnt->free = free;
+}
+
+/**
+ * Initialise a reference counter
+ *
+ * @v refcnt           Reference counter
+ * @v free             Free containing object
+ */
+#define ref_init( refcnt, free ) do {                                  \
+       if ( __builtin_constant_p ( (free) ) && ( (free) == NULL ) ) {  \
+               /* Skip common case of no initialisation required */    \
+       } else {                                                        \
+               ref_init ( (refcnt), (free) );                          \
+       }                                                               \
+       } while ( 0 )
+
+/**
+ * Initialise a static reference counter
+ *
+ * @v free             Free containing object
+ */
+#define REF_INIT( free ) {                                             \
+               .free = free,                                           \
+       }
+
 extern struct refcnt * ref_get ( struct refcnt *refcnt );
 extern void ref_put ( struct refcnt *refcnt );
 
index 497c12a02bf8c4fade9f2463c7dca6d79560273f..80403db7af61177413b11ac38dd9496a1821c439 100644 (file)
@@ -438,7 +438,7 @@ int aoe_attach ( struct ata_device *ata, struct net_device *netdev,
        aoe = zalloc ( sizeof ( *aoe ) );
        if ( ! aoe )
                return -ENOMEM;
-       aoe->refcnt.free = aoe_free;
+       ref_init ( &aoe->refcnt, aoe_free );
        aoe->netdev = netdev_get ( netdev );
        memcpy ( aoe->target, netdev->ll_broadcast, sizeof ( aoe->target ) );
        aoe->tag = AOE_TAG_MAGIC;
index bc99401f2e7fc007343665639f85c19f6a746254..b2a33363a9db0d135b89327f78803377153f7fd5 100644 (file)
@@ -271,6 +271,7 @@ static struct settings_operations dhcppkt_settings_operations = {
  */
 void dhcppkt_init ( struct dhcp_packet *dhcppkt, struct dhcphdr *data,
                    size_t len ) {
+       ref_init ( &dhcppkt->refcnt, NULL );
        dhcppkt->dhcphdr = data;
        dhcppkt->max_len = len;
        dhcpopt_init ( &dhcppkt->options, &dhcppkt->dhcphdr->options,
index de19c51f7cd3f0b67f8893b020d146e84c5a8824..b7b9cd819a0b3ead549345d74c7ec8956a5db172 100644 (file)
@@ -383,6 +383,7 @@ int ib_cmrc_open ( struct xfer_interface *xfer, struct ib_device *ibdev,
                rc = -ENOMEM;
                goto err_alloc;
        }
+       ref_init ( &cmrc->refcnt, NULL );
        xfer_init ( &cmrc->xfer, &ib_cmrc_xfer_operations, &cmrc->refcnt );
        cmrc->ibdev = ibdev;
        memcpy ( &cmrc->dgid, dgid, sizeof ( cmrc->dgid ) );
index 6c91b48975c4d45dd2b594b6512c8832cb21bcb9..01fa1d55e93247754040e50137543f6d9fb0af65 100644 (file)
@@ -328,7 +328,7 @@ struct net_device * alloc_netdev ( size_t priv_size ) {
        total_len = ( sizeof ( *netdev ) + priv_size );
        netdev = zalloc ( total_len );
        if ( netdev ) {
-               netdev->refcnt.free = free_netdev;
+               ref_init ( &netdev->refcnt, free_netdev );
                netdev->link_rc = -EUNKNOWN_LINK_STATUS;
                INIT_LIST_HEAD ( &netdev->tx_queue );
                INIT_LIST_HEAD ( &netdev->rx_queue );
index b01345fa2cfd88bb39310ed8371ff5e6944fac0d..449f434ae4978f5b8bedab2afa08e929c12ec5d2 100644 (file)
@@ -224,6 +224,7 @@ static int tcp_open ( struct xfer_interface *xfer, struct sockaddr *peer,
        if ( ! tcp )
                return -ENOMEM;
        DBGC ( tcp, "TCP %p allocated\n", tcp );
+       ref_init ( &tcp->refcnt, NULL );
        xfer_init ( &tcp->xfer, &tcp_xfer_operations, &tcp->refcnt );
        tcp->prev_tcp_state = TCP_CLOSED;
        tcp->tcp_state = TCP_STATE_SENT ( TCP_SYN );
index 3ef71b6102ac597de6e7df1791ed31b9d7c87a9f..58794c8b273339aad4e216c48e621c109508013d 100644 (file)
@@ -491,7 +491,7 @@ static int ftp_open ( struct xfer_interface *xfer, struct uri *uri ) {
        ftp = zalloc ( sizeof ( *ftp ) );
        if ( ! ftp )
                return -ENOMEM;
-       ftp->refcnt.free = ftp_free;
+       ref_init ( &ftp->refcnt, ftp_free );
        xfer_init ( &ftp->xfer, &ftp_xfer_operations, &ftp->refcnt );
        ftp->uri = uri_get ( uri );
        xfer_init ( &ftp->control, &ftp_control_operations, &ftp->refcnt );
index 5faffe99d7edc6ed6b10ec96e45ec6c2e7a807fe..d6a9fad7e0d819cb91d4ca643e4180af9c85efaf 100644 (file)
@@ -547,7 +547,7 @@ int http_open_filter ( struct xfer_interface *xfer, struct uri *uri,
        http = zalloc ( sizeof ( *http ) );
        if ( ! http )
                return -ENOMEM;
-       http->refcnt.free = http_free;
+       ref_init ( &http->refcnt, http_free );
        xfer_init ( &http->xfer, &http_xfer_operations, &http->refcnt );
                http->uri = uri_get ( uri );
        xfer_init ( &http->socket, &http_socket_operations, &http->refcnt );
index 69d185047d6b6b441b26c0fac59ff70d17b99554..24cbda2c5cb4682f79727a5b523700adcbc3df5d 100644 (file)
@@ -1792,7 +1792,7 @@ int iscsi_attach ( struct scsi_device *scsi, const char *root_path ) {
        iscsi = zalloc ( sizeof ( *iscsi ) );
        if ( ! iscsi )
                return -ENOMEM;
-       iscsi->refcnt.free = iscsi_free;
+       ref_init ( &iscsi->refcnt, iscsi_free );
        xfer_init ( &iscsi->socket, &iscsi_socket_operations, &iscsi->refcnt );
        process_init ( &iscsi->process, iscsi_tx_step, &iscsi->refcnt );
 
index 3c72b45c4e317870a2df86b8fda0cdadefd217a9..8825c5c13a1929685647c748f5210c57962ef3ab 100644 (file)
@@ -1731,7 +1731,7 @@ int add_tls ( struct xfer_interface *xfer, struct xfer_interface **next ) {
        if ( ! tls )
                return -ENOMEM;
        memset ( tls, 0, sizeof ( *tls ) );
-       tls->refcnt.free = free_tls;
+       ref_init ( &tls->refcnt, free_tls );
        filter_init ( &tls->plainstream, &tls_plainstream_operations,
                      &tls->cipherstream, &tls_cipherstream_operations,
                      &tls->refcnt );
index 1aa0e4968308c64da2b7df97186e47ed5adca1f2..dcc69c36c2d004874b018f41a2f6800c923ae4d1 100644 (file)
@@ -110,6 +110,7 @@ static int udp_open_common ( struct xfer_interface *xfer,
        if ( ! udp )
                return -ENOMEM;
        DBGC ( udp, "UDP %p allocated\n", udp );
+       ref_init ( &udp->refcnt, NULL );
        xfer_init ( &udp->xfer, &udp_xfer_operations, &udp->refcnt );
        if ( st_peer )
                memcpy ( &udp->peer, st_peer, sizeof ( udp->peer ) );
index 31e420c4fabddb0e67e8a4449ee59749a81d0317..33212b0624a8cc06f6bc54aa576c2273fcae71b7 100644 (file)
@@ -1439,7 +1439,7 @@ int start_dhcp ( struct job_interface *job, struct net_device *netdev ) {
        dhcp = zalloc ( sizeof ( *dhcp ) );
        if ( ! dhcp )
                return -ENOMEM;
-       dhcp->refcnt.free = dhcp_free;
+       ref_init ( &dhcp->refcnt, dhcp_free );
        job_init ( &dhcp->job, &dhcp_job_operations, &dhcp->refcnt );
        xfer_init ( &dhcp->xfer, &dhcp_xfer_operations, &dhcp->refcnt );
        dhcp->netdev = netdev_get ( netdev );
@@ -1542,7 +1542,7 @@ int start_pxebs ( struct job_interface *job, struct net_device *netdev,
                        sizeof ( *ip ) /* terminator */ );
        if ( ! dhcp )
                return -ENOMEM;
-       dhcp->refcnt.free = dhcp_free;
+       ref_init ( &dhcp->refcnt, dhcp_free );
        job_init ( &dhcp->job, &dhcp_job_operations, &dhcp->refcnt );
        xfer_init ( &dhcp->xfer, &dhcp_xfer_operations, &dhcp->refcnt );
        dhcp->netdev = netdev_get ( netdev );
index db9c036228c0bc78e0574ddcfd806a0870fe8cf0..47fc6c75a94535cc7d9d320884336560d55fc607 100644 (file)
@@ -503,6 +503,7 @@ static int dns_resolv ( struct resolv_interface *resolv,
                rc = -ENOMEM;
                goto err_alloc_dns;
        }
+       ref_init ( &dns->refcnt, NULL );
        resolv_init ( &dns->resolv, &null_resolv_ops, &dns->refcnt );
        xfer_init ( &dns->socket, &dns_socket_operations, &dns->refcnt );
        dns->timer.expired = dns_timer_expired;
index aa15933ec1e269db13aaa1fcfe0b1f5107e229af..3f0b0e2ea388209645c4d49314226dd99c383b61 100644 (file)
@@ -748,7 +748,7 @@ static int slam_open ( struct xfer_interface *xfer, struct uri *uri ) {
        slam = zalloc ( sizeof ( *slam ) );
        if ( ! slam )
                return -ENOMEM;
-       slam->refcnt.free = slam_free;
+       ref_init ( &slam->refcnt, slam_free );
        xfer_init ( &slam->xfer, &slam_xfer_operations, &slam->refcnt );
        xfer_init ( &slam->socket, &slam_socket_operations, &slam->refcnt );
        xfer_init ( &slam->mc_socket, &slam_mc_socket_operations,
index d49f4256c41239f4b4a8e1d266dcd92dd144690e..49c857fbf90c6d2c4ff53fc325e5dc44e312dca9 100644 (file)
@@ -1134,7 +1134,7 @@ static int tftp_core_open ( struct xfer_interface *xfer, struct uri *uri,
        tftp = zalloc ( sizeof ( *tftp ) );
        if ( ! tftp )
                return -ENOMEM;
-       tftp->refcnt.free = tftp_free;
+       ref_init ( &tftp->refcnt, tftp_free );
        xfer_init ( &tftp->xfer, &tftp_xfer_operations, &tftp->refcnt );
        tftp->uri = uri_get ( uri );
        xfer_init ( &tftp->socket, &tftp_socket_operations, &tftp->refcnt );