From patchwork Thu Feb 5 08:42:10 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Vasant Hegde X-Patchwork-Id: 436692 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.ozlabs.org (lists.ozlabs.org [103.22.144.68]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 539251401DE for ; Thu, 5 Feb 2015 19:43:03 +1100 (AEDT) Received: from ozlabs.org (ozlabs.org [103.22.144.67]) by lists.ozlabs.org (Postfix) with ESMTP id 42A4B1A0EF4 for ; Thu, 5 Feb 2015 19:43:03 +1100 (AEDT) X-Original-To: skiboot@lists.ozlabs.org Delivered-To: skiboot@lists.ozlabs.org Received: from e23smtp04.au.ibm.com (e23smtp04.au.ibm.com [202.81.31.146]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 2F2E61A0E6D for ; Thu, 5 Feb 2015 19:43:01 +1100 (AEDT) Received: from /spool/local by e23smtp04.au.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Thu, 5 Feb 2015 18:43:00 +1000 Received: from d23dlp01.au.ibm.com (202.81.31.203) by e23smtp04.au.ibm.com (202.81.31.210) with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted; Thu, 5 Feb 2015 18:43:00 +1000 Received: from d23relay08.au.ibm.com (d23relay08.au.ibm.com [9.185.71.33]) by d23dlp01.au.ibm.com (Postfix) with ESMTP id B9CEC2CE8050 for ; Thu, 5 Feb 2015 19:42:59 +1100 (EST) Received: from d23av03.au.ibm.com (d23av03.au.ibm.com [9.190.234.97]) by d23relay08.au.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id t158gpVZ34406466 for ; Thu, 5 Feb 2015 19:42:59 +1100 Received: from d23av03.au.ibm.com (localhost [127.0.0.1]) by d23av03.au.ibm.com (8.14.4/8.14.4/NCO v10.0 AVout) with ESMTP id t158gQXh004499 for ; Thu, 5 Feb 2015 19:42:26 +1100 Received: from localhost.localdomain ([9.124.35.64]) by d23av03.au.ibm.com (8.14.4/8.14.4/NCO v10.0 AVin) with ESMTP id t158gPdT004169 for ; Thu, 5 Feb 2015 19:42:25 +1100 From: Vasant Hegde To: skiboot@lists.ozlabs.org Date: Thu, 05 Feb 2015 14:12:10 +0530 Message-ID: <20150205084209.12859.56528.stgit@localhost.localdomain> In-Reply-To: <20150205083611.12859.41225.stgit@localhost.localdomain> References: <20150205083611.12859.41225.stgit@localhost.localdomain> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 X-TM-AS-MML: disable X-Content-Scanned: Fidelis XPS MAILER x-cbid: 15020508-0013-0000-0000-000000C6C303 Subject: [Skiboot] [PATCH 18/22] FSP/LEDS: Serialize the entire LED state change code and it's callback X-BeenThere: skiboot@lists.ozlabs.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Mailing list for skiboot development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: skiboot-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org Sender: "Skiboot" From: Anshuman Khandual This patch increase the scope of the lock to cover all data structure manipulation and SPCN command queuing to change the LED state. It also locks the corresponding sections in the function callback. Signed-off-by: Anshuman Khandual Signed-off-by: Vasant Hegde --- hw/fsp/fsp-leds.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/hw/fsp/fsp-leds.c b/hw/fsp/fsp-leds.c index 7c8bc8b..ecdc3a9 100644 --- a/hw/fsp/fsp-leds.c +++ b/hw/fsp/fsp-leds.c @@ -260,6 +260,8 @@ static void fsp_spcn_set_led_completion(struct fsp_msg *msg) u8 status = resp->word1 & 0xff00; struct led_set_cmd *spcn_cmd = (struct led_set_cmd *)msg->user_data; + lock(&led_lock); + /* * LED state update request came as part of FSP async message * FSP_CMD_SET_LED_STATE, hence need to send response message. @@ -292,6 +294,8 @@ static void fsp_spcn_set_led_completion(struct fsp_msg *msg) } } + unlock(&led_lock); + free_spcn_cmd(spcn_cmd); /* free msg */ @@ -328,6 +332,8 @@ static int fsp_msg_set_led_state(struct led_set_cmd *spcn_cmd) sled.lc_len = strlen(spcn_cmd->loc_code); strncpy(sled.lc_code, spcn_cmd->loc_code, sled.lc_len); + lock(&led_lock); + /* Location code length + Location code + LED control */ data_len = LOC_CODE_LEN + sled.lc_len + LED_CONTROL_LEN; cmd_hdr = SPCN_MOD_SET_LED_CTL_LOC_CODE << 24 | SPCN_CMD_SET << 16 | @@ -355,6 +361,8 @@ static int fsp_msg_set_led_state(struct led_set_cmd *spcn_cmd) "|FSP_STATUS_INVALID_LC\n"); } } + + unlock(&led_lock); free_spcn_cmd(spcn_cmd); return rc; } @@ -408,6 +416,7 @@ static int fsp_msg_set_led_state(struct led_set_cmd *spcn_cmd) msg = fsp_mkmsg(FSP_CMD_SPCN_PASSTHRU, 4, SPCN_ADDR_MODE_CEC_NODE, cmd_hdr, 0, PSI_DMA_LED_BUF); if (!msg) { + unlock(&led_lock); free_spcn_cmd(spcn_cmd); return rc; } @@ -416,10 +425,8 @@ static int fsp_msg_set_led_state(struct led_set_cmd *spcn_cmd) * Update the local lists based on the attempted SPCN command to * set/reset an individual led (CEC or ENCL). */ - lock(&led_lock); update_led_list(spcn_cmd->loc_code, sled.state); msg->user_data = spcn_cmd; - unlock(&led_lock); rc = fsp_queue_msg(msg, fsp_spcn_set_led_completion); if (rc != OPAL_SUCCESS) { @@ -427,6 +434,7 @@ static int fsp_msg_set_led_state(struct led_set_cmd *spcn_cmd) free_spcn_cmd(spcn_cmd); } + unlock(&led_lock); return rc; }