Re: [PATCH 1/2] nvme: remove workarounds for gcc bug wrt unnamed fields in initializers

2020-06-18 Thread kernel test robot
Hi Niklas,

I love your patch! Yet something to improve:

[auto build test ERROR on block/for-next]
[also build test ERROR on linus/master v5.8-rc1 next-20200618]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use  as documented in
https://git-scm.com/docs/git-format-patch]

url:
https://github.com/0day-ci/linux/commits/Niklas-Cassel/nvme-remove-workarounds-for-gcc-bug-wrt-unnamed-fields-in-initializers/20200618-223525
base:   https://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block.git 
for-next
config: x86_64-allyesconfig (attached as .config)
compiler: clang version 11.0.0 (https://github.com/llvm/llvm-project 
487ca07fcc75d52755c9fe2ee05bcb3b6c44)
reproduce (this is a W=1 build):
wget 
https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O 
~/bin/make.cross
chmod +x ~/bin/make.cross
# install x86_64 cross compiling tool for clang build
# apt-get install binutils-x86-64-linux-gnu
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=x86_64 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot 

All errors (new ones prefixed by >>):

>> drivers/nvme/host/rdma.c:1814:20: error: use of undeclared identifier 'priv'
   .private_data = &priv,
^
   drivers/nvme/host/rdma.c:1815:30: error: use of undeclared identifier 'priv'
   .private_data_len = sizeof(priv),
  ^
   2 errors generated.

vim +/priv +1814 drivers/nvme/host/rdma.c

  1803  
  1804  static int nvme_rdma_route_resolved(struct nvme_rdma_queue *queue)
  1805  {
  1806  struct nvme_rdma_ctrl *ctrl = queue->ctrl;
  1807  struct rdma_conn_param param = {
  1808  .qp_num = queue->qp->qp_num,
  1809  .flow_control = 1,
  1810  .responder_resources = 
queue->device->dev->attrs.max_qp_rd_atom,
  1811  /* maximum retry count */
  1812  .retry_count = 7,
  1813  .rnr_retry_count = 7,
> 1814  .private_data = &priv,
  1815  .private_data_len = sizeof(priv),
  1816  };
  1817  struct nvme_rdma_cm_req priv = {
  1818  .recfmt = cpu_to_le16(NVME_RDMA_CM_FMT_1_0),
  1819  .qid = cpu_to_le16(nvme_rdma_queue_idx(queue)),
  1820  };
  1821  int ret;
  1822  
  1823  /*
  1824   * set the admin queue depth to the minimum size
  1825   * specified by the Fabrics standard.
  1826   */
  1827  if (priv.qid == 0) {
  1828  priv.hrqsize = cpu_to_le16(NVME_AQ_DEPTH);
  1829  priv.hsqsize = cpu_to_le16(NVME_AQ_DEPTH - 1);
  1830  } else {
  1831  /*
  1832   * current interpretation of the fabrics spec
  1833   * is at minimum you make hrqsize sqsize+1, or a
  1834   * 1's based representation of sqsize.
  1835   */
  1836  priv.hrqsize = cpu_to_le16(queue->queue_size);
  1837  priv.hsqsize = cpu_to_le16(queue->ctrl->ctrl.sqsize);
  1838  }
  1839  
  1840  ret = rdma_connect(queue->cm_id, ¶m);
  1841  if (ret) {
  1842  dev_err(ctrl->ctrl.device,
  1843  "rdma_connect failed (%d).\n", ret);
  1844  goto out_destroy_queue_ib;
  1845  }
  1846  
  1847  return 0;
  1848  
  1849  out_destroy_queue_ib:
  1850  nvme_rdma_destroy_queue_ib(queue);
  1851  return ret;
  1852  }
  1853  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-...@lists.01.org


.config.gz
Description: application/gzip


Re: [PATCH 1/2] nvme: remove workarounds for gcc bug wrt unnamed fields in initializers

2020-06-18 Thread kernel test robot
Hi Niklas,

I love your patch! Yet something to improve:

