// Add entry in sorted order.
struct hlist_node **pprev;
struct bootentry_s *pos;
- hlist_for_each_entry_safe(pos, pprev, &BootList, node) {
+ hlist_for_each_entry_pprev(pos, pprev, &BootList, node) {
if (be->priority < pos->priority)
break;
if (be->priority > pos->priority)
; pos != container_of(NULL, typeof(*pos), member) \
; pos = container_of(pos->member.next, typeof(*pos), member))
-#define hlist_for_each_entry_safe(pos, pprev, head, member) \
+#define hlist_for_each_entry_safe(pos, n, head, member) \
+ for (pos = container_of((head)->first, typeof(*pos), member) \
+ ; pos != container_of(NULL, typeof(*pos), member) \
+ && ({ n = pos->member.next; 1; }) \
+ ; pos = container_of(n, typeof(*pos), member))
+
+#define hlist_for_each_entry_pprev(pos, pprev, head, member) \
for (pprev = &(head)->first \
; *pprev && ({ pos=container_of(*pprev, typeof(*pos), member); 1; }) \
; pprev = &(*pprev)->next)
static void pci_region_migrate_64bit_entries(struct pci_region *from,
struct pci_region *to)
{
- struct hlist_node **pprev, **last = &to->list.first;
+ struct hlist_node *n, **last = &to->list.first;
struct pci_region_entry *entry;
- hlist_for_each_entry_safe(entry, pprev, &from->list, node) {
+ hlist_for_each_entry_safe(entry, n, &from->list, node) {
if (!entry->is64)
continue;
// Move from source list to destination list.
// Insert into list in sorted order.
struct hlist_node **pprev;
struct pci_region_entry *pos;
- hlist_for_each_entry_safe(pos, pprev, &bus->r[type].list, node) {
+ hlist_for_each_entry_pprev(pos, pprev, &bus->r[type].list, node) {
if (pos->align < align || (pos->align == align && pos->size < size))
break;
}
hlist_add(&entry->node, pprev);
+ dprintf(1, "Add %p to %p (bus=%p dev=%p bar=%d size=%llx align=%lld type=%d is64=%d\n"
+ , entry, pprev, bus, dev, bar, size, align, type, is64);
return entry;
}
static void pci_region_map_entries(struct pci_bus *busses, struct pci_region *r)
{
- struct hlist_node **pprev;
+ struct hlist_node *n;
struct pci_region_entry *entry;
- hlist_for_each_entry_safe(entry, pprev, &r->list, node) {
+ hlist_for_each_entry_safe(entry, n, &r->list, node) {
u64 addr = r->base;
r->base += entry->size;
if (entry->bar == -1)
// Find position to add space
struct allocinfo_s *info;
struct hlist_node **pprev;
- hlist_for_each_entry_safe(info, pprev, &zone->head, node) {
+ hlist_for_each_entry_pprev(info, pprev, &zone->head, node) {
if (info->data < start)
break;
}