lkml.org 
[lkml]   [2006]   [Jun]   [15]   [last100]   RSS Feed
Views: [more markup]  [less markup]  [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    DateThu, 15 Jun 2006 08:55:31 +0200
    FromHeiko Carstens <>
    SubjectRe: [patch] ipv4: fix lock usage in udp_ioctl
    On Thu, Jun 15, 2006 at 08:28:07AM +0200, Ingo Molnar wrote:
    > 
    > * Herbert Xu <herbert@gondor.apana.org.au> wrote:
    > 
    > > This is bogus.  These two locks belong to two different queues and 
    > > they never intersect.
    > 
    > yeah - qeth does its own skb-queue management here, and it's done in an 
    > irq-safe manner.
    > 
    > Heiko, in qeth_main.c, could you do something like:
    > 
    > + static struct lockdep_type_key qdio_out_skb_queue_key;
    > 
    > ...
    > 		skb_queue_head_init(&card->qdio.out_qs[i]->bufs[j].
    > 				     skb_list);
    > +		lockdep_reinit_key(&card->qdio.out_qs[i]->bufs[j].skb_list,
    > 				   &qdio_out_skb_queue_key)
    
    How about the patch below? The warning goes away and I assume "tmp_list" needs
    lockdep_reinit_key too, since it should have the same locking rules as the
    rest of qeth's skb-queue management.
    
    From: Heiko Carstens <heiko.carstens@de.ibm.com>
    
    Avoid false positive illegal lock usage message in qeth driver.
    
    Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
    ---
     drivers/s390/net/qeth_main.c |    6 ++++++
     1 file changed, 6 insertions(+)
    --- a/drivers/s390/net/qeth_main.c	2006-06-15 08:46:26.000000000 +0200
    +++ b/drivers/s390/net/qeth_main.c	2006-06-15 08:29:58.000000000 +0200
    @@ -85,6 +85,8 @@ static debug_info_t *qeth_dbf_qerr = NUL
     
     DEFINE_PER_CPU(char[256], qeth_dbf_txt_buf);
     
    +static struct lockdep_type_key qdio_out_skb_queue_key;
    +
     /**
      * some more definitions and declarations
      */
    @@ -3230,6 +3232,9 @@ qeth_alloc_qdio_buffers(struct qeth_card
     				&card->qdio.out_qs[i]->qdio_bufs[j];
     			skb_queue_head_init(&card->qdio.out_qs[i]->bufs[j].
     					    skb_list);
    +			lockdep_reinit_key(
    +				&card->qdio.out_qs[i]->bufs[j].skb_list.lock,
    +				&qdio_out_skb_queue_key);
     			INIT_LIST_HEAD(&card->qdio.out_qs[i]->bufs[j].ctx_list);
     		}
     	}
    @@ -5273,6 +5278,7 @@ qeth_free_vlan_buffer(struct qeth_card *
     	struct sk_buff_head tmp_list;
     
     	skb_queue_head_init(&tmp_list);
    +	lockdep_reinit_key(&tmp_list.lock, &qdio_out_skb_queue_key);
     	for(i = 0; i < QETH_MAX_BUFFER_ELEMENTS(card); ++i){
     		while ((skb = skb_dequeue(&buf->skb_list))){
     			if (vlan_tx_tag_present(skb) &&
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at  http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at  http://www.tux.org/lkml/
    
    \
     
     \ /
      Last update: 2006-06-15 08:58    [from the cache]
    ©2003-2008