On 3/19/20 5:14 PM, Jason Gunthorpe wrote:
On Tue, Mar 17, 2020 at 04:14:31PM -0700, Ralph Campbell wrote:
+static int dmirror_fault(struct dmirror *dmirror, unsigned long start,
unsigned long end, bool write)
+{
- struct mm_struct *mm = dmirror->mm;
- unsigned long addr;
- uint64_t pfns[64];
- struct hmm_range range = {
.notifier = &dmirror->notifier,
.pfns = pfns,
.flags = dmirror_hmm_flags,
.values = dmirror_hmm_values,
.pfn_shift = DPT_SHIFT,
.pfn_flags_mask = ~(dmirror_hmm_flags[HMM_PFN_VALID] |
dmirror_hmm_flags[HMM_PFN_WRITE]),
Since pfns is not initialized pfn_flags_mask should be 0.
Good point.
.default_flags = dmirror_hmm_flags[HMM_PFN_VALID] |
(write ? dmirror_hmm_flags[HMM_PFN_WRITE] : 0),
.dev_private_owner = dmirror->mdevice,
- };
- int ret = 0;
+static int dmirror_snapshot(struct dmirror *dmirror,
struct hmm_dmirror_cmd *cmd)
+{
- struct mm_struct *mm = dmirror->mm;
- unsigned long start, end;
- unsigned long size = cmd->npages << PAGE_SHIFT;
- unsigned long addr;
- unsigned long next;
- uint64_t pfns[64];
- unsigned char perm[64];
- char __user *uptr;
- struct hmm_range range = {
.pfns = pfns,
.flags = dmirror_hmm_flags,
.values = dmirror_hmm_values,
.pfn_shift = DPT_SHIFT,
.pfn_flags_mask = ~0ULL,
Same here, especially since this is snapshot
Jason
Actually, snapshot ignores pfn_flags_mask and default_flags. In hmm_pte_need_fault(), HMM_FAULT_SNAPSHOT is checked and returns early before checking pfn_flags_mask and default_flags since no faults are being requested.