[ofa-general] Re: [PATCH] IB/ehca: Serialize HCA-related hCalls on POWER5
Joachim Fenkes
FENKES at de.ibm.com
Fri Dec 7 08:25:23 PST 2007
Roland Dreier <rdreier at cisco.com> wrote on 06.12.2007 19:27:09:
> > > + ehca_lock_hcalls =
!(cur_cpu_spec->cpu_user_features
> > > + & PPC_FEATURE_ARCH_2_05);
>
> > We already talked about this yesterday, but I still feel that
checking the
> > instruction set of the CPU should not be used to determine whether a
> > specific device driver implementation is used int hypervisor.
>
> I had the same reaction... is testing cpu_user_features really the
> best way to detect this issue?
I concur it's not nice, but it was the only feasible method we could find
without adding a "bug fixed" feature flag to the partition<->firmware
interface. The firmware version reported in the OFDT is not a reliable
enough source, and even if it were, it would require a lot of string
parsing and matching against tables.
We're taking this to the firmware architects at the moment, but they're
not very fond of the idea of reporting the absence of bugs through
capability flags, as this could quickly lead to the exhaustion of flag
bits. We'll let the discussion stew for a bit, but if we don't get this
flag, we'll have to resort to the CPU features.
> I'll hold off applying this for a few days so you guys can decide the
> best thing to do. We'll definitely get some fix into 2.6.24 but we
> have time to make a good decision.
Right.
> > Regarding the performance problem, have you checked whether
converting all
> > your spin_lock_irqsave to spin_lock/spin_lock_irq improves your
performance
> > on the older machines? Maybe it's already fast enough that way.
>
> It does seem that the only places that the hcall_lock is taken also
> use msleep, so they must always be in process context. So you can
> safely just use spin_lock(), right?
As Arnd said, there are hCalls that will never return H_LONG_BUSY_*, such
as H_QUERY_PORT and chums, so they will never sleep. The surrounding
functions, though, are not prepared to be called from interrupt context
(GFP_KERNEL comes to mind), so I agree that a simple spin_lock() will
suffice. Thanks, Arnd, for pointing this out.
We'll keep you guys posted on the feature flag discussion. Until then,
have a nice weekend!
Joachim
More information about the general
mailing list