drivers/s390/cio/idset.c
Source file repositories/reference/linux-study-clean/drivers/s390/cio/idset.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/s390/cio/idset.c- Extension
.c- Size
- 2330 bytes
- Lines
- 103
- Domain
- Driver Families
- Bucket
- drivers/s390
- Inferred role
- Driver Families: implementation source
- Status
- source implementation candidate
Why This File Exists
Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Allocates kernel memory; connect allocation flags and lifetime to context constraints.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/vmalloc.hlinux/bitmap.hlinux/bitops.hidset.hcss.h
Detected Declarations
struct idsetfunction idset_bitmap_sizefunction idset_freefunction idset_fillfunction idset_addfunction idset_delfunction idset_containsfunction idset_sch_addfunction idset_sch_delfunction idset_sch_del_subseqfunction idset_sch_containsfunction idset_is_emptyfunction idset_add_set
Annotated Snippet
struct idset {
int num_ssid;
int num_id;
unsigned long bitmap[];
};
static inline unsigned long idset_bitmap_size(int num_ssid, int num_id)
{
return bitmap_size(size_mul(num_ssid, num_id));
}
static struct idset *idset_new(int num_ssid, int num_id)
{
struct idset *set;
set = vmalloc(sizeof(struct idset) +
idset_bitmap_size(num_ssid, num_id));
if (set) {
set->num_ssid = num_ssid;
set->num_id = num_id;
memset(set->bitmap, 0, idset_bitmap_size(num_ssid, num_id));
}
return set;
}
void idset_free(struct idset *set)
{
vfree(set);
}
void idset_fill(struct idset *set)
{
memset(set->bitmap, 0xff,
idset_bitmap_size(set->num_ssid, set->num_id));
}
static inline void idset_add(struct idset *set, int ssid, int id)
{
set_bit(ssid * set->num_id + id, set->bitmap);
}
static inline void idset_del(struct idset *set, int ssid, int id)
{
clear_bit(ssid * set->num_id + id, set->bitmap);
}
static inline int idset_contains(struct idset *set, int ssid, int id)
{
return test_bit(ssid * set->num_id + id, set->bitmap);
}
struct idset *idset_sch_new(void)
{
return idset_new(max_ssid + 1, __MAX_SUBCHANNEL + 1);
}
void idset_sch_add(struct idset *set, struct subchannel_id schid)
{
idset_add(set, schid.ssid, schid.sch_no);
}
void idset_sch_del(struct idset *set, struct subchannel_id schid)
{
idset_del(set, schid.ssid, schid.sch_no);
}
/* Clear ids starting from @schid up to end of subchannel set. */
void idset_sch_del_subseq(struct idset *set, struct subchannel_id schid)
{
int pos = schid.ssid * set->num_id + schid.sch_no;
bitmap_clear(set->bitmap, pos, set->num_id - schid.sch_no);
}
int idset_sch_contains(struct idset *set, struct subchannel_id schid)
{
return idset_contains(set, schid.ssid, schid.sch_no);
}
int idset_is_empty(struct idset *set)
{
return bitmap_empty(set->bitmap, set->num_ssid * set->num_id);
}
void idset_add_set(struct idset *to, struct idset *from)
{
int len = min(to->num_ssid * to->num_id, from->num_ssid * from->num_id);
bitmap_or(to->bitmap, to->bitmap, from->bitmap, len);
}
Annotation
- Immediate include surface: `linux/vmalloc.h`, `linux/bitmap.h`, `linux/bitops.h`, `idset.h`, `css.h`.
- Detected declarations: `struct idset`, `function idset_bitmap_size`, `function idset_free`, `function idset_fill`, `function idset_add`, `function idset_del`, `function idset_contains`, `function idset_sch_add`, `function idset_sch_del`, `function idset_sch_del_subseq`.
- Atlas domain: Driver Families / drivers/s390.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.