Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 30 Nov 2020 11:35:04 +0100
From:      Michael Tuexen <tuexen@freebsd.org>
To:        Michal Meloun <mmel@FreeBSD.org>
Cc:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   Re: svn commit: r368167 - head/sys/dev/nvme
Message-ID:  <8A805005-1EB5-477E-B8EA-003F91A9B337@freebsd.org>
In-Reply-To: <202011300701.0AU71CWr006435@repo.freebsd.org>
References:  <202011300701.0AU71CWr006435@repo.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
> On 30. Nov 2020, at 08:01, Michal Meloun <mmel@FreeBSD.org> wrote:
>=20
> Author: mmel
> Date: Mon Nov 30 07:01:12 2020
> New Revision: 368167
> URL: https://svnweb.freebsd.org/changeset/base/368167
>=20
> Log:
>  NVME: Don't try to swap data on little endian machines.
>  These swapping functions violate BUSDMA contract - we cannot write
>  to armed (by bus_dmamap_sync(PRE_..)) buffers. Remove them at least
>  from little endian machines until a better solution will be =
developed.
This breaks building libsysdecode on a little endian (amd64) system:

tuexen@cirrus:~/head/lib/libsysdecode % sudo make
Password:
env CPP=3D"cpp" MK_PF=3D"yes"  /bin/sh =
/usr/home/tuexen/head/lib/libsysdecode/mkioctls /usr/include > =
ioctl.c.tmp
if [ ! -e ioctl.c ] || ! cmp -s ioctl.c ioctl.c.tmp; then  mv -f =
ioctl.c.tmp ioctl.c;  fi
cc  -O2 -pipe -fno-common   =
-I/usr/obj/usr/home/tuexen/head/amd64.amd64/lib/libsysdecode =
-I/usr/home/tuexen/head/sys -I/usr/home/tuexen/head/libexec/rtld-elf =
-DPF -g -MD  -MF.depend.ioctl.o -MTioctl.o -std=3Dgnu99 =
-Wno-format-zero-length -fstack-protector-strong -Wsystem-headers =
-Werror -Wall -Wno-format-y2k -W -Wno-unused-parameter =
-Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wreturn-type =
-Wcast-qual -Wwrite-strings -Wswitch -Wshadow -Wunused-parameter =
-Wcast-align -Wchar-subscripts -Winline -Wnested-externs =
-Wredundant-decls -Wold-style-definition -Wno-pointer-sign =
-Wmissing-variable-declarations -Wthread-safety -Wno-empty-body =
-Wno-string-plus-int -Wno-unused-const-variable  -Qunused-arguments    =
-c ioctl.c -o ioctl.o
In file included from ioctl.c:33:
In file included from =
/usr/home/tuexen/head/sys/./cam/scsi/scsi_pass.h:35:
In file included from /usr/home/tuexen/head/sys/cam/cam_ccb.h:46:
In file included from /usr/home/tuexen/head/sys/cam/nvme/nvme_all.h:33:
/usr/home/tuexen/head/sys/dev/nvme/nvme.h:1733:56: error: unused =
parameter 's' [-Werror,-Wunused-parameter]
void    nvme_completion_swapbytes(struct nvme_completion *s)
                                                          ^
/usr/home/tuexen/head/sys/dev/nvme/nvme.h:1747:58: error: unused =
parameter 's' [-Werror,-Wunused-parameter]
void    nvme_power_state_swapbytes(struct nvme_power_state *s)
                                                            ^
/usr/home/tuexen/head/sys/dev/nvme/nvme.h:1760:66: error: unused =
parameter 's' [-Werror,-Wunused-parameter]
void    nvme_controller_data_swapbytes(struct nvme_controller_data *s)
                                                                    ^
/usr/home/tuexen/head/sys/dev/nvme/nvme.h:1812:64: error: unused =
parameter 's' [-Werror,-Wunused-parameter]
void    nvme_namespace_data_swapbytes(struct nvme_namespace_data *s)
                                                                  ^
/usr/home/tuexen/head/sys/dev/nvme/nvme.h:1841:82: error: unused =
parameter 's' [-Werror,-Wunused-parameter]
void    nvme_error_information_entry_swapbytes(struct =
nvme_error_information_entry *s)
                                                                         =
           ^
