[PATCH v3] move brcm80211 drivers to mainline

Arend Van Spriel arend at broadcom.com
Wed Oct 5 15:34:14 UTC 2011


> From: Johannes Berg [mailto:johannes at sipsolutions.net]
> Sent: woensdag 5 oktober 2011 16:57
> 
> Some comments.
> 
> I sort of understand your fascination with "generic utils" but they're
> wasteful if they're in a single driver only. They should either be made
> more generic (for all drivers) or dissolved, so:
> 
>  * You can get rid of BRCMS_BITSCNT and brcmu_bitcount, they're no
>    longer used at all.
>  * brcmu_mhz2channel isn't used anywhere either
>  * neither is brcmu_chspec_ctlchan
>  * brcmu_mw_to_qdbm is used only in a single file,
>    it can move there to save the export etc.
>  * same for brcmu_qdbm_to_mw, brcmu_chipname, brcmu_parse_tlvs,
>    brcmu_chspec_malformed
>  * brcmu_mkiovar is used only in fmac, so you can move it there
>    to save the export
>  * brcmu_format_flags is used only in smac, so same
>  * same for brcmu_format_flags
> 
> After all the above, bcmutils are left with only the pktq and pktbuf
> stuff, which hopefully will be either more generic or dissolved at some
> point in the future since it should really just be a few skb queues.

Agree. There is opportunity to cleanup on the brcmutil module or
even get rid of it.

> Now the drivers :-)
> 
> FMAC:
>  * A whole bunch of things in dhd.h still seem to lack endian
>    annotations, which I wouldn't be too worried about, if it didn't
>    also seem to lack conversions. For example brcmf_pkt_filter_enable,
>    brcmf_pkt_filter, brcmf_pkt_filter_pattern.
>  * These, along with others like brcmf_bss_info, also seem to lack
>    __packed annotations. I thought you fixed all this, what am I
>    missing?
>  * bss_info[1]; and similar should just be [] I think?
>  * some very odd indentation on line 1172 of wl_cfg80211.c
> 
> SMAC:
>  * do you really want to be 40MHz intolerant all the time? not
>    supporting 40 MHz is one thing, but being intolerant?
>  * brcms_ops_stop doesn't seem right -- this should really power down
>    the device, this shouldn't be done per interface since the monitor
>    case will want to RX/TX even when no interface is there; also,
> you'll
>    want multi-vif support soon :-)

Agree. We noticed reading mac80211.h with statement about add_interface
callback not being used in monitor mode.

>  * locking tx() is inefficient, you should be able to go with a lock
> per
>    HW queue
>  * brcms_ops_sta_add is strange -- it shouldn't be modifying the
> station
>    parameters, why would it do that? seems like a bug to me, especially
>    always assuming the peer can do greenfield etc. This data should
>    already be set by mac80211, if not that's a bug, not something to
>    "fix" in the driver
>  * I still think things like brcms_msleep() are guaranteed to create
>    subtle locking bugs that are almost impossible to find since it
> drops
>    the spinlock and if somebody calls the function somewhere they won't
>    necessarily keep that in mind. There are a whole bunch of functions
>    behaving like that.

Agree. The locking strategy in the driver works and has been proven
to work for the current code base in many test cycles, but it poses
a risk for upcoming feature development.

> 
> Anyway, the code is now readable to me, I see no glaring mac80211 or
> cfg80211 interfacing errors, so I guess you can work the rest in
> mainline.
> 
> johannes
> 

Thanks for the feedback. These are all valid points and as such deserve
our attention.

Arend


More information about the devel mailing list