[auto build test ERROR on block/for-next]
[also build test ERROR on linus/master v5.8-rc1 next-20200618]
[cannot apply to hch-configfs/for-next]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use  as documented in
https://git-scm.com/docs/git-format-patch]

url:
https://github.com/0day-ci/linux/commits/Niklas-Cassel/nvme-remove-workarounds-for-gcc-bug-wrt-unnamed-fields-in-initializers/20200618-223525
base:   https://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block.git 
for-next
config: m68k-allmodconfig (attached as .config)
compiler: m68k-linux-gcc (GCC) 9.3.0
reproduce (this is a W=1 build):
wget 
https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O 
~/bin/make.cross
chmod +x ~/bin/make.cross
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross 
ARCH=m68k 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot 

All errors (new ones prefixed by >>):

   In file included from arch/m68k/include/asm/io_mm.h:25,
from arch/m68k/include/asm/io.h:8,
from include/linux/scatterlist.h:9,
from include/linux/dma-mapping.h:11,
from include/rdma/ib_verbs.h:44,
from include/rdma/mr_pool.h:8,
from drivers/nvme/host/rdma.c:10:
   arch/m68k/include/asm/raw_io.h: In function 'raw_rom_outsb':
   arch/m68k/include/asm/raw_io.h:83:7: warning: variable '__w' set but not 
