|  | // SPDX-License-Identifier: GPL-2.0 | 
|  | #include <linux/bio.h> | 
|  | #include <linux/export.h> | 
|  | #include <xen/xen.h> | 
|  | #include <xen/page.h> | 
|  |  | 
|  | /* check if @page can be merged with 'vec1' */ | 
|  | bool xen_biovec_phys_mergeable(const struct bio_vec *vec1, | 
|  | const struct page *page) | 
|  | { | 
|  | #if XEN_PAGE_SIZE == PAGE_SIZE | 
|  | unsigned long bfn1 = pfn_to_bfn(page_to_pfn(vec1->bv_page)); | 
|  | unsigned long bfn2 = pfn_to_bfn(page_to_pfn(page)); | 
|  |  | 
|  | return bfn1 + PFN_DOWN(vec1->bv_offset + vec1->bv_len) == bfn2; | 
|  | #else | 
|  | /* | 
|  | * XXX: Add support for merging bio_vec when using different page | 
|  | * size in Xen and Linux. | 
|  | */ | 
|  | return false; | 
|  | #endif | 
|  | } |