int register_perf_hw_breakpoint(struct perf_event *bp) { int ret; ret = reserve_bp_slot(bp); if (ret) return ret; /* * Ptrace breakpoints can be temporary perf events only * meant to reserve a slot. In this case, it is created disabled and * we don't want to check the params right now (as we put a null addr) * But perf tools create events as disabled and we want to check * the params for them. * This is a quick hack that will be removed soon, once we remove * the tmp breakpoints from ptrace */ if (!bp->attr.disabled || !bp->overflow_handler) ret = arch_validate_hwbkpt_settings(bp, bp->ctx->task); /* if arch_validate_hwbkpt_settings() fails then release bp slot */ if (ret) release_bp_slot(bp); return ret; }
int register_perf_hw_breakpoint(struct perf_event *bp) { int ret; ret = reserve_bp_slot(bp); if (ret) return ret; ret = validate_hw_breakpoint(bp); /* if arch_validate_hwbkpt_settings() fails then release bp slot */ if (ret) release_bp_slot(bp); return ret; }