Date: Wed, 30 Aug 2017 15:07:11 +0000 (UTC) From: Maxim Sobolev <sobomax@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r323019 - head/sys/compat/freebsd32 Message-ID: <201708301507.v7UF7Bib081433@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
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)
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201708301507.v7UF7Bib081433>