refactor(v3): the block subsystem is one chain again

blk_chain_default, blk_chain_new and blk_chain_select (0e761cb1) were for
a node's own drive, which was withdrawn on 2026-10-07 (docs/v4.0.0/MESH.md
8.5).  They are taken out.  What remains of that change is that
blk_subsys_init takes no VM.

Accepted on the v3 configuration: amd64, aarch64 and riscv64 reach the
zuse prompt, no UNKNOWN WORD, PARITY:M7.1a hash 0x08873e0f44b7cb2a on all
three, as before.  logs/20261007-082647, -082752, -082938.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
rajames
2026-10-07 08:30:38 -04:00
co-authored by Claude Opus 5.5
parent d5b7235464
commit 7c06bdfdb6
5 changed files with 27447 additions and 30 deletions
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
-11
View File
@@ -329,17 +329,6 @@ enum { BLK_FMT_FORMATTED = 0, BLK_FMT_PROVISIONAL = 1 };
/* ===== Public API ===== */
int blk_subsys_init(uint8_t *ram_base, size_t ram_size);
/* A chain is fast RAM and the devices chained after it. blk_chain_default
* is the one there has always been. blk_chain_new makes another, not yet
* initialized, or returns 0 if there is no memory. blk_chain_select makes
* every blk_* call from now on act on `c`, blk_subsys_init included, and
* returns the chain that was selected before; a null `c` selects nothing
* new. docs/v4.0.0/MESH.md 8.4. */
typedef struct blk_chain blk_chain_t;
blk_chain_t *blk_chain_default(void);
blk_chain_t *blk_chain_new(void);
blk_chain_t *blk_chain_select(blk_chain_t *c);
int blk_subsys_attach_device(struct blkio_dev *dev);
/* Milestone 2h hot-detach. Refuses (BLK_EINVAL) unless dev's slot is the
+2 -19
View File
@@ -167,11 +167,7 @@ struct blk_dev_slot {
};
/* ===== global state ===== */
/* A chain: fast RAM and the devices chained after it. There is the one
* v3 has always had (blk_chain_default) and there can be others
* (blk_chain_new); every blk_* call acts on the one selected
* (blk_chain_select). docs/v4.0.0/MESH.md 8.4. */
struct blk_chain {
static struct {
uint8_t *ram_base;
size_t ram_size;
uint8_t dirty_ram[BLK_RAM_BLOCKS];
@@ -203,20 +199,7 @@ struct blk_chain {
uint32_t reloc_count;
int initialized;
};
static struct blk_chain g_default;
static struct blk_chain *g_current = &g_default;
#define g (*g_current)
blk_chain_t *blk_chain_default(void) { return &g_default; }
blk_chain_t *blk_chain_new(void) { return (blk_chain_t *) calloc(1, sizeof(struct blk_chain)); }
blk_chain_t *blk_chain_select(blk_chain_t *c) {
blk_chain_t *was = g_current;
if (c) g_current = c;
return was;
}
} g = {0};
/* Redirect lbn through the relocation table if it's been moved elsewhere.
* The single choke point every public LBN-consuming entry point below