1/* SPDX-License-Identifier: GPL-2.0 2 * 3 * Network memory 4 * 5 * Author: Mina Almasry <almasrymina@google.com> 6 */ 7 8#ifndef _NET_NETMEM_H 9#define _NET_NETMEM_H 10 11/** 12 * typedef netmem_ref - a nonexistent type marking a reference to generic 13 * network memory. 14 * 15 * A netmem_ref currently is always a reference to a struct page. This 16 * abstraction is introduced so support for new memory types can be added. 17 * 18 * Use the supplied helpers to obtain the underlying memory pointer and fields. 19 */ 20typedef unsigned long __bitwise netmem_ref; 21 22/* This conversion fails (returns NULL) if the netmem_ref is not struct page 23 * backed. 24 * 25 * Currently struct page is the only possible netmem, and this helper never 26 * fails. 27 */ 28static inline struct page *netmem_to_page(netmem_ref netmem) 29{ 30 return (__force struct page *)netmem; 31} 32 33/* Converting from page to netmem is always safe, because a page can always be 34 * a netmem. 35 */ 36static inline netmem_ref page_to_netmem(struct page *page) 37{ 38 return (__force netmem_ref)page; 39} 40 41#endif /* _NET_NETMEM_H */ 42