svn commit: r323019 - head/sys/compat/freebsd32
Maxim Sobolev
sobomax at FreeBSD.org
Wed Aug 30 15:07:12 UTC 2017
Author: sobomax
Date: Wed Aug 30 15:07:10 2017
New Revision: 323019
URL: https://svnweb.freebsd.org/changeset/base/323019
Log:
Add proper support for the md_label into md(4) ioctl compat layer.
While I am here, declare struct md_ioctl32 as packed which allows
us to stop playing tricks with sizeof(md_ioctl32)+y as well as
simplifies md_pad handling. Both were necessary because of different
alignment preferences on amd64 vs i386.
MFC after: 4 weeks
Modified:
head/sys/compat/freebsd32/freebsd32_ioctl.c
head/sys/compat/freebsd32/freebsd32_ioctl.h
Modified: head/sys/compat/freebsd32/freebsd32_ioctl.c
==============================================================================
--- head/sys/compat/freebsd32/freebsd32_ioctl.c Wed Aug 30 10:17:00 2017 (r323018)
+++ head/sys/compat/freebsd32/freebsd32_ioctl.c Wed Aug 30 15:07:10 2017 (r323019)
@@ -55,8 +55,7 @@ __FBSDID("$FreeBSD$");
#include <compat/freebsd32/freebsd32_ioctl.h>
#include <compat/freebsd32/freebsd32_proto.h>
-/* Cannot get exact size in 64-bit due to alignment issue of entire struct. */
-CTASSERT((sizeof(struct md_ioctl32)+4) == 436);
+CTASSERT((sizeof(struct md_ioctl32)) == 436);
CTASSERT(sizeof(struct ioc_read_toc_entry32) == 8);
CTASSERT(sizeof(struct mem_range_op32) == 12);
CTASSERT(sizeof(struct pci_conf_io32) == 36);
@@ -87,6 +86,7 @@ freebsd32_ioctl_md(struct thread *td, struct freebsd32
CP(md32, mdv, md_base);
CP(md32, mdv, md_fwheads);
CP(md32, mdv, md_fwsectors);
+ PTRIN_CP(md32, mdv, md_label);
} else if (uap->com & IOC_OUT) {
/*
* Zero the buffer so the user always
@@ -123,6 +123,7 @@ freebsd32_ioctl_md(struct thread *td, struct freebsd32
CP(mdv, md32, md_base);
CP(mdv, md32, md_fwheads);
CP(mdv, md32, md_fwsectors);
+ PTROUT_CP(mdv, md32, md_label);
if (com == MDIOCLIST) {
/*
* Use MDNPAD, and not MDNPAD32. Padding is
Modified: head/sys/compat/freebsd32/freebsd32_ioctl.h
==============================================================================
--- head/sys/compat/freebsd32/freebsd32_ioctl.h Wed Aug 30 10:17:00 2017 (r323018)
+++ head/sys/compat/freebsd32/freebsd32_ioctl.h Wed Aug 30 15:07:10 2017 (r323019)
@@ -43,7 +43,7 @@ struct ioc_read_toc_entry32 {
uint32_t data; /* struct cd_toc_entry* */
};
-#define MDNPAD32 MDNPAD - 1
+#define MDNPAD32 MDNPAD
struct md_ioctl32 {
unsigned md_version; /* Structure layout version */
unsigned md_unit; /* unit number */
@@ -55,8 +55,9 @@ struct md_ioctl32 {
u_int64_t md_base; /* base address */
int md_fwheads; /* firmware heads */
int md_fwsectors; /* firmware sectors */
+ caddr_t32 md_label; /* label of the device */
int md_pad[MDNPAD32]; /* padding for future ideas */
-};
+} __attribute__((__packed__));
struct fiodgname_arg32 {
int len;
@@ -109,10 +110,10 @@ struct pci_conf_io32 {
};
#define CDIOREADTOCENTRYS_32 _IOWR('c', 5, struct ioc_read_toc_entry32)
-#define MDIOCATTACH_32 _IOC(IOC_INOUT, 'm', 0, sizeof(struct md_ioctl32) + 4)
-#define MDIOCDETACH_32 _IOC(IOC_INOUT, 'm', 1, sizeof(struct md_ioctl32) + 4)
-#define MDIOCQUERY_32 _IOC(IOC_INOUT, 'm', 2, sizeof(struct md_ioctl32) + 4)
-#define MDIOCLIST_32 _IOC(IOC_INOUT, 'm', 3, sizeof(struct md_ioctl32) + 4)
+#define MDIOCATTACH_32 _IOC(IOC_INOUT, 'm', 0, sizeof(struct md_ioctl32))
+#define MDIOCDETACH_32 _IOC(IOC_INOUT, 'm', 1, sizeof(struct md_ioctl32))
+#define MDIOCQUERY_32 _IOC(IOC_INOUT, 'm', 2, sizeof(struct md_ioctl32))
+#define MDIOCLIST_32 _IOC(IOC_INOUT, 'm', 3, sizeof(struct md_ioctl32))
#define FIODGNAME_32 _IOW('f', 120, struct fiodgname_arg32)
#define MEMRANGE_GET32 _IOWR('m', 50, struct mem_range_op32)
#define MEMRANGE_SET32 _IOW('m', 51, struct mem_range_op32)
More information about the svn-src-all
mailing list