All of lore.kernel.org
 help / color / mirror / Atom feed
From: Kalle Valo <kvalo@codeaurora.org>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: Fenghua Yu <fenghua.yu@intel.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	Ingo Molnar <mingo@redhat.com>, H Peter Anvin <hpa@zytor.com>,
	Dave Hansen <dave.hansen@intel.com>,
	Ashok Raj <ashok.raj@intel.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Xiaoyao Li <xiaoyao.li@intel.com>,
	Michael Chan <michael.chan@broadcom.com>,
	Ravi V Shankar <ravi.v.shankar@intel.com>,
	linux-kernel <linux-kernel@vger.kernel.org>, x86 <x86@kernel.org>,
	linux-wireless@vger.kernel.org, netdev@vger.kernel.org,
	kvm@vger.kernel.org
Subject: Re: [PATCH v5 03/18] wlcore: simplify/fix/optimize reg_ch_conf_pending operations
Date: Tue, 26 Mar 2019 09:55:29 +0200	[thread overview]
Message-ID: <877ecmjci6.fsf@codeaurora.org> (raw)
In-Reply-To: <02f06de8-ebb2-24ff-27e1-f697cadc02c4@redhat.com> (Paolo Bonzini's message of "Fri, 15 Mar 2019 18:17:06 +0100")

Paolo Bonzini <pbonzini@redhat.com> writes:

> On 15/03/19 00:16, Fenghua Yu wrote:
>> Hi, Valo,
>> 
>> On Thu, Mar 14, 2019 at 03:16:33PM +0200, Kalle Valo wrote:
>>> Fenghua Yu <fenghua.yu@intel.com> writes:
>>>
>>>> From: Paolo Bonzini <pbonzini@redhat.com>
>>>>
>>>> Bitmaps are defined on unsigned longs, so the usage of u32[2] in the
>>>> wlcore driver is incorrect.  As noted by Peter Zijlstra, casting arrays
>>>> to a bitmap is incorrect for big-endian architectures.
>>>>
>>>> When looking at it I observed that:
>>>>
>>>> - operations on reg_ch_conf_pending is always under the wl_lock mutex,
>>>> so set_bit is overkill
>>>>
>>>> - the only case where reg_ch_conf_pending is accessed a u32 at a time is
>>>> unnecessary too.
>>>>
>>>> This patch cleans up everything in this area, and changes tmp_ch_bitmap
>>>> to have the proper alignment.
>>>>
>>>> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
>>>> Signed-off-by: Fenghua Yu <fenghua.yu@intel.com>
>>>
>>> [...]
>>>
>>>>  int wlcore_cmd_regdomain_config_locked(struct wl1271 *wl)
>>>>  {
>>>>  	struct wl12xx_cmd_regdomain_dfs_config *cmd = NULL;
>>>>  	int ret = 0, i, b, ch_bit_idx;
>>>> -	u32 tmp_ch_bitmap[2];
>>>> +	u32 tmp_ch_bitmap[2] __aligned(sizeof(unsigned long));
>>>>  	struct wiphy *wiphy = wl->hw->wiphy;
>>>>  	struct ieee80211_supported_band *band;
>>>>  	bool timeout = false;
>>>
>>> [...]
>>>
>>>> @@ -1754,8 +1751,8 @@ int wlcore_cmd_regdomain_config_locked(struct wl1271 *wl)
>>>>  		goto out;
>>>>  	}
>>>>  
>>>> -	cmd->ch_bit_map1 = cpu_to_le32(tmp_ch_bitmap[0]);
>>>> -	cmd->ch_bit_map2 = cpu_to_le32(tmp_ch_bitmap[1]);
>>>> +	cmd->ch_bit_map1 = tmp_ch_bitmap[0];
>>>> +	cmd->ch_bit_map2 = tmp_ch_bitmap[1];
>>>
>>> Will sparse still be happy? AFAICS you are now assigning u32 to __le32:
>>>
>>> struct wl12xx_cmd_regdomain_dfs_config {
>>>        struct wl1271_cmd_header header;
>>>
>>>        __le32 ch_bit_map1;
>>>        __le32 ch_bit_map2;
>> 
>> Discussion between Peter and Paolo (https://lkml.org/lkml/2019/3/4/521)
>> may answer your question.
>
> No, Kalle is right.  You do need to change
>
> -	u32 tmp_ch_bitmap[2];
> +	u32 tmp_ch_bitmap[2] __aligned(sizeof(unsigned long));
>
> into
>
> -	u32 tmp_ch_bitmap[2];
> +	__le32 tmp_ch_bitmap[2] __aligned(sizeof(unsigned long));
>
> The assignment from wl->reg_ch_conf_pending to tmp_ch_bitmap is fine
> because it goes through memcpy.

Thanks for confirming, I'll then drop patch 3 and wait for a new
version. IMHO it would be easier to submit this patch separately to
linux-wireless, no need to have within this bigger patchset.

-- 
Kalle Valo

WARNING: multiple messages have this Message-ID (diff)
From: Kalle Valo <kvalo-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
To: Paolo Bonzini <pbonzini-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
Cc: Fenghua Yu <fenghua.yu-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>,
	Thomas Gleixner <tglx-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org>,
	Ingo Molnar <mingo-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>,
	H Peter Anvin <hpa-YMNOUZJC4hwAvxtiuMwx3w@public.gmane.org>,
	Dave Hansen <dave.hansen-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>,
	Ashok Raj <ashok.raj-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>,
	Peter Zijlstra <peterz-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org>,
	Xiaoyao Li <xiaoyao.li-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>,
	Michael Chan
	<michael.chan-dY08KVG/lbpWk0Htik3J/w@public.gmane.org>,
	Ravi V Shankar
	<ravi.v.shankar-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>,
	linux-kernel
	<linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
	x86 <x86-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
	linux-wireless-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	netdev-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	kvm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: Re: [PATCH v5 03/18] wlcore: simplify/fix/optimize reg_ch_conf_pending operations
Date: Tue, 26 Mar 2019 09:55:29 +0200	[thread overview]
Message-ID: <877ecmjci6.fsf@codeaurora.org> (raw)
In-Reply-To: <02f06de8-ebb2-24ff-27e1-f697cadc02c4-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> (Paolo Bonzini's message of "Fri, 15 Mar 2019 18:17:06 +0100")

Paolo Bonzini <pbonzini-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> writes:

> On 15/03/19 00:16, Fenghua Yu wrote:
>> Hi, Valo,
>> 
>> On Thu, Mar 14, 2019 at 03:16:33PM +0200, Kalle Valo wrote:
>>> Fenghua Yu <fenghua.yu-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org> writes:
>>>
>>>> From: Paolo Bonzini <pbonzini-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
>>>>
>>>> Bitmaps are defined on unsigned longs, so the usage of u32[2] in the
>>>> wlcore driver is incorrect.  As noted by Peter Zijlstra, casting arrays
>>>> to a bitmap is incorrect for big-endian architectures.
>>>>
>>>> When looking at it I observed that:
>>>>
>>>> - operations on reg_ch_conf_pending is always under the wl_lock mutex,
>>>> so set_bit is overkill
>>>>
>>>> - the only case where reg_ch_conf_pending is accessed a u32 at a time is
>>>> unnecessary too.
>>>>
>>>> This patch cleans up everything in this area, and changes tmp_ch_bitmap
>>>> to have the proper alignment.
>>>>
>>>> Signed-off-by: Paolo Bonzini <pbonzini-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
>>>> Signed-off-by: Fenghua Yu <fenghua.yu-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
>>>
>>> [...]
>>>
>>>>  int wlcore_cmd_regdomain_config_locked(struct wl1271 *wl)
>>>>  {
>>>>  	struct wl12xx_cmd_regdomain_dfs_config *cmd = NULL;
>>>>  	int ret = 0, i, b, ch_bit_idx;
>>>> -	u32 tmp_ch_bitmap[2];
>>>> +	u32 tmp_ch_bitmap[2] __aligned(sizeof(unsigned long));
>>>>  	struct wiphy *wiphy = wl->hw->wiphy;
>>>>  	struct ieee80211_supported_band *band;
>>>>  	bool timeout = false;
>>>
>>> [...]
>>>
>>>> @@ -1754,8 +1751,8 @@ int wlcore_cmd_regdomain_config_locked(struct wl1271 *wl)
>>>>  		goto out;
>>>>  	}
>>>>  
>>>> -	cmd->ch_bit_map1 = cpu_to_le32(tmp_ch_bitmap[0]);
>>>> -	cmd->ch_bit_map2 = cpu_to_le32(tmp_ch_bitmap[1]);
>>>> +	cmd->ch_bit_map1 = tmp_ch_bitmap[0];
>>>> +	cmd->ch_bit_map2 = tmp_ch_bitmap[1];
>>>
>>> Will sparse still be happy? AFAICS you are now assigning u32 to __le32:
>>>
>>> struct wl12xx_cmd_regdomain_dfs_config {
>>>        struct wl1271_cmd_header header;
>>>
>>>        __le32 ch_bit_map1;
>>>        __le32 ch_bit_map2;
>> 
>> Discussion between Peter and Paolo (https://lkml.org/lkml/2019/3/4/521)
>> may answer your question.
>
> No, Kalle is right.  You do need to change
>
> -	u32 tmp_ch_bitmap[2];
> +	u32 tmp_ch_bitmap[2] __aligned(sizeof(unsigned long));
>
> into
>
> -	u32 tmp_ch_bitmap[2];
> +	__le32 tmp_ch_bitmap[2] __aligned(sizeof(unsigned long));
>
> The assignment from wl->reg_ch_conf_pending to tmp_ch_bitmap is fine
> because it goes through memcpy.

Thanks for confirming, I'll then drop patch 3 and wait for a new
version. IMHO it would be easier to submit this patch separately to
linux-wireless, no need to have within this bigger patchset.

-- 
Kalle Valo

  reply	other threads:[~2019-03-26  7:55 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-03-12 23:00 [PATCH v5 00/18] x86/split_lock: Enable #AC exception for split locked accesses Fenghua Yu
2019-03-12 23:00 ` [PATCH v5 01/18] x86/common: Align cpu_caps_cleared and cpu_caps_set to unsigned long Fenghua Yu
2019-03-12 23:00 ` [PATCH v5 02/18] drivers/net/b44: Align pwol_mask to unsigned long for better performance Fenghua Yu
2019-03-12 23:00 ` [PATCH v5 03/18] wlcore: simplify/fix/optimize reg_ch_conf_pending operations Fenghua Yu
2019-03-12 23:00   ` Fenghua Yu
2019-03-14 13:16   ` Kalle Valo
2019-03-14 13:16     ` Kalle Valo
2019-03-14 23:16     ` Fenghua Yu
2019-03-15 17:17       ` Paolo Bonzini
2019-03-26  7:55         ` Kalle Valo [this message]
2019-03-26  7:55           ` Kalle Valo
2019-03-12 23:00 ` [PATCH v5 04/18] x86/split_lock: Align x86_capability to unsigned long to avoid split locked access Fenghua Yu
2019-03-12 23:00   ` Fenghua Yu
2019-03-12 23:00 ` [PATCH v5 05/18] x86/cpufeatures: Enumerate IA32_CORE_CAPABILITIES MSR Fenghua Yu
2019-03-12 23:00 ` [PATCH v5 06/18] x86/msr-index: Define IA32_CORE_CAPABILITY MSR and #AC exception for split lock bit Fenghua Yu
2019-03-12 23:00 ` [PATCH v5 07/18] x86/split_lock: Enumerate #AC for split lock by MSR IA32_CORE_CAPABILITY Fenghua Yu
2019-03-12 23:52   ` Dave Hansen
2019-03-13  0:56     ` Fenghua Yu
2019-03-12 23:00 ` [PATCH v5 08/18] x86/split_lock: Define MSR TEST_CTL register Fenghua Yu
2019-03-12 23:00 ` [PATCH v5 09/18] x86/split_lock: Handle #AC exception for split lock Fenghua Yu
2019-03-12 23:51   ` Dave Hansen
2019-03-13  0:49     ` Fenghua Yu
2019-03-13  0:49       ` Fenghua Yu
2019-03-13 16:22       ` Dave Hansen
2019-03-12 23:00 ` [PATCH v5 10/18] kvm/x86: Emulate MSR IA32_CORE_CAPABILITY Fenghua Yu
2019-03-13  8:15   ` Paolo Bonzini
2019-03-12 23:00 ` [PATCH v5 11/18] kvm/vmx: Emulate MSR TEST_CTL Fenghua Yu
2019-03-13  8:15   ` Paolo Bonzini
2019-03-12 23:00 ` [PATCH v5 12/18] x86/split_lock: Enable #AC for split lock by default Fenghua Yu
2019-03-12 23:43   ` Dave Hansen
2019-03-12 23:00 ` [PATCH v5 13/18] x86/split_lock: Add a sysfs interface to allow user to enable or disable split lock detection on all CPUs during run time Fenghua Yu
2019-03-12 23:48   ` Dave Hansen
2019-03-13  0:53     ` Fenghua Yu
2019-03-13  0:53       ` Fenghua Yu
2019-03-13  1:08       ` Dave Hansen
2019-03-12 23:00 ` [PATCH v5 14/18] x86/clearcpuid: Support multiple clearcpuid options Fenghua Yu
2019-03-12 23:00 ` [PATCH v5 15/18] x86/clearcpuid: Support feature flag string in kernel option clearcpuid Fenghua Yu
2019-03-12 23:00 ` [PATCH v5 16/18] x86/clearcpuid: Apply cleared feature bits that are forced set before Fenghua Yu
2019-03-12 23:00 ` [PATCH v5 17/18] x86/clearcpuid: Clear CPUID bit in CPUID faulting Fenghua Yu
2019-03-12 23:00 ` [PATCH v5 18/18] Change document for kernel option clearcpuid Fenghua Yu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=877ecmjci6.fsf@codeaurora.org \
    --to=kvalo@codeaurora.org \
    --cc=ashok.raj@intel.com \
    --cc=dave.hansen@intel.com \
    --cc=fenghua.yu@intel.com \
    --cc=hpa@zytor.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-wireless@vger.kernel.org \
    --cc=michael.chan@broadcom.com \
    --cc=mingo@redhat.com \
    --cc=netdev@vger.kernel.org \
    --cc=pbonzini@redhat.com \
    --cc=peterz@infradead.org \
    --cc=ravi.v.shankar@intel.com \
    --cc=tglx@linutronix.de \
    --cc=x86@kernel.org \
    --cc=xiaoyao.li@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.