static ssize_t stp_policy_node_masters_store(struct config_item *item, const char *page, size_t count) { struct stp_policy_node *policy_node = to_stp_policy_node(item); unsigned int first, last; struct stm_device *stm; char *p = (char *)page; ssize_t ret = -ENODEV; if (sscanf(p, "%u %u", &first, &last) != 2) return -EINVAL; mutex_lock(&stp_policy_subsys.su_mutex); stm = policy_node->policy->stm; if (!stm) goto unlock; /* must be within [sw_start..sw_end], which is an inclusive range */ if (first > last || first < stm->data->sw_start || last > stm->data->sw_end) { ret = -ERANGE; goto unlock; } ret = count; policy_node->first_master = first; policy_node->last_master = last; unlock: mutex_unlock(&stp_policy_subsys.su_mutex); return ret; }
static ssize_t stp_policy_node_channels_store(struct config_item *item, const char *page, size_t count) { struct stp_policy_node *policy_node = to_stp_policy_node(item); unsigned int first, last; struct stm_device *stm; char *p = (char *)page; ssize_t ret = -ENODEV; if (sscanf(p, "%u %u", &first, &last) != 2) return -EINVAL; mutex_lock(&stp_policy_subsys.su_mutex); stm = policy_node->policy->stm; if (!stm) goto unlock; if (first > INT_MAX || last > INT_MAX || first > last || last >= stm->data->sw_nchannels) { ret = -ERANGE; goto unlock; } ret = count; policy_node->first_channel = first; policy_node->last_channel = last; unlock: mutex_unlock(&stp_policy_subsys.su_mutex); return ret; }
static ssize_t stp_policy_node_masters_show(struct config_item *item, char *page) { struct stp_policy_node *policy_node = to_stp_policy_node(item); ssize_t count; count = sprintf(page, "%u %u\n", policy_node->first_master, policy_node->last_master); return count; }
static void stp_policy_node_release(struct config_item *item) { kfree(to_stp_policy_node(item)); }
void *to_pdrv_policy_node(struct config_item *item) { struct stp_policy_node *node = to_stp_policy_node(item); return stp_policy_node_priv(node); }
static void stp_policy_node_release(struct config_item *item) { struct stp_policy_node *node = to_stp_policy_node(item); kfree(node); }