}
 
 /* Consult hardware, move any newly completed transactions to completed list */
-static struct gsi_trans *gsi_channel_update(struct gsi_channel *channel)
+struct gsi_trans *gsi_channel_update(struct gsi_channel *channel)
 {
        u32 evt_ring_id = channel->evt_ring_id;
        struct gsi *gsi = channel->gsi;
 
        /* Get the first transaction from the completed list */
        trans = gsi_channel_trans_complete(channel);
-       if (!trans)     /* List is empty; see if there's more to do */
-               trans = gsi_channel_update(channel);
-
        if (trans)
                gsi_trans_move_polled(trans);
 
 
  */
 void gsi_channel_doorbell(struct gsi_channel *channel);
 
+/* gsi_channel_update() - Update knowledge of channel hardware state
+ * @channel:   Channel whose doorbell should be rung
+ *
+ * Consult hardware, move any newly completed transactions to a
+ * channel's completed list
+ */
+struct gsi_trans *gsi_channel_update(struct gsi_channel *channel);
+
 /**
  * gsi_ring_virt() - Return virtual address for a ring entry
  * @ring:      Ring whose address is to be translated
 
        u16 trans_id = trans_info->completed_id;
 
        if (trans_id == trans_info->pending_id)
-               return NULL;
+               return gsi_channel_update(channel);
 
        return &trans_info->trans[trans_id %= channel->tre_count];
 }