static ssize_t force_store(struct kobject *kobj, struct kobj_attribute *attr, const char *buf, size_t count) { struct klp_patch *patch; int ret; bool val; ret = kstrtobool(buf, &val); if (ret) return ret; if (!val) return count; mutex_lock(&klp_mutex); patch = container_of(kobj, struct klp_patch, kobj); if (patch != klp_transition_patch) { mutex_unlock(&klp_mutex); return -EINVAL; } klp_force_transition(); mutex_unlock(&klp_mutex); return count; }
static ssize_t qeth_dev_performance_stats_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { struct qeth_card *card = dev_get_drvdata(dev); struct qeth_qdio_out_q *queue; unsigned int i; bool reset; int rc; if (!card) return -EINVAL; rc = kstrtobool(buf, &reset); if (rc) return rc; if (reset) { memset(&card->stats, 0, sizeof(card->stats)); for (i = 0; i < card->qdio.no_out_queues; i++) { queue = card->qdio.out_qs[i]; if (!queue) break; memset(&queue->stats, 0, sizeof(queue->stats)); } } return count; }
static ssize_t store_chkcfg(struct device_driver *drv, const char *buf, size_t count) { int ret; ret = kstrtobool(buf, &altera_cvp_chkcfg); if (ret) return ret; return count; }
/* * Since "base" would be a nonsense argument, this open-codes the * _from_user helper instead of using the helper macro below. */ int kstrtobool_from_user(const char __user *s, size_t count, bool *res) { /* Longest string needed to differentiate, newline, terminator */ char buf[4]; count = min(count, sizeof(buf) - 1); if (copy_from_user(buf, s, count)) return -EFAULT; buf[count] = '\0'; return kstrtobool(buf, res); }
static int __init parse_disable_radix(char *p) { bool val; if (strlen(p) == 0) val = true; else if (kstrtobool(p, &val)) return -EINVAL; disable_radix = val; return 0; }
static ssize_t enabled_store(struct kobject *kobj, struct kobj_attribute *attr, const char *buf, size_t count) { struct klp_patch *patch; int ret; bool enabled; ret = kstrtobool(buf, &enabled); if (ret) return ret; patch = container_of(kobj, struct klp_patch, kobj); mutex_lock(&klp_mutex); if (!klp_is_patch_registered(patch)) { /* * Module with the patch could either disappear meanwhile or is * not properly initialized yet. */ ret = -EINVAL; goto err; } if (patch->enabled == enabled) { /* already in requested state */ ret = -EINVAL; goto err; } if (patch == klp_transition_patch) { klp_reverse_transition(); } else if (enabled) { ret = __klp_enable_patch(patch); if (ret) goto err; } else { ret = __klp_disable_patch(patch); if (ret) goto err; } mutex_unlock(&klp_mutex); return count; err: mutex_unlock(&klp_mutex); return ret; }
static int __init nobp_setup_early(char *str) { bool enabled; int rc; rc = kstrtobool(str, &enabled); if (rc) return rc; if (enabled && test_facility(82)) { /* * The user explicitely requested nobp=1, enable it and * disable the expoline support. */ __set_facility(82, S390_lowcore.alt_stfle_fac_list); if (IS_ENABLED(CONFIG_EXPOLINE)) nospec_disable = 1; } else { __clear_facility(82, S390_lowcore.alt_stfle_fac_list); } return 0; }
static int __init setup_psi(char *str) { return kstrtobool(str, &psi_enable) == 0; }
/* * Enable / Disable high resolution mode */ static int __init setup_hrtimer_hres(char *str) { return (kstrtobool(str, &hrtimer_hres_enabled) == 0); }
/* * Enable/disable cede_offline when available. */ static int __init setup_cede_offline(char *str) { return (kstrtobool(str, &cede_offline_enabled) == 0); }
static int __init rtasmsgs_setup(char *str) { return (kstrtobool(str, &full_rtas_msgs) == 0); }
static int __init early_parse_stp(char *p) { return kstrtobool(p, &stp_online); }