/usr/home/tuexen/head/sys/dev/nvme/nvme.h:1858:26: error: unused =
parameter 'p' [-Werror,-Wunused-parameter]
void    nvme_le128toh(void *p)
                            ^
/usr/home/tuexen/head/sys/dev/nvme/nvme.h:1874:82: error: unused =
parameter 's' [-Werror,-Wunused-parameter]
void    nvme_health_information_page_swapbytes(struct =
nvme_health_information_page *s)
                                                                         =
           ^
/usr/home/tuexen/head/sys/dev/nvme/nvme.h:1902:62: error: unused =
parameter 's' [-Werror,-Wunused-parameter]
void    nvme_firmware_page_swapbytes(struct nvme_firmware_page *s)
                                                                ^
/usr/home/tuexen/head/sys/dev/nvme/nvme.h:1913:50: error: unused =
parameter 's' [-Werror,-Wunused-parameter]
void    nvme_ns_list_swapbytes(struct nvme_ns_list *s)
                                                    ^
/usr/home/tuexen/head/sys/dev/nvme/nvme.h:1924:76: error: unused =
parameter 's' [-Werror,-Wunused-parameter]
void    nvme_command_effects_page_swapbytes(struct =
nvme_command_effects_page *s)
                                                                         =
     ^
/usr/home/tuexen/head/sys/dev/nvme/nvme.h:1937:78: error: unused =
parameter 's' [-Werror,-Wunused-parameter]
void    nvme_res_notification_page_swapbytes(struct =
nvme_res_notification_page *s)
                                                                         =
       ^
/usr/home/tuexen/head/sys/dev/nvme/nvme.h:1946:76: error: unused =
parameter 's' [-Werror,-Wunused-parameter]
void    nvme_sanitize_status_page_swapbytes(struct =
nvme_sanitize_status_page *s)
                                                                         =
     ^
/usr/home/tuexen/head/sys/dev/nvme/nvme.h:1962:66: error: unused =
parameter 's' [-Werror,-Wunused-parameter]
void    intel_log_temp_stats_swapbytes(struct intel_log_temp_stats *s)
                                                                    ^
/usr/home/tuexen/head/sys/dev/nvme/nvme.h:1979:58: error: unused =
parameter 's' [-Werror,-Wunused-parameter]
void    nvme_resv_status_swapbytes(struct nvme_resv_status *s, size_t =
size)
                                                            ^
/usr/home/tuexen/head/sys/dev/nvme/nvme.h:1979:68: error: unused =
parameter 'size' [-Werror,-Wunused-parameter]
void    nvme_resv_status_swapbytes(struct nvme_resv_status *s, size_t =
size)
                                                                      ^
/usr/home/tuexen/head/sys/dev/nvme/nvme.h:1996:66: error: unused =
parameter 's' [-Werror,-Wunused-parameter]
void    nvme_resv_status_ext_swapbytes(struct nvme_resv_status_ext *s, =
size_t size)
                                                                    ^
/usr/home/tuexen/head/sys/dev/nvme/nvme.h:1996:76: error: unused =
parameter 'size' [-Werror,-Wunused-parameter]
void    nvme_resv_status_ext_swapbytes(struct nvme_resv_status_ext *s, =
size_t size)
                                                                         =
     ^
17 errors generated.
*** Error code 1

Stop.
make: stopped in /usr/home/tuexen/head/lib/libsysdecode

