--- /dev/null
+--- a/net/core/skbuff.c
++++ b/net/core/skbuff.c
+@@ -264,6 +264,10 @@ struct sk_buff *__alloc_skb(unsigned int
+ if (!skb)
+ goto out;
+
++#ifdef CONFIG_ARCH_IXP4XX
++ gfp_mask |= GFP_DMA;
++#endif
++
+ size = SKB_DATA_ALIGN(size);
+ data = kmalloc_node_track_caller(size + sizeof(struct skb_shared_info),
+ gfp_mask, node);
--- /dev/null
+--- a/net/core/skbuff.c
++++ b/net/core/skbuff.c
+@@ -183,6 +183,10 @@ struct sk_buff *__alloc_skb(unsigned int
+ goto out;
+ prefetchw(skb);
+
++#ifdef CONFIG_ARCH_IXP4XX
++ gfp_mask |= GFP_DMA;
++#endif
++
+ size = SKB_DATA_ALIGN(size);
+ data = kmalloc_node_track_caller(size + sizeof(struct skb_shared_info),
+ gfp_mask, node);