<p>Furquan Shaikh has uploaded this change for <strong>review</strong>.</p><p><a href="https://review.coreboot.org/26802">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">util/sconfig: Make queue handling more generic within main.c<br><br>This change updates queue handling routines to be more generic so that<br>it can be used by more than just chip queue. Additionally, it provides<br>a function to dequeue element from head.<br><br>BUG=b:80081934<br>TEST=Verified that abuild compiles successfully for all boards.<br><br>Change-Id: Ibd2de85b48c5d4e2790bf974ea3bb1bd387f66ee<br>Signed-off-by: Furquan Shaikh <furquan@google.com><br>---<br>M util/sconfig/main.c<br>1 file changed, 50 insertions(+), 8 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://review.coreboot.org:29418/coreboot refs/changes/02/26802/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/util/sconfig/main.c b/util/sconfig/main.c</span><br><span>index 9a797a6..3bdd4d2 100644</span><br><span>--- a/util/sconfig/main.c</span><br><span>+++ b/util/sconfig/main.c</span><br><span>@@ -62,11 +62,11 @@</span><br><span>    .enabled = 1</span><br><span> };</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static struct queue {</span><br><span style="color: hsl(120, 100%, 40%);">+struct queue {</span><br><span>  void *data;</span><br><span>  struct queue *next;</span><br><span>  struct queue *prev;</span><br><span style="color: hsl(0, 100%, 40%);">-} *q;</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span> </span><br><span> #define S_ALLOC(_s) s_alloc(__func__, _s)</span><br><span> </span><br><span>@@ -80,7 +80,7 @@</span><br><span>        return data;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-struct queue *new_queue_entry(void *data)</span><br><span style="color: hsl(120, 100%, 40%);">+static struct queue *new_queue_entry(void *data)</span><br><span> {</span><br><span>        struct queue *e = S_ALLOC(sizeof(*e));</span><br><span> </span><br><span>@@ -89,12 +89,13 @@</span><br><span>     return e;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-void chip_enqueue_tail(void *data)</span><br><span style="color: hsl(120, 100%, 40%);">+static void enqueue_tail(struct queue **queue, void *data)</span><br><span> {</span><br><span>        struct queue *tmp = new_queue_entry(data);</span><br><span style="color: hsl(120, 100%, 40%);">+    struct queue *q = *queue;</span><br><span> </span><br><span>        if (!q) {</span><br><span style="color: hsl(0, 100%, 40%);">-               q = tmp;</span><br><span style="color: hsl(120, 100%, 40%);">+              q = *queue = tmp;</span><br><span>            return;</span><br><span>      }</span><br><span> </span><br><span>@@ -104,13 +105,19 @@</span><br><span>        tmp->next = q;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-void *chip_dequeue_tail(void)</span><br><span style="color: hsl(120, 100%, 40%);">+static void *dequeue_tail(struct queue **queue)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-   struct queue *tmp = q->prev;</span><br><span style="color: hsl(120, 100%, 40%);">+       struct queue *q = *queue;</span><br><span style="color: hsl(120, 100%, 40%);">+     struct queue *tmp;</span><br><span>   void *data;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+       if (!q)</span><br><span style="color: hsl(120, 100%, 40%);">+               return NULL;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        tmp = q->prev;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>  if (tmp == q)</span><br><span style="color: hsl(0, 100%, 40%);">-           q = NULL;</span><br><span style="color: hsl(120, 100%, 40%);">+             *queue = NULL;</span><br><span>       else {</span><br><span>               tmp->prev->next = q;</span><br><span>           q->prev = tmp->prev;</span><br><span>@@ -122,6 +129,41 @@</span><br><span>    return data;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+static void *dequeue_head(struct queue **queue)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+     struct queue *q = *queue;</span><br><span style="color: hsl(120, 100%, 40%);">+     struct queue *tmp = q;</span><br><span style="color: hsl(120, 100%, 40%);">+        void *data;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ if (!q)</span><br><span style="color: hsl(120, 100%, 40%);">+               return NULL;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        if (q->next == q)</span><br><span style="color: hsl(120, 100%, 40%);">+          *queue = NULL;</span><br><span style="color: hsl(120, 100%, 40%);">+        else {</span><br><span style="color: hsl(120, 100%, 40%);">+                q->next->prev = q->prev;</span><br><span style="color: hsl(120, 100%, 40%);">+             q->prev->next = q->next;</span><br><span style="color: hsl(120, 100%, 40%);">+             *queue = q->next;</span><br><span style="color: hsl(120, 100%, 40%);">+  }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   data = tmp->data;</span><br><span style="color: hsl(120, 100%, 40%);">+  free(tmp);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  return data;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static struct queue *chip_queue;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+void chip_enqueue_tail(void *data)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+  enqueue_tail(&chip_queue, data);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+void *chip_dequeue_tail(void)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+   return dequeue_tail(&chip_queue);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> static struct device *new_dev(struct device *parent)</span><br><span> {</span><br><span>      struct device *dev = S_ALLOC(sizeof(struct device));</span><br><span></span><br></pre><p>To view, visit <a href="https://review.coreboot.org/26802">change 26802</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://review.coreboot.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://review.coreboot.org/26802"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: coreboot </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: Ibd2de85b48c5d4e2790bf974ea3bb1bd387f66ee </div>
<div style="display:none"> Gerrit-Change-Number: 26802 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Furquan Shaikh <furquan@google.com> </div>