Best regards
Michael
>=20
>  Reviewed by:	imp
>  MFC after:	3 weeks
>=20
> Modified:
>  head/sys/dev/nvme/nvme.h
>=20
> Modified: head/sys/dev/nvme/nvme.h
> =
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
> --- head/sys/dev/nvme/nvme.h	Sun Nov 29 23:37:18 2020	=
(r368166)
> +++ head/sys/dev/nvme/nvme.h	Mon Nov 30 07:01:12 2020	=
(r368167)
> @@ -1732,6 +1732,7 @@ extern int nvme_use_nvd;
> static inline
> void	nvme_completion_swapbytes(struct nvme_completion *s)
> {
> +#if _BYTE_ORDER !=3D _LITTLE_ENDIAN
>=20
> 	s->cdw0 =3D le32toh(s->cdw0);
> 	/* omit rsvd1 */
> @@ -1739,22 +1740,26 @@ void	nvme_completion_swapbytes(struct =
nvme_completion=20
> 	s->sqid =3D le16toh(s->sqid);
> 	/* omit cid */
> 	s->status =3D le16toh(s->status);
> +#endif
> }
>=20
> static inline
> void	nvme_power_state_swapbytes(struct nvme_power_state *s)
> {
> +#if _BYTE_ORDER !=3D _LITTLE_ENDIAN
>=20
> 	s->mp =3D le16toh(s->mp);
> 	s->enlat =3D le32toh(s->enlat);
> 	s->exlat =3D le32toh(s->exlat);
> 	s->idlp =3D le16toh(s->idlp);
> 	s->actp =3D le16toh(s->actp);
> +#endif
> }
>=20
> static inline
> void	nvme_controller_data_swapbytes(struct nvme_controller_data *s)
> {
> +#if _BYTE_ORDER !=3D _LITTLE_ENDIAN
> 	int i;
>=20
> 	s->vid =3D le16toh(s->vid);
> @@ -1800,11 +1805,13 @@ void	nvme_controller_data_swapbytes(struct =
nvme_contro
> 	s->mnan =3D le32toh(s->mnan);
> 	for (i =3D 0; i < 32; i++)
> 		nvme_power_state_swapbytes(&s->power_state[i]);
> +#endif
> }
>=20
> static inline
> void	nvme_namespace_data_swapbytes(struct nvme_namespace_data *s)
> {
> +#if _BYTE_ORDER !=3D _LITTLE_ENDIAN
> 	int i;
>=20
> 	s->nsze =3D le64toh(s->nsze);
> @@ -1827,11 +1834,13 @@ void	nvme_namespace_data_swapbytes(struct =
nvme_namespa
> 	s->endgid =3D le16toh(s->endgid);
> 	for (i =3D 0; i < 16; i++)
> 		s->lbaf[i] =3D le32toh(s->lbaf[i]);
> +#endif
> }
>=20
> static inline
> void	nvme_error_information_entry_swapbytes(struct =
nvme_error_information_entry *s)
> {
> +#if _BYTE_ORDER !=3D _LITTLE_ENDIAN
>=20
> 	s->error_count =3D le64toh(s->error_count);
> 	s->sqid =3D le16toh(s->sqid);
> @@ -1842,6 +1851,7 @@ void	=
nvme_error_information_entry_swapbytes(struct nvm
> 	s->nsid =3D le32toh(s->nsid);
> 	s->csi =3D le64toh(s->csi);
> 	s->ttsi =3D le16toh(s->ttsi);
> +#endif
> }
>=20
> static inline
> @@ -1857,14 +1867,13 @@ void	nvme_le128toh(void *p)
> 		tmp[i] =3D tmp[15-i];
> 		tmp[15-i] =3D b;
> 	}
> -#else
> -	(void)p;
> #endif
> }
>=20
> static inline
> void	nvme_health_information_page_swapbytes(struct =
nvme_health_information_page *s)
> {
> +#if _BYTE_ORDER !=3D _LITTLE_ENDIAN
> 	int i;
>=20
> 	s->temperature =3D le16toh(s->temperature);
> @@ -1886,47 +1895,57 @@ void	=
nvme_health_information_page_swapbytes(struct nvm
> 	s->tmt2tc =3D le32toh(s->tmt2tc);
> 	s->ttftmt1 =3D le32toh(s->ttftmt1);
> 	s->ttftmt2 =3D le32toh(s->ttftmt2);
> +#endif
> }
>=20
> static inline
> void	nvme_firmware_page_swapbytes(struct nvme_firmware_page *s)
> {
> +#if _BYTE_ORDER !=3D _LITTLE_ENDIAN
> 	int i;
>=20
> 	for (i =3D 0; i < 7; i++)
> 		s->revision[i] =3D le64toh(s->revision[i]);
> +#endif
> }
>=20
> static inline
> void	nvme_ns_list_swapbytes(struct nvme_ns_list *s)
> {
> +#if _BYTE_ORDER !=3D _LITTLE_ENDIAN
> 	int i;
>=20
> 	for (i =3D 0; i < 1024; i++)
> 		s->ns[i] =3D le32toh(s->ns[i]);
> +#endif
> }
>=20
> static inline
> void	nvme_command_effects_page_swapbytes(struct =
nvme_command_effects_page *s)
> {
> +#if _BYTE_ORDER !=3D _LITTLE_ENDIAN
> 	int i;
>=20
> 	for (i =3D 0; i < 256; i++)
> 		s->acs[i] =3D le32toh(s->acs[i]);
> 	for (i =3D 0; i < 256; i++)
> 		s->iocs[i] =3D le32toh(s->iocs[i]);
> +#endif
> }
>=20
> static inline
> void	nvme_res_notification_page_swapbytes(struct =
nvme_res_notification_page *s)
> {
> +#if _BYTE_ORDER !=3D _LITTLE_ENDIAN
> 	s->log_page_count =3D le64toh(s->log_page_count);
> 	s->nsid =3D le32toh(s->nsid);
> +#endif
> }
>=20
> static inline
> void	nvme_sanitize_status_page_swapbytes(struct =
nvme_sanitize_status_page *s)
> {
> +#if _BYTE_ORDER !=3D _LITTLE_ENDIAN
> 	s->sprog =3D le16toh(s->sprog);
> 	s->sstat =3D le16toh(s->sstat);
> 	s->scdw10 =3D le32toh(s->scdw10);
> @@ -1936,11 +1955,13 @@ void	=
nvme_sanitize_status_page_swapbytes(struct nvme_s
> 	s->etfownd =3D le32toh(s->etfownd);
> 	s->etfbewnd =3D le32toh(s->etfbewnd);
> 	s->etfcewnd =3D le32toh(s->etfcewnd);
> +#endif
> }
>=20
> static inline
> void	intel_log_temp_stats_swapbytes(struct intel_log_temp_stats *s)
> {
> +#if _BYTE_ORDER !=3D _LITTLE_ENDIAN
>=20
> 	s->current =3D le64toh(s->current);
> 	s->overtemp_flag_last =3D le64toh(s->overtemp_flag_last);
> @@ -1951,11 +1972,13 @@ void	intel_log_temp_stats_swapbytes(struct =
intel_log_t
> 	s->max_oper_temp =3D le64toh(s->max_oper_temp);
> 	s->min_oper_temp =3D le64toh(s->min_oper_temp);
> 	s->est_offset =3D le64toh(s->est_offset);
> +#endif
> }
>=20
> static inline
> void	nvme_resv_status_swapbytes(struct nvme_resv_status *s, size_t =
size)
> {
> +#if _BYTE_ORDER !=3D _LITTLE_ENDIAN
> 	u_int i, n;
>=20
> 	s->gen =3D le32toh(s->gen);
> @@ -1966,11 +1989,13 @@ void	nvme_resv_status_swapbytes(struct =
nvme_resv_statu
> 		s->ctrlr[i].hostid =3D le64toh(s->ctrlr[i].hostid);
> 		s->ctrlr[i].rkey =3D le64toh(s->ctrlr[i].rkey);
> 	}
> +#endif
> }
>=20
> static inline
> void	nvme_resv_status_ext_swapbytes(struct nvme_resv_status_ext *s, =
size_t size)
> {
> +#if _BYTE_ORDER !=3D _LITTLE_ENDIAN
> 	u_int i, n;
>=20
> 	s->gen =3D le32toh(s->gen);
> @@ -1981,6 +2006,7 @@ void	nvme_resv_status_ext_swapbytes(struct =
nvme_resv_s
> 		s->ctrlr[i].rkey =3D le64toh(s->ctrlr[i].rkey);
> 		nvme_le128toh((void *)s->ctrlr[i].hostid);
> 	}
> +#endif
> }
>=20
> #endif /* __NVME_H__ */




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?8A805005-1EB5-477E-B8EA-003F91A9B337>