config DAMON_DBGFS
        bool "DAMON debugfs interface"
-       depends on DAMON_VADDR && DEBUG_FS
+       depends on DAMON_VADDR && DAMON_PADDR && DEBUG_FS
        help
          This builds the debugfs interface for DAMON.  The user space admins
          can use the interface for arbitrary data access monitoring.
 
                const char __user *buf, size_t count, loff_t *ppos)
 {
        struct damon_ctx *ctx = file->private_data;
+       bool id_is_pid = true;
        char *kbuf, *nrs;
        unsigned long *targets;
        ssize_t nr_targets;
                return PTR_ERR(kbuf);
 
        nrs = kbuf;
+       if (!strncmp(kbuf, "paddr\n", count)) {
+               id_is_pid = false;
+               /* target id is meaningless here, but we set it just for fun */
+               scnprintf(kbuf, count, "42    ");
+       }
 
        targets = str_to_target_ids(nrs, ret, &nr_targets);
        if (!targets) {
                goto out;
        }
 
-       if (targetid_is_pid(ctx)) {
+       if (id_is_pid) {
                for (i = 0; i < nr_targets; i++) {
                        targets[i] = (unsigned long)find_get_pid(
                                        (int)targets[i]);
 
        mutex_lock(&ctx->kdamond_lock);
        if (ctx->kdamond) {
-               if (targetid_is_pid(ctx))
+               if (id_is_pid)
                        dbgfs_put_pids(targets, nr_targets);
                ret = -EBUSY;
                goto unlock_out;
        }
 
+       /* remove targets with previously-set primitive */
+       damon_set_targets(ctx, NULL, 0);
+
+       /* Configure the context for the address space type */
+       if (id_is_pid)
+               damon_va_set_primitives(ctx);
+       else
+               damon_pa_set_primitives(ctx);
+
        err = damon_set_targets(ctx, targets, nr_targets);
        if (err) {
-               if (targetid_is_pid(ctx))
+               if (id_is_pid)
                        dbgfs_put_pids(targets, nr_targets);
                ret = err;
        }