hc
2023-12-08 01573e231f18eb2d99162747186f59511f56b64d
kernel/tools/testing/nvdimm/dax-dev.c
....@@ -1,14 +1,6 @@
1
+// SPDX-License-Identifier: GPL-2.0-only
12 /*
23 * Copyright (c) 2016, Intel Corporation.
3
- *
4
- * This program is free software; you can redistribute it and/or modify it
5
- * under the terms and conditions of the GNU General Public License,
6
- * version 2, as published by the Free Software Foundation.
7
- *
8
- * This program is distributed in the hope it will be useful, but WITHOUT
9
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
10
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
11
- * more details.
124 */
135 #include "test/nfit_test.h"
146 #include <linux/mm.h>
....@@ -17,21 +9,19 @@
179 phys_addr_t dax_pgoff_to_phys(struct dev_dax *dev_dax, pgoff_t pgoff,
1810 unsigned long size)
1911 {
20
- struct resource *res;
21
- phys_addr_t addr;
2212 int i;
2313
24
- for (i = 0; i < dev_dax->num_resources; i++) {
25
- res = &dev_dax->res[i];
26
- addr = pgoff * PAGE_SIZE + res->start;
27
- if (addr >= res->start && addr <= res->end)
28
- break;
29
- pgoff -= PHYS_PFN(resource_size(res));
30
- }
14
+ for (i = 0; i < dev_dax->nr_range; i++) {
15
+ struct dev_dax_range *dax_range = &dev_dax->ranges[i];
16
+ struct range *range = &dax_range->range;
17
+ unsigned long long pgoff_end;
18
+ phys_addr_t addr;
3119
32
- if (i < dev_dax->num_resources) {
33
- res = &dev_dax->res[i];
34
- if (addr + size - 1 <= res->end) {
20
+ pgoff_end = dax_range->pgoff + PHYS_PFN(range_len(range)) - 1;
21
+ if (pgoff < dax_range->pgoff || pgoff > pgoff_end)
22
+ continue;
23
+ addr = PFN_PHYS(pgoff - dax_range->pgoff) + range->start;
24
+ if (addr + size - 1 <= range->end) {
3525 if (get_nfit_res(addr)) {
3626 struct page *page;
3727
....@@ -40,10 +30,10 @@
4030
4131 page = vmalloc_to_page((void *)addr);
4232 return PFN_PHYS(page_to_pfn(page));
43
- } else
44
- return addr;
33
+ }
34
+ return addr;
4535 }
36
+ break;
4637 }
47
-
4838 return -1;
4939 }