From owner-svn-src-head@freebsd.org Wed Aug 30 15:07:12 2017 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 39F0FE03E80; Wed, 30 Aug 2017 15:07:12 +0000 (UTC) (envelope-from sobomax@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 10378704AB; Wed, 30 Aug 2017 15:07:11 +0000 (UTC) (envelope-from sobomax@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id v7UF7BYd081435; Wed, 30 Aug 2017 15:07:11 GMT (envelope-from sobomax@FreeBSD.org) Received: (from sobomax@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id v7UF7Bib081433; Wed, 30 Aug 2017 15:07:11 GMT (envelope-from sobomax@FreeBSD.org) Message-Id: <201708301507.v7UF7Bib081433@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: sobomax set sender to sobomax@FreeBSD.org using -f From: Maxim Sobolev Date: Wed, 30 Aug 2017 15:07:11 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r323019 - head/sys/compat/freebsd32 X-SVN-Group: head X-SVN-Commit-Author: sobomax X-SVN-Commit-Paths: head/sys/compat/freebsd32 X-SVN-Commit-Revision: 323019 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 30 Aug 2017 15:07:12 -0000 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 #include -/* 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)