stand/kboot: hostdisk isn't a DEVT_DISK, use a different value.

We assume in all the code that a DEVT_DISK uses common/disk.c and/or
common/part.c and we can access a struct disk_devdesc. hostdisk.c
opens raw devices directly, so has no such structures. Define a
kboot-specific DEVT_HOSTDISK and use that instead.

In addition, disk_fmtdev assumes it is working with a struct
disk_devdesc, so write hostdisk_fmtdev as well.

Sponsored by:		Netflix
This commit is contained in:
Warner Losh 2022-10-22 09:09:23 -06:00
parent bb3230e40b
commit 2cb90a7b2e
2 changed files with 12 additions and 4 deletions

View File

@ -28,9 +28,8 @@ __FBSDID("$FreeBSD$");
#include <sys/types.h> #include <sys/types.h>
#include <stdarg.h> #include <stdarg.h>
#include "bootstrap.h"
#include "host_syscall.h" #include "host_syscall.h"
#include "disk.h" #include "kboot.h"
static int hostdisk_init(void); static int hostdisk_init(void);
static int hostdisk_strategy(void *devdata, int flag, daddr_t dblk, static int hostdisk_strategy(void *devdata, int flag, daddr_t dblk,
@ -39,10 +38,11 @@ static int hostdisk_open(struct open_file *f, ...);
static int hostdisk_close(struct open_file *f); static int hostdisk_close(struct open_file *f);
static int hostdisk_ioctl(struct open_file *f, u_long cmd, void *data); static int hostdisk_ioctl(struct open_file *f, u_long cmd, void *data);
static int hostdisk_print(int verbose); static int hostdisk_print(int verbose);
static char *hostdisk_fmtdev(struct devdesc *vdev);
struct devsw hostdisk = { struct devsw hostdisk = {
.dv_name = "/dev", .dv_name = "/dev",
.dv_type = DEVT_DISK, .dv_type = DEVT_HOSTDISK,
.dv_init = hostdisk_init, .dv_init = hostdisk_init,
.dv_strategy = hostdisk_strategy, .dv_strategy = hostdisk_strategy,
.dv_open = hostdisk_open, .dv_open = hostdisk_open,
@ -50,7 +50,7 @@ struct devsw hostdisk = {
.dv_ioctl = hostdisk_ioctl, .dv_ioctl = hostdisk_ioctl,
.dv_print = hostdisk_print, .dv_print = hostdisk_print,
.dv_cleanup = nullsys, .dv_cleanup = nullsys,
.dv_fmtdev = disk_fmtdev, .dv_fmtdev = hostdisk_fmtdev,
}; };
static int static int
@ -136,3 +136,9 @@ hostdisk_print(int verbose)
snprintf(line, sizeof(line), " /dev%d: Host disk\n", 0); snprintf(line, sizeof(line), " /dev%d: Host disk\n", 0);
return (pager_output(line)); return (pager_output(line));
} }
static char *
hostdisk_fmtdev(struct devdesc *vdev)
{
return (vdev->d_opendata);
}

View File

@ -7,6 +7,8 @@
#ifndef KBOOT_H #ifndef KBOOT_H
#define KBOOT_H #define KBOOT_H
#define DEVT_HOSTDISK 1234
void do_init(void); void do_init(void);
uint64_t kboot_get_phys_load_segment(void); uint64_t kboot_get_phys_load_segment(void);
uint8_t kboot_get_kernel_machine_bits(void); uint8_t kboot_get_kernel_machine_bits(void);