From patchwork Mon Nov 5 18:22:47 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Frank Heimes X-Patchwork-Id: 993303 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.ubuntu.com (client-ip=91.189.94.19; helo=huckleberry.canonical.com; envelope-from=kernel-team-bounces@lists.ubuntu.com; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=canonical.com Received: from huckleberry.canonical.com (huckleberry.canonical.com [91.189.94.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 42pgyz0bdpz9sN6; Tue, 6 Nov 2018 05:23:07 +1100 (AEDT) Received: from localhost ([127.0.0.1] helo=huckleberry.canonical.com) by huckleberry.canonical.com with esmtp (Exim 4.86_2) (envelope-from ) id 1gJjWf-00072o-E5; Mon, 05 Nov 2018 18:23:01 +0000 Received: from youngberry.canonical.com ([91.189.89.112]) by huckleberry.canonical.com with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:128) (Exim 4.86_2) (envelope-from ) id 1gJjWe-00072e-4Y for kernel-team@lists.ubuntu.com; Mon, 05 Nov 2018 18:23:00 +0000 Received: from mail-lj1-f199.google.com ([209.85.208.199]) by youngberry.canonical.com with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.76) (envelope-from ) id 1gJjWd-0005Hk-SF for kernel-team@lists.ubuntu.com; Mon, 05 Nov 2018 18:22:59 +0000 Received: by mail-lj1-f199.google.com with SMTP id p65-v6so2939517ljb.16 for ; Mon, 05 Nov 2018 10:22:59 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to; bh=K3pe86G8BvjyIPCqxjKuXNIu5YGYj3++txVlFKz8WIc=; b=s692Mr7DBSA5wA06YlETyzmLp2j4D5fsvGhcorgj9E0ihHyDdDrFMd42l1fdjQqnVC RZXJ8z+9MgYhyUUzdQfjUwgwPX4htrtrX/CB4PVtYap7mE58OGUe3KFk6kVAjg3d1wy1 2MqXEKr5Sza3R5xYQulbYU3+o8EHHGQxXIzJozN4j2SW6km3K7wUes4mUd4Ap6DnumYr pd+C+My+3xaAeb/IzFL9jTacPIjQEcFmUVSeTjGlskDNwUhQRBN3QN/AQb/2Qwl8GGxU EuIvzofEPooc5g7NddezsV1Ll1jHX6jbKp9cazJZOLK4xR/8GA9Z4CwIB7KZkYxgVKJ8 5Liw== X-Gm-Message-State: AGRZ1gIm5L+YlfpRRZRD8lpau6IgJjOuZxTWvC1VTqqFGnoBViBDNR4l IzQCycPlPv2/ZolYKzmAj+gyJOmbgfGZ1jN12+UHcbrCybIfoJITznp4rJrgMUhBPEwWZiFS+ol nMNlEDrjDMcBxj0TlaqSLBN+0E7xtQxGHL1hBGjngj3AkZLBiWOSvM9TGmg== X-Received: by 2002:a2e:9715:: with SMTP id r21-v6mr1464788lji.30.1541442178731; Mon, 05 Nov 2018 10:22:58 -0800 (PST) X-Google-Smtp-Source: AJdET5fBFUY9vVCeDGLwz3+KU+OeBbyuC1QtUWAJnnv6P5aE8m8ScrwgENb4kv3ilJsin8H47oDMeJr9nW4ypVKz5Ak= X-Received: by 2002:a2e:9715:: with SMTP id r21-v6mr1464773lji.30.1541442178378; Mon, 05 Nov 2018 10:22:58 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Frank Heimes Date: Mon, 5 Nov 2018 19:22:47 +0100 Message-ID: Subject: [SRU][Bionic][PATCH 1/1] s390/qdio: reset old sbal_state flags To: kernel-team@lists.ubuntu.com X-BeenThere: kernel-team@lists.ubuntu.com X-Mailman-Version: 2.1.20 Precedence: list List-Id: Kernel team discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: kernel-team-bounces@lists.ubuntu.com Sender: "kernel-team" From: Julian Wiedmann BugLink: http://bugs.launchpad.net/bugs/1801686 s390/qdio: reset old sbal_state flags When allocating a new AOB fails, handle_outbound() is still capable of transmitting the selected buffer (just without async completion). But if a previous transfer on this queue slot used async completion, its sbal_state flags field is still set to QDIO_OUTBUF_STATE_FLAG_PENDING. So when the upper layer driver sees this stale flag, it expects an async completion that never happens. Fix this by unconditionally clearing the flags field. Fixes: 104ea556ee7f ("qdio: support asynchronous delivery of storage blocks") Cc: #v3.2+ Signed-off-by: Julian Wiedmann Signed-off-by: Martin Schwidefsky (cherry picked from commit 64e03ff72623b8c2ea89ca3cb660094e019ed4ae) Signed-off-by: Frank Heimes diff --git a/arch/s390/include/asm/qdio.h b/arch/s390/include/asm/qdio.h index de11ecc..9c9970a 100644 --- a/arch/s390/include/asm/qdio.h +++ b/arch/s390/include/asm/qdio.h @@ -262,7 +262,6 @@ struct qdio_outbuf_state { void *user; }; -#define QDIO_OUTBUF_STATE_FLAG_NONE 0x00 #define QDIO_OUTBUF_STATE_FLAG_PENDING 0x01 #define CHSC_AC1_INITIATE_INPUTQ 0x80 diff --git a/drivers/s390/cio/qdio_main.c b/drivers/s390/cio/qdio_main.c index f4ca72d..9c7d9da 100644 --- a/drivers/s390/cio/qdio_main.c +++ b/drivers/s390/cio/qdio_main.c @@ -631,21 +631,20 @@ static inline unsigned long qdio_aob_for_buffer(struct qdio_output_q *q, unsigned long phys_aob = 0; if (!q->use_cq) - goto out; + return 0; if (!q->aobs[bufnr]) { struct qaob *aob = qdio_allocate_aob(); q->aobs[bufnr] = aob; } if (q->aobs[bufnr]) { - q->sbal_state[bufnr].flags = QDIO_OUTBUF_STATE_FLAG_NONE; q->sbal_state[bufnr].aob = q->aobs[bufnr]; q->aobs[bufnr]->user1 = (u64) q->sbal_state[bufnr].user; phys_aob = virt_to_phys(q->aobs[bufnr]); WARN_ON_ONCE(phys_aob & 0xFF); } -out: + q->sbal_state[bufnr].flags = 0; return phys_aob; }