summaryrefslogtreecommitdiffstats
path: root/sys/pc98
diff options
context:
space:
mode:
authorkato <kato@FreeBSD.org>1998-07-21 12:06:04 +0000
committerkato <kato@FreeBSD.org>1998-07-21 12:06:04 +0000
commit96af576b1e75b646fc24e8866ef438d10b22d606 (patch)
treef8c953a0bbbe01d9e7f9b5a4875623f829ec6dd9 /sys/pc98
parentf97b174944e3cdda0d58b61b988aae55be43259c (diff)
downloadFreeBSD-src-96af576b1e75b646fc24e8866ef438d10b22d606.zip
FreeBSD-src-96af576b1e75b646fc24e8866ef438d10b22d606.tar.gz
Sync with sys/i386/isa/diskslice_machdep.c revision 1.29.
Diffstat (limited to 'sys/pc98')
-rw-r--r--sys/pc98/pc98/atcompat_diskslice.c37
-rw-r--r--sys/pc98/pc98/diskslice_machdep.c61
2 files changed, 24 insertions, 74 deletions
diff --git a/sys/pc98/pc98/atcompat_diskslice.c b/sys/pc98/pc98/atcompat_diskslice.c
index e7f2c39..15cffc0 100644
--- a/sys/pc98/pc98/atcompat_diskslice.c
+++ b/sys/pc98/pc98/atcompat_diskslice.c
@@ -35,7 +35,7 @@
*
* from: @(#)ufs_disksubr.c 7.16 (Berkeley) 5/4/91
* from: ufs_disksubr.c,v 1.8 1994/06/07 01:21:39 phk Exp $
- * $Id: atcompat_diskslice.c,v 1.8 1997/12/02 21:06:49 phk Exp $
+ * $Id: atcompat_diskslice.c,v 1.9 1998/07/11 17:01:24 kato Exp $
*/
/*
@@ -44,7 +44,6 @@
* for FreeBSD(98).
*/
-#include <stddef.h>
#include <sys/param.h>
#include <sys/buf.h>
#include <sys/conf.h>
@@ -187,21 +186,6 @@ atcompat_dsinit(dname, dev, strat, lp, sspp)
struct diskslice *sp;
struct diskslices *ssp;
- /*
- * Allocate a dummy slices "struct" and initialize it to contain
- * only an empty compatibility slice (pointing to itself) and a
- * whole disk slice (covering the disk as described by the label).
- * If there is an error, then the dummy struct becomes final.
- */
- ssp = malloc(offsetof(struct diskslices, dss_slices)
- + BASE_SLICE * sizeof *sp, M_DEVBUF, M_WAITOK);
- *sspp = ssp;
- ssp->dss_first_bsd_slice = COMPATIBILITY_SLICE;
- ssp->dss_nslices = BASE_SLICE;
- sp = &ssp->dss_slices[0];
- bzero(sp, BASE_SLICE * sizeof *sp);
- sp[WHOLE_DISK_SLICE].ds_size = lp->d_secperunit;
-
mbr_offset = DOSBBSECTOR;
reread_mbr:
/* Read master boot record. */
@@ -328,21 +312,18 @@ reread_mbr:
}
/*
- * Free the dummy slices "struct" and allocate a real new one.
- * Initialize special slices as above.
+ * We are passed a pointer to a suitably initialized minimal
+ * slices "struct" with no dangling pointers in it. Replace it
+ * by a maximal one. This usually oversizes the "struct", but
+ * enlarging it while searching for logical drives would be
+ * inconvenient.
*/
- free(ssp, M_DEVBUF);
- ssp = malloc(offsetof(struct diskslices, dss_slices)
-#define MAX_SLICES_SUPPORTED MAX_SLICES /* was (BASE_SLICE + NDOSPART) */
- + MAX_SLICES_SUPPORTED * sizeof *sp, M_DEVBUF, M_WAITOK);
+ free(*sspp, M_DEVBUF);
+ ssp = dsmakeslicestruct(MAX_SLICES, lp);
*sspp = ssp;
- ssp->dss_first_bsd_slice = COMPATIBILITY_SLICE;
- sp = &ssp->dss_slices[0];
- bzero(sp, MAX_SLICES_SUPPORTED * sizeof *sp);
- sp[WHOLE_DISK_SLICE].ds_size = lp->d_secperunit;
/* Initialize normal slices. */
- sp += BASE_SLICE;
+ sp = &ssp->dss_slices[BASE_SLICE];
for (dospart = 0, dp = dp0; dospart < NDOSPART; dospart++, dp++, sp++) {
sp->ds_offset = mbr_offset + dp->dp_start;
sp->ds_size = dp->dp_size;
diff --git a/sys/pc98/pc98/diskslice_machdep.c b/sys/pc98/pc98/diskslice_machdep.c
index 945b04d..31510b3 100644
--- a/sys/pc98/pc98/diskslice_machdep.c
+++ b/sys/pc98/pc98/diskslice_machdep.c
@@ -35,7 +35,7 @@
*
* from: @(#)ufs_disksubr.c 7.16 (Berkeley) 5/4/91
* from: ufs_disksubr.c,v 1.8 1994/06/07 01:21:39 phk Exp $
- * $Id: diskslice_machdep.c,v 1.12 1998/02/21 16:17:52 kato Exp $
+ * $Id: diskslice_machdep.c,v 1.13 1998/07/11 17:01:25 kato Exp $
*/
/*
@@ -44,7 +44,6 @@
#include "opt_pc98.h"
-#include <stddef.h>
#include <sys/param.h>
#include <sys/buf.h>
#include <sys/conf.h>
@@ -228,21 +227,6 @@ dsinit(dname, dev, strat, lp, sspp)
u_long pc98_size;
#endif
- /*
- * Allocate a dummy slices "struct" and initialize it to contain
- * only an empty compatibility slice (pointing to itself) and a
- * whole disk slice (covering the disk as described by the label).
- * If there is an error, then the dummy struct becomes final.
- */
- ssp = malloc(offsetof(struct diskslices, dss_slices)
- + BASE_SLICE * sizeof *sp, M_DEVBUF, M_WAITOK);
- *sspp = ssp;
- ssp->dss_first_bsd_slice = COMPATIBILITY_SLICE;
- ssp->dss_nslices = BASE_SLICE;
- sp = &ssp->dss_slices[0];
- bzero(sp, BASE_SLICE * sizeof *sp);
- sp[WHOLE_DISK_SLICE].ds_size = lp->d_secperunit;
-
mbr_offset = DOSBBSECTOR;
#ifdef PC98
/* Read master boot record. */
@@ -291,18 +275,12 @@ reread_mbr:
(*(cp + 514) == 0x56) && (*(cp + 515) == 0x82)) {
sname = dsname(dname, dkunit(dev), BASE_SLICE,
RAW_PART, partname);
- free(ssp, M_DEVBUF);
- ssp = malloc(offsetof(struct diskslices, dss_slices)
-#define MAX_SLICES_SUPPORTED MAX_SLICES /* was (BASE_SLICE + NDOSPART) */
- + MAX_SLICES_SUPPORTED * sizeof *sp, M_DEVBUF, M_WAITOK);
+ free(*sspp, M_DEVBUF);
+ ssp = dsmakeslicestruct(MAX_SLICES, lp);
*sspp = ssp;
- ssp->dss_first_bsd_slice = COMPATIBILITY_SLICE;
- sp = &ssp->dss_slices[0];
- bzero(sp, MAX_SLICES_SUPPORTED * sizeof *sp);
- sp[WHOLE_DISK_SLICE].ds_size = lp->d_secperunit;
/* Initialize normal slices. */
- sp += BASE_SLICE;
+ sp = &ssp->dss_slices[BASE_SLICE];
sp->ds_offset = 0;
sp->ds_size = lp->d_secperunit;
sp->ds_type = DOSPTYP_386BSD;
@@ -321,18 +299,12 @@ reread_mbr:
(*(cp + 513) == 0xff) && (*(cp + 514) == 0xff)) {
sname = dsname(dname, dkunit(dev), BASE_SLICE,
RAW_PART, partname);
- free(ssp, M_DEVBUF);
- ssp = malloc(offsetof(struct diskslices, dss_slices)
-#define MAX_SLICES_SUPPORTED MAX_SLICES /* was (BASE_SLICE + NDOSPART) */
- + MAX_SLICES_SUPPORTED * sizeof *sp, M_DEVBUF, M_WAITOK);
+ free(*sspp, M_DEVBUF);
+ ssp = dsmakeslicestruct(MAX_SLICES, lp);
*sspp = ssp;
- ssp->dss_first_bsd_slice = COMPATIBILITY_SLICE;
- sp = &ssp->dss_slices[0];
- bzero(sp, MAX_SLICES_SUPPORTED * sizeof *sp);
- sp[WHOLE_DISK_SLICE].ds_size = lp->d_secperunit;
/* Initialize normal slices. */
- sp += BASE_SLICE;
+ sp = &ssp->dss_slices[BASE_SLICE];
sp->ds_offset = 0;
sp->ds_size = lp->d_secperunit;
sp->ds_type = 0xa0; /* XXX */
@@ -477,21 +449,18 @@ reread_mbr:
}
/*
- * Free the dummy slices "struct" and allocate a real new one.
- * Initialize special slices as above.
+ * We are passed a pointer to a suitably initialized minimal
+ * slices "struct" with no dangling pointers in it. Replace it
+ * by a maximal one. This usually oversizes the "struct", but
+ * enlarging it while searching for logical drives would be
+ * inconvenient.
*/
- free(ssp, M_DEVBUF);
- ssp = malloc(offsetof(struct diskslices, dss_slices)
-#define MAX_SLICES_SUPPORTED MAX_SLICES /* was (BASE_SLICE + NDOSPART) */
- + MAX_SLICES_SUPPORTED * sizeof *sp, M_DEVBUF, M_WAITOK);
+ free(*sspp, M_DEVBUF);
+ ssp = dsmakeslicestruct(MAX_SLICES, lp);
*sspp = ssp;
- ssp->dss_first_bsd_slice = COMPATIBILITY_SLICE;
- sp = &ssp->dss_slices[0];
- bzero(sp, MAX_SLICES_SUPPORTED * sizeof *sp);
- sp[WHOLE_DISK_SLICE].ds_size = lp->d_secperunit;
/* Initialize normal slices. */
- sp += BASE_SLICE;
+ sp = &ssp->dss_slices[BASE_SLICE];
for (dospart = 0, dp = dp0; dospart < NDOSPART; dospart++, dp++, sp++) {
#ifdef PC98
pc98_start = DPBLKNO(dp->dp_scyl,dp->dp_shd,dp->dp_ssect);
OpenPOWER on IntegriCloud