Use a big-lock for kernel sychronization instead of fine-grained locking
All checks were successful
Build ISO image / build-and-deploy (push) Successful in 2m21s
Build documentation / build-and-deploy (push) Successful in 54s

This commit is contained in:
2026-04-27 18:06:02 +02:00
parent 68cdd8d6d2
commit e5ebd7f3ba
56 changed files with 212 additions and 1206 deletions

View File

@@ -14,8 +14,6 @@
static int device_probe_partitions_dos(struct proc* proc, struct reschedule_ctx* rctx,
struct device* device) {
uint64_t fd, fsd;
struct dos_mbr mbr;
memset(&mbr, 0, sizeof(mbr));
size_t sector = 0;
@@ -31,19 +29,15 @@ static int device_probe_partitions_dos(struct proc* proc, struct reschedule_ctx*
[XDRV_PARTITION_RESCAN] = &partdrv_partition_rescan,
};
spin_lock(&device->lock, &fd);
device_op(device, XDRV_GET_SECTOR_SIZE, proc, rctx, &sector_size);
device_op(device, XDRV_GET_SECTOR_SIZE, proc, rctx, &fd, &sector_size);
int ret = device_op(device, XDRV_READ, proc, rctx, &fd, &sector, &sector_count, &mbr);
int ret = device_op(device, XDRV_READ, proc, rctx, &sector, &sector_count, &mbr);
if (ret < 0) {
spin_unlock(&device->lock, fd);
return ret;
}
if (!(mbr.valid_sign[0] == 0x55 && mbr.valid_sign[1] == 0xAA)) {
spin_unlock(&device->lock, fd);
return -ST_PARTITION_ERROR;
}
@@ -63,13 +57,9 @@ static int device_probe_partitions_dos(struct proc* proc, struct reschedule_ctx*
struct device* part_dev = device_create(DEVICE_TYPE_DRIVE, key, ops, lengthof(ops),
&partdrv_init, &partdrv_fini, &init, proc, rctx);
spin_lock(&part_dev->lock, &fsd);
list_append(device->subdevices, &part_dev->subdevices_link);
spin_unlock(&part_dev->lock, fsd);
}
spin_unlock(&device->lock, fd);
return ST_OK;
}