Fri, Jun 09, 2023 at 02:18:46PM CEST, arkadiusz.kubalewski@xxxxxxxxx wrote: >From: Vadim Fedorenko <vadim.fedorenko@xxxxxxxxx> [...] >+int dpll_device_register(struct dpll_device *dpll, enum dpll_type type, >+ const struct dpll_device_ops *ops, void *priv) >+{ >+ struct dpll_device_registration *reg; >+ bool first_registration = false; >+ >+ if (WARN_ON(!ops)) >+ return -EINVAL; >+ if (WARN_ON(type < DPLL_TYPE_PPS || type > DPLL_TYPE_MAX)) >+ return -EINVAL; >+ >+ mutex_lock(&dpll_lock); >+ reg = dpll_device_registration_find(dpll, ops, priv); >+ if (reg) { >+ mutex_unlock(&dpll_lock); >+ return -EEXIST; >+ } >+ >+ reg = kzalloc(sizeof(*reg), GFP_KERNEL); >+ if (!reg) { >+ mutex_unlock(&dpll_lock); >+ return -EEXIST; >+ } >+ reg->ops = ops; >+ reg->priv = priv; >+ dpll->type = type; >+ first_registration = list_empty(&dpll->registration_list); >+ list_add_tail(®->list, &dpll->registration_list); >+ if (!first_registration) { >+ mutex_unlock(&dpll_lock); >+ return 0; >+ } >+ >+ xa_set_mark(&dpll_device_xa, dpll->id, DPLL_REGISTERED); >+ mutex_unlock(&dpll_lock); >+ dpll_device_create_ntf(dpll); This function is introduced in the next patch. Breaks bissection. Make sure you can compile the code after every patch applied. >+ >+ return 0; >+} [...]