used [-Wunused-but-set-variable]
  83 |  ({u8 __w, __v = (b);  u32 _addr = ((u32) (addr)); \
 |   ^~~
   arch/m68k/include/asm/raw_io.h:430:3: note: in expansion of macro 'rom_out_8'
 430 |   rom_out_8(port, *buf++);
 |   ^
   arch/m68k/include/asm/raw_io.h: In function 'raw_rom_outsw':
   arch/m68k/include/asm/raw_io.h:86:8: warning: variable '__w' set but not 
used [-Wunused-but-set-variable]
  86 |  ({u16 __w, __v = (w); u32 _addr = ((u32) (addr)); \
 |^~~
   arch/m68k/include/asm/raw_io.h:448:3: note: in expansion of macro 
'rom_out_be16'
 448 |   rom_out_be16(port, *buf++);
 |   ^~~~
   arch/m68k/include/asm/raw_io.h: In function 'raw_rom_outsw_swapw':
   arch/m68k/include/asm/raw_io.h:90:8: warning: variable '__w' set but not 
used [-Wunused-but-set-variable]
  90 |  ({u16 __w, __v = (w); u32 _addr = ((u32) (addr)); \
 |^~~
   arch/m68k/include/asm/raw_io.h:466:3: note: in expansion of macro 
'rom_out_le16'
 466 |   rom_out_le16(port, *buf++);
 |   ^~~~
   In file included from include/linux/kernel.h:11,
from include/linux/list.h:9,
from include/linux/module.h:12,
from drivers/nvme/host/rdma.c:7:
   include/linux/scatterlist.h: In function 'sg_set_buf':
   arch/m68k/include/asm/page_mm.h:169:49: warning: ordered comparison of 
pointer with null pointer [-Wextra]
 169 | #define virt_addr_valid(kaddr) ((void *)(kaddr) >= (void 
*)PAGE_OFFSET && (void *)(kaddr) < high_memory)
 | ^~
   include/linux/compiler.h:78:42: note: in definition of macro 'unlikely'
  78 | # define unlikely(x) __builtin_expect(!!(x), 0)
 |  ^
   include/linux/scatterlist.h:143:2: note: in expansion of macro 'BUG_ON'
 143 |  BUG_ON(!virt_addr_valid(buf));
 |  ^~
   include/linux/scatterlist.h:143:10: note: in expansion of macro 
'virt_addr_valid'
 143 |  BUG_ON(!virt_addr_valid(buf));
 |  ^~~
   In file included from arch/m68k/include/asm/bug.h:32,
from include/linux/bug.h:5,
from include/linux/thread_info.h:12,
from include/asm-generic/preempt.h:5,
from ./arch/m68k/include/generated/asm/preempt.h:1,
from include/linux/preempt.h:78,
from include/linux/spinlock.h:51,
from include/linux/seqlock.h:36,
from include/linux/time.h:6,
from include/linux/stat.h:19,
from include/linux/module.h:13,
from drivers/nvme/host/rdma.c:7:
   include/linux/dma-mapping.h: In function 'dma_map_resource':
   arch/m68k/include/asm/page_mm.h:169:49: warning: ordered comparison of 
pointer with null pointer [-Wextra]
 169 | #define virt_addr_valid(kaddr) ((void *)(kaddr) >= (void 
*)PAGE_OFFSET && (void *)(kaddr) < high_memory)
 | ^~
   include/asm-generic/bug.h:144:27: note: in definition of macro 'WARN_ON_ONCE'
 144 |  int __ret_warn_once = !!(condition);   \
 |   ^~~

Re: [PATCH 1/2] nvme: remove workarounds for gcc bug wrt unnamed fields in initializers

2020-06-18 Thread Niklas Cassel
On Thu, Jun 18, 2020 at 07:11:24PM +0200, Daniel Wagner wrote:
> On Thu, Jun 18, 2020 at 04:32:40PM +0200, Niklas Cassel wrote:
> > If, for some reason, we want to allow builds with gcc < 4.6.0
> > even though the minimum gcc version is now 4.8.0,
> 
> Just one thing to watch out: the stable trees are still using
> older version of gcc. Note sure how relevant this is though.

While the AUTOSEL can be a bit annoying when autoselecting patches
to backport that you didn't intend, I think that it in most cases
backports fixes that has a Fixes-tag, which this doesn't.

Kind regards,
Niklas

Re: [PATCH 1/2] nvme: remove workarounds for gcc bug wrt unnamed fields in initializers

2020-06-18 Thread Daniel Wagner
On Thu, Jun 18, 2020 at 04:32:40PM +0200, Niklas Cassel wrote:
> If, for some reason, we want to allow builds with gcc < 4.6.0
> even though the minimum gcc version is now 4.8.0,

Just one thing to watch out: the stable trees are still using
older version of gcc. Note sure how relevant this is though.


[PATCH 1/2] nvme: remove workarounds for gcc bug wrt unnamed fields in initializers

2020-06-18 Thread Niklas Cassel
Workarounds for gcc issues with initializers and anon unions was first
introduced in commit e44ac588cd61 ("drivers/block/nvme-core.c: fix build
with gcc-4.4.4").

The gcc bug in question has been fixed since gcc 4.6.0:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=10676

The minimum gcc version for building the kernel has been 4.6.0 since
commit cafa0010cd51 ("Raise the minimum required gcc version to 4.6"),
and has since been updated to gcc 4.8.0 in
commit 5429ef62bcf3 ("compiler/gcc: Raise minimum GCC version for
kernel builds to 4.8").

For that reason, it should now be safe to remove these workarounds
and make the code look like it did before
commit e44ac588cd61 ("drivers/block/nvme-core.c: fix build with gcc-4.4.4")
was introduced.

Signed-off-by: Niklas Cassel 
---
If, for some reason, we want to allow builds with gcc < 4.6.0
even though the minimum gcc version is now 4.8.0,
there is another less intrusive workaround where you add an extra pair of
curly braces, see e.g. commit 6cc65be4f6f2 ("locking/qspinlock: Fix build
for anonymous union in older GCC compilers").

 drivers/nvme/host/core.c | 59 ++--
 drivers/nvme/host/lightnvm.c | 32 +--
 drivers/nvme/host/rdma.c | 28 -
 3 files changed, 59 insertions(+), 60 deletions(-)

diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
index 9491dbcfe81a..99059340d723 100644
--- a/drivers/nvme/host/core.c
+++ b/drivers/nvme/host/core.c
@@ -1038,13 +1038,12 @@ static bool nvme_ctrl_limited_cns(struct nvme_ctrl 
*ctrl)
 
 static int nvme_identify_ctrl(struct nvme_ctrl *dev, struct nvme_id_ctrl **id)
 {
-   struct nvme_command c = { };
+   struct nvme_command c = {
+   .identify.opcode = nvme_admin_identify,
+   .identify.cns = NVME_ID_CNS_CTRL,
+   };
int error;
 
-   /* gcc-4.4.4 (at least) has issues with initializers and anon unions */
-   c.identify.opcode = nvme_admin_identify;
-   c.identify.cns = NVME_ID_CNS_CTRL;
-
*id = kmalloc(sizeof(struct nvme_id_ctrl), GFP_KERNEL);
if (!*id)
return -ENOMEM;
@@ -1096,16 +1095,16 @@ static int nvme_process_ns_desc(struct nvme_ctrl *ctrl, 
struct nvme_ns_ids *ids,
 static int nvme_identify_ns_descs(struct nvme_ctrl *ctrl, unsigned nsid,
struct nvme_ns_ids *ids)
 {
-   struct nvme_command c = { };
+   struct nvme_command c = {
+   .identify.opcode = nvme_admin_identify,
+   .identify.nsid = cpu_to_le32(nsid),
+   .identify.cns = NVME_ID_CNS_NS_DESC_LIST,
+   };
int status;
void *data;
int pos;
int len;
 
-   c.identify.opcode = nvme_admin_identify;
-   c.identify.nsid = cpu_to_le32(nsid);
-   c.identify.cns = NVME_ID_CNS_NS_DESC_LIST;
-
data = kzalloc(NVME_IDENTIFY_DATA_SIZE, GFP_KERNEL);
if (!data)
return -ENOMEM;
@@ -1143,11 +1142,12 @@ static int nvme_identify_ns_descs(struct nvme_ctrl 
*ctrl, unsigned nsid,
 
 static int nvme_identify_ns_list(struct nvme_ctrl *dev, unsigned nsid, __le32 
*ns_list)
 {
-   struct nvme_command c = { };
+   struct nvme_command c = {
+   .identify.opcode = nvme_admin_identify,
+   .identify.cns = NVME_ID_CNS_NS_ACTIVE_LIST,
+   .identify.nsid = cpu_to_le32(nsid),
+   };
 
-   c.identify.opcode = nvme_admin_identify;
-   c.identify.cns = NVME_ID_CNS_NS_ACTIVE_LIST;
-   c.identify.nsid = cpu_to_le32(nsid);
return nvme_submit_sync_cmd(dev->admin_q, &c, ns_list,
NVME_IDENTIFY_DATA_SIZE);
 }
@@ -1155,14 +1155,13 @@ static int nvme_identify_ns_list(struct nvme_ctrl *dev, 
unsigned nsid, __le32 *n
 static int nvme_identify_ns(struct nvme_ctrl *ctrl,
unsigned nsid, struct nvme_id_ns **id)
 {
-   struct nvme_command c = { };
+   struct nvme_command c = {
+   .identify.opcode = nvme_admin_identify,
+   .identify.nsid = cpu_to_le32(nsid),
+   .identify.cns = NVME_ID_CNS_NS,
+   };
int error;
 
-   /* gcc-4.4.4 (at least) has issues with initializers and anon unions */
-   c.identify.opcode = nvme_admin_identify;
-   c.identify.nsid = cpu_to_le32(nsid);
-   c.identify.cns = NVME_ID_CNS_NS;
-
*id = kmalloc(sizeof(**id), GFP_KERNEL);
if (!*id)
return -ENOMEM;
@@ -2815,17 +2814,17 @@ static int nvme_init_subsystem(struct nvme_ctrl *ctrl, 
struct nvme_id_ctrl *id)
 int nvme_get_log(struct nvme_ctrl *ctrl, u32 nsid, u8 log_page, u8 lsp,
void *log, size_t size, u64 offset)
 {
-   struct nvme_command c = { };
u32 dwlen = nvme_bytes_to_numd(size);
-
-   c.get_log_page.opcode = nvme_admin_get_log_page;
-   c.get_log_page.nsid = cpu_to_le32(nsid);
-   c.get_log_page.lid = log_page;
-   c.get_log_page.lsp = lsp;
-   c.get_log_page.numdl =