diff mbox

[v4,03/32] scsi: hisi_sas: add initial bare main driver

Message ID 1447679178-220222-4-git-send-email-john.garry@huawei.com (mailing list archive)
State Superseded, archived
Headers show

Commit Message

John Garry Nov. 16, 2015, 1:05 p.m. UTC
This patch adds the initial bare main driver for the
HiSilicon SAS HBA. This only introduces the changes to
build and load the main driver module.

The complete driver consists of the core main module and
also a module platform driver for driving the hw.

The HBA is a platform device.

Signed-off-by: John Garry <john.garry@huawei.com>
Signed-off-by: Zhangfei Gao <zhangfei.gao@linaro.org>
---
 drivers/scsi/Kconfig                  |  1 +
 drivers/scsi/Makefile                 |  1 +
 drivers/scsi/hisi_sas/Kconfig         |  6 +++++
 drivers/scsi/hisi_sas/Makefile        |  1 +
 drivers/scsi/hisi_sas/hisi_sas.h      | 26 +++++++++++++++++++++
 drivers/scsi/hisi_sas/hisi_sas_main.c | 43 +++++++++++++++++++++++++++++++++++
 6 files changed, 78 insertions(+)
 create mode 100644 drivers/scsi/hisi_sas/Kconfig
 create mode 100644 drivers/scsi/hisi_sas/Makefile
 create mode 100644 drivers/scsi/hisi_sas/hisi_sas.h
 create mode 100644 drivers/scsi/hisi_sas/hisi_sas_main.c

Comments

kernel test robot Nov. 16, 2015, 5:35 p.m. UTC | #1
Hi John,

[auto build test ERROR on scsi/for-next]
[also build test ERROR on v4.4-rc1 next-20151116]

url:    https://github.com/0day-ci/linux/commits/John-Garry/HiSilicon-SAS-driver/20151116-215304
base:   https://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi.git for-next
config: i386-randconfig-s0-11162304 (attached as .config)
reproduce:
        # save the attached .config to linux build tree
        make ARCH=i386 

All error/warnings (new ones prefixed by >>):

warning: (SCSI_HISI_SAS && TCM_IBLOCK) selects BLK_DEV_INTEGRITY which has unmet direct dependencies (BLOCK)
warning: (SCSI_HISI_SAS) selects SCSI_SAS_LIBSAS which has unmet direct dependencies (SCSI)
   block/bio-integrity.c: In function 'bio_integrity_alloc':
>> block/bio-integrity.c:50:26: error: dereferencing pointer to incomplete type 'struct bio'
     struct bio_set *bs = bio->bi_pool;
                             ^
>> block/bio-integrity.c:51:22: error: 'BIO_POOL_NONE' undeclared (first use in this function)
     unsigned long idx = BIO_POOL_NONE;
                         ^
   block/bio-integrity.c:51:22: note: each undeclared identifier is reported only once for each function it appears in
   In file included from include/uapi/linux/stddef.h:1:0,
                    from include/linux/stddef.h:4,
                    from include/uapi/linux/posix_types.h:4,
                    from include/uapi/linux/types.h:13,
                    from include/linux/types.h:5,
                    from include/uapi/linux/capability.h:16,
                    from include/linux/capability.h:15,
                    from include/linux/sched.h:15,
                    from include/linux/blkdev.h:4,
                    from block/bio-integrity.c:23:
>> block/bio-integrity.c:54:16: error: dereferencing pointer to incomplete type 'struct bio_set'
     if (!bs || !bs->bio_integrity_pool) {
                   ^
   include/linux/compiler.h:147:28: note: in definition of macro '__trace_if'
     if (__builtin_constant_p((cond)) ? !!(cond) :   \
                               ^
>> block/bio-integrity.c:54:2: note: in expansion of macro 'if'
     if (!bs || !bs->bio_integrity_pool) {
     ^
>> block/bio-integrity.c:55:24: error: invalid application of 'sizeof' to incomplete type 'struct bio_integrity_payload'
      bip = kmalloc(sizeof(struct bio_integrity_payload) +
                           ^
   In file included from arch/x86/include/asm/string.h:2:0,
                    from include/linux/string.h:17,
                    from include/linux/dynamic_debug.h:111,
                    from include/linux/printk.h:277,
                    from include/linux/kernel.h:13,
                    from include/linux/sched.h:17,
                    from include/linux/blkdev.h:4,
                    from block/bio-integrity.c:23:
>> block/bio-integrity.c:66:24: error: dereferencing pointer to incomplete type 'struct bio_integrity_payload'
     memset(bip, 0, sizeof(*bip));
                           ^
   arch/x86/include/asm/string_32.h:325:52: note: in definition of macro 'memset'
    #define memset(s, c, count) __builtin_memset(s, c, count)
                                                       ^
>> block/bio-integrity.c:69:18: error: implicit declaration of function 'bvec_alloc' [-Werror=implicit-function-declaration]
      bip->bip_vec = bvec_alloc(gfp_mask, nr_vecs, &idx,
                     ^
>> block/bio-integrity.c:73:23: error: implicit declaration of function 'bvec_nr_vecs' [-Werror=implicit-function-declaration]
      bip->bip_max_vcnt = bvec_nr_vecs(idx);
                          ^
   block/bio-integrity.c: In function 'bio_integrity_free':
>> block/bio-integrity.c:100:38: error: implicit declaration of function 'bio_integrity' [-Werror=implicit-function-declaration]
     struct bio_integrity_payload *bip = bio_integrity(bio);
                                         ^
>> block/bio-integrity.c:100:38: warning: initialization makes pointer from integer without a cast [-Wint-conversion]
   In file included from include/uapi/linux/stddef.h:1:0,
                    from include/linux/stddef.h:4,
                    from include/uapi/linux/posix_types.h:4,
                    from include/uapi/linux/types.h:13,
                    from include/linux/types.h:5,
                    from include/uapi/linux/capability.h:16,
                    from include/linux/capability.h:15,
                    from include/linux/sched.h:15,
                    from include/linux/blkdev.h:4,
                    from block/bio-integrity.c:23:
>> block/bio-integrity.c:103:23: error: 'BIP_BLOCK_INTEGRITY' undeclared (first use in this function)
     if (bip->bip_flags & BIP_BLOCK_INTEGRITY)
                          ^
   include/linux/compiler.h:147:28: note: in definition of macro '__trace_if'
     if (__builtin_constant_p((cond)) ? !!(cond) :   \
                               ^
   block/bio-integrity.c:103:2: note: in expansion of macro 'if'
     if (bip->bip_flags & BIP_BLOCK_INTEGRITY)
     ^
   block/bio-integrity.c:108:24: error: 'BIO_POOL_NONE' undeclared (first use in this function)
      if (bip->bip_slab != BIO_POOL_NONE)
                           ^
   include/linux/compiler.h:147:28: note: in definition of macro '__trace_if'
     if (__builtin_constant_p((cond)) ? !!(cond) :   \
                               ^
   block/bio-integrity.c:108:3: note: in expansion of macro 'if'
      if (bip->bip_slab != BIO_POOL_NONE)
      ^
>> block/bio-integrity.c:109:4: error: implicit declaration of function 'bvec_free' [-Werror=implicit-function-declaration]
       bvec_free(bs->bvec_integrity_pool, bip->bip_vec,
       ^
   block/bio-integrity.c: In function 'bio_integrity_add_page':
   block/bio-integrity.c:133:38: warning: initialization makes pointer from integer without a cast [-Wint-conversion]
     struct bio_integrity_payload *bip = bio_integrity(bio);
                                         ^
   block/bio-integrity.c: In function 'bio_integrity_enabled':
>> block/bio-integrity.c:163:29: error: implicit declaration of function 'bdev_get_integrity' [-Werror=implicit-function-declaration]
     struct blk_integrity *bi = bdev_get_integrity(bio->bi_bdev);
                                ^
   In file included from include/uapi/linux/stddef.h:1:0,
                    from include/linux/stddef.h:4,
                    from include/uapi/linux/posix_types.h:4,
                    from include/uapi/linux/types.h:13,
                    from include/linux/types.h:5,
                    from include/uapi/linux/capability.h:16,
                    from include/linux/capability.h:15,
                    from include/linux/sched.h:15,
                    from include/linux/blkdev.h:4,
                    from block/bio-integrity.c:23:
>> block/bio-integrity.c:165:7: error: implicit declaration of function 'bio_is_rw' [-Werror=implicit-function-declaration]
     if (!bio_is_rw(bio))
          ^
   include/linux/compiler.h:147:28: note: in definition of macro '__trace_if'
     if (__builtin_constant_p((cond)) ? !!(cond) :   \
                               ^
   block/bio-integrity.c:165:2: note: in expansion of macro 'if'
     if (!bio_is_rw(bio))
     ^
>> block/bio-integrity.c:175:6: error: implicit declaration of function 'bio_data_dir' [-Werror=implicit-function-declaration]
     if (bio_data_dir(bio) == READ && bi->verify_fn != NULL &&
         ^
   include/linux/compiler.h:147:28: note: in definition of macro '__trace_if'
     if (__builtin_constant_p((cond)) ? !!(cond) :   \
                               ^
   block/bio-integrity.c:175:2: note: in expansion of macro 'if'
     if (bio_data_dir(bio) == READ && bi->verify_fn != NULL &&
     ^
>> block/bio-integrity.c:175:37: error: dereferencing pointer to incomplete type 'struct blk_integrity'
     if (bio_data_dir(bio) == READ && bi->verify_fn != NULL &&
                                        ^
   include/linux/compiler.h:147:28: note: in definition of macro '__trace_if'
     if (__builtin_constant_p((cond)) ? !!(cond) :   \
                               ^
   block/bio-integrity.c:175:2: note: in expansion of macro 'if'
     if (bio_data_dir(bio) == READ && bi->verify_fn != NULL &&
     ^
>> block/bio-integrity.c:176:19: error: 'BLK_INTEGRITY_VERIFY' undeclared (first use in this function)
         (bi->flags & BLK_INTEGRITY_VERIFY))
                      ^
   include/linux/compiler.h:147:28: note: in definition of macro '__trace_if'
     if (__builtin_constant_p((cond)) ? !!(cond) :   \
                               ^
   block/bio-integrity.c:175:2: note: in expansion of macro 'if'
     if (bio_data_dir(bio) == READ && bi->verify_fn != NULL &&
     ^
>> block/bio-integrity.c:180:19: error: 'BLK_INTEGRITY_GENERATE' undeclared (first use in this function)
         (bi->flags & BLK_INTEGRITY_GENERATE))
                      ^
   include/linux/compiler.h:147:28: note: in definition of macro '__trace_if'
     if (__builtin_constant_p((cond)) ? !!(cond) :   \
                               ^
   block/bio-integrity.c:179:2: note: in expansion of macro 'if'
     if (bio_data_dir(bio) == WRITE && bi->generate_fn != NULL &&
     ^
   block/bio-integrity.c: At top level:
>> block/bio-integrity.c:198:10: warning: 'struct blk_integrity' declared inside parameter list
             unsigned int sectors)
             ^
>> block/bio-integrity.c:198:10: warning: its scope is only this definition or declaration, which is probably not what you want
   In file included from include/linux/kernel.h:11:0,
                    from include/linux/sched.h:17,
                    from include/linux/blkdev.h:4,
                    from block/bio-integrity.c:23:
   block/bio-integrity.c: In function 'bio_integrity_intervals':
   block/bio-integrity.c:200:29: error: dereferencing pointer to incomplete type 'struct blk_integrity'
     return sectors >> (ilog2(bi->interval) - 9);
                                ^
   include/linux/log2.h:87:23: note: in definition of macro 'ilog2'
     __builtin_constant_p(n) ? (  \
                          ^
   block/bio-integrity.c: At top level:
   block/bio-integrity.c:204:13: warning: 'struct blk_integrity' declared inside parameter list
                unsigned int sectors)
                ^
   block/bio-integrity.c: In function 'bio_integrity_bytes':
--
   In file included from block/blk.h:5:0,
                    from block/blk-integrity.c:31:
>> include/linux/blk-mq.h:61:18: error: field 'kobj' has incomplete type
     struct kobject  kobj;
                     ^
>> include/linux/blk-mq.h:117:2: error: unknown type name 'softirq_done_fn'
     softirq_done_fn  *complete;
     ^
   include/linux/blk-mq.h: In function 'blk_mq_rq_from_pdu':
>> include/linux/blk-mq.h:241:22: error: invalid application of 'sizeof' to incomplete type 'struct request'
     return pdu - sizeof(struct request);
                         ^
   include/linux/blk-mq.h: In function 'blk_mq_rq_to_pdu':
>> include/linux/blk-mq.h:245:2: error: invalid use of undefined type 'struct request'
     return rq + 1;
     ^
   In file included from block/blk.h:6:0,
                    from block/blk-integrity.c:31:
   block/blk-mq.h: At top level:
>> block/blk-mq.h:25:18: error: field 'kobj' has incomplete type
     struct kobject  kobj;
                     ^
   In file included from include/asm-generic/percpu.h:6:0,
                    from arch/x86/include/asm/percpu.h:551,
                    from arch/x86/include/asm/preempt.h:5,
                    from include/linux/preempt.h:64,
                    from include/linux/spinlock.h:50,
                    from include/linux/seqlock.h:35,
                    from include/linux/time.h:5,
                    from include/uapi/linux/timex.h:56,
                    from include/linux/timex.h:56,
                    from include/linux/sched.h:19,
                    from include/linux/blkdev.h:4,
                    from block/blk-integrity.c:23:
   block/blk-mq.h: In function '__blk_mq_get_ctx':
>> block/blk-mq.h:79:22: error: dereferencing pointer to incomplete type 'struct request_queue'
     return per_cpu_ptr(q->queue_ctx, cpu);
                         ^
   include/linux/percpu-defs.h:206:47: note: in definition of macro '__verify_pcpu_ptr'
     const void __percpu *__vpp_verify = (typeof((ptr) + 0))NULL; \
                                                  ^
   include/linux/percpu-defs.h:250:47: note: in expansion of macro 'VERIFY_PERCPU_PTR'
    #define per_cpu_ptr(ptr, cpu) ({ (void)(cpu); VERIFY_PERCPU_PTR(ptr); })
                                                  ^
>> block/blk-mq.h:79:9: note: in expansion of macro 'per_cpu_ptr'
     return per_cpu_ptr(q->queue_ctx, cpu);
            ^
   In file included from block/blk-integrity.c:31:0:
   block/blk.h: In function '__blk_get_queue':
>> block/blk.h:54:2: error: implicit declaration of function 'kobject_get' [-Werror=implicit-function-declaration]
     kobject_get(&q->kobj);
     ^
   block/blk.h: At top level:
>> block/blk.h:62:3: warning: 'struct request_list' declared inside parameter list
      gfp_t gfp_mask);
      ^
>> block/blk.h:62:3: warning: its scope is only this definition or declaration, which is probably not what you want
   block/blk.h:63:25: warning: 'struct request_list' declared inside parameter list
    void blk_exit_rl(struct request_list *rl);
                            ^
   block/blk.h: In function 'blk_mark_rq_complete':
>> block/blk.h:108:48: error: dereferencing pointer to incomplete type 'struct request'
     return test_and_set_bit(REQ_ATOM_COMPLETE, &rq->atomic_flags);
                                                   ^
   block/blk.h: In function '__elv_next_request':
>> block/blk.h:130:9: error: implicit declaration of function 'list_entry_rq' [-Werror=implicit-function-declaration]
       rq = list_entry_rq(q->queue_head.next);
            ^
   In file included from include/uapi/linux/stddef.h:1:0,
                    from include/linux/stddef.h:4,
                    from include/uapi/linux/posix_types.h:4,
                    from include/uapi/linux/types.h:13,
                    from include/linux/types.h:5,
                    from include/uapi/linux/capability.h:16,
                    from include/linux/capability.h:15,
                    from include/linux/sched.h:15,
                    from include/linux/blkdev.h:4,
                    from block/blk-integrity.c:23:
>> block/blk.h:150:6: error: implicit declaration of function 'queue_flush_queueable' [-Werror=implicit-function-declaration]
        !queue_flush_queueable(q)) {
         ^
   include/linux/compiler.h:147:28: note: in definition of macro '__trace_if'
     if (__builtin_constant_p((cond)) ? !!(cond) :   \
                               ^
>> block/blk.h:149:3: note: in expansion of macro 'if'
      if (fq->flush_pending_idx != fq->flush_running_idx &&
      ^
>> block/blk.h:154:16: error: implicit declaration of function 'blk_queue_bypass' [-Werror=implicit-function-declaration]
      if (unlikely(blk_queue_bypass(q)) ||
                   ^
   include/linux/compiler.h:147:28: note: in definition of macro '__trace_if'
     if (__builtin_constant_p((cond)) ? !!(cond) :   \
                               ^
   block/blk.h:154:3: note: in expansion of macro 'if'
      if (unlikely(blk_queue_bypass(q)) ||
      ^
>> block/blk.h:154:7: note: in expansion of macro 'unlikely'
      if (unlikely(blk_queue_bypass(q)) ||
          ^
   block/blk.h: In function 'elv_activate_rq':
>> block/blk.h:164:7: error: dereferencing pointer to incomplete type 'struct elevator_queue'
     if (e->type->ops.elevator_activate_req_fn)
          ^
   include/linux/compiler.h:147:28: note: in definition of macro '__trace_if'
     if (__builtin_constant_p((cond)) ? !!(cond) :   \
                               ^
   block/blk.h:164:2: note: in expansion of macro 'if'
     if (e->type->ops.elevator_activate_req_fn)
     ^
   block/blk.h: In function 'elv_deactivate_rq':
   block/blk.h:172:7: error: dereferencing pointer to incomplete type 'struct elevator_queue'
     if (e->type->ops.elevator_deactivate_req_fn)
          ^
   include/linux/compiler.h:147:28: note: in definition of macro '__trace_if'
     if (__builtin_constant_p((cond)) ? !!(cond) :   \
                               ^
   block/blk.h:172:2: note: in expansion of macro 'if'
     if (e->type->ops.elevator_deactivate_req_fn)
     ^
   In file included from block/blk-integrity.c:31:0:
   block/blk.h: In function 'blk_do_io_stat':
>> block/blk.h:237:20: error: 'REQ_TYPE_FS' undeclared (first use in this function)
      (rq->cmd_type == REQ_TYPE_FS);
                       ^
   block/blk.h:237:20: note: each undeclared identifier is reported only once for each function it appears in
   block/blk-integrity.c: In function 'blk_rq_count_integrity_sg':
>> block/blk-integrity.c:50:19: error: storage size of 'iter' isn't known
     struct bvec_iter iter;
                      ^
>> block/blk-integrity.c:53:2: error: implicit declaration of function 'bio_for_each_integrity_vec' [-Werror=implicit-function-declaration]
     bio_for_each_integrity_vec(iv, bio, iter) {
     ^
..

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation
John Garry Nov. 17, 2015, 4:24 p.m. UTC | #2
I'll follow up with a fix in patchset v5. However kernel linking seems 
broken for this config without my patches.

arch/x86/built-in.o: In function `hv_machine_crash_shutdown':

mshyperv.c:(.text+0xa1ec4): undefined reference to 
`native_machine_crash_shutdown'

John

On 16/11/2015 17:35, kbuild test robot wrote:
> Hi John,
>
> [auto build test ERROR on scsi/for-next]
> [also build test ERROR on v4.4-rc1 next-20151116]
>
> url:https://github.com/0day-ci/linux/commits/John-Garry/HiSilicon-SAS-driver/20151116-215304
> base:https://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi.git  for-next
> config: i386-randconfig-s0-11162304 (attached as .config)
> reproduce:
>          # save the attached .config to linux build tree
>          make ARCH=i386
>
> All error/warnings (new ones prefixed by >>):
>
> warning: (SCSI_HISI_SAS && TCM_IBLOCK) selects BLK_DEV_INTEGRITY which has unmet direct dependencies (BLOCK)
> warning: (SCSI_HISI_SAS) selects SCSI_SAS_LIBSAS which has unmet direct dependencies (SCSI)
>     block/bio-integrity.c: In function 'bio_integrity_alloc':
>>> block/bio-integrity.c:50:26: error: dereferencing pointer to incomplete type 'struct bio'
>       struct bio_set *bs = bio->bi_pool;
>                               ^
>>> block/bio-integrity.c:51:22: error: 'BIO_POOL_NONE' undeclared (first use in this function)
>       unsigned long idx = BIO_POOL_NONE;
>                           ^
>     block/bio-integrity.c:51:22: note: each undeclared identifier is reported only once for each function it appears in
>     In file included from include/uapi/linux/stddef.h:1:0,
>                      from include/linux/stddef.h:4,
>                      from include/uapi/linux/posix_types.h:4,
>                      from include/uapi/linux/types.h:13,
>                      from include/linux/types.h:5,
>                      from include/uapi/linux/capability.h:16,
>                      from include/linux/capability.h:15,
>                      from include/linux/sched.h:15,
>                      from include/linux/blkdev.h:4,
>                      from block/bio-integrity.c:23:
>>> block/bio-integrity.c:54:16: error: dereferencing pointer to incomplete type 'struct bio_set'
>       if (!bs || !bs->bio_integrity_pool) {
>                     ^
>     include/linux/compiler.h:147:28: note: in definition of macro '__trace_if'
>       if (__builtin_constant_p((cond)) ? !!(cond) :   \
>                                 ^
>>> block/bio-integrity.c:54:2: note: in expansion of macro 'if'
>       if (!bs || !bs->bio_integrity_pool) {
>       ^
>>> block/bio-integrity.c:55:24: error: invalid application of 'sizeof' to incomplete type 'struct bio_integrity_payload'
>        bip = kmalloc(sizeof(struct bio_integrity_payload) +
>                             ^
>     In file included from arch/x86/include/asm/string.h:2:0,
>                      from include/linux/string.h:17,
>                      from include/linux/dynamic_debug.h:111,
>                      from include/linux/printk.h:277,
>                      from include/linux/kernel.h:13,
>                      from include/linux/sched.h:17,
>                      from include/linux/blkdev.h:4,
>                      from block/bio-integrity.c:23:
>>> block/bio-integrity.c:66:24: error: dereferencing pointer to incomplete type 'struct bio_integrity_payload'
>       memset(bip, 0, sizeof(*bip));
>                             ^
>     arch/x86/include/asm/string_32.h:325:52: note: in definition of macro 'memset'
>      #define memset(s, c, count) __builtin_memset(s, c, count)
>                                                         ^
>>> block/bio-integrity.c:69:18: error: implicit declaration of function 'bvec_alloc' [-Werror=implicit-function-declaration]
>        bip->bip_vec = bvec_alloc(gfp_mask, nr_vecs, &idx,
>                       ^
>>> block/bio-integrity.c:73:23: error: implicit declaration of function 'bvec_nr_vecs' [-Werror=implicit-function-declaration]
>        bip->bip_max_vcnt = bvec_nr_vecs(idx);
>                            ^
>     block/bio-integrity.c: In function 'bio_integrity_free':
>>> block/bio-integrity.c:100:38: error: implicit declaration of function 'bio_integrity' [-Werror=implicit-function-declaration]
>       struct bio_integrity_payload *bip = bio_integrity(bio);
>                                           ^
>>> block/bio-integrity.c:100:38: warning: initialization makes pointer from integer without a cast [-Wint-conversion]
>     In file included from include/uapi/linux/stddef.h:1:0,
>                      from include/linux/stddef.h:4,
>                      from include/uapi/linux/posix_types.h:4,
>                      from include/uapi/linux/types.h:13,
>                      from include/linux/types.h:5,
>                      from include/uapi/linux/capability.h:16,
>                      from include/linux/capability.h:15,
>                      from include/linux/sched.h:15,
>                      from include/linux/blkdev.h:4,
>                      from block/bio-integrity.c:23:
>>> block/bio-integrity.c:103:23: error: 'BIP_BLOCK_INTEGRITY' undeclared (first use in this function)
>       if (bip->bip_flags & BIP_BLOCK_INTEGRITY)
>                            ^
>     include/linux/compiler.h:147:28: note: in definition of macro '__trace_if'
>       if (__builtin_constant_p((cond)) ? !!(cond) :   \
>                                 ^
>     block/bio-integrity.c:103:2: note: in expansion of macro 'if'
>       if (bip->bip_flags & BIP_BLOCK_INTEGRITY)
>       ^
>     block/bio-integrity.c:108:24: error: 'BIO_POOL_NONE' undeclared (first use in this function)
>        if (bip->bip_slab != BIO_POOL_NONE)
>                             ^
>     include/linux/compiler.h:147:28: note: in definition of macro '__trace_if'
>       if (__builtin_constant_p((cond)) ? !!(cond) :   \
>                                 ^
>     block/bio-integrity.c:108:3: note: in expansion of macro 'if'
>        if (bip->bip_slab != BIO_POOL_NONE)
>        ^
>>> block/bio-integrity.c:109:4: error: implicit declaration of function 'bvec_free' [-Werror=implicit-function-declaration]
>         bvec_free(bs->bvec_integrity_pool, bip->bip_vec,
>         ^
>     block/bio-integrity.c: In function 'bio_integrity_add_page':
>     block/bio-integrity.c:133:38: warning: initialization makes pointer from integer without a cast [-Wint-conversion]
>       struct bio_integrity_payload *bip = bio_integrity(bio);
>                                           ^
>     block/bio-integrity.c: In function 'bio_integrity_enabled':
>>> block/bio-integrity.c:163:29: error: implicit declaration of function 'bdev_get_integrity' [-Werror=implicit-function-declaration]
>       struct blk_integrity *bi = bdev_get_integrity(bio->bi_bdev);
>                                  ^
>     In file included from include/uapi/linux/stddef.h:1:0,
>                      from include/linux/stddef.h:4,
>                      from include/uapi/linux/posix_types.h:4,
>                      from include/uapi/linux/types.h:13,
>                      from include/linux/types.h:5,
>                      from include/uapi/linux/capability.h:16,
>                      from include/linux/capability.h:15,
>                      from include/linux/sched.h:15,
>                      from include/linux/blkdev.h:4,
>                      from block/bio-integrity.c:23:
>>> block/bio-integrity.c:165:7: error: implicit declaration of function 'bio_is_rw' [-Werror=implicit-function-declaration]
>       if (!bio_is_rw(bio))
>            ^
>     include/linux/compiler.h:147:28: note: in definition of macro '__trace_if'
>       if (__builtin_constant_p((cond)) ? !!(cond) :   \
>                                 ^
>     block/bio-integrity.c:165:2: note: in expansion of macro 'if'
>       if (!bio_is_rw(bio))
>       ^
>>> block/bio-integrity.c:175:6: error: implicit declaration of function 'bio_data_dir' [-Werror=implicit-function-declaration]
>       if (bio_data_dir(bio) == READ && bi->verify_fn != NULL &&
>           ^
>     include/linux/compiler.h:147:28: note: in definition of macro '__trace_if'
>       if (__builtin_constant_p((cond)) ? !!(cond) :   \
>                                 ^
>     block/bio-integrity.c:175:2: note: in expansion of macro 'if'
>       if (bio_data_dir(bio) == READ && bi->verify_fn != NULL &&
>       ^
>>> block/bio-integrity.c:175:37: error: dereferencing pointer to incomplete type 'struct blk_integrity'
>       if (bio_data_dir(bio) == READ && bi->verify_fn != NULL &&
>                                          ^
>     include/linux/compiler.h:147:28: note: in definition of macro '__trace_if'
>       if (__builtin_constant_p((cond)) ? !!(cond) :   \
>                                 ^
>     block/bio-integrity.c:175:2: note: in expansion of macro 'if'
>       if (bio_data_dir(bio) == READ && bi->verify_fn != NULL &&
>       ^
>>> block/bio-integrity.c:176:19: error: 'BLK_INTEGRITY_VERIFY' undeclared (first use in this function)
>           (bi->flags & BLK_INTEGRITY_VERIFY))
>                        ^
>     include/linux/compiler.h:147:28: note: in definition of macro '__trace_if'
>       if (__builtin_constant_p((cond)) ? !!(cond) :   \
>                                 ^
>     block/bio-integrity.c:175:2: note: in expansion of macro 'if'
>       if (bio_data_dir(bio) == READ && bi->verify_fn != NULL &&
>       ^
>>> block/bio-integrity.c:180:19: error: 'BLK_INTEGRITY_GENERATE' undeclared (first use in this function)
>           (bi->flags & BLK_INTEGRITY_GENERATE))
>                        ^
>     include/linux/compiler.h:147:28: note: in definition of macro '__trace_if'
>       if (__builtin_constant_p((cond)) ? !!(cond) :   \
>                                 ^
>     block/bio-integrity.c:179:2: note: in expansion of macro 'if'
>       if (bio_data_dir(bio) == WRITE && bi->generate_fn != NULL &&
>       ^
>     block/bio-integrity.c: At top level:
>>> block/bio-integrity.c:198:10: warning: 'struct blk_integrity' declared inside parameter list
>               unsigned int sectors)
>               ^
>>> block/bio-integrity.c:198:10: warning: its scope is only this definition or declaration, which is probably not what you want
>     In file included from include/linux/kernel.h:11:0,
>                      from include/linux/sched.h:17,
>                      from include/linux/blkdev.h:4,
>                      from block/bio-integrity.c:23:
>     block/bio-integrity.c: In function 'bio_integrity_intervals':
>     block/bio-integrity.c:200:29: error: dereferencing pointer to incomplete type 'struct blk_integrity'
>       return sectors >> (ilog2(bi->interval) - 9);
>                                  ^
>     include/linux/log2.h:87:23: note: in definition of macro 'ilog2'
>       __builtin_constant_p(n) ? (  \
>                            ^
>     block/bio-integrity.c: At top level:
>     block/bio-integrity.c:204:13: warning: 'struct blk_integrity' declared inside parameter list
>                  unsigned int sectors)
>                  ^
>     block/bio-integrity.c: In function 'bio_integrity_bytes':
> --
>     In file included from block/blk.h:5:0,
>                      from block/blk-integrity.c:31:
>>> include/linux/blk-mq.h:61:18: error: field 'kobj' has incomplete type
>       struct kobject  kobj;
>                       ^
>>> include/linux/blk-mq.h:117:2: error: unknown type name 'softirq_done_fn'
>       softirq_done_fn  *complete;
>       ^
>     include/linux/blk-mq.h: In function 'blk_mq_rq_from_pdu':
>>> include/linux/blk-mq.h:241:22: error: invalid application of 'sizeof' to incomplete type 'struct request'
>       return pdu - sizeof(struct request);
>                           ^
>     include/linux/blk-mq.h: In function 'blk_mq_rq_to_pdu':
>>> include/linux/blk-mq.h:245:2: error: invalid use of undefined type 'struct request'
>       return rq + 1;
>       ^
>     In file included from block/blk.h:6:0,
>                      from block/blk-integrity.c:31:
>     block/blk-mq.h: At top level:
>>> block/blk-mq.h:25:18: error: field 'kobj' has incomplete type
>       struct kobject  kobj;
>                       ^
>     In file included from include/asm-generic/percpu.h:6:0,
>                      from arch/x86/include/asm/percpu.h:551,
>                      from arch/x86/include/asm/preempt.h:5,
>                      from include/linux/preempt.h:64,
>                      from include/linux/spinlock.h:50,
>                      from include/linux/seqlock.h:35,
>                      from include/linux/time.h:5,
>                      from include/uapi/linux/timex.h:56,
>                      from include/linux/timex.h:56,
>                      from include/linux/sched.h:19,
>                      from include/linux/blkdev.h:4,
>                      from block/blk-integrity.c:23:
>     block/blk-mq.h: In function '__blk_mq_get_ctx':
>>> block/blk-mq.h:79:22: error: dereferencing pointer to incomplete type 'struct request_queue'
>       return per_cpu_ptr(q->queue_ctx, cpu);
>                           ^
>     include/linux/percpu-defs.h:206:47: note: in definition of macro '__verify_pcpu_ptr'
>       const void __percpu *__vpp_verify = (typeof((ptr) + 0))NULL; \
>                                                    ^
>     include/linux/percpu-defs.h:250:47: note: in expansion of macro 'VERIFY_PERCPU_PTR'
>      #define per_cpu_ptr(ptr, cpu) ({ (void)(cpu); VERIFY_PERCPU_PTR(ptr); })
>                                                    ^
>>> block/blk-mq.h:79:9: note: in expansion of macro 'per_cpu_ptr'
>       return per_cpu_ptr(q->queue_ctx, cpu);
>              ^
>     In file included from block/blk-integrity.c:31:0:
>     block/blk.h: In function '__blk_get_queue':
>>> block/blk.h:54:2: error: implicit declaration of function 'kobject_get' [-Werror=implicit-function-declaration]
>       kobject_get(&q->kobj);
>       ^
>     block/blk.h: At top level:
>>> block/blk.h:62:3: warning: 'struct request_list' declared inside parameter list
>        gfp_t gfp_mask);
>        ^
>>> block/blk.h:62:3: warning: its scope is only this definition or declaration, which is probably not what you want
>     block/blk.h:63:25: warning: 'struct request_list' declared inside parameter list
>      void blk_exit_rl(struct request_list *rl);
>                              ^
>     block/blk.h: In function 'blk_mark_rq_complete':
>>> block/blk.h:108:48: error: dereferencing pointer to incomplete type 'struct request'
>       return test_and_set_bit(REQ_ATOM_COMPLETE, &rq->atomic_flags);
>                                                     ^
>     block/blk.h: In function '__elv_next_request':
>>> block/blk.h:130:9: error: implicit declaration of function 'list_entry_rq' [-Werror=implicit-function-declaration]
>         rq = list_entry_rq(q->queue_head.next);
>              ^
>     In file included from include/uapi/linux/stddef.h:1:0,
>                      from include/linux/stddef.h:4,
>                      from include/uapi/linux/posix_types.h:4,
>                      from include/uapi/linux/types.h:13,
>                      from include/linux/types.h:5,
>                      from include/uapi/linux/capability.h:16,
>                      from include/linux/capability.h:15,
>                      from include/linux/sched.h:15,
>                      from include/linux/blkdev.h:4,
>                      from block/blk-integrity.c:23:
>>> block/blk.h:150:6: error: implicit declaration of function 'queue_flush_queueable' [-Werror=implicit-function-declaration]
>          !queue_flush_queueable(q)) {
>           ^
>     include/linux/compiler.h:147:28: note: in definition of macro '__trace_if'
>       if (__builtin_constant_p((cond)) ? !!(cond) :   \
>                                 ^
>>> block/blk.h:149:3: note: in expansion of macro 'if'
>        if (fq->flush_pending_idx != fq->flush_running_idx &&
>        ^
>>> block/blk.h:154:16: error: implicit declaration of function 'blk_queue_bypass' [-Werror=implicit-function-declaration]
>        if (unlikely(blk_queue_bypass(q)) ||
>                     ^
>     include/linux/compiler.h:147:28: note: in definition of macro '__trace_if'
>       if (__builtin_constant_p((cond)) ? !!(cond) :   \
>                                 ^
>     block/blk.h:154:3: note: in expansion of macro 'if'
>        if (unlikely(blk_queue_bypass(q)) ||
>        ^
>>> block/blk.h:154:7: note: in expansion of macro 'unlikely'
>        if (unlikely(blk_queue_bypass(q)) ||
>            ^
>     block/blk.h: In function 'elv_activate_rq':
>>> block/blk.h:164:7: error: dereferencing pointer to incomplete type 'struct elevator_queue'
>       if (e->type->ops.elevator_activate_req_fn)
>            ^
>     include/linux/compiler.h:147:28: note: in definition of macro '__trace_if'
>       if (__builtin_constant_p((cond)) ? !!(cond) :   \
>                                 ^
>     block/blk.h:164:2: note: in expansion of macro 'if'
>       if (e->type->ops.elevator_activate_req_fn)
>       ^
>     block/blk.h: In function 'elv_deactivate_rq':
>     block/blk.h:172:7: error: dereferencing pointer to incomplete type 'struct elevator_queue'
>       if (e->type->ops.elevator_deactivate_req_fn)
>            ^
>     include/linux/compiler.h:147:28: note: in definition of macro '__trace_if'
>       if (__builtin_constant_p((cond)) ? !!(cond) :   \
>                                 ^
>     block/blk.h:172:2: note: in expansion of macro 'if'
>       if (e->type->ops.elevator_deactivate_req_fn)
>       ^
>     In file included from block/blk-integrity.c:31:0:
>     block/blk.h: In function 'blk_do_io_stat':
>>> block/blk.h:237:20: error: 'REQ_TYPE_FS' undeclared (first use in this function)
>        (rq->cmd_type == REQ_TYPE_FS);
>                         ^
>     block/blk.h:237:20: note: each undeclared identifier is reported only once for each function it appears in
>     block/blk-integrity.c: In function 'blk_rq_count_integrity_sg':
>>> block/blk-integrity.c:50:19: error: storage size of 'iter' isn't known
>       struct bvec_iter iter;
>                        ^
>>> block/blk-integrity.c:53:2: error: implicit declaration of function 'bio_for_each_integrity_vec' [-Werror=implicit-function-declaration]
>       bio_for_each_integrity_vec(iv, bio, iter) {
>       ^
> ..
>
> ---
> 0-DAY kernel test infrastructure                Open Source Technology Center
> https://lists.01.org/pipermail/kbuild-all                    Intel Corporation


--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/scsi/Kconfig b/drivers/scsi/Kconfig
index 5f692ae..1a6a711 100644
--- a/drivers/scsi/Kconfig
+++ b/drivers/scsi/Kconfig
@@ -1766,5 +1766,6 @@  source "drivers/scsi/pcmcia/Kconfig"
 source "drivers/scsi/device_handler/Kconfig"
 
 source "drivers/scsi/osd/Kconfig"
+source "drivers/scsi/hisi_sas/Kconfig"
 
 endmenu
diff --git a/drivers/scsi/Makefile b/drivers/scsi/Makefile
index c14bca4..862ab4e 100644
--- a/drivers/scsi/Makefile
+++ b/drivers/scsi/Makefile
@@ -157,6 +157,7 @@  obj-$(CONFIG_CHR_DEV_SCH)	+= ch.o
 obj-$(CONFIG_SCSI_ENCLOSURE)	+= ses.o
 
 obj-$(CONFIG_SCSI_OSD_INITIATOR) += osd/
+obj-$(CONFIG_SCSI_HISI_SAS) += hisi_sas/
 
 # This goes last, so that "real" scsi devices probe earlier
 obj-$(CONFIG_SCSI_DEBUG)	+= scsi_debug.o
diff --git a/drivers/scsi/hisi_sas/Kconfig b/drivers/scsi/hisi_sas/Kconfig
new file mode 100644
index 0000000..37a0c71
--- /dev/null
+++ b/drivers/scsi/hisi_sas/Kconfig
@@ -0,0 +1,6 @@ 
+config SCSI_HISI_SAS
+	tristate "HiSilicon SAS"
+	select SCSI_SAS_LIBSAS
+	select BLK_DEV_INTEGRITY
+	help
+		This driver supports HiSilicon's SAS HBA
diff --git a/drivers/scsi/hisi_sas/Makefile b/drivers/scsi/hisi_sas/Makefile
new file mode 100644
index 0000000..d86b05e
--- /dev/null
+++ b/drivers/scsi/hisi_sas/Makefile
@@ -0,0 +1 @@ 
+obj-$(CONFIG_SCSI_HISI_SAS)		+= hisi_sas_main.o
diff --git a/drivers/scsi/hisi_sas/hisi_sas.h b/drivers/scsi/hisi_sas/hisi_sas.h
new file mode 100644
index 0000000..a5cec22
--- /dev/null
+++ b/drivers/scsi/hisi_sas/hisi_sas.h
@@ -0,0 +1,26 @@ 
+/*
+ * Copyright (c) 2015 Linaro Ltd.
+ * Copyright (c) 2015 Hisilicon Limited.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ */
+
+#ifndef _HISI_SAS_H_
+#define _HISI_SAS_H_
+
+#include <linux/dmapool.h>
+#include <linux/mfd/syscon.h>
+#include <linux/module.h>
+#include <linux/of_address.h>
+#include <linux/of_irq.h>
+#include <linux/platform_device.h>
+#include <linux/regmap.h>
+#include <scsi/libsas.h>
+
+#define DRV_VERSION "v1.0"
+
+#endif
diff --git a/drivers/scsi/hisi_sas/hisi_sas_main.c b/drivers/scsi/hisi_sas/hisi_sas_main.c
new file mode 100644
index 0000000..7201363
--- /dev/null
+++ b/drivers/scsi/hisi_sas/hisi_sas_main.c
@@ -0,0 +1,43 @@ 
+/*
+ * Copyright (c) 2015 Linaro Ltd.
+ * Copyright (c) 2015 Hisilicon Limited.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ */
+
+#include "hisi_sas.h"
+#define DRV_NAME "hisi_sas"
+
+static struct scsi_transport_template *hisi_sas_stt;
+
+static struct sas_domain_function_template hisi_sas_transport_ops = {
+};
+
+static __init int hisi_sas_init(void)
+{
+	pr_info("hisi_sas: driver version %s\n", DRV_VERSION);
+
+	hisi_sas_stt = sas_domain_attach_transport(&hisi_sas_transport_ops);
+	if (!hisi_sas_stt)
+		return -ENOMEM;
+
+	return 0;
+}
+
+static __exit void hisi_sas_exit(void)
+{
+	sas_release_transport(hisi_sas_stt);
+}
+
+module_init(hisi_sas_init);
+module_exit(hisi_sas_exit);
+
+MODULE_VERSION(DRV_VERSION);
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("John Garry <john.garry@huawei.com>");
+MODULE_DESCRIPTION("HISILICON SAS controller driver");
+MODULE_ALIAS("platform:" DRV_NAME);