Page MenuHomeFreeBSD

Free up the IPI slot used by IPI_STOP_HARD.
ClosedPublic

Authored by neel on Feb 27 2015, 11:17 PM.

Details

Summary

Change the numeric value of IPI_STOP_HARD so it doesn't occupy a valid IPI
slot. This can be done because IPI_STOP_HARD is actually delivered via NMI.

Test Plan

Enter debugger using 'sysctl debug.kdb.enter' which in turn uses IPI_STOP_HARD
to stop other cpus on amd64 and i386 systems.

Diff Detail

Repository
rS FreeBSD src repository
Lint
Lint Skipped
Unit
Unit Tests Skipped

Event Timeline

neel updated this revision to Diff 4023.Feb 27 2015, 11:17 PM
neel retitled this revision from to Free up the IPI slot used by IPI_STOP_HARD..
neel updated this object.
neel edited the test plan for this revision. (Show Details)
neel added reviewers: jhb, kib.
kib accepted this revision.Feb 28 2015, 2:55 AM
kib edited edge metadata.

Does IPI_STOP_HARD value must fit into 8 bits ? It is not the same as the spurious vector, which should be innocent as well, but slightly confusing.

This revision is now accepted and ready to land.Feb 28 2015, 2:55 AM
neel added a comment.Feb 28 2015, 11:57 AM
In D1983#3, @kostikbel wrote:

Does IPI_STOP_HARD value must fit into 8 bits ? It is not the same as the spurious vector, which should be innocent as well, but slightly confusing.

There were two restrictions when choosing the value for the IPI_STOP_HARD value:

  • 'native_lapic_ipi_vectored()' wants the vector to be less than 256
  • 'xen_ipis[]' requires the vector to be greater than or equal to 243 (APIC_IPI_INTS)
kib added a comment.Feb 28 2015, 3:32 PM
In D1983#6, @neel wrote:
In D1983#3, @kostikbel wrote:

Does IPI_STOP_HARD value must fit into 8 bits ? It is not the same as the spurious vector, which should be innocent as well, but slightly confusing.

There were two restrictions when choosing the value for the IPI_STOP_HARD value:

  • 'native_lapic_ipi_vectored()' wants the vector to be less than 256

So if we change the assertion in native_lapic_ipi_vectored(), the IPI_STOP_HARD value could be moved outside the [0,255] range ? I mean, explicitly allow a value in the valid range OR IPI_STOP_HARD, in the assertion.

I do not insist, as I already indicated, I am fine with the patch as is.

  • 'xen_ipis[]' requires the vector to be greater than or equal to 243 (APIC_IPI_INTS)
neel added a comment.Mar 1 2015, 2:26 AM
In D1983#7, @kostikbel wrote:
In D1983#6, @neel wrote:
In D1983#3, @kostikbel wrote:

Does IPI_STOP_HARD value must fit into 8 bits ? It is not the same as the spurious vector, which should be innocent as well, but slightly confusing.

There were two restrictions when choosing the value for the IPI_STOP_HARD value:

  • 'native_lapic_ipi_vectored()' wants the vector to be less than 256

So if we change the assertion in native_lapic_ipi_vectored(), the IPI_STOP_HARD value could be moved outside the [0,255] range ? I mean, explicitly allow a value in the valid range OR IPI_STOP_HARD, in the assertion.

Yup, that would have worked as well.

I do not insist, as I already indicated, I am fine with the patch as is.

  • 'xen_ipis[]' requires the vector to be greater than or equal to 243 (APIC_IPI_INTS)
neel closed this revision.Mar 1 2015, 2:32 AM
neel updated this revision to Diff 4044.

Closed by commit rS279468 (authored by @neel).