[PATCH] lkdtm: do not depend on CONFIG_BLOCK

Christophe Leroy christophe.leroy at c-s.fr
Wed Nov 28 02:59:11 AEDT 2018



On 11/27/2018 07:43 AM, Greg Kroah-Hartman wrote:
> On Fri, Nov 09, 2018 at 07:05:51AM +0000, Christophe Leroy wrote:
>> Most parts of lkdtm don't require CONFIG_BLOCK.
>>
>> This patch limits dependency to CONFIG_BLOCK in order to give embedded
>> platforms which don't select CONFIG_BLOCK the opportunity to use LKDTM.
>>
>> Fixes: fddd9cf82c9f ("make LKDTM depend on BLOCK")
>> Signed-off-by: Christophe Leroy <christophe.leroy at c-s.fr>
>> ---
>>   drivers/misc/lkdtm/core.c | 7 ++++++-
>>   lib/Kconfig.debug         | 1 -
>>   2 files changed, 6 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/misc/lkdtm/core.c b/drivers/misc/lkdtm/core.c
>> index 2837dc77478e..bc76756b7eda 100644
>> --- a/drivers/misc/lkdtm/core.c
>> +++ b/drivers/misc/lkdtm/core.c
>> @@ -40,9 +40,12 @@
>>   #include <linux/interrupt.h>
>>   #include <linux/hrtimer.h>
>>   #include <linux/slab.h>
>> -#include <scsi/scsi_cmnd.h>
>>   #include <linux/debugfs.h>
>>   
>> +#ifdef CONFIG_BLOCK
>> +#include <scsi/scsi_cmnd.h>
>> +#endif
> 
> Why would this config option be needed to be checked just to be able to
> include a .h file?

Because if including that file regardless of the config option, you get:

   CALL    scripts/checksyscalls.sh
   CC      drivers/misc/lkdtm/core.o
In file included from ./include/scsi/scsi_cmnd.h:7:0,
                  from drivers/misc/lkdtm/core.c:45:
./include/linux/t10-pi.h:40:41: warning: 'struct request' declared 
inside parameter list
  static inline u32 t10_pi_ref_tag(struct request *rq)
                                          ^
./include/linux/t10-pi.h:40:41: warning: its scope is only this 
definition or declaration, which is probably not what you want
./include/linux/t10-pi.h:61:8: warning: 'struct request' declared inside 
parameter list
         unsigned int intervals)
         ^
./include/linux/t10-pi.h:64:42: warning: 'struct request' declared 
inside parameter list
  static inline void t10_pi_prepare(struct request *rq, u8 protection_type)
                                           ^
In file included from ./include/scsi/scsi_cmnd.h:12:0,
                  from drivers/misc/lkdtm/core.c:45:
./include/scsi/scsi_device.h:435:4: error: unknown type name 'req_flags_t'
     req_flags_t rq_flags, int *resid);
     ^
./include/scsi/scsi_device.h: In function 'scsi_execute_req':
./include/scsi/scsi_device.h:442:2: error: implicit declaration of 
function '__scsi_execute' [-Werror=implicit-function-declaration]
   __scsi_execute(sdev, cmd, data_direction, buffer, bufflen, \
   ^
./include/scsi/scsi_device.h:451:9: note: in expansion of macro 
'scsi_execute'
   return scsi_execute(sdev, cmd, data_direction, buffer,
          ^
In file included from ./include/scsi/scsi_request.h:5:0,
                  from ./include/scsi/scsi_cmnd.h:13,
                  from drivers/misc/lkdtm/core.c:45:
./include/linux/blk-mq.h: At top level:
./include/linux/blk-mq.h:100:9: error: type defaults to 'int' in 
declaration of 'blk_status_t' [-Werror=implicit-int]
  typedef blk_status_t (queue_rq_fn)(struct blk_mq_hw_ctx *,
          ^
./include/linux/blk-mq.h:100:9: error: 'blk_status_t' declared as 
function returning a function
./include/linux/blk-mq.h:101:16: warning: parameter names (without 
types) in function declaration
    const struct blk_mq_queue_data *);
                 ^
./include/linux/blk-mq.h:123:2: error: unknown type name 'queue_rq_fn'
   queue_rq_fn  *queue_rq;
   ^
./include/linux/blk-mq.h:144:2: error: unknown type name 'softirq_done_fn'
   softirq_done_fn  *complete;
   ^
./include/linux/blk-mq.h:223:31: error: 'blk_mq_req_flags_t' undeclared 
here (not in a function)
   BLK_MQ_REQ_NOWAIT = (__force blk_mq_req_flags_t)(1 << 0),
                                ^
./include/linux/blk-mq.h:233:3: error: expected declaration specifiers 
or '...' before 'blk_mq_req_flags_t'
    blk_mq_req_flags_t flags);
    ^
./include/linux/blk-mq.h:235:20: error: expected declaration specifiers 
or '...' before 'blk_mq_req_flags_t'
    unsigned int op, blk_mq_req_flags_t flags,
                     ^
In file included from ./arch/powerpc/include/asm/atomic.h:11:0,
                  from ./include/linux/atomic.h:7,
                  from ./include/linux/spinlock.h:436,
                  from ./include/linux/wait.h:9,
                  from ./include/linux/wait_bit.h:8,
                  from ./include/linux/fs.h:6,
                  from drivers/misc/lkdtm/core.c:34:
./include/linux/blk-mq.h: In function 'blk_mq_mark_complete':
./include/linux/blk-mq.h:306:20: error: dereferencing pointer to 
incomplete type 'struct request'
   return cmpxchg(&rq->state, MQ_RQ_IN_FLIGHT, MQ_RQ_COMPLETE) ==
                     ^
./arch/powerpc/include/asm/cmpxchg.h:483:19: note: in definition of 
macro 'cmpxchg'
       __typeof__(*(ptr)) _o_ = (o);      \
                    ^
./include/linux/blk-mq.h:306:29: error: 'MQ_RQ_IN_FLIGHT' undeclared 
(first use in this function)
   return cmpxchg(&rq->state, MQ_RQ_IN_FLIGHT, MQ_RQ_COMPLETE) ==
                              ^
./arch/powerpc/include/asm/cmpxchg.h:483:32: note: in definition of 
macro 'cmpxchg'
       __typeof__(*(ptr)) _o_ = (o);      \
                                 ^
./include/linux/blk-mq.h:306:29: note: each undeclared identifier is 
reported only once for each function it appears in
   return cmpxchg(&rq->state, MQ_RQ_IN_FLIGHT, MQ_RQ_COMPLETE) ==
                              ^
./arch/powerpc/include/asm/cmpxchg.h:483:32: note: in definition of 
macro 'cmpxchg'
       __typeof__(*(ptr)) _o_ = (o);      \
                                 ^
./include/linux/blk-mq.h:306:46: error: 'MQ_RQ_COMPLETE' undeclared 
(first use in this function)
   return cmpxchg(&rq->state, MQ_RQ_IN_FLIGHT, MQ_RQ_COMPLETE) ==
                                               ^
./arch/powerpc/include/asm/cmpxchg.h:484:32: note: in definition of 
macro 'cmpxchg'
       __typeof__(*(ptr)) _n_ = (n);      \
                                 ^
In file included from ./include/scsi/scsi_request.h:5:0,
                  from ./include/scsi/scsi_cmnd.h:13,
                  from drivers/misc/lkdtm/core.c:45:
./include/linux/blk-mq.h: In function 'blk_mq_rq_from_pdu':
./include/linux/blk-mq.h:316: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:320:2: error: invalid use of undefined type 
'struct request'
   return rq + 1;
   ^
In file included from drivers/misc/lkdtm/core.c:45:0:
./include/scsi/scsi_cmnd.h: In function 'scsi_bidi_cmnd':
./include/scsi/scsi_cmnd.h:214:9: error: implicit declaration of 
function 'blk_bidi_rq' [-Werror=implicit-function-declaration]
   return blk_bidi_rq(cmd->request) &&
          ^
./include/scsi/scsi_cmnd.h: In function 'scsi_get_lba':
./include/scsi/scsi_cmnd.h:307:9: error: implicit declaration of 
function 'blk_rq_pos' [-Werror=implicit-function-declaration]
   return blk_rq_pos(scmd->request);
          ^
cc1: some warnings being treated as errors
make[1]: *** [drivers/misc/lkdtm/core.o] Error 1
make: *** [drivers/misc/lkdtm/core.o] Error 2


> 
> And shouldn't you be depending on SCSI instead?

Yes maybe. I did make it depend on CONFIG_BLOCK because it was what it 
was depending on in the Kconfig. I'll send a v2

Christophe

> 
>> +
>>   #ifdef CONFIG_IDE
>>   #include <linux/ide.h>
>>   #endif
>> @@ -101,7 +104,9 @@ static struct crashpoint crashpoints[] = {
>>   	CRASHPOINT("FS_DEVRW",		 "ll_rw_block"),
>>   	CRASHPOINT("MEM_SWAPOUT",	 "shrink_inactive_list"),
>>   	CRASHPOINT("TIMERADD",		 "hrtimer_start"),
>> +# ifdef CONFIG_BLOCK
>>   	CRASHPOINT("SCSI_DISPATCH_CMD",	 "scsi_dispatch_cmd"),
>> +# endif
> 
> Again, scsi?
> 
> thanks,
> 
> greg k-h
> 


More information about the Linuxppc-dev mailing list