diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h index 6a1d79d84675..fa1ef98614bc 100644 --- a/include/linux/mmzone.h +++ b/include/linux/mmzone.h @@ -1031,6 +1031,15 @@ static inline int is_highmem_idx(enum zone_type idx) #endif } +#ifdef CONFIG_ZONE_DMA +bool has_managed_dma(void); +#else +static inline bool has_managed_dma(void) +{ + return false; +} +#endif + /** * is_highmem - helper function to quickly check if a struct zone is a * highmem zone or not. This is an attempt to keep references diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 23d3339ac4e8..42f03d122804 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -9449,3 +9449,18 @@ bool take_page_off_buddy(struct page *page) return ret; } #endif + +#ifdef CONFIG_ZONE_DMA +bool has_managed_dma(void) +{ + struct pglist_data *pgdat; + + for_each_online_pgdat(pgdat) { + struct zone *zone = &pgdat->node_zones[ZONE_DMA]; + + if (managed_zone(zone)) + return true; + } + return false; +} +#endif /* CONFIG_ZONE_DMA */