/* * name_to_value - translate a string into an address * * The string may be one of two forms - 'symname' or 'modname:symname'. * (We also accept 'unix:symname' as a synonymn for 'symname'.) * The latter form causes a kobj_lookup() to occur only in the given module, * the former causes a kobj_getsymvalue() on the entire kernel symbol table. * * mod_lock locking is not needed for the &modules list because * modctl structures are never unlinked from the &modules list. */ int name_to_value(char *name, uintptr_t *value) { register char *symname = name; register char *modname = ""; char *p; int retval = 0; uintptr_t symvalue = 0; char c = (char)0; /* * we take names of the form: "modname:symbol", "unix:symbol", "symbol" */ if ((p = strchr(name, ':')) != NULL && p[1] != (char)0) { symname = p + 1; modname = name; c = *p; *p = (char)0; } if (*modname == (char)0) { symvalue = kobj_getsymvalue(symname, 0); } else { struct modctl *mp = &modules; do { if (strcmp(modname, mp->mod_modname) == 0) { symvalue = kobj_lookup(mp->mod_mp, symname); break; } } while ((mp = mp->mod_next) != &modules); } if (symvalue == 0) retval = -1; if (c != (char)0) /* Restore incoming cstr */ *p = c; *value = symvalue; return (retval); }
/** * get_gendisk - get partitioning information for a given device * @dev: device to get partitioning information for * * This function gets the structure containing partitioning * information for the given device @dev. */ struct gendisk *get_gendisk(dev_t dev, int *part) { struct kobject *kobj = kobj_lookup(bdev_map, dev, part); return kobj ? to_disk(kobj) : NULL; }