All of lore.kernel.org
 help / color / mirror / Atom feed
* [hisi:topic-lpc-4.10-libio 137/148] lib/libio.c:94:36: error: passing argument 1 of 'acpi_libio_supported_resource' from incompatible pointer type
@ 2017-02-06 18:52 kbuild test robot
  0 siblings, 0 replies; only message in thread
From: kbuild test robot @ 2017-02-06 18:52 UTC (permalink / raw)
  To: linux-arm-kernel

tree:   https://github.com/hisilicon/linux-hisi topic-lpc-4.10-libio
head:   06443d85dc35b64a704f7be84cc538281a1598f4
commit: d00a25ce31fe04e883575c46eededb6f3531a6fe [137/148] libio: replace extio with libio
config: x86_64-acpi-redef (attached as .config)
compiler: gcc-6 (Debian 6.2.0-3) 6.2.0 20160901
reproduce:
        git checkout d00a25ce31fe04e883575c46eededb6f3531a6fe
        # save the attached .config to linux build tree
        make ARCH=x86_64 

Note: the hisi/topic-lpc-4.10-libio HEAD 06443d85dc35b64a704f7be84cc538281a1598f4 builds fine.
      It only hurts bisectibility.

All errors (new ones prefixed by >>):

   include/linux/list.h:376:2: note: in expansion of macro 'list_entry'
     list_entry((ptr)->next, type, member)
     ^~~~~~~~~~
   include/linux/list.h:463:13: note: in expansion of macro 'list_first_entry'
     for (pos = list_first_entry(head, typeof(*pos), member); \
                ^~~~~~~~~~~~~~~~
   lib/libio.c:36:2: note: in expansion of macro 'list_for_each_entry'
     list_for_each_entry(libio_entry, &libio_dev_list, list) {
     ^~~~~~~~~~~~~~~~~~~
   include/linux/kernel.h:850:48: error: initialization from incompatible pointer type [-Werror=incompatible-pointer-types]
     const typeof( ((type *)0)->member ) *__mptr = (ptr); \
                                                   ^
   include/linux/list.h:365:2: note: in expansion of macro 'container_of'
     container_of(ptr, type, member)
     ^~~~~~~~~~~~
   include/linux/list.h:376:2: note: in expansion of macro 'list_entry'
     list_entry((ptr)->next, type, member)
     ^~~~~~~~~~
   include/linux/list.h:463:13: note: in expansion of macro 'list_first_entry'
     for (pos = list_first_entry(head, typeof(*pos), member); \
                ^~~~~~~~~~~~~~~~
   lib/libio.c:36:2: note: in expansion of macro 'list_for_each_entry'
     list_for_each_entry(libio_entry, &libio_dev_list, list) {
     ^~~~~~~~~~~~~~~~~~~
   lib/libio.c: At top level:
   lib/libio.c:45:43: warning: 'struct fwnode_handle' declared inside parameter list will not be visible outside of this definition or declaration
    struct libio_node *libio_find_node(struct fwnode_handle *node)
                                              ^~~~~~~~~~~~~
   In file included from include/asm-generic/bug.h:13:0,
                    from arch/x86/include/asm/bug.h:35,
                    from include/linux/bug.h:4,
                    from include/linux/io.h:23,
                    from lib/libio.c:18:
   lib/libio.c: In function 'libio_find_node':
   include/linux/kernel.h:850:48: error: initialization from incompatible pointer type [-Werror=incompatible-pointer-types]
     const typeof( ((type *)0)->member ) *__mptr = (ptr); \
                                                   ^
   include/linux/list.h:365:2: note: in expansion of macro 'container_of'
     container_of(ptr, type, member)
     ^~~~~~~~~~~~
   include/linux/list.h:376:2: note: in expansion of macro 'list_entry'
     list_entry((ptr)->next, type, member)
     ^~~~~~~~~~
   include/linux/list.h:463:13: note: in expansion of macro 'list_first_entry'
     for (pos = list_first_entry(head, typeof(*pos), member); \
                ^~~~~~~~~~~~~~~~
   lib/libio.c:50:2: note: in expansion of macro 'list_for_each_entry'
     list_for_each_entry(entry, &libio_dev_list, list) {
     ^~~~~~~~~~~~~~~~~~~
   lib/libio.c: At top level:
   lib/libio.c:59:38: warning: 'struct fwnode_handle' declared inside parameter list will not be visible outside of this definition or declaration
    unsigned long libio_translate(struct fwnode_handle *node,
                                         ^~~~~~~~~~~~~
   In file included from include/asm-generic/bug.h:13:0,
                    from arch/x86/include/asm/bug.h:35,
                    from include/linux/bug.h:4,
                    from include/linux/io.h:23,
                    from lib/libio.c:18:
   lib/libio.c: In function 'libio_translate':
   include/linux/kernel.h:850:48: error: initialization from incompatible pointer type [-Werror=incompatible-pointer-types]
     const typeof( ((type *)0)->member ) *__mptr = (ptr); \
                                                   ^
   include/linux/list.h:365:2: note: in expansion of macro 'container_of'
     container_of(ptr, type, member)
     ^~~~~~~~~~~~
   include/linux/list.h:376:2: note: in expansion of macro 'list_entry'
     list_entry((ptr)->next, type, member)
     ^~~~~~~~~~
   include/linux/list.h:463:13: note: in expansion of macro 'list_first_entry'
     for (pos = list_first_entry(head, typeof(*pos), member); \
                ^~~~~~~~~~~~~~~~
   lib/libio.c:66:2: note: in expansion of macro 'list_for_each_entry'
     list_for_each_entry(entry, &libio_dev_list, list) {
     ^~~~~~~~~~~~~~~~~~~
   lib/libio.c: At top level:
   lib/libio.c:78:57: warning: 'struct acpi_resource' declared inside parameter list will not be visible outside of this definition or declaration
    static inline bool acpi_libio_supported_resource(struct acpi_resource *res)
                                                            ^~~~~~~~~~~~~
   lib/libio.c: In function 'acpi_libio_supported_resource':
   lib/libio.c:80:13: error: dereferencing pointer to incomplete type 'struct acpi_resource'
     switch (res->type) {
                ^~
   lib/libio.c:81:7: error: 'ACPI_RESOURCE_TYPE_ADDRESS16' undeclared (first use in this function)
     case ACPI_RESOURCE_TYPE_ADDRESS16:
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
   lib/libio.c:81:7: note: each undeclared identifier is reported only once for each function it appears in
   lib/libio.c:82:7: error: 'ACPI_RESOURCE_TYPE_ADDRESS32' undeclared (first use in this function)
     case ACPI_RESOURCE_TYPE_ADDRESS32:
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
   lib/libio.c:83:7: error: 'ACPI_RESOURCE_TYPE_ADDRESS64' undeclared (first use in this function)
     case ACPI_RESOURCE_TYPE_ADDRESS64:
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
   lib/libio.c: At top level:
   lib/libio.c:89:8: error: unknown type name 'acpi_status'
    static acpi_status acpi_count_libiores(struct acpi_resource *res,
           ^~~~~~~~~~~
   lib/libio.c:89:47: warning: 'struct acpi_resource' declared inside parameter list will not be visible outside of this definition or declaration
    static acpi_status acpi_count_libiores(struct acpi_resource *res,
                                                  ^~~~~~~~~~~~~
   lib/libio.c: In function 'acpi_count_libiores':
>> lib/libio.c:94:36: error: passing argument 1 of 'acpi_libio_supported_resource' from incompatible pointer type [-Werror=incompatible-pointer-types]
     if (acpi_libio_supported_resource(res) &&
                                       ^~~
   lib/libio.c:78:20: note: expected 'struct acpi_resource *' but argument is of type 'struct acpi_resource *'
    static inline bool acpi_libio_supported_resource(struct acpi_resource *res)
                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   lib/libio.c:95:4: error: implicit declaration of function 'acpi_dev_filter_resource_type' [-Werror=implicit-function-declaration]
      !acpi_dev_filter_resource_type(res, IORESOURCE_IO))
       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   lib/libio.c:95:39: error: 'IORESOURCE_IO' undeclared (first use in this function)
      !acpi_dev_filter_resource_type(res, IORESOURCE_IO))
                                          ^~~~~~~~~~~~~
   lib/libio.c:98:9: error: 'AE_OK' undeclared (first use in this function)
     return AE_OK;
            ^~~~~
   lib/libio.c: At top level:
   lib/libio.c:101:8: error: unknown type name 'acpi_status'
    static acpi_status acpi_read_one_libiores(struct acpi_resource *res,
           ^~~~~~~~~~~
   lib/libio.c:101:50: warning: 'struct acpi_resource' declared inside parameter list will not be visible outside of this definition or declaration
    static acpi_status acpi_read_one_libiores(struct acpi_resource *res,
                                                     ^~~~~~~~~~~~~
   lib/libio.c: In function 'acpi_read_one_libiores':
   lib/libio.c:106:36: error: passing argument 1 of 'acpi_libio_supported_resource' from incompatible pointer type [-Werror=incompatible-pointer-types]
     if (acpi_libio_supported_resource(res) &&
                                       ^~~
   lib/libio.c:78:20: note: expected 'struct acpi_resource *' but argument is of type 'struct acpi_resource *'
    static inline bool acpi_libio_supported_resource(struct acpi_resource *res)
                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   lib/libio.c:107:39: error: 'IORESOURCE_IO' undeclared (first use in this function)
      !acpi_dev_filter_resource_type(res, IORESOURCE_IO)) {
                                          ^~~~~~~~~~~~~
   lib/libio.c:108:35: error: invalid application of 'sizeof' to incomplete type 'struct acpi_resource'
      memcpy((*resource), res, sizeof(struct acpi_resource));
                                      ^~~~~~
   lib/libio.c:109:14: error: dereferencing pointer to incomplete type 'struct acpi_resource'
      (*resource)->length = sizeof(struct acpi_resource);
                 ^~
   lib/libio.c:109:32: error: invalid application of 'sizeof' to incomplete type 'struct acpi_resource'
      (*resource)->length = sizeof(struct acpi_resource);
                                   ^~~~~~
   lib/libio.c:111:14: error: increment of pointer to an incomplete type 'struct acpi_resource'
      (*resource)++;
                 ^~
   lib/libio.c:114:9: error: 'AE_OK' undeclared (first use in this function)
     return AE_OK;
            ^~~~~
   lib/libio.c: At top level:
   lib/libio.c:117:8: error: unknown type name 'acpi_status'
    static acpi_status
           ^~~~~~~~~~~
   lib/libio.c:119:11: warning: 'struct acpi_buffer' declared inside parameter list will not be visible outside of this definition or declaration
       struct acpi_buffer *buffer)
              ^~~~~~~~~~~
   lib/libio.c:118:37: warning: 'struct acpi_device' declared inside parameter list will not be visible outside of this definition or declaration
    acpi_build_libiores_template(struct acpi_device *adev,
                                        ^~~~~~~~~~~
   lib/libio.c: In function 'acpi_build_libiores_template':
   lib/libio.c:121:2: error: unknown type name 'acpi_handle'
     acpi_handle handle = adev->handle;
     ^~~~~~~~~~~
   lib/libio.c:121:27: error: dereferencing pointer to incomplete type 'struct acpi_device'
     acpi_handle handle = adev->handle;
                              ^~
   lib/libio.c:123:2: error: unknown type name 'acpi_status'
     acpi_status status;
     ^~~~~~~~~~~
   lib/libio.c:126:11: error: implicit declaration of function 'acpi_walk_resources' [-Werror=implicit-function-declaration]
     status = acpi_walk_resources(handle, METHOD_NAME__PRS,
              ^~~~~~~~~~~~~~~~~~~
   lib/libio.c:126:39: error: 'METHOD_NAME__PRS' undeclared (first use in this function)
     status = acpi_walk_resources(handle, METHOD_NAME__PRS,
                                          ^~~~~~~~~~~~~~~~
   lib/libio.c:128:6: error: implicit declaration of function 'ACPI_FAILURE' [-Werror=implicit-function-declaration]
     if (ACPI_FAILURE(status) || !res_cnt) {
         ^~~~~~~~~~~~
   lib/libio.c:129:3: error: implicit declaration of function 'dev_err' [-Werror=implicit-function-declaration]
      dev_err(&adev->dev, "can't evaluate _CRS: %d\n", status);
      ^~~~~~~
   lib/libio.c:133:8: error: dereferencing pointer to incomplete type 'struct acpi_buffer'
     buffer->length = sizeof(struct acpi_resource) * (res_cnt + 1) + 1;
           ^~
   lib/libio.c:133:26: error: invalid application of 'sizeof' to incomplete type 'struct acpi_resource'
     buffer->length = sizeof(struct acpi_resource) * (res_cnt + 1) + 1;
                             ^~~~~~
   lib/libio.c:134:20: error: implicit declaration of function 'kzalloc' [-Werror=implicit-function-declaration]
     buffer->pointer = kzalloc(buffer->length - 1, GFP_KERNEL);
                       ^~~~~~~
   lib/libio.c:134:48: error: 'GFP_KERNEL' undeclared (first use in this function)
     buffer->pointer = kzalloc(buffer->length - 1, GFP_KERNEL);
                                                   ^~~~~~~~~~
   lib/libio.c:142:3: error: implicit declaration of function 'kfree' [-Werror=implicit-function-declaration]
      kfree(buffer->pointer);
      ^~~~~
   lib/libio.c:147:10: error: dereferencing pointer to incomplete type 'struct acpi_resource'
     resource->type = ACPI_RESOURCE_TYPE_END_TAG;
             ^~
   lib/libio.c:147:19: error: 'ACPI_RESOURCE_TYPE_END_TAG' undeclared (first use in this function)
     resource->type = ACPI_RESOURCE_TYPE_END_TAG;
                      ^~~~~~~~~~~~~~~~~~~~~~~~~~
   lib/libio.c:148:28: error: invalid application of 'sizeof' to incomplete type 'struct acpi_resource'
     resource->length = sizeof(struct acpi_resource);
                               ^~~~~~
   lib/libio.c: At top level:
   lib/libio.c:154:36: warning: 'struct acpi_buffer' declared inside parameter list will not be visible outside of this definition or declaration
      struct acpi_device *host, struct acpi_buffer *buffer)
                                       ^~~~~~~~~~~
   lib/libio.c:153:43: warning: 'struct acpi_device' declared inside parameter list will not be visible outside of this definition or declaration
    static int acpi_translate_libiores(struct acpi_device *adev,
                                              ^~~~~~~~~~~
   lib/libio.c: In function 'acpi_translate_libiores':
   lib/libio.c:156:23: error: dereferencing pointer to incomplete type 'struct acpi_buffer'
     int res_cnt = (buffer->length - 1) / sizeof(struct acpi_resource) - 1;
                          ^~
   lib/libio.c:156:46: error: invalid application of 'sizeof' to incomplete type 'struct acpi_resource'
     int res_cnt = (buffer->length - 1) / sizeof(struct acpi_resource) - 1;
                                                 ^~~~~~
   lib/libio.c:158:33: error: storage size of 'addr' isn't known
     struct acpi_resource_address64 addr;
                                    ^~~~
   lib/libio.c:160:28: error: dereferencing pointer to incomplete type 'struct acpi_device'
     struct device *dev = &adev->dev;
                               ^~
   lib/libio.c:165:21: error: dereferencing pointer to incomplete type 'struct acpi_resource'
       res_cnt, resource->type);
                        ^~
   lib/libio.c:169:19: error: implicit declaration of function 'acpi_resource_to_address64' [-Werror=implicit-function-declaration]
     if (ACPI_FAILURE(acpi_resource_to_address64(resource, &addr))) {
                      ^~~~~~~~~~~~~~~~~~~~~~~~~~
   lib/libio.c:178:3: error: implicit declaration of function 'dev_warn' [-Werror=implicit-function-declaration]
      dev_warn(dev, "variable I/O resource is invalid!\n");
      ^~~~~~~~
   lib/libio.c:190:7: error: 'ACPI_RESOURCE_TYPE_ADDRESS16' undeclared (first use in this function)
     case ACPI_RESOURCE_TYPE_ADDRESS16:
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
   lib/libio.c:195:10: error: dereferencing pointer to incomplete type 'struct acpi_resource_address16'
      out_res->address.minimum = sys_port;
             ^~
   lib/libio.c:199:3: error: implicit declaration of function 'dev_info' [-Werror=implicit-function-declaration]
      dev_info(dev, "_SRS 16IO: [0x%x - 0x%x]\n",
      ^~~~~~~~
   lib/libio.c:206:7: error: 'ACPI_RESOURCE_TYPE_ADDRESS32' undeclared (first use in this function)
     case ACPI_RESOURCE_TYPE_ADDRESS32:
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
   lib/libio.c:211:10: error: dereferencing pointer to incomplete type 'struct acpi_resource_address32'
      out_res->address.minimum = sys_port;
             ^~
   lib/libio.c:222:7: error: 'ACPI_RESOURCE_TYPE_ADDRESS64' undeclared (first use in this function)
     case ACPI_RESOURCE_TYPE_ADDRESS64:
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
   lib/libio.c:227:10: error: dereferencing pointer to incomplete type 'struct acpi_resource_address64'
      out_res->address.minimum = sys_port;
             ^~
   lib/libio.c:158:33: warning: unused variable 'addr' [-Wunused-variable]
     struct acpi_resource_address64 addr;
                                    ^~~~
   lib/libio.c: At top level:
   lib/libio.c:257:36: warning: 'struct acpi_device' declared inside parameter list will not be visible outside of this definition or declaration
    int acpi_set_libio_resource(struct acpi_device *adev,
                                       ^~~~~~~~~~~
   lib/libio.c: In function 'acpi_set_libio_resource':
   lib/libio.c:260:28: error: dereferencing pointer to incomplete type 'struct acpi_device'
     struct device *dev = &adev->dev;
                               ^~
   lib/libio.c:261:21: error: storage size of 'buffer' isn't known
     struct acpi_buffer buffer;
                        ^~~~~~
   lib/libio.c:262:2: error: unknown type name 'acpi_status'
     acpi_status status;
     ^~~~~~~~~~~
   lib/libio.c:274:6: error: implicit declaration of function 'acpi_device_enumerated' [-Werror=implicit-function-declaration]
     if (acpi_device_enumerated(adev)) {
         ^~~~~~~~~~~~~~~~~~~~~~
>> lib/libio.c:280:40: error: passing argument 1 of 'acpi_build_libiores_template' from incompatible pointer type [-Werror=incompatible-pointer-types]
     status = acpi_build_libiores_template(adev, &buffer);
                                           ^~~~
   lib/libio.c:118:1: note: expected 'struct acpi_device *' but argument is of type 'struct acpi_device *'
    acpi_build_libiores_template(struct acpi_device *adev,
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
   lib/libio.c:283:5: error: 'METHOD_NAME__PRS' undeclared (first use in this function)
        METHOD_NAME__PRS);
        ^~~~~~~~~~~~~~~~
>> lib/libio.c:288:32: error: passing argument 1 of 'acpi_translate_libiores' from incompatible pointer type [-Werror=incompatible-pointer-types]
     ret = acpi_translate_libiores(adev, host, &buffer);
                                   ^~~~
   lib/libio.c:153:12: note: expected 'struct acpi_device *' but argument is of type 'struct acpi_device *'
    static int acpi_translate_libiores(struct acpi_device *adev,
               ^~~~~~~~~~~~~~~~~~~~~~~
   lib/libio.c:288:38: error: passing argument 2 of 'acpi_translate_libiores' from incompatible pointer type [-Werror=incompatible-pointer-types]
     ret = acpi_translate_libiores(adev, host, &buffer);
                                         ^~~~
   lib/libio.c:153:12: note: expected 'struct acpi_device *' but argument is of type 'struct acpi_device *'
    static int acpi_translate_libiores(struct acpi_device *adev,
               ^~~~~~~~~~~~~~~~~~~~~~~
   lib/libio.c:296:11: error: implicit declaration of function 'acpi_set_current_resources' [-Werror=implicit-function-declaration]
     status = acpi_set_current_resources(adev->handle, &buffer);
              ^~~~~~~~~~~~~~~~~~~~~~~~~~
   lib/libio.c:261:21: warning: unused variable 'buffer' [-Wunused-variable]
     struct acpi_buffer buffer;
                        ^~~~~~
   lib/libio.c: In function 'libio_find_node':
   lib/libio.c:57:1: warning: control reaches end of non-void function [-Wreturn-type]
    }
    ^
   At top level:
   lib/libio.c:31:27: warning: 'find_libio_token' defined but not used [-Wunused-function]
    static struct libio_node *find_libio_token(unsigned long addr)
                              ^~~~~~~~~~~~~~~~
   cc1: some warnings being treated as errors

vim +/acpi_libio_supported_resource +94 lib/libio.c

    83		case ACPI_RESOURCE_TYPE_ADDRESS64:
    84			return true;
    85		}
    86		return false;
    87	}
    88	
  > 89	static acpi_status acpi_count_libiores(struct acpi_resource *res,
    90						   void *data)
    91	{
    92		int *res_cnt = data;
    93	
  > 94		if (acpi_libio_supported_resource(res) &&
    95			!acpi_dev_filter_resource_type(res, IORESOURCE_IO))
    96			(*res_cnt)++;
    97	
    98		return AE_OK;
    99	}
   100	
   101	static acpi_status acpi_read_one_libiores(struct acpi_resource *res,
   102			void *data)
   103	{
   104		struct acpi_resource **resource = data;
   105	
   106		if (acpi_libio_supported_resource(res) &&
   107			!acpi_dev_filter_resource_type(res, IORESOURCE_IO)) {
   108			memcpy((*resource), res, sizeof(struct acpi_resource));
   109			(*resource)->length = sizeof(struct acpi_resource);
   110			(*resource)->type = res->type;
   111			(*resource)++;
   112		}
   113	
   114		return AE_OK;
   115	}
   116	
   117	static acpi_status
   118	acpi_build_libiores_template(struct acpi_device *adev,
   119				struct acpi_buffer *buffer)
   120	{
   121		acpi_handle handle = adev->handle;
   122		struct acpi_resource *resource;
   123		acpi_status status;
   124		int res_cnt = 0;
   125	
   126		status = acpi_walk_resources(handle, METHOD_NAME__PRS,
   127					     acpi_count_libiores, &res_cnt);
   128		if (ACPI_FAILURE(status) || !res_cnt) {
   129			dev_err(&adev->dev, "can't evaluate _CRS: %d\n", status);
   130			return -EINVAL;
   131		}
   132	
   133		buffer->length = sizeof(struct acpi_resource) * (res_cnt + 1) + 1;
   134		buffer->pointer = kzalloc(buffer->length - 1, GFP_KERNEL);
   135		if (!buffer->pointer)
   136			return -ENOMEM;
   137	
   138		resource = (struct acpi_resource *)buffer->pointer;
   139		status = acpi_walk_resources(handle, METHOD_NAME__PRS,
   140					     acpi_read_one_libiores, &resource);
   141		if (ACPI_FAILURE(status)) {
   142			kfree(buffer->pointer);
   143			dev_err(&adev->dev, "can't evaluate _PRS: %d\n", status);
   144			return -EINVAL;
   145		}
   146	
   147		resource->type = ACPI_RESOURCE_TYPE_END_TAG;
   148		resource->length = sizeof(struct acpi_resource);
   149	
   150		return 0;
   151	}
   152	
   153	static int acpi_translate_libiores(struct acpi_device *adev,
   154			struct acpi_device *host, struct acpi_buffer *buffer)
   155	{
   156		int res_cnt = (buffer->length - 1) / sizeof(struct acpi_resource) - 1;
   157		struct acpi_resource *resource = buffer->pointer;
   158		struct acpi_resource_address64 addr;
   159		unsigned long sys_port;
   160		struct device *dev = &adev->dev;
   161	
   162		/* only one I/O resource now */
   163		if (res_cnt != 1) {
   164			dev_err(dev, "encode %d resources whose type is(%d)!\n",
   165				res_cnt, resource->type);
   166			return -EINVAL;
   167		}
   168	
   169		if (ACPI_FAILURE(acpi_resource_to_address64(resource, &addr))) {
   170			dev_err(dev, "convert acpi resource(%d) as addr64 FAIL!\n",
   171				resource->type);
   172			return -EFAULT;
   173		}
   174	
   175		/* For indirect-IO, addr length must be fixed. (>0, 0, 0) */
   176		if (!addr.address.address_length || addr.min_address_fixed ||
   177			addr.max_address_fixed) {
   178			dev_warn(dev, "variable I/O resource is invalid!\n");
   179			return -EINVAL;
   180		}
   181	
   182		sys_port = libio_translate(&host->fwnode, addr.address.minimum);
   183		if (sys_port == -1) {
   184			dev_err(dev, "translate bus-addr(0x%llx) fail!\n",
   185				addr.address.minimum);
   186			return -EFAULT;
   187		}
   188	
   189		switch (resource->type) {
   190		case ACPI_RESOURCE_TYPE_ADDRESS16:
   191		{
   192			struct acpi_resource_address16 *out_res;
   193	
   194			out_res = &resource->data.address16;
   195			out_res->address.minimum = sys_port;
   196			out_res->address.maximum = sys_port +
   197				addr.address.address_length - 1;
   198	
   199			dev_info(dev, "_SRS 16IO: [0x%x - 0x%x]\n",
   200				out_res->address.minimum,
   201				out_res->address.maximum);
   202	
   203			break;
   204		}
   205	
   206		case ACPI_RESOURCE_TYPE_ADDRESS32:
   207		{
   208			struct acpi_resource_address32 *out_res;
   209	
   210			out_res = &resource->data.address32;
   211			out_res->address.minimum = sys_port;
   212			out_res->address.maximum = sys_port +
   213				addr.address.address_length - 1;
   214	
   215			dev_info(dev, "_SRS 32IO: [0x%x - 0x%x]\n",
   216				out_res->address.minimum,
   217				out_res->address.maximum);
   218	
   219			break;
   220		}
   221	
   222		case ACPI_RESOURCE_TYPE_ADDRESS64:
   223		{
   224			struct acpi_resource_address64 *out_res;
   225	
   226			out_res = &resource->data.address64;
   227			out_res->address.minimum = sys_port;
   228			out_res->address.maximum = sys_port +
   229				addr.address.address_length - 1;
   230	
   231			dev_info(dev, "_SRS 64IO: [0x%llx - 0x%llx]\n",
   232				out_res->address.minimum,
   233				out_res->address.maximum);
   234	
   235			break;
   236		}
   237	
   238		default:
   239			return -EINVAL;
   240	
   241		}
   242	
   243		return 0;
   244	}
   245	
   246	/*
   247	 * update/set the current I/O resource of the designated device node.
   248	 * after this calling, the enumeration can be started as the I/O resource
   249	 * had been translated to logicial I/O from bus-local I/O.
   250	 *
   251	 * @adev: the device node to be updated the I/O resource;
   252	 * @host: the device node where 'adev' is attached, which can be not
   253	 *	the parent of 'adev';
   254	 *
   255	 * return 0 when successful, negative is for failure.
   256	 */
   257	int acpi_set_libio_resource(struct acpi_device *adev,
   258			struct acpi_device *host)
   259	{
   260		struct device *dev = &adev->dev;
 > 261		struct acpi_buffer buffer;
   262		acpi_status status;
   263		int ret;
   264	
   265		if (!host)
   266			return -EINVAL;
   267	
   268		/* check the device state */
   269		if (!adev->status.present) {
   270			dev_info(dev, "ACPI: device is not present!\n");
   271			return 0;
   272		}
   273		/* whether the child had been enumerated? */
   274		if (acpi_device_enumerated(adev)) {
   275			dev_info(dev, "ACPI: had been enumerated!\n");
   276			return 0;
   277		}
   278	
   279		/* read the _PRS and convert as acpi_buffer */
 > 280		status = acpi_build_libiores_template(adev, &buffer);
   281		if (ACPI_FAILURE(status)) {
   282			dev_warn(dev, "Failure evaluating %s\n",
   283					METHOD_NAME__PRS);
   284			return -ENODEV;
   285		}
   286	
   287		/* translate the I/O resources */
 > 288		ret = acpi_translate_libiores(adev, host, &buffer);
   289		if (ret) {
   290			kfree(buffer.pointer);
   291			dev_err(dev, "Translate I/O range FAIL!\n");

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation
-------------- next part --------------
A non-text attachment was scrubbed...
Name: .config.gz
Type: application/gzip
Size: 28928 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20170207/cb445d08/attachment-0001.gz>

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2017-02-06 18:52 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-02-06 18:52 [hisi:topic-lpc-4.10-libio 137/148] lib/libio.c:94:36: error: passing argument 1 of 'acpi_libio_supported_resource' from incompatible pointer type kbuild test robot

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.