* [PATCH] Use of_get_next_parent() in platforms/cell/axon_msi.c
From: Michael Ellerman @ 2008-04-24 2:08 UTC (permalink / raw)
To: linuxppc-dev
Replace two open-coded occurences of the of_get_next_parent() logic.
Signed-off-by: Michael Ellerman <michael@ellerman.id.au>
---
The function touched by the first chunk still needs the tmp variable.
arch/powerpc/platforms/cell/axon_msi.c | 6 +++---
1 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/arch/powerpc/platforms/cell/axon_msi.c b/arch/powerpc/platforms/cell/axon_msi.c
index d95e71d..c39f5c2 100644
--- a/arch/powerpc/platforms/cell/axon_msi.c
+++ b/arch/powerpc/platforms/cell/axon_msi.c
@@ -123,7 +123,7 @@ static struct axon_msic *find_msi_translator(struct pci_dev *dev)
return NULL;
}
- for (; dn; tmp = of_get_parent(dn), of_node_put(dn), dn = tmp) {
+ for (; dn; dn = of_get_next_parent(dn)) {
ph = of_get_property(dn, "msi-translator", NULL);
if (ph)
break;
@@ -169,7 +169,7 @@ static int axon_msi_check_device(struct pci_dev *dev, int nvec, int type)
static int setup_msi_msg_address(struct pci_dev *dev, struct msi_msg *msg)
{
- struct device_node *dn, *tmp;
+ struct device_node *dn;
struct msi_desc *entry;
int len;
const u32 *prop;
@@ -182,7 +182,7 @@ static int setup_msi_msg_address(struct pci_dev *dev, struct msi_msg *msg)
entry = list_first_entry(&dev->msi_list, struct msi_desc, list);
- for (; dn; tmp = of_get_parent(dn), of_node_put(dn), dn = tmp) {
+ for (; dn; dn = of_get_next_parent(dn)) {
if (entry->msi_attrib.is_64) {
prop = of_get_property(dn, "msi-address-64", &len);
if (prop)
--
1.5.5
^ permalink raw reply related
* Re: simpleboot
From: David H. Lynch Jr. @ 2008-04-24 2:02 UTC (permalink / raw)
To: Josh Boyer; +Cc: linuxppc-embedded
In-Reply-To: <1208999357.2946.6.camel@vader.jdub.homelinux.org>
Josh Boyer wrote:
> simpleboot is in Linus' tree now. It went in with the first pull
> request paulus sent for .26.
>
I got it, now to figure it out.
> I don't understand that comment anyway though. If you're working with a
> PowerPC board, why aren't you using the powerpc tree (paulus') to begin
> with? "Backporting" pieces of it to some other tree seems to be a waste
> of time to me...
>
I am updating a port I did in 2005 ? based on the ml403 port that
was in at that time.
But it is an independent BSP. I need to move it to the current
powerpc/devicetree,
but I have to do so without breaking alot of things we have have
working for years.
At the moment I am somewhat "surely" about a number of the issues
related to the powerpc/devicetree migration.
Aside from the BSP issues, this breaks my boot monitor, and is going
to require adding alot more code than I can either justify
or see as necescary because there are some aspects of how the
devicetree/powerpc stuff is architected that
politely I think are brain dead.
But I will get over it - probably. There just may be a bit of
cursing and foul language before things work.
--
Dave Lynch Pico Computing, Inc.
Software Development Embedded Linux
717.627.3770 dhlii@picocomputing.net http://www.picocomputing.com
fax: 1.253.369.9244 Cell: 1.717.587.7774
Tiny Mighty Machines
^ permalink raw reply
* Re: mpc8379e rdb nand flash support
From: ??? @ 2008-04-24 1:52 UTC (permalink / raw)
To: Scott Wood; +Cc: linuxppc-embedded
In-Reply-To: <20080423163538.GA32452@ld0162-tx32.am.freescale.net>
SGkgU2NvdHQgV29vZDoNCiAgIFRoYW5rIHlvdSBmb3IgeW91ciBraW5kbHkgcmVwbHkhDQogICBJ
IGRpZCB1c2UgdGhlIGZyZWVzY2FsZSBic3AgKE1QQzgzN1hFLVJEQi0yMDA3MTEwNS5pc28pLkZv
ciB0aGUgSVNPIGRvZXNuJ3QgaGF2ZSB0aGUgTElOVVggTVREIHBhdGNoZXMgLEkgdXNlZCB0aGUg
TVBDODM3WEUtTURTIHBhdGNoZXMgLkFuZCB0aGUgc2Ftc3VuZyAzMk0gbmFuZCBmbGFzaCB3b3Jr
cyB3ZWxsIGJvdGggaW4gdS1ib290IGFuZCBsaW51eCBrZXJuZWwuDQogICANCiAgIFNpbmNlIG91
ciBwcm9qZWN0cyBuZWVkIG1vcmUgY2FwYWJpbGl0eSB0byBzdG9yZSBmaWxlc3lzdGVtcyxJIGNo
YW5nZWQgbmFuZCBmbGFzaCB0byAxRyBieXRlLg0KICAgIEkgdGhpbmsgaXQgaXMgdGhlIHNhbWUg
dG8gb3BlcmF0ZSBuYW5kIGZsYXNoIGJvdGggaW4gdS1ib290IGFuZCBsaW51eCBrZXJuZWwgLGJl
Y2F1c2UgdGhlIGNvZGUgYWJvdXQgRkNNIG5hbmQgZmxhc2ggY29udHJvbCBpcyBhbG1vc3QgdGhl
IHNhbWUuU28gSSBqdXN0IHRlc3QgaXQgaW4gdS1ib290Lg0KICAgIEZyb20gdGhlIG1wYzgzNzll
IHJlZmVyZW5jZSBtYW51YWwgcGFnZSA0ODQgOg0KICAgICAyMSAgICAgICAgUEdTIE5BTkQgRmxh
c2ggRTJQUk9NIHBhZ2Ugc2l6ZSwgYnVmZmVyIHNpemUsIGFuZCBibG9jayBzaXplLg0KICAgICAg
ICAgIDAgICBQYWdlIHNpemUgb2YgNTEyIG1haW4gYXJlYSBieXRlcyBwbHVzIDE2IHNwYXJlIGFy
ZWEgYnl0ZXMgKHNtYWxsIHBhZ2UgZGV2aWNlcyk7DQogICAgICAgICAgICAgIEZDTSBSQU0gYnVm
ZmVycyBhcmUgMSBLYnl0ZSBlYWNoOyBGbGFzaCBibG9jayBzaXplIG9mIDE2IEtieXRlcy4NCiAg
ICAgICAgICAxICAgUGFnZSBzaXplIG9mIDIwNDggbWFpbiBhcmVhIGJ5dGVzIHBsdXMgNjQgc3Bh
cmUgYXJlYSBieXRlcyAobGFyZ2UgcGFnZSBkZXZpY2VzKTsNCiAgICAgICAgICAgICAgRkNNIFJB
TSBidWZmZXJzIGFyZSA0IEtieXRlcyBlYWNoOyBGbGFzaCBibG9jayBzaXplIG9mIDEyOCBLYnl0
ZXMuDQoNCiAgICBCZWNhdXNlIHRoZSAzMk0gbmFuZCBmbGFzaCBibG9jayBzaXplIGlzIGp1c3Qg
dGhlIDE2S2J5dGVzLGFuZCBpdCB3b3JrcyB3ZWxsLkJ1dCB0aGUgYmxvY2sgc2l6ZSBvZiB0aGUg
MUcgYnl0ZXMgbmFuZCBmbGFzaCBpcyAyNTZLYnl0ZXMsd2hlbiBldmVyeSB0aW1lIEkgdHJpZWQg
dG8gd3JpdGUgdG8gaXQgLEl0IGp1c3QgY2FuIGJlIHdyaXRlZCB0aGUgZmlyc3QgMTI4a2J5dGVz
IG9mIGV2ZXJ5IDI1NmtieXRlcy5BcyBJIA0Kd3JvdGUgaW4gbGFzdCBlbWFpbC4NCiAgICBCZWxv
dyBpcyB0aGUgbGludXgga2VybmVsIGluZm9ybWF0aW9uIHdoZW4gSSBvcGVyYXRlIG5hbmQgZmxh
c2guDQogICANCiAgICBCZXN0IHdpc2hlcyAhDQoNCiAgICBCb2IgeXUgDQogICAgMjAwOC00LTI0
DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KLg0KLg0KLg0KLg0KDQpzZCAzOjA6MDowOiBBdHRhY2hl
ZCBzY3NpIGdlbmVyaWMgc2cwIHR5cGUgMA0KRnJlZXNjYWxlIGVMQkMgTkFORCBEcml2ZXIgKEMp
IDIwMDYtMjAwNyBGcmVlc2NhbGUNCk5BTkQgZGV2aWNlOiBNYW51ZmFjdHVyZXIgSUQ6IDB4YWQs
IENoaXAgSUQ6IDB4ZDMgKEh5bml4IE5BTkQgMUdpQiAzLDNWIDgtYml0KQ0KU2Nhbm5pbmcgZGV2
aWNlIGZvciBiYWQgYmxvY2tzDQpmc2wtZWxiYyBmc2wtZWxiYy4wOiBVc2luZyBPRiBwYXJ0aXRp
b24gaW5mb3JtYXRpb24NCkNyZWF0aW5nIDEgTVREIHBhcnRpdGlvbnMgb24gIm5hbmQiOg0KMHgw
MDAwMDAwMC0weDQwMDAwMDAwIDogIkpGRlMyLU5BTkQiDQppMmMgL2RldiBlbnRyaWVzIGRyaXZl
cg0KLg0KLg0KLg0KLg0KLXNoLTIuMDViIyBjZCAvDQotc2gtMi4wNWIjIGxzDQpiaW4gICAgICAg
ICBob21lICAgICAgICBtbnQgICAgICAgICByb290ICAgICAgICB0bXANCmJvb3QgICAgICAgIGxp
YiAgICAgICAgIG11c2ljICAgICAgIHNiaW4gICAgICAgIHVzcg0KZGV2ICAgICAgICAgbGludXhy
YyAgICAgb3B0ICAgICAgICAgc2hhcmUgICAgICAgdmFyDQpldGMgICAgICAgICBsb3N0K2ZvdW5k
ICBwcm9jICAgICAgICBzeXMNCi1zaC0yLjA1YiMgc21iZA0KLXNoLTIuMDViIyBjaG1vZCA3Nzcg
Lw0KLXNoLTIuMDViIyBscw0KYmluICAgICAgICAgaG9tZSAgICAgICAgbW50ICAgICAgICAgcm9v
dCAgICAgICAgdGVzdC5qZmZzMg0KYm9vdCAgICAgICAgbGliICAgICAgICAgbXVzaWMgICAgICAg
c2JpbiAgICAgICAgdG1wDQpkZXYgICAgICAgICBsaW51eHJjICAgICBvcHQgICAgICAgICBzaGFy
ZSAgICAgICB1c3INCmV0YyAgICAgICAgIGxvc3QrZm91bmQgIHByb2MgICAgICAgIHN5cyAgICAg
ICAgIHZhcg0KLXNoLTIuMDViIyBjYXQgL3Byb2MvbXRkICAgIA0KZGV2OiAgICBzaXplICAgZXJh
c2VzaXplICBuYW1lDQptdGQwOiA0MDAwMDAwMCAwMDA0MDAwMCAiSkZGUzItTkFORCINCi1zaC0y
LjA1YiMgY3AgdGVzdC5qZmZzMiAvZGV2L210ZGJsb2NrMCANCmVuZF9yZXF1ZXN0OiBJL08gZXJy
b3IsIGRldiBtdGRibG9jazAsIHNlY3RvciAwDQpCdWZmZXIgSS9PIGVycm9yIG9uIGRldmljZSBt
dGRibG9jazAsIGxvZ2ljYWwgYmxvY2sgMA0KbG9zdCBwYWdlIHdyaXRlIGR1ZSB0byBJL08gZXJy
b3Igb24gbXRkYmxvY2swDQplbmRfcmVxdWVzdDogSS9PIGVycm9yLCBkZXYgbXRkYmxvY2swLCBz
ZWN0b3IgOA0KQnVmZmVyIEkvTyBlcnJvciBvbiBkZXZpY2UgbXRkYmxvY2swLCBsb2dpY2FsIGJs
b2NrIDENCmxvc3QgcGFnZSB3cml0ZSBkdWUgdG8gSS9PIGVycm9yIG9uIG10ZGJsb2NrMA0KZW5k
X3JlcXVlc3Q6IEkvTyBlcnJvciwgZGV2IG10ZGJsb2NrMCwgc2VjdG9yIDE2DQpCdWZmZXIgSS9P
IGVycm9yIG9uIGRldmljZSBtdGRibG9jazAsIGxvZ2ljYWwgYmxvY2sgMg0KbG9zdCBwYWdlIHdy
aXRlIGR1ZSB0byBJL08gZXJyb3Igb24gbXRkYmxvY2swDQplbmRfcmVxdWVzdDogSS9PIGVycm9y
LCBkZXYgbXRkYmxvY2swLCBzZWN0b3IgMjQNCkJ1ZmZlciBJL08gZXJyb3Igb24gZGV2aWNlIG10
ZGJsb2NrMCwgbG9naWNhbCBibG9jayAzDQpsb3N0IHBhZ2Ugd3JpdGUgZHVlIHRvIEkvTyBlcnJv
ciBvbiBtdGRibG9jazANCmVuZF9yZXF1ZXN0OiBJL08gZXJyb3IsIGRldiBtdGRibG9jazAsIHNl
Y3RvciAzMg0KQnVmZmVyIEkvTyBlcnJvciBvbiBkZXZpY2UgbXRkYmxvY2swLCBsb2dpY2FsIGJs
b2NrIDQNCmxvc3QgcGFnZSB3cml0ZSBkdWUgdG8gSS9PIGVycm9yIG9uIG10ZGJsb2NrMA0KZW5k
X3JlcXVlc3Q6IEkvTyBlcnJvciwgZGV2IG10ZGJsb2NrMCwgc2VjdG9yIDQwDQpCdWZmZXIgSS9P
IGVycm9yIG9uIGRldmljZSBtdGRibG9jazAsIGxvZ2ljYWwgYmxvY2sgNQ0KbG9zdCBwYWdlIHdy
aXRlIGR1ZSB0byBJL08gZXJyb3Igb24gbXRkYmxvY2swDQplbmRfcmVxdWVzdDogSS9PIGVycm9y
LCBkZXYgbXRkYmxvY2swLCBzZWN0b3IgNDgNCkJ1ZmZlciBJL08gZXJyb3Igb24gZGV2aWNlIG10
ZGJsb2NrMCwgbG9naWNhbCBibG9jayA2DQpsb3N0IHBhZ2Ugd3JpdGUgZHVlIHRvIEkvTyBlcnJv
ciBvbiBtdGRibG9jazANCmVuZF9yZXF1ZXN0OiBJL08gZXJyb3IsIGRldiBtdGRibG9jazAsIHNl
Y3RvciA1Ng0KQnVmZmVyIEkvTyBlcnJvciBvbiBkZXZpY2UgbXRkYmxvY2swLCBsb2dpY2FsIGJs
b2NrIDcNCmxvc3QgcGFnZSB3cml0ZSBkdWUgdG8gSS9PIGVycm9yIG9uIG10ZGJsb2NrMA0KZW5k
X3JlcXVlc3Q6IEkvTyBlcnJvciwgZGV2IG10ZGJsb2NrMCwgc2VjdG9yIDY0DQpCdWZmZXIgSS9P
IGVycm9yIG9uIGRldmljZSBtdGRibG9jazAsIGxvZ2ljYWwgYmxvY2sgOA0KbG9zdCBwYWdlIHdy
aXRlIGR1ZSB0byBJL08gZXJyb3Igb24gbXRkYmxvY2swDQplbmRfcmVxdWVzdDogSS9PIGVycm9y
LCBkZXYgbXRkYmxvY2swLCBzZWN0b3IgNzINCkJ1ZmZlciBJL08gZXJyb3Igb24gZGV2aWNlIG10
ZGJsb2NrMCwgbG9naWNhbCBibG9jayA5DQpsb3N0IHBhZ2Ugd3JpdGUgZHVlIHRvIEkvTyBlcnJv
ciBvbiBtdGRibG9jazANCmVuZF9yZXF1ZXN0OiBJL08gZXJyb3IsIGRldiBtdGRibG9jazAsIHNl
Y3RvciA4MA0KZW5kX3JlcXVlc3Q6IEkvTyBlcnJvciwgZGV2IG10ZGJsb2NrMCwgc2VjdG9yIDg4
DQplbmRfcmVxdWVzdDogSS9PIGVycm9yLCBkZXYgbXRkYmxvY2swLCBzZWN0b3IgOTYNCmVuZF9y
ZXF1ZXN0OiBJL08gZXJyb3IsIGRldiBtdGRibG9jazAsIHNlY3RvciAxMDQNCmVuZF9yZXF1ZXN0
OiBJL08gZXJyb3IsIGRldiBtdGRibG9jazAsIHNlY3RvciAxMTINCmVuZF9yZXF1ZXN0OiBJL08g
ZXJyb3IsIGRldiBtdGRibG9jazAsIHNlY3RvciAxMjANCmVuZF9yZXF1ZXN0OiBJL08gZXJyb3Is
IGRldiBtdGRibG9jazAsIHNlY3RvciAxMjgNCmVuZF9yZXF1ZXN0OiBJL08gZXJyb3IsIGRldiBt
dGRibG9jazAsIHNlY3RvciAxMzYNCmVuZF9yZXF1ZXN0OiBJL08gZXJyb3IsIGRldiBtdGRibG9j
azAsIHNlY3RvciAxNDQNCmVuZF9yZXF1ZXN0OiBJL08gZXJyb3IsIGRldiBtdGRibG9jazAsIHNl
Y3RvciAxNTINCmVuZF9yZXF1ZXN0OiBJL08gZXJyb3IsIGRldiBtdGRibG9jazAsIHNlY3RvciAx
NjANCmVuZF9yZXF1ZXN0OiBJL08gZXJyb3IsIGRldiBtdGRibG9jazAsIHNlY3RvciAxNjgNCmVu
ZF9yZXF1ZXN0OiBJL08gZXJyb3IsIGRldiBtdGRibG9jazAsIHNlY3RvciAxNzYNCmVuZF9yZXF1
ZXN0OiBJL08gZXJyb3IsIGRldiBtdGRibG9jazAsIHNlY3RvciAxODQNCmVuZF9yZXF1ZXN0OiBJ
L08gZXJyb3IsIGRldiBtdGRibG9jazAsIHNlY3RvciAxOTINCmVuZF9yZXF1ZXN0OiBJL08gZXJy
b3IsIGRldiBtdGRibG9jazAsIHNlY3RvciAyMDANCmVuZF9yZXF1ZXN0OiBJL08gZXJyb3IsIGRl
diBtdGRibG9jazAsIHNlY3RvciAyMDgNCmVuZF9yZXF1ZXN0OiBJL08gZXJyb3IsIGRldiBtdGRi
bG9jazAsIHNlY3RvciAyMTYNCmVuZF9yZXF1ZXN0OiBJL08gZXJyb3IsIGRldiBtdGRibG9jazAs
IHNlY3RvciAyMjQNCmVuZF9yZXF1ZXN0OiBJL08gZXJyb3IsIGRldiBtdGRibG9jazAsIHNlY3Rv
ciAyMzINCmVuZF9yZXF1ZXN0OiBJL08gZXJyb3IsIGRldiBtdGRibG9jazAsIHNlY3RvciAyNDAN
CmVuZF9yZXF1ZXN0OiBJL08gZXJyb3IsIGRldiBtdGRibG9jazAsIHNlY3RvciAyNDgNCmVuZF9y
ZXF1ZXN0OiBJL08gZXJyb3IsIGRldiBtdGRibG9jazAsIHNlY3RvciAyNTYNCmVuZF9yZXF1ZXN0
OiBJL08gZXJyb3IsIGRldiBtdGRibG9jazAsIHNlY3RvciAyNjQNCmVuZF9yZXF1ZXN0OiBJL08g
ZXJyb3IsIGRldiBtdGRibG9jazAsIHNlY3RvciAyNzINCmVuZF9yZXF1ZXN0OiBJL08gZXJyb3Is
IGRldiBtdGRibG9jazAsIHNlY3RvciAyODANCmVuZF9yZXF1ZXN0OiBJL08gZXJyb3IsIGRldiBt
dGRibG9jazAsIHNlY3RvciAyODgNCmVuZF9yZXF1ZXN0OiBJL08gZXJyb3IsIGRldiBtdGRibG9j
azAsIHNlY3RvciAyOTYNCmVuZF9yZXF1ZXN0OiBJL08gZXJyb3IsIGRldiBtdGRibG9jazAsIHNl
Y3RvciAzMDQNCmVuZF9yZXF1ZXN0OiBJL08gZXJyb3IsIGRldiBtdGRibG9jazAsIHNlY3RvciAz
MTINCmVuZF9yZXF1ZXN0OiBJL08gZXJyb3IsIGRldiBtdGRibG9jazAsIHNlY3RvciAzMjANCmVu
ZF9yZXF1ZXN0OiBJL08gZXJyb3IsIGRldiBtdGRibG9jazAsIHNlY3RvciAzMjgNCmVuZF9yZXF1
ZXN0OiBJL08gZXJyb3IsIGRldiBtdGRibG9jazAsIHNlY3RvciAzMzYNCmVuZF9yZXF1ZXN0OiBJ
L08gZXJyb3IsIGRldiBtdGRibG9jazAsIHNlY3RvciAzNDQNCmVuZF9yZXF1ZXN0OiBJL08gZXJy
b3IsIGRldiBtdGRibG9jazAsIHNlY3RvciAzNTINCmVuZF9yZXF1ZXN0OiBJL08gZXJyb3IsIGRl
diBtdGRibG9jazAsIHNlY3RvciAzNjANCmVuZF9yZXF1ZXN0OiBJL08gZXJyb3IsIGRldiBtdGRi
bG9jazAsIHNlY3RvciAzNjgNCmVuZF9yZXF1ZXN0OiBJL08gZXJyb3IsIGRldiBtdGRibG9jazAs
IHNlY3RvciAzNzYNCmVuZF9yZXF1ZXN0OiBJL08gZXJyb3IsIGRldiBtdGRibG9jazAsIHNlY3Rv
ciAzODQNCmVuZF9yZXF1ZXN0OiBJL08gZXJyb3IsIGRldiBtdGRibG9jazAsIHNlY3RvciAzOTIN
CmVuZF9yZXF1ZXN0OiBJL08gZXJyb3IsIGRldiBtdGRibG9jazAsIHNlY3RvciA0MDANCmVuZF9y
ZXF1ZXN0OiBJL08gZXJyb3IsIGRldiBtdGRibG9jazAsIHNlY3RvciA0MDgNCmVuZF9yZXF1ZXN0
OiBJL08gZXJyb3IsIGRldiBtdGRibG9jazAsIHNlY3RvciA0MTYNCmVuZF9yZXF1ZXN0OiBJL08g
ZXJyb3IsIGRldiBtdGRibG9jazAsIHNlY3RvciA0MjQNCmVuZF9yZXF1ZXN0OiBJL08gZXJyb3Is
IGRldiBtdGRibG9jazAsIHNlY3RvciA0MzINCmVuZF9yZXF1ZXN0OiBJL08gZXJyb3IsIGRldiBt
dGRibG9jazAsIHNlY3RvciA0NDANCmVuZF9yZXF1ZXN0OiBJL08gZXJyb3IsIGRldiBtdGRibG9j
azAsIHNlY3RvciA0NDgNCmVuZF9yZXF1ZXN0OiBJL08gZXJyb3IsIGRldiBtdGRibG9jazAsIHNl
Y3RvciA0NTYNCmVuZF9yZXF1ZXN0OiBJL08gZXJyb3IsIGRldiBtdGRibG9jazAsIHNlY3RvciA0
NjQNCmVuZF9yZXF1ZXN0OiBJL08gZXJyb3IsIGRldiBtdGRibG9jazAsIHNlY3RvciA0NzINCmVu
ZF9yZXF1ZXN0OiBJL08gZXJyb3IsIGRldiBtdGRibG9jazAsIHNlY3RvciA0ODANCmVuZF9yZXF1
ZXN0OiBJL08gZXJyb3IsIGRldiBtdGRibG9jazAsIHNlY3RvciA0ODgNCmVuZF9yZXF1ZXN0OiBJ
L08gZXJyb3IsIGRldiBtdGRibG9jazAsIHNlY3RvciA0OTYNCmVuZF9yZXF1ZXN0OiBJL08gZXJy
b3IsIGRldiBtdGRibG9jazAsIHNlY3RvciA1MDQNCmVuZF9yZXF1ZXN0OiBJL08gZXJyb3IsIGRl
diBtdGRibG9jazAsIHNlY3RvciA1MTINCmVuZF9yZXF1ZXN0OiBJL08gZXJyb3IsIGRldiBtdGRi
bG9jazAsIHNlY3RvciA1MjANCmVuZF9yZXF1ZXN0OiBJL08gZXJyb3IsIGRldiBtdGRibG9jazAs
IHNlY3RvciA1MjgNCmVuZF9yZXF1ZXN0OiBJL08gZXJyb3IsIGRldiBtdGRibG9jazAsIHNlY3Rv
ciA1MzYNCmVuZF9yZXF1ZXN0OiBJL08gZXJyb3IsIGRldiBtdGRibG9jazAsIHNlY3RvciA1NDQN
CmVuZF9yZXF1ZXN0OiBJL08gZXJyb3IsIGRldiBtdGRibG9jazAsIHNlY3RvciA1NTINCmVuZF9y
ZXF1ZXN0OiBJL08gZXJyb3IsIGRldiBtdGRibG9jazAsIHNlY3RvciA1NjANCmVuZF9yZXF1ZXN0
OiBJL08gZXJyb3IsIGRldiBtdGRibG9jazAsIHNlY3RvciA1NjgNCmVuZF9yZXF1ZXN0OiBJL08g
ZXJyb3IsIGRldiBtdGRibG9jazAsIHNlY3RvciA1NzYNCmVuZF9yZXF1ZXN0OiBJL08gZXJyb3Is
IGRldiBtdGRibG9jazAsIHNlY3RvciA1ODQNCmVuZF9yZXF1ZXN0OiBJL08gZXJyb3IsIGRldiBt
dGRibG9jazAsIHNlY3RvciA1OTINCmVuZF9yZXF1ZXN0OiBJL08gZXJyb3IsIGRldiBtdGRibG9j
azAsIHNlY3RvciA2MDANCmVuZF9yZXF1ZXN0OiBJL08gZXJyb3IsIGRldiBtdGRibG9jazAsIHNl
Y3RvciA2MDgNCmVuZF9yZXF1ZXN0OiBJL08gZXJyb3IsIGRldiBtdGRibG9jazAsIHNlY3RvciA2
MTYNCmVuZF9yZXF1ZXN0OiBJL08gZXJyb3IsIGRldiBtdGRibG9jazAsIHNlY3RvciA2MjQNCmVu
ZF9yZXF1ZXN0OiBJL08gZXJyb3IsIGRldiBtdGRibG9jazAsIHNlY3RvciA2MzINCmVuZF9yZXF1
ZXN0OiBJL08gZXJyb3IsIGRldiBtdGRibG9jazAsIHNlY3RvciA2NDANCmVuZF9yZXF1ZXN0OiBJ
L08gZXJyb3IsIGRldiBtdGRibG9jazAsIHNlY3RvciA2NDgNCmVuZF9yZXF1ZXN0OiBJL08gZXJy
b3IsIGRldiBtdGRibG9jazAsIHNlY3RvciA2NTYNCmVuZF9yZXF1ZXN0OiBJL08gZXJyb3IsIGRl
diBtdGRibG9jazAsIHNlY3RvciA2NjQNCmVuZF9yZXF1ZXN0OiBJL08gZXJyb3IsIGRldiBtdGRi
bG9jazAsIHNlY3RvciA2NzINCnByaW50azogNzQgbWVzc2FnZXMgc3VwcHJlc3NlZC4NCkJ1ZmZl
ciBJL08gZXJyb3Igb24gZGV2aWNlIG10ZGJsb2NrMCwgbG9naWNhbCBibG9jayA4NA0KbG9zdCBw
YWdlIHdyaXRlIGR1ZSB0byBJL08gZXJyb3Igb24gbXRkYmxvY2swDQplbmRfcmVxdWVzdDogSS9P
IGVycm9yLCBkZXYgbXRkYmxvY2swLCBzZWN0b3IgNjgwDQplbmRfcmVxdWVzdDogSS9PIGVycm9y
LCBkZXYgbXRkYmxvY2swLCBzZWN0b3IgNjg4DQplbmRfcmVxdWVzdDogSS9PIGVycm9yLCBkZXYg
bXRkYmxvY2swLCBzZWN0b3IgNjk2DQplbmRfcmVxdWVzdDogSS9PIGVycm9yLCBkZXYgbXRkYmxv
Y2swLCBzZWN0b3IgNzA0DQplbmRfcmVxdWVzdDogSS9PIGVycm9yLCBkZXYgbXRkYmxvY2swLCBz
ZWN0b3IgNzEyDQplbmRfcmVxdWVzdDogSS9PIGVycm9yLCBkZXYgbXRkYmxvY2swLCBzZWN0b3Ig
NzIwDQplbmRfcmVxdWVzdDogSS9PIGVycm9yLCBkZXYgbXRkYmxvY2swLCBzZWN0b3IgNzI4DQpl
bmRfcmVxdWVzdDogSS9PIGVycm9yLCBkZXYgbXRkYmxvY2swLCBzZWN0b3IgNzM2DQplbmRfcmVx
dWVzdDogSS9PIGVycm9yLCBkZXYgbXRkYmxvY2swLCBzZWN0b3IgNzQ0DQplbmRfcmVxdWVzdDog
SS9PIGVycm9yLCBkZXYgbXRkYmxvY2swLCBzZWN0b3IgNzUyDQplbmRfcmVxdWVzdDogSS9PIGVy
cm9yLCBkZXYgbXRkYmxvY2swLCBzZWN0b3IgNzYwDQplbmRfcmVxdWVzdDogSS9PIGVycm9yLCBk
ZXYgbXRkYmxvY2swLCBzZWN0b3IgNzY4DQplbmRfcmVxdWVzdDogSS9PIGVycm9yLCBkZXYgbXRk
YmxvY2swLCBzZWN0b3IgNzc2DQplbmRfcmVxdWVzdDogSS9PIGVycm9yLCBkZXYgbXRkYmxvY2sw
LCBzZWN0b3IgNzg0DQplbmRfcmVxdWVzdDogSS9PIGVycm9yLCBkZXYgbXRkYmxvY2swLCBzZWN0
b3IgNzkyDQplbmRfcmVxdWVzdDogSS9PIGVycm9yLCBkZXYgbXRkYmxvY2swLCBzZWN0b3IgODAw
DQplbmRfcmVxdWVzdDogSS9PIGVycm9yLCBkZXYgbXRkYmxvY2swLCBzZWN0b3IgODA4DQplbmRf
cmVxdWVzdDogSS9PIGVycm9yLCBkZXYgbXRkYmxvY2swLCBzZWN0b3IgODE2DQplbmRfcmVxdWVz
dDogSS9PIGVycm9yLCBkZXYgbXRkYmxvY2swLCBzZWN0b3IgODI0DQplbmRfcmVxdWVzdDogSS9P
IGVycm9yLCBkZXYgbXRkYmxvY2swLCBzZWN0b3IgODMyDQplbmRfcmVxdWVzdDogSS9PIGVycm9y
LCBkZXYgbXRkYmxvY2swLCBzZWN0b3IgODQwDQplbmRfcmVxdWVzdDogSS9PIGVycm9yLCBkZXYg
bXRkYmxvY2swLCBzZWN0b3IgODQ4DQplbmRfcmVxdWVzdDogSS9PIGVycm9yLCBkZXYgbXRkYmxv
Y2swLCBzZWN0b3IgODU2DQplbmRfcmVxdWVzdDogSS9PIGVycm9yLCBkZXYgbXRkYmxvY2swLCBz
ZWN0b3IgODY0DQplbmRfcmVxdWVzdDogSS9PIGVycm9yLCBkZXYgbXRkYmxvY2swLCBzZWN0b3Ig
ODcyDQplbmRfcmVxdWVzdDogSS9PIGVycm9yLCBkZXYgbXRkYmxvY2swLCBzZWN0b3IgODgwDQpl
bmRfcmVxdWVzdDogSS9PIGVycm9yLCBkZXYgbXRkYmxvY2swLCBzZWN0b3IgODg4DQplbmRfcmVx
dWVzdDogSS9PIGVycm9yLCBkZXYgbXRkYmxvY2swLCBzZWN0b3IgODk2DQplbmRfcmVxdWVzdDog
SS9PIGVycm9yLCBkZXYgbXRkYmxvY2swLCBzZWN0b3IgOTA0DQplbmRfcmVxdWVzdDogSS9PIGVy
cm9yLCBkZXYgbXRkYmxvY2swLCBzZWN0b3IgOTEyDQplbmRfcmVxdWVzdDogSS9PIGVycm9yLCBk
ZXYgbXRkYmxvY2swLCBzZWN0b3IgOTIwDQplbmRfcmVxdWVzdDogSS9PIGVycm9yLCBkZXYgbXRk
YmxvY2swLCBzZWN0b3IgOTI4DQplbmRfcmVxdWVzdDogSS9PIGVycm9yLCBkZXYgbXRkYmxvY2sw
LCBzZWN0b3IgOTM2DQplbmRfcmVxdWVzdDogSS9PIGVycm9yLCBkZXYgbXRkYmxvY2swLCBzZWN0
b3IgOTQ0DQplbmRfcmVxdWVzdDogSS9PIGVycm9yLCBkZXYgbXRkYmxvY2swLCBzZWN0b3IgOTUy
DQplbmRfcmVxdWVzdDogSS9PIGVycm9yLCBkZXYgbXRkYmxvY2swLCBzZWN0b3IgOTYwDQplbmRf
cmVxdWVzdDogSS9PIGVycm9yLCBkZXYgbXRkYmxvY2swLCBzZWN0b3IgOTY4DQplbmRfcmVxdWVz
dDogSS9PIGVycm9yLCBkZXYgbXRkYmxvY2swLCBzZWN0b3IgOTc2DQplbmRfcmVxdWVzdDogSS9P
IGVycm9yLCBkZXYgbXRkYmxvY2swLCBzZWN0b3IgOTg0DQplbmRfcmVxdWVzdDogSS9PIGVycm9y
LCBkZXYgbXRkYmxvY2swLCBzZWN0b3IgOTkyDQplbmRfcmVxdWVzdDogSS9PIGVycm9yLCBkZXYg
bXRkYmxvY2swLCBzZWN0b3IgMTAwMA0KZW5kX3JlcXVlc3Q6IEkvTyBlcnJvciwgZGV2IG10ZGJs
b2NrMCwgc2VjdG9yIDEwMDgNCmVuZF9yZXF1ZXN0OiBJL08gZXJyb3IsIGRldiBtdGRibG9jazAs
IHNlY3RvciAxMDE2DQplbmRfcmVxdWVzdDogSS9PIGVycm9yLCBkZXYgbXRkYmxvY2swLCBzZWN0
b3IgMjA0OA0KZW5kX3JlcXVlc3Q6IEkvTyBlcnJvciwgZGV2IG10ZGJsb2NrMCwgc2VjdG9yIDIw
NTYNCmVuZF9yZXF1ZXN0OiBJL08gZXJyb3IsIGRldiBtdGRibG9jazAsIHNlY3RvciAyMDY0DQpl
bmRfcmVxdWVzdDogSS9PIGVycm9yLCBkZXYgbXRkYmxvY2swLCBzZWN0b3IgMjA3Mg0KZW5kX3Jl
cXVlc3Q6IEkvTyBlcnJvciwgZGV2IG10ZGJsb2NrMCwgc2VjdG9yIDIwODANCmVuZF9yZXF1ZXN0
OiBJL08gZXJyb3IsIGRldiBtdGRibG9jazAsIHNlY3RvciAyMDg4DQplbmRfcmVxdWVzdDogSS9P
IGVycm9yLCBkZXYgbXRkYmxvY2swLCBzZWN0b3IgMjA5Ng0KZW5kX3JlcXVlc3Q6IEkvTyBlcnJv
ciwgZGV2IG10ZGJsb2NrMCwgc2VjdG9yIDIxMDQNCmVuZF9yZXF1ZXN0OiBJL08gZXJyb3IsIGRl
diBtdGRibG9jazAsIHNlY3RvciAyMTEyDQplbmRfcmVxdWVzdDogSS9PIGVycm9yLCBkZXYgbXRk
YmxvY2swLCBzZWN0b3IgMjEyMA0KZW5kX3JlcXVlc3Q6IEkvTyBlcnJvciwgZGV2IG10ZGJsb2Nr
MCwgc2VjdG9yIDIxMjgNCmVuZF9yZXF1ZXN0OiBJL08gZXJyb3IsIGRldiBtdGRibG9jazAsIHNl
Y3RvciAyMTM2DQplbmRfcmVxdWVzdDogSS9PIGVycm9yLCBkZXYgbXRkYmxvY2swLCBzZWN0b3Ig
MjE0NA0KZW5kX3JlcXVlc3Q6IEkvTyBlcnJvciwgZGV2IG10ZGJsb2NrMCwgc2VjdG9yIDIxNTIN
CmVuZF9yZXF1ZXN0OiBJL08gZXJyb3IsIGRldiBtdGRibG9jazAsIHNlY3RvciAyMTYwDQplbmRf
cmVxdWVzdDogSS9PIGVycm9yLCBkZXYgbXRkYmxvY2swLCBzZWN0b3IgMjE2OA0KZW5kX3JlcXVl
c3Q6IEkvTyBlcnJvciwgZGV2IG10ZGJsb2NrMCwgc2VjdG9yIDIxNzYNCmVuZF9yZXF1ZXN0OiBJ
L08gZXJyb3IsIGRldiBtdGRibG9jazAsIHNlY3RvciAyMTg0DQplbmRfcmVxdWVzdDogSS9PIGVy
cm9yLCBkZXYgbXRkYmxvY2swLCBzZWN0b3IgMjE5Mg0KZW5kX3JlcXVlc3Q6IEkvTyBlcnJvciwg
ZGV2IG10ZGJsb2NrMCwgc2VjdG9yIDIyMDANCmVuZF9yZXF1ZXN0OiBJL08gZXJyb3IsIGRldiBt
dGRibG9jazAsIHNlY3RvciAyMjA4DQplbmRfcmVxdWVzdDogSS9PIGVycm9yLCBkZXYgbXRkYmxv
Y2swLCBzZWN0b3IgMjIxNg0KZW5kX3JlcXVlc3Q6IEkvTyBlcnJvciwgZGV2IG10ZGJsb2NrMCwg
c2VjdG9yIDIyMjQNCmVuZF9yZXF1ZXN0OiBJL08gZXJyb3IsIGRldiBtdGRibG9jazAsIHNlY3Rv
ciAyMjMyDQplbmRfcmVxdWVzdDogSS9PIGVycm9yLCBkZXYgbXRkYmxvY2swLCBzZWN0b3IgMjI0
MA0KZW5kX3JlcXVlc3Q6IEkvTyBlcnJvciwgZGV2IG10ZGJsb2NrMCwgc2VjdG9yIDIyNDgNCmVu
ZF9yZXF1ZXN0OiBJL08gZXJyb3IsIGRldiBtdGRibG9jazAsIHNlY3RvciAyMjU2DQplbmRfcmVx
dWVzdDogSS9PIGVycm9yLCBkZXYgbXRkYmxvY2swLCBzZWN0b3IgMjI2NA0KZW5kX3JlcXVlc3Q6
IEkvTyBlcnJvciwgZGV2IG10ZGJsb2NrMCwgc2VjdG9yIDIyNzINCmVuZF9yZXF1ZXN0OiBJL08g
ZXJyb3IsIGRldiBtdGRibG9jazAsIHNlY3RvciAyMjgwDQplbmRfcmVxdWVzdDogSS9PIGVycm9y
LCBkZXYgbXRkYmxvY2swLCBzZWN0b3IgMjI4OA0KZW5kX3JlcXVlc3Q6IEkvTyBlcnJvciwgZGV2
IG10ZGJsb2NrMCwgc2VjdG9yIDIyOTYNCmVuZF9yZXF1ZXN0OiBJL08gZXJyb3IsIGRldiBtdGRi
bG9jazAsIHNlY3RvciAyMzA0DQplbmRfcmVxdWVzdDogSS9PIGVycm9yLCBkZXYgbXRkYmxvY2sw
LCBzZWN0b3IgMjMxMg0KZW5kX3JlcXVlc3Q6IEkvTyBlcnJvciwgZGV2IG10ZGJsb2NrMCwgc2Vj
dG9yIDIzMjANCmVuZF9yZXF1ZXN0OiBJL08gZXJyb3IsIGRldiBtdGRibG9jazAsIHNlY3RvciAy
MzI4DQplbmRfcmVxdWVzdDogSS9PIGVycm9yLCBkZXYgbXRkYmxvY2swLCBzZWN0b3IgMjMzNg0K
cHJpbnRrOiA3OSBtZXNzYWdlcyBzdXBwcmVzc2VkLg0KQnVmZmVyIEkvTyBlcnJvciBvbiBkZXZp
Y2UgbXRkYmxvY2swLCBsb2dpY2FsIGJsb2NrIDI5Mg0KbG9zdCBwYWdlIHdyaXRlIGR1ZSB0byBJ
L08gZXJyb3Igb24gbXRkYmxvY2swDQplbmRfcmVxdWVzdDogSS9PIGVycm9yLCBkZXYgbXRkYmxv
Y2swLCBzZWN0b3IgMjM0NA0KZW5kX3JlcXVlc3Q6IEkvTyBlcnJvciwgZGV2IG10ZGJsb2NrMCwg
c2VjdG9yIDIzNTINCmVuZF9yZXF1ZXN0OiBJL08gZXJyb3IsIGRldiBtdGRibG9jazAsIHNlY3Rv
ciAyMzYwDQplbmRfcmVxdWVzdDogSS9PIGVycm9yLCBkZXYgbXRkYmxvY2swLCBzZWN0b3IgMjM2
OA0KZW5kX3JlcXVlc3Q6IEkvTyBlcnJvciwgZGV2IG10ZGJsb2NrMCwgc2VjdG9yIDIzNzYNCmVu
ZF9yZXF1ZXN0OiBJL08gZXJyb3IsIGRldiBtdGRibG9jazAsIHNlY3RvciAyMzg0DQplbmRfcmVx
dWVzdDogSS9PIGVycm9yLCBkZXYgbXRkYmxvY2swLCBzZWN0b3IgMjM5Mg0KZW5kX3JlcXVlc3Q6
IEkvTyBlcnJvciwgZGV2IG10ZGJsb2NrMCwgc2VjdG9yIDI0MDANCmVuZF9yZXF1ZXN0OiBJL08g
ZXJyb3IsIGRldiBtdGRibG9jazAsIHNlY3RvciAyNDA4DQplbmRfcmVxdWVzdDogSS9PIGVycm9y
LCBkZXYgbXRkYmxvY2swLCBzZWN0b3IgMjQxNg0KZW5kX3JlcXVlc3Q6IEkvTyBlcnJvciwgZGV2
IG10ZGJsb2NrMCwgc2VjdG9yIDI0MjQNCmVuZF9yZXF1ZXN0OiBJL08gZXJyb3IsIGRldiBtdGRi
bG9jazAsIHNlY3RvciAyNDMyDQplbmRfcmVxdWVzdDogSS9PIGVycm9yLCBkZXYgbXRkYmxvY2sw
LCBzZWN0b3IgMjQ0MA0KZW5kX3JlcXVlc3Q6IEkvTyBlcnJvciwgZGV2IG10ZGJsb2NrMCwgc2Vj
dG9yIDI0NDgNCmVuZF9yZXF1ZXN0OiBJL08gZXJyb3IsIGRldiBtdGRibG9jazAsIHNlY3RvciAy
NDU2DQplbmRfcmVxdWVzdDogSS9PIGVycm9yLCBkZXYgbXRkYmxvY2swLCBzZWN0b3IgMjQ2NA0K
ZW5kX3JlcXVlc3Q6IEkvTyBlcnJvciwgZGV2IG10ZGJsb2NrMCwgc2VjdG9yIDI0NzINCmVuZF9y
ZXF1ZXN0OiBJL08gZXJyb3IsIGRldiBtdGRibG9jazAsIHNlY3RvciAyNDgwDQplbmRfcmVxdWVz
dDogSS9PIGVycm9yLCBkZXYgbXRkYmxvY2swLCBzZWN0b3IgMjQ4OA0KZW5kX3JlcXVlc3Q6IEkv
TyBlcnJvciwgZGV2IG10ZGJsb2NrMCwgc2VjdG9yIDI0OTYNCmVuZF9yZXF1ZXN0OiBJL08gZXJy
b3IsIGRldiBtdGRibG9jazAsIHNlY3RvciAyNTA0DQplbmRfcmVxdWVzdDogSS9PIGVycm9yLCBk
ZXYgbXRkYmxvY2swLCBzZWN0b3IgMjUxMg0KZW5kX3JlcXVlc3Q6IEkvTyBlcnJvciwgZGV2IG10
ZGJsb2NrMCwgc2VjdG9yIDI1MjANCmVuZF9yZXF1ZXN0OiBJL08gZXJyb3IsIGRldiBtdGRibG9j
azAsIHNlY3RvciAyNTI4DQplbmRfcmVxdWVzdDogSS9PIGVycm9yLCBkZXYgbXRkYmxvY2swLCBz
ZWN0b3IgMjUzNg0KZW5kX3JlcXVlc3Q6IEkvTyBlcnJvciwgZGV2IG10ZGJsb2NrMCwgc2VjdG9y
IDI1NDQNCmVuZF9yZXF1ZXN0OiBJL08gZXJyb3IsIGRldiBtdGRibG9jazAsIHNlY3RvciAyNTUy
DQovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
DQoNCg0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQ0KRnJvbTogIlNjb3R0IFdvb2QiIDxzY290dHdvb2RAZnJlZXNjYWxlLmNvbT4NClNlbnQ6IFRo
dXJzZGF5LCBBcHJpbCAyNCwgMjAwOCAxMjozNSBBTQ0KVG86ICI/Pz8iIDx5dXlvbmdiYW9AMTI2
LmNvbT4NCkNjOiA8bGludXhwcGMtZW1iZWRkZWRAb3psYWJzLm9yZz4NClN1YmplY3Q6IFJlOiBt
cGM4Mzc5ZSByZGIgbmFuZCBmbGFzaCBzdXBwb3J0DQoNCj4gT24gV2VkLCBBcHIgMjMsIDIwMDgg
YXQgMDM6NDc6MDBQTSArMDgwMCwgPz8/IHdyb3RlOg0KPj4gRGVhciBhbGw6DQo+PiAgICAgRGlk
IGFueW9uZSB1c2UgbXBjODM3OWVyZGIgYm9hcmQ/ICBJIGNoYW5nZWQgbmFuZCBmbGFzaCBmcm9t
IHNhbXN1bmcgMzJNIHRvIGh5bml4IDFHIGJ5dGUuQW5kIHRoZSAxRyBieXRlIG5hbmQncyBlcmFz
ZSBibG9jayBzaXplIGlzIDI1NktCLg0KPj4gICAgIE5vdyB0aGUgcHJvYmxlbSBpczogd2hlbiBJ
IHVzZSAiIG5hbmQgd3JpdGUuamZmczIiIGNvbW1hbmQgdG8gd3JpdGUgamZmczIgZmlsZXN5c3Rl
bXMgdG8gbmFuZCBmbGFzaCAsdGhlcmUgaXMgb25seSAxMjhLQnl0ZSBvZiBldmVyeSBlcmFzZSBi
bG9ja3MgY2FuIGJlIHdyaXRlZC4NCj4+ICAgICBGcm9tIHRoZSBkYXRhc2hlZXQgb2YgdGhlIG1w
YzgzNzllICwiUGFnZSBzaXplIG9mIDIwNDggbWFpbiBhcmVhIGJ5dGVzIHBsdXMgNjQgc3BhcmUg
YXJlYSBieXRlcyAobGFyZ2UgcGFnZSBkZXZpY2VzKTsNCj4+IEZDTSBSQU0gYnVmZmVycyBhcmUg
NCBLYnl0ZXMgZWFjaDsgRmxhc2ggYmxvY2sgc2l6ZSBvZiAxMjggS2J5dGVzLiINCj4+ICAgICBJ
cyBpdCBtZWFucyBtcGM4Mzc5ZSBvbmx5IHN1cHBvcnQgMTI4S2J5dGVzIGJsb2NrIHNpemU/DQo+
PiAgICAgSGVyZSBpcyB0aGUgaW5mb3JtYXRpb24gd2hlbiBJIHRyaWVkIHRvIHdyaXRlIGl0IDoN
Cj4gDQo+IEl0IGxvb2tzIGxpa2UgeW91J3JlIHRhbGtpbmcgYWJvdXQgdS1ib290LCBub3QgTGlu
dXg7IHRoZSBGQ00gTkFORCBkcml2ZXINCj4gaGFzIG5vdCB5ZXQgYmVlbiBtZXJnZWQuICBBcmUg
eW91IHVzaW5nIGEgRnJlZXNjYWxlIEJTUD8gIElmIHNvLCBpdCdzDQo+IGJlc3QgdG8gZ28gdGhy
b3VnaCBvZmZpY2lhbCBzdXBwb3J0IGNoYW5uZWxzLiAgSWYgeW91J3JlIHVzaW5nIHBhdGNoZXMN
Cj4gdGhhdCB3ZXJlIHJlY2VudGx5IHBvc3RlZCwgbWFrZSBzdXJlIHlvdSBoYXZlIGFsbCB0aGUg
YnVnZml4ZXMgdGhhdA0KPiByZWNlbnRseSB3ZW50IGludG8gdGhlIGxpbnV4IG10ZCB0cmVlLg0K
PiANCj4gLVNjb3R0IA==
^ permalink raw reply
* Re: simpleboot
From: Josh Boyer @ 2008-04-24 3:08 UTC (permalink / raw)
To: David H. Lynch Jr.; +Cc: linuxppc-embedded
In-Reply-To: <480FEA44.8090105@picocomputing.net>
On Wed, 2008-04-23 at 22:02 -0400, David H. Lynch Jr. wrote:
> Josh Boyer wrote:
> > simpleboot is in Linus' tree now. It went in with the first pull
> > request paulus sent for .26.
> >
> I got it, now to figure it out.
> > I don't understand that comment anyway though. If you're working with a
> > PowerPC board, why aren't you using the powerpc tree (paulus') to begin
> > with? "Backporting" pieces of it to some other tree seems to be a waste
> > of time to me...
> >
> I am updating a port I did in 2005 ? based on the ml403 port that
> was in at that time.
> But it is an independent BSP. I need to move it to the current
> powerpc/devicetree,
> but I have to do so without breaking alot of things we have have
> working for years.
OK... and how does that dictate whether to use Linus' tree or paulus'
tree? Both are going to contain roughly the same amount of changes,
with the exception that paulus' tree will have more of the PowerPC
commits in it, including the Xilinx ml403 stuff from Grant.
> At the moment I am somewhat "surely" about a number of the issues
> related to the powerpc/devicetree migration.
> Aside from the BSP issues, this breaks my boot monitor, and is going
> to require adding alot more code than I can either justify
> or see as necescary because there are some aspects of how the
> devicetree/powerpc stuff is architected that
> politely I think are brain dead.
I don't mind people calling it brain dead. But if you were being
polite, you'd call it brain dead and then actually list the issues so
they could be discussed. Others might benefit from that discussion.
josh
^ permalink raw reply
* Re: [PATCH 2/11] cell: generalize io-workarounds code
From: Ishizaki Kou @ 2008-04-24 3:07 UTC (permalink / raw)
To: benh; +Cc: linuxppc-dev, paulus
In-Reply-To: <1208396890.6958.323.camel@pasglop>
Ben-san,
I'm sorry to have kept you waiting for my response.
I just finished reviewing your patch. Your patch works well on
Celleb, and I found I also should do the same thing for Celleb as you
pointed. I will send a new patch which includes your fix.
Benjamin Herrenschmidt <benh@kernel.crashing.org> wrote:
> So I found a few issues with your patch. Below is a "Fixup" patch that
> fixes the QS20 cell blades for me, but I would like you to apply that
> directly to your series and post a new version of it so that there
> is no breakage of QS20 during bisection.
>
> Note that I believe Celleb may have some problems too. See below.
>
> So the base issue was that on QS20, there was no struct device, thus the
> dma mapping would crash.
>
> I fixed that by changing the Cell blades code to create
> of_platform_device's for the PCI busses like it does on QS21 or later,
> and removed the initial call to the rtas PCI bus creation.
>
> Now, that doesn't fix it all....
>
> One thing I noticed in celleb_pci is that you initialize the workarounds
> for the bus after it's been created at device_initcall time. This is not
> good because at that time, drivers can already have been loaded &
> initialized, quirks have been run, etc... so it's actually too late to
> initialize the workarounds. They need to be initialized earlier.
You are right. It seems that celleb_pci happened to be initialized
earlier than PCI device drivers, so troubles (except that for quirks)
have been avoided. I will fix it by the new patch.
> I've tried something around the lines of initializing them from within
> the PHB setup callback, which happens before the PCI probe. You should
> be able to use the same approach for Celleb I suppose. Seems to work for
> me so far...
I will do the same way. Thanks for your advice.
> In addition, your patch would have called io_workaround_init() on QS21
> which doesn't need them (no Spider), thus slowing down access on
> machines that don't need the workarounds.
>
> My new code should hopefully only call this when needed. I made the call
> safe to call multiple time to avoid having to test in the caller.
>
> Another thing I noticed is that you removed the workaround to disable
> PCI prefetch. Is there a reason for that ? As far as I understand,
> prefetch is broken and can cause errors ranging from data corruption to
> iommu exceptions if the iommu is enabled. Maybe you want to make it
> depend on the revision of Spider in case your SCC has that fixed ?
Sorry, this was my mistake. I will put it back in a new patch.
> My patch doesn't change that but we might need to...
>
> So here is the patch. Please integrate my changes in your patch serie
> and re-post it (minus the two patches that Paulus already accepted).
Thanks, I'll do so. Can I add your 'Signed-off'?
Best regards,
Kou Ishizaki
^ permalink raw reply
* Re: [PATCH 2/11] cell: generalize io-workarounds code
From: Ishizaki Kou @ 2008-04-24 3:10 UTC (permalink / raw)
To: benh; +Cc: linuxppc-dev, paulus
In-Reply-To: <1208396890.6958.323.camel@pasglop>
Ben-san,
I'm sorry to have kept you waiting for my response.
I just finished reviewing your patch. Your patch works well on
Celleb, and I found I also should do the same thing for Celleb as you
pointed. I will send a new patch which includes your fix.
Benjamin Herrenschmidt <benh@kernel.crashing.org> wrote:
> So I found a few issues with your patch. Below is a "Fixup" patch that
> fixes the QS20 cell blades for me, but I would like you to apply that
> directly to your series and post a new version of it so that there
> is no breakage of QS20 during bisection.
>
> Note that I believe Celleb may have some problems too. See below.
>
> So the base issue was that on QS20, there was no struct device, thus the
> dma mapping would crash.
>
> I fixed that by changing the Cell blades code to create
> of_platform_device's for the PCI busses like it does on QS21 or later,
> and removed the initial call to the rtas PCI bus creation.
>
> Now, that doesn't fix it all....
>
> One thing I noticed in celleb_pci is that you initialize the workarounds
> for the bus after it's been created at device_initcall time. This is not
> good because at that time, drivers can already have been loaded &
> initialized, quirks have been run, etc... so it's actually too late to
> initialize the workarounds. They need to be initialized earlier.
You are right. It seems that celleb_pci happened to be initialized
earlier than PCI device drivers, so troubles (except that for quirks)
have been avoided. I will fix it by the new patch.
> I've tried something around the lines of initializing them from within
> the PHB setup callback, which happens before the PCI probe. You should
> be able to use the same approach for Celleb I suppose. Seems to work for
> me so far...
I will do the same way. Thanks for your advice.
> In addition, your patch would have called io_workaround_init() on QS21
> which doesn't need them (no Spider), thus slowing down access on
> machines that don't need the workarounds.
>
> My new code should hopefully only call this when needed. I made the call
> safe to call multiple time to avoid having to test in the caller.
>
> Another thing I noticed is that you removed the workaround to disable
> PCI prefetch. Is there a reason for that ? As far as I understand,
> prefetch is broken and can cause errors ranging from data corruption to
> iommu exceptions if the iommu is enabled. Maybe you want to make it
> depend on the revision of Spider in case your SCC has that fixed ?
Sorry, this was my mistake. I will put it back in a new patch.
> My patch doesn't change that but we might need to...
>
> So here is the patch. Please integrate my changes in your patch serie
> and re-post it (minus the two patches that Paulus already accepted).
Thanks, I'll do so. Can I add your 'Signed-off'?
Best regards,
Kou Ishizaki
^ permalink raw reply
* [PATCH] [POWERPC] cleanup misc_64.S
From: Kumar Gala @ 2008-04-24 3:20 UTC (permalink / raw)
To: Paul Mackerras; +Cc: linuxppc-dev
* Removed get_msr(), get_srr0(), and get_srr1() - not used anywhere
* Use STACK_FRAME_OVERHEAD instead of magic number
Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
---
arch/powerpc/kernel/misc_64.S | 20 ++++----------------
1 files changed, 4 insertions(+), 16 deletions(-)
diff --git a/arch/powerpc/kernel/misc_64.S b/arch/powerpc/kernel/misc_64.S
index a3c491e..942951e 100644
--- a/arch/powerpc/kernel/misc_64.S
+++ b/arch/powerpc/kernel/misc_64.S
@@ -27,23 +27,11 @@
.text
-_GLOBAL(get_msr)
- mfmsr r3
- blr
-
-_GLOBAL(get_srr0)
- mfsrr0 r3
- blr
-
-_GLOBAL(get_srr1)
- mfsrr1 r3
- blr
-
#ifdef CONFIG_IRQSTACKS
_GLOBAL(call_do_softirq)
mflr r0
std r0,16(r1)
- stdu r1,THREAD_SIZE-112(r3)
+ stdu r1,THREAD_SIZE-STACK_FRAME_OVERHEAD(r3)
mr r1,r3
bl .__do_softirq
ld r1,0(r1)
@@ -56,7 +44,7 @@ _GLOBAL(call_handle_irq)
mflr r0
std r0,16(r1)
mtctr r8
- stdu r1,THREAD_SIZE-112(r5)
+ stdu r1,THREAD_SIZE-STACK_FRAME_OVERHEAD(r5)
mr r1,r5
bctrl
ld r1,0(r1)
@@ -599,7 +587,7 @@ _GLOBAL(kexec_sequence)
std r0,16(r1)
/* switch stacks to newstack -- &kexec_stack.stack */
- stdu r1,THREAD_SIZE-112(r3)
+ stdu r1,THREAD_SIZE-STACK_FRAME_OVERHEAD(r3)
mr r1,r3
li r0,0
@@ -616,7 +604,7 @@ _GLOBAL(kexec_sequence)
std r26,-48(r1)
std r25,-56(r1)
- stdu r1,-112-64(r1)
+ stdu r1,-STACK_FRAME_OVERHEAD-64(r1)
/* save args into preserved regs */
mr r31,r3 /* newstack (both) */
--
1.5.4.1
^ permalink raw reply related
* Re: [PATCH 2/11] cell: generalize io-workarounds code
From: Benjamin Herrenschmidt @ 2008-04-24 3:30 UTC (permalink / raw)
To: Ishizaki Kou; +Cc: linuxppc-dev, paulus
In-Reply-To: <20080424.120722.-1300531374.kouish@swc.toshiba.co.jp>
On Thu, 2008-04-24 at 12:07 +0900, Ishizaki Kou wrote:
>
> I'm sorry to have kept you waiting for my response.
>
> I just finished reviewing your patch. Your patch works well on
> Celleb, and I found I also should do the same thing for Celleb as you
> pointed. I will send a new patch which includes your fix.
Thanks. Please do so ASAP as tomorrow is non-working day and we are
getting close to -rc1.
Cheers,
Ben.
^ permalink raw reply
* Re: [PATCH] Discourage people from fiddling with kernel data from prom_init
From: Benjamin Herrenschmidt @ 2008-04-24 3:37 UTC (permalink / raw)
To: Michael Ellerman; +Cc: linuxppc-dev
In-Reply-To: <d3f56e3d99619e642b6f8cd73b35dad4597934ed.1209002897.git.michael@ellerman.id.au>
On Thu, 2008-04-24 at 12:08 +1000, Michael Ellerman wrote:
> As BenH said the other day, it is an "accident" that prom_init.o is linked
> with the rest of the kernel. The truth is a little more subtle, prom_init
> isn't truly bootloader, it does fiddle with kernel data in a few places.
>
> What we can do is discourage people from adding new code that accesses
> data outside of prom_init. And hence this patch, from the script:
>
> # This script checks prom_init.o to see what external symbols it
> # is using, if it finds symbols not in the whitelist it returns
> # an error. The point of this is to discourage people from
> # intentionally or accidentally adding new code to prom_init.c
> # which has side effects on other parts of the kernel.
>
> Signed-off-by: Michael Ellerman <michael@ellerman.id.au>
Acked-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
> ---
> arch/powerpc/kernel/Makefile | 9 +++++
> arch/powerpc/kernel/prom_init_check.sh | 58 ++++++++++++++++++++++++++++++++
> 2 files changed, 67 insertions(+), 0 deletions(-)
>
> diff --git a/arch/powerpc/kernel/Makefile b/arch/powerpc/kernel/Makefile
> index 5183a90..562bb02 100644
> --- a/arch/powerpc/kernel/Makefile
> +++ b/arch/powerpc/kernel/Makefile
> @@ -106,4 +106,13 @@ PHONY += systbl_chk
> systbl_chk: $(src)/systbl_chk.sh $(obj)/systbl_chk.i
> $(call cmd,systbl_chk)
>
> +$(obj)/built-in.o: prom_init_check
> +
> +quiet_cmd_prom_init_check = CALL $<
> + cmd_prom_init_check = $(CONFIG_SHELL) $< "$(NM)" "$(obj)/prom_init.o"
> +
> +PHONY += prom_init_check
> +prom_init_check: $(src)/prom_init_check.sh $(obj)/prom_init.o
> + $(call cmd,prom_init_check)
> +
> clean-files := vmlinux.lds
> diff --git a/arch/powerpc/kernel/prom_init_check.sh b/arch/powerpc/kernel/prom_init_check.sh
> new file mode 100644
> index 0000000..8e24fc1
> --- /dev/null
> +++ b/arch/powerpc/kernel/prom_init_check.sh
> @@ -0,0 +1,58 @@
> +#!/bin/sh
> +#
> +# Copyright © 2008 IBM Corporation
> +#
> +# This program is free software; you can redistribute it and/or
> +# modify it under the terms of the GNU General Public License
> +# as published by the Free Software Foundation; either version
> +# 2 of the License, or (at your option) any later version.
> +
> +# This script checks prom_init.o to see what external symbols it
> +# is using, if it finds symbols not in the whitelist it returns
> +# an error. The point of this is to discourage people from
> +# intentionally or accidentally adding new code to prom_init.c
> +# which has side effects on other parts of the kernel.
> +
> +# If you really need to reference something from prom_init.o add
> +# it to the list below:
> +
> +WHITELIST="add_reloc_offset __bss_start __bss_stop copy_and_flush
> +_end enter_prom memcpy memset reloc_offset __secondary_hold
> +__secondary_hold_acknowledge __secondary_hold_spinloop __start
> +strcmp strcpy strlcpy strlen strncmp strstr logo_linux_clut224
> +reloc_got2"
> +
> +NM="$1"
> +OBJ="$2"
> +
> +ERROR=0
> +
> +for UNDEF in $($NM -u $OBJ | awk '{print $2}')
> +do
> + # On 64-bit nm gives us the function descriptors, which have
> + # a leading . on the name, so strip it off here.
> + UNDEF="${UNDEF#.}"
> +
> + if [ $KBUILD_VERBOSE ]; then
> + if [ $KBUILD_VERBOSE -ne 0 ]; then
> + echo "Checking prom_init.o symbol '$UNDEF'"
> + fi
> + fi
> +
> + OK=0
> + for WHITE in $WHITELIST
> + do
> + if [ "$UNDEF" = "$WHITE" ]; then
> + OK=1
> + break
> + fi
> + done
> +
> + if [ $OK -eq 0 ]; then
> + ERROR=1
> + echo "Error: External symbol '$UNDEF' referenced" \
> + "from prom_init.c" >&2
> + fi
> +done
> +
> +exit $ERROR
> _______________________________________________
> Linuxppc-dev mailing list
> Linuxppc-dev@ozlabs.org
> https://ozlabs.org/mailman/listinfo/linuxppc-dev
^ permalink raw reply
* [PATCH 1/2 v4] Make iSeries spin on __secondary_hold_spinloop, like pSeries.
From: Tony Breeds @ 2008-04-24 3:43 UTC (permalink / raw)
To: Paul Mackerras, linuxppc-dev; +Cc: Stephen Rothwell
Currently all iSeries secondary CPU's spin directly on the cpu_start in thier
paca. Make them spin on the global __secondary_hold_spinloop, until after the
pacas have been initialised.
As sfr points out this works because __secondary_hold_spinloop is being set
already, but iSeries isn't looking at it :)
Signed-off-by: Tony Breeds <tony@bakeyournoodle.com>
Acked-by: Stephen Rothwell <sfr@canb.auug.org.au>
---
Changes since v1:
- Updated commit message.
Changes since v2:
- Fixed my brain damage, and split out the code that should be in 3/3
Changes since v3:
- moved in patch series, no funcational changes.
arch/powerpc/platforms/iseries/exception.S | 27 ++++++++++++++++++++++++++-
1 files changed, 26 insertions(+), 1 deletions(-)
diff --git a/arch/powerpc/platforms/iseries/exception.S b/arch/powerpc/platforms/iseries/exception.S
index c775cd4..8ff330d 100644
--- a/arch/powerpc/platforms/iseries/exception.S
+++ b/arch/powerpc/platforms/iseries/exception.S
@@ -59,8 +59,33 @@ system_reset_iSeries:
andc r4,r4,r5
mtspr SPRN_CTRLT,r4
+/* Spin on __secondary_hold_spinloop until it is updated by the boot cpu. */
+/* In the UP case we'll yeild() later, and we will not access the paca anyway */
+#ifdef CONFIG_SMP
1:
HMT_LOW
+ LOAD_REG_IMMEDIATE(r23, __secondary_hold_spinloop)
+ ld r23,0(r23)
+ sync
+ LOAD_REG_IMMEDIATE(r3,current_set)
+ sldi r28,r24,3 /* get current_set[cpu#] */
+ ldx r3,r3,r28
+ addi r1,r3,THREAD_SIZE
+ subi r1,r1,STACK_FRAME_OVERHEAD
+
+ cmpwi 0,r23,0 /* Keep poking the Hypervisor until */
+ bne 2f /* we're released */
+ /* Let the Hypervisor know we are alive */
+ /* 8002 is a call to HvCallCfg::getLps, a harmless Hypervisor function */
+ lis r3,0x8002
+ rldicr r3,r3,32,15 /* r0 = (r3 << 32) & 0xffff000000000000 */
+ li r0,-1 /* r0=-1 indicates a Hypervisor call */
+ sc /* Invoke the hypervisor via a system call */
+ b 1b
+#endif
+
+2:
+ HMT_LOW
#ifdef CONFIG_SMP
lbz r23,PACAPROCSTART(r13) /* Test if this processor
* should start */
@@ -91,7 +116,7 @@ iSeries_secondary_smp_loop:
li r0,-1 /* r0=-1 indicates a Hypervisor call */
sc /* Invoke the hypervisor via a system call */
mfspr r13,SPRN_SPRG3 /* Put r13 back ???? */
- b 1b /* If SMP not configured, secondaries
+ b 2b /* If SMP not configured, secondaries
* loop forever */
/*** ISeries-LPAR interrupt handlers ***/
--
1.5.5.1
^ permalink raw reply related
* [PATCH 2/2] Raise the upper limit of NR_CPUS and move the pacas into the BSS.
From: Tony Breeds @ 2008-04-24 3:43 UTC (permalink / raw)
To: Paul Mackerras, linuxppc-dev
In-Reply-To: <b863aa7fba7b2b00cb72d327fdd7a04b6cb81106.1209008469.git.tony@bakeyournoodle.com>
This patch adds the required functionality to fill in all pacas at runtime.
With NR_CPUS=1024
text data bss dec hex filename
137 1704032 0 1704169 1a00e9 arch/powerpc/kernel/paca.o :Before
121 1179744 524288 1704153 1a00d9 arch/powerpc/kernel/paca.o :After
Also remove unneeded #includes from arch/powerpc/kernel/paca.c
Signed-off-by: Tony Breeds <tony@bakeyournoodle.com>
---
Now merged, with patch 1 fomr previous series.
arch/powerpc/kernel/paca.c | 87 +++++++++----------------------
arch/powerpc/kernel/setup_64.c | 3 +
arch/powerpc/platforms/Kconfig.cputype | 4 +-
include/asm-powerpc/paca.h | 1 +
4 files changed, 31 insertions(+), 64 deletions(-)
diff --git a/arch/powerpc/kernel/paca.c b/arch/powerpc/kernel/paca.c
index ac163bd..c9bf17e 100644
--- a/arch/powerpc/kernel/paca.c
+++ b/arch/powerpc/kernel/paca.c
@@ -7,17 +7,11 @@
* 2 of the License, or (at your option) any later version.
*/
-#include <linux/types.h>
#include <linux/threads.h>
#include <linux/module.h>
-#include <asm/processor.h>
-#include <asm/ptrace.h>
-#include <asm/page.h>
#include <asm/lppaca.h>
#include <asm/paca.h>
-#include <asm/mmu.h>
-
/* This symbol is provided by the linker - let it fill in the paca
* field correctly */
@@ -65,60 +59,29 @@ struct slb_shadow slb_shadow[] __cacheline_aligned = {
* processors. The processor VPD array needs one entry per physical
* processor (not thread).
*/
-#define PACA_INIT(number) \
-{ \
- .lppaca_ptr = &lppaca[number], \
- .lock_token = 0x8000, \
- .paca_index = (number), /* Paca Index */ \
- .kernel_toc = (unsigned long)(&__toc_start) + 0x8000UL, \
- .hw_cpu_id = 0xffff, \
- .slb_shadow_ptr = &slb_shadow[number], \
- .__current = &init_task, \
-}
-
-struct paca_struct paca[] = {
- PACA_INIT(0),
-#if NR_CPUS > 1
- PACA_INIT( 1), PACA_INIT( 2), PACA_INIT( 3),
-#if NR_CPUS > 4
- PACA_INIT( 4), PACA_INIT( 5), PACA_INIT( 6), PACA_INIT( 7),
-#if NR_CPUS > 8
- PACA_INIT( 8), PACA_INIT( 9), PACA_INIT( 10), PACA_INIT( 11),
- PACA_INIT( 12), PACA_INIT( 13), PACA_INIT( 14), PACA_INIT( 15),
- PACA_INIT( 16), PACA_INIT( 17), PACA_INIT( 18), PACA_INIT( 19),
- PACA_INIT( 20), PACA_INIT( 21), PACA_INIT( 22), PACA_INIT( 23),
- PACA_INIT( 24), PACA_INIT( 25), PACA_INIT( 26), PACA_INIT( 27),
- PACA_INIT( 28), PACA_INIT( 29), PACA_INIT( 30), PACA_INIT( 31),
-#if NR_CPUS > 32
- PACA_INIT( 32), PACA_INIT( 33), PACA_INIT( 34), PACA_INIT( 35),
- PACA_INIT( 36), PACA_INIT( 37), PACA_INIT( 38), PACA_INIT( 39),
- PACA_INIT( 40), PACA_INIT( 41), PACA_INIT( 42), PACA_INIT( 43),
- PACA_INIT( 44), PACA_INIT( 45), PACA_INIT( 46), PACA_INIT( 47),
- PACA_INIT( 48), PACA_INIT( 49), PACA_INIT( 50), PACA_INIT( 51),
- PACA_INIT( 52), PACA_INIT( 53), PACA_INIT( 54), PACA_INIT( 55),
- PACA_INIT( 56), PACA_INIT( 57), PACA_INIT( 58), PACA_INIT( 59),
- PACA_INIT( 60), PACA_INIT( 61), PACA_INIT( 62), PACA_INIT( 63),
-#if NR_CPUS > 64
- PACA_INIT( 64), PACA_INIT( 65), PACA_INIT( 66), PACA_INIT( 67),
- PACA_INIT( 68), PACA_INIT( 69), PACA_INIT( 70), PACA_INIT( 71),
- PACA_INIT( 72), PACA_INIT( 73), PACA_INIT( 74), PACA_INIT( 75),
- PACA_INIT( 76), PACA_INIT( 77), PACA_INIT( 78), PACA_INIT( 79),
- PACA_INIT( 80), PACA_INIT( 81), PACA_INIT( 82), PACA_INIT( 83),
- PACA_INIT( 84), PACA_INIT( 85), PACA_INIT( 86), PACA_INIT( 87),
- PACA_INIT( 88), PACA_INIT( 89), PACA_INIT( 90), PACA_INIT( 91),
- PACA_INIT( 92), PACA_INIT( 93), PACA_INIT( 94), PACA_INIT( 95),
- PACA_INIT( 96), PACA_INIT( 97), PACA_INIT( 98), PACA_INIT( 99),
- PACA_INIT(100), PACA_INIT(101), PACA_INIT(102), PACA_INIT(103),
- PACA_INIT(104), PACA_INIT(105), PACA_INIT(106), PACA_INIT(107),
- PACA_INIT(108), PACA_INIT(109), PACA_INIT(110), PACA_INIT(111),
- PACA_INIT(112), PACA_INIT(113), PACA_INIT(114), PACA_INIT(115),
- PACA_INIT(116), PACA_INIT(117), PACA_INIT(118), PACA_INIT(119),
- PACA_INIT(120), PACA_INIT(121), PACA_INIT(122), PACA_INIT(123),
- PACA_INIT(124), PACA_INIT(125), PACA_INIT(126), PACA_INIT(127),
-#endif
-#endif
-#endif
-#endif
-#endif
-};
+struct paca_struct paca[NR_CPUS];
EXPORT_SYMBOL(paca);
+
+void __init initialise_pacas(void)
+{
+ int cpu;
+
+ /* The TOC register (GPR2) points 32kB into the TOC, so that 64kB
+ * of the TOC can be addressed using a single machine instruction.
+ */
+ unsigned long kernel_toc = (unsigned long)(&__toc_start) + 0x8000UL;
+
+ /* Can't use for_each_*_cpu, as they aren't functional yet */
+ for (cpu = 0; cpu < NR_CPUS; cpu++) {
+ struct paca_struct *new_paca = &paca[cpu];
+
+ new_paca->lppaca_ptr = &lppaca[cpu];
+ new_paca->lock_token = 0x8000;
+ new_paca->paca_index = cpu;
+ new_paca->kernel_toc = kernel_toc;
+ new_paca->hw_cpu_id = 0xffff;
+ new_paca->slb_shadow_ptr = &slb_shadow[cpu];
+ new_paca->__current = &init_task;
+
+ }
+}
diff --git a/arch/powerpc/kernel/setup_64.c b/arch/powerpc/kernel/setup_64.c
index 31ada9f..5e382ac 100644
--- a/arch/powerpc/kernel/setup_64.c
+++ b/arch/powerpc/kernel/setup_64.c
@@ -170,6 +170,9 @@ void __init setup_paca(int cpu)
void __init early_setup(unsigned long dt_ptr)
{
+ /* Fill in any unititialised pacas */
+ initialise_pacas();
+
/* Identify CPU type */
identify_cpu(0, mfspr(SPRN_PVR));
diff --git a/arch/powerpc/platforms/Kconfig.cputype b/arch/powerpc/platforms/Kconfig.cputype
index 5fc7fac..f7efaa9 100644
--- a/arch/powerpc/platforms/Kconfig.cputype
+++ b/arch/powerpc/platforms/Kconfig.cputype
@@ -220,8 +220,8 @@ config SMP
If you don't know what to do here, say N.
config NR_CPUS
- int "Maximum number of CPUs (2-128)"
- range 2 128
+ int "Maximum number of CPUs (2-1024)"
+ range 2 1024
depends on SMP
default "32" if PPC64
default "4"
diff --git a/include/asm-powerpc/paca.h b/include/asm-powerpc/paca.h
index eb61b9c..7b56444 100644
--- a/include/asm-powerpc/paca.h
+++ b/include/asm-powerpc/paca.h
@@ -108,6 +108,7 @@ struct paca_struct {
};
extern struct paca_struct paca[];
+extern void initialise_pacas(void);
#endif /* __KERNEL__ */
#endif /* _ASM_POWERPC_PACA_H */
--
1.5.5.1
^ permalink raw reply related
* Re: [PATCH 2/2] Raise the upper limit of NR_CPUS and move the pacas into the BSS.
From: Michael Ellerman @ 2008-04-24 4:08 UTC (permalink / raw)
To: Tony Breeds; +Cc: linuxppc-dev, Paul Mackerras
In-Reply-To: <6bbf4d3637c9b72f9f0a4cf8a6f2c322c0784d7e.1209008469.git.tony@bakeyournoodle.com>
[-- Attachment #1: Type: text/plain, Size: 631 bytes --]
On Thu, 2008-04-24 at 13:43 +1000, Tony Breeds wrote:
> This patch adds the required functionality to fill in all pacas at runtime.
>
> With NR_CPUS=1024
> text data bss dec hex filename
> 137 1704032 0 1704169 1a00e9 arch/powerpc/kernel/paca.o :Before
> 121 1179744 524288 1704153 1a00d9 arch/powerpc/kernel/paca.o :After
Niiiiice.
cheers
--
Michael Ellerman
OzLabs, IBM Australia Development Lab
wwweb: http://michael.ellerman.id.au
phone: +61 2 6212 1183 (tie line 70 21183)
We do not inherit the earth from our ancestors,
we borrow it from our children. - S.M.A.R.T Person
[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 189 bytes --]
^ permalink raw reply
* Re: [U-Boot-Users] AMCC PPC440EPx/sequoia stability question...
From: Stefan Roese @ 2008-04-24 4:36 UTC (permalink / raw)
To: jwboyer; +Cc: u-boot-users, linuxppc-embedded
In-Reply-To: <1208999427.2946.8.camel@vader.jdub.homelinux.org>
On Thursday 24 April 2008, Josh Boyer wrote:
> > Please note that I recently introduced a CFG_MEM_TOP_HIDE option for the
> > 440EPx CHIP 11 errata. I suggest you take a look at this too and see if
> > this changes your behavior.
>
> Explain this a bit more please? Is a kernel change needed here?
This depends. When the bootwrapper version is used then yes, the kernel should
get changed. This is because the bootwrapper detects the SDRAM size from the
DDR2 controller and passes it to Linux.
Without bootwrapper no changes are needed, since U-Boot already passes the
corrected memory size to Linux (totalsize-4k currently).
Best regards,
Stefan
=====================================================================
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-0 Fax: +49-8142-66989-80 Email: office@denx.de
=====================================================================
^ permalink raw reply
* [PATCH 1/5] Set udbg_console index to 0
From: Michael Ellerman @ 2008-04-24 5:13 UTC (permalink / raw)
To: linuxppc-dev
Because the udbg_console has CON_ENABLED set, it's possible that when we
register it with the console code the index won't be set. This leads to
slightly confusing boot messages like:
[ 0.000000] console [udbg-1] enabled
We could remove CON_ENABLED, but we don't want to do that, we always
want the udbg console to be activated, even if the user specified some
other console on the command line.
The simplest fix seems to be just to set the index to 0 by hand. There
is no issue with duplicate udbg consoles, as we guard against registering
multiple times in register_early_udbg_console().
Signed-off-by: Michael Ellerman <michael@ellerman.id.au>
---
arch/powerpc/kernel/udbg.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/arch/powerpc/kernel/udbg.c b/arch/powerpc/kernel/udbg.c
index 7aad620..9ac5f3a 100644
--- a/arch/powerpc/kernel/udbg.c
+++ b/arch/powerpc/kernel/udbg.c
@@ -155,7 +155,7 @@ static struct console udbg_console = {
.name = "udbg",
.write = udbg_console_write,
.flags = CON_PRINTBUFFER | CON_ENABLED | CON_BOOT,
- .index = -1,
+ .index = 0,
};
static int early_console_initialized;
--
1.5.5
^ permalink raw reply related
* [PATCH 2/5] Mark udbg console as CON_ANYTIME, ie. callable early in boot
From: Michael Ellerman @ 2008-04-24 5:13 UTC (permalink / raw)
To: linuxppc-dev
In-Reply-To: <c01702547f6296b2c18e5ff7504ad52cb0402664.1209013992.git.michael@ellerman.id.au>
The udbg console should be safe to call basically at any time after boot.
It does not need any per-cpu resources or for the cpu to be online, as
long as there is a udbg_putc routine hooked up it should work. So mark it
as CON_ANYTIME.
Signed-off-by: Michael Ellerman <michael@ellerman.id.au>
---
arch/powerpc/kernel/udbg.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/arch/powerpc/kernel/udbg.c b/arch/powerpc/kernel/udbg.c
index 9ac5f3a..7d6c9bb 100644
--- a/arch/powerpc/kernel/udbg.c
+++ b/arch/powerpc/kernel/udbg.c
@@ -154,7 +154,7 @@ static void udbg_console_write(struct console *con, const char *s,
static struct console udbg_console = {
.name = "udbg",
.write = udbg_console_write,
- .flags = CON_PRINTBUFFER | CON_ENABLED | CON_BOOT,
+ .flags = CON_PRINTBUFFER | CON_ENABLED | CON_BOOT | CON_ANYTIME,
.index = 0,
};
--
1.5.5
^ permalink raw reply related
* [PATCH 3/5] Register udbg console early on pseries LPAR
From: Michael Ellerman @ 2008-04-24 5:13 UTC (permalink / raw)
To: linuxppc-dev
In-Reply-To: <c01702547f6296b2c18e5ff7504ad52cb0402664.1209013992.git.michael@ellerman.id.au>
On pseries LPAR we can call the udbg routines, and the udbg console very
early. So mark the udbg console as safe to call early in boot, and register
the udbg console as soon as the udbg routines are hooked up.
This allows platforms/pseries code to use printk() and pr_debug() rather
than needing to call udbg_printf() directly for early debugging. This is
nice because a) it's standard, b) it goes via the printk buffer, and c)
you can get printk time stamps.
Signed-off-by: Michael Ellerman <michael@ellerman.id.au>
---
arch/powerpc/platforms/pseries/lpar.c | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)
diff --git a/arch/powerpc/platforms/pseries/lpar.c b/arch/powerpc/platforms/pseries/lpar.c
index 9235c46..c34789f 100644
--- a/arch/powerpc/platforms/pseries/lpar.c
+++ b/arch/powerpc/platforms/pseries/lpar.c
@@ -196,6 +196,8 @@ void __init udbg_init_debug_lpar(void)
udbg_putc = udbg_putcLP;
udbg_getc = udbg_getcLP;
udbg_getc_poll = udbg_getc_pollLP;
+
+ register_early_udbg_console();
}
/* returns 0 if couldn't find or use /chosen/stdout as console */
--
1.5.5
^ permalink raw reply related
* [PATCH 4/5] Convert from DBG() to pr_debug() in platforms/pseries/
From: Michael Ellerman @ 2008-04-24 5:13 UTC (permalink / raw)
To: linuxppc-dev
In-Reply-To: <c01702547f6296b2c18e5ff7504ad52cb0402664.1209013992.git.michael@ellerman.id.au>
In pseries/lpar.c, fix some printf specifier mismatches, and add
a newline to one printk.
In pseries/rtasd.c add "rtasd" to some messages to make it clear
where they're coming from.
In pseries/scanlog.c remove the hand-rolled runtime debugging support
in there. This file has been largely unchanged for eons, if we need to
debug it in future we can recompile.
Signed-off-by: Michael Ellerman <michael@ellerman.id.au>
---
arch/powerpc/platforms/pseries/firmware.c | 9 +-----
arch/powerpc/platforms/pseries/iommu.c | 39 ++++++++++++++---------------
arch/powerpc/platforms/pseries/lpar.c | 34 +++++++++++--------------
arch/powerpc/platforms/pseries/rtasd.c | 14 +++------
arch/powerpc/platforms/pseries/scanlog.c | 23 ++++++-----------
arch/powerpc/platforms/pseries/setup.c | 15 +++-------
arch/powerpc/platforms/pseries/smp.c | 10 +------
7 files changed, 56 insertions(+), 88 deletions(-)
diff --git a/arch/powerpc/platforms/pseries/firmware.c b/arch/powerpc/platforms/pseries/firmware.c
index b765b7c..743d494 100644
--- a/arch/powerpc/platforms/pseries/firmware.c
+++ b/arch/powerpc/platforms/pseries/firmware.c
@@ -27,11 +27,6 @@
#include <asm/prom.h>
#include <asm/udbg.h>
-#ifdef DEBUG
-#define DBG(fmt...) udbg_printf(fmt)
-#else
-#define DBG(fmt...)
-#endif
typedef struct {
unsigned long val;
@@ -72,7 +67,7 @@ void __init fw_feature_init(const char *hypertas, unsigned long len)
const char *s;
int i;
- DBG(" -> fw_feature_init()\n");
+ pr_debug(" -> fw_feature_init()\n");
for (s = hypertas; s < hypertas + len; s += strlen(s) + 1) {
for (i = 0; i < FIRMWARE_MAX_FEATURES; i++) {
@@ -88,5 +83,5 @@ void __init fw_feature_init(const char *hypertas, unsigned long len)
}
}
- DBG(" <- fw_feature_init()\n");
+ pr_debug(" <- fw_feature_init()\n");
}
diff --git a/arch/powerpc/platforms/pseries/iommu.c b/arch/powerpc/platforms/pseries/iommu.c
index a65c763..176f1f3 100644
--- a/arch/powerpc/platforms/pseries/iommu.c
+++ b/arch/powerpc/platforms/pseries/iommu.c
@@ -47,7 +47,6 @@
#include "plpar_wrappers.h"
-#define DBG(fmt...)
static void tce_build_pSeries(struct iommu_table *tbl, long index,
long npages, unsigned long uaddr,
@@ -322,7 +321,7 @@ static void pci_dma_bus_setup_pSeries(struct pci_bus *bus)
dn = pci_bus_to_OF_node(bus);
- DBG("pci_dma_bus_setup_pSeries: setting up bus %s\n", dn->full_name);
+ pr_debug("pci_dma_bus_setup_pSeries: setting up bus %s\n", dn->full_name);
if (bus->self) {
/* This is not a root bus, any setup will be done for the
@@ -347,7 +346,7 @@ static void pci_dma_bus_setup_pSeries(struct pci_bus *bus)
for (children = 0, tmp = dn->child; tmp; tmp = tmp->sibling)
children++;
- DBG("Children: %d\n", children);
+ pr_debug("Children: %d\n", children);
/* Calculate amount of DMA window per slot. Each window must be
* a power of two (due to pci_alloc_consistent requirements).
@@ -361,8 +360,8 @@ static void pci_dma_bus_setup_pSeries(struct pci_bus *bus)
while (pci->phb->dma_window_size * children > 0x80000000ul)
pci->phb->dma_window_size >>= 1;
- DBG("No ISA/IDE, window size is 0x%lx\n",
- pci->phb->dma_window_size);
+ pr_debug("No ISA/IDE, window size is 0x%lx\n",
+ pci->phb->dma_window_size);
pci->phb->dma_window_base_cur = 0;
return;
@@ -387,8 +386,7 @@ static void pci_dma_bus_setup_pSeries(struct pci_bus *bus)
while (pci->phb->dma_window_size * children > 0x70000000ul)
pci->phb->dma_window_size >>= 1;
- DBG("ISA/IDE, window size is 0x%lx\n", pci->phb->dma_window_size);
-
+ pr_debug("ISA/IDE, window size is 0x%lx\n", pci->phb->dma_window_size);
}
@@ -401,7 +399,8 @@ static void pci_dma_bus_setup_pSeriesLP(struct pci_bus *bus)
dn = pci_bus_to_OF_node(bus);
- DBG("pci_dma_bus_setup_pSeriesLP: setting up bus %s\n", dn->full_name);
+ pr_debug("pci_dma_bus_setup_pSeriesLP: setting up bus %s\n",
+ dn->full_name);
/* Find nearest ibm,dma-window, walking up the device tree */
for (pdn = dn; pdn != NULL; pdn = pdn->parent) {
@@ -411,14 +410,14 @@ static void pci_dma_bus_setup_pSeriesLP(struct pci_bus *bus)
}
if (dma_window == NULL) {
- DBG(" no ibm,dma-window property !\n");
+ pr_debug(" no ibm,dma-window property !\n");
return;
}
ppci = PCI_DN(pdn);
- DBG(" parent is %s, iommu_table: 0x%p\n",
- pdn->full_name, ppci->iommu_table);
+ pr_debug(" parent is %s, iommu_table: 0x%p\n",
+ pdn->full_name, ppci->iommu_table);
if (!ppci->iommu_table) {
tbl = kmalloc_node(sizeof(struct iommu_table), GFP_KERNEL,
@@ -426,7 +425,7 @@ static void pci_dma_bus_setup_pSeriesLP(struct pci_bus *bus)
iommu_table_setparms_lpar(ppci->phb, pdn, tbl, dma_window,
bus->number);
ppci->iommu_table = iommu_init_table(tbl, ppci->phb->node);
- DBG(" created table: %p\n", ppci->iommu_table);
+ pr_debug(" created table: %p\n", ppci->iommu_table);
}
if (pdn != dn)
@@ -439,7 +438,7 @@ static void pci_dma_dev_setup_pSeries(struct pci_dev *dev)
struct device_node *dn;
struct iommu_table *tbl;
- DBG("pci_dma_dev_setup_pSeries: %s\n", pci_name(dev));
+ pr_debug("pci_dma_dev_setup_pSeries: %s\n", pci_name(dev));
dn = dev->dev.archdata.of_node;
@@ -450,7 +449,7 @@ static void pci_dma_dev_setup_pSeries(struct pci_dev *dev)
if (!dev->bus->self) {
struct pci_controller *phb = PCI_DN(dn)->phb;
- DBG(" --> first child, no bridge. Allocating iommu table.\n");
+ pr_debug(" --> first child, no bridge. Allocating iommu table.\n");
tbl = kmalloc_node(sizeof(struct iommu_table), GFP_KERNEL,
phb->node);
iommu_table_setparms(phb, dn, tbl);
@@ -480,7 +479,7 @@ static void pci_dma_dev_setup_pSeriesLP(struct pci_dev *dev)
const void *dma_window = NULL;
struct pci_dn *pci;
- DBG("pci_dma_dev_setup_pSeriesLP: %s\n", pci_name(dev));
+ pr_debug("pci_dma_dev_setup_pSeriesLP: %s\n", pci_name(dev));
/* dev setup for LPAR is a little tricky, since the device tree might
* contain the dma-window properties per-device and not neccesarily
@@ -489,7 +488,7 @@ static void pci_dma_dev_setup_pSeriesLP(struct pci_dev *dev)
* already allocated.
*/
dn = pci_device_to_OF_node(dev);
- DBG(" node is %s\n", dn->full_name);
+ pr_debug(" node is %s\n", dn->full_name);
for (pdn = dn; pdn && PCI_DN(pdn) && !PCI_DN(pdn)->iommu_table;
pdn = pdn->parent) {
@@ -504,13 +503,13 @@ static void pci_dma_dev_setup_pSeriesLP(struct pci_dev *dev)
pci_name(dev), dn? dn->full_name : "<null>");
return;
}
- DBG(" parent is %s\n", pdn->full_name);
+ pr_debug(" parent is %s\n", pdn->full_name);
/* Check for parent == NULL so we don't try to setup the empty EADS
* slots on POWER4 machines.
*/
if (dma_window == NULL || pdn->parent == NULL) {
- DBG(" no dma window for device, linking to parent\n");
+ pr_debug(" no dma window for device, linking to parent\n");
dev->dev.archdata.dma_data = PCI_DN(pdn)->iommu_table;
return;
}
@@ -522,9 +521,9 @@ static void pci_dma_dev_setup_pSeriesLP(struct pci_dev *dev)
iommu_table_setparms_lpar(pci->phb, pdn, tbl, dma_window,
pci->phb->bus->number);
pci->iommu_table = iommu_init_table(tbl, pci->phb->node);
- DBG(" created table: %p\n", pci->iommu_table);
+ pr_debug(" created table: %p\n", pci->iommu_table);
} else {
- DBG(" found DMA window, table: %p\n", pci->iommu_table);
+ pr_debug(" found DMA window, table: %p\n", pci->iommu_table);
}
dev->dev.archdata.dma_data = pci->iommu_table;
diff --git a/arch/powerpc/platforms/pseries/lpar.c b/arch/powerpc/platforms/pseries/lpar.c
index c34789f..2cbaedb 100644
--- a/arch/powerpc/platforms/pseries/lpar.c
+++ b/arch/powerpc/platforms/pseries/lpar.c
@@ -19,7 +19,8 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
-#undef DEBUG_LOW
+/* Enables debugging of low-level hash table routines - careful! */
+#undef DEBUG
#include <linux/kernel.h>
#include <linux/dma-mapping.h>
@@ -42,11 +43,6 @@
#include "plpar_wrappers.h"
#include "pseries.h"
-#ifdef DEBUG_LOW
-#define DBG_LOW(fmt...) do { udbg_printf(fmt); } while(0)
-#else
-#define DBG_LOW(fmt...) do { } while(0)
-#endif
/* in hvCall.S */
EXPORT_SYMBOL(plpar_hcall);
@@ -290,15 +286,15 @@ static long pSeries_lpar_hpte_insert(unsigned long hpte_group,
unsigned long hpte_v, hpte_r;
if (!(vflags & HPTE_V_BOLTED))
- DBG_LOW("hpte_insert(group=%lx, va=%016lx, pa=%016lx, "
- "rflags=%lx, vflags=%lx, psize=%d)\n",
- hpte_group, va, pa, rflags, vflags, psize);
+ pr_debug("hpte_insert(group=%lx, va=%016lx, pa=%016lx, "
+ "rflags=%lx, vflags=%lx, psize=%d)\n",
+ hpte_group, va, pa, rflags, vflags, psize);
hpte_v = hpte_encode_v(va, psize, ssize) | vflags | HPTE_V_VALID;
hpte_r = hpte_encode_r(pa, psize) | rflags;
if (!(vflags & HPTE_V_BOLTED))
- DBG_LOW(" hpte_v=%016lx, hpte_r=%016lx\n", hpte_v, hpte_r);
+ pr_debug(" hpte_v=%016lx, hpte_r=%016lx\n", hpte_v, hpte_r);
/* Now fill in the actual HPTE */
/* Set CEC cookie to 0 */
@@ -315,7 +311,7 @@ static long pSeries_lpar_hpte_insert(unsigned long hpte_group,
lpar_rc = plpar_pte_enter(flags, hpte_group, hpte_v, hpte_r, &slot);
if (unlikely(lpar_rc == H_PTEG_FULL)) {
if (!(vflags & HPTE_V_BOLTED))
- DBG_LOW(" full\n");
+ pr_debug(" full\n");
return -1;
}
@@ -326,11 +322,11 @@ static long pSeries_lpar_hpte_insert(unsigned long hpte_group,
*/
if (unlikely(lpar_rc != H_SUCCESS)) {
if (!(vflags & HPTE_V_BOLTED))
- DBG_LOW(" lpar err %d\n", lpar_rc);
+ pr_debug(" lpar err %lu\n", lpar_rc);
return -2;
}
if (!(vflags & HPTE_V_BOLTED))
- DBG_LOW(" -> slot: %d\n", slot & 7);
+ pr_debug(" -> slot: %lu\n", slot & 7);
/* Because of iSeries, we have to pass down the secondary
* bucket bit here as well
@@ -422,17 +418,17 @@ static long pSeries_lpar_hpte_updatepp(unsigned long slot,
want_v = hpte_encode_avpn(va, psize, ssize);
- DBG_LOW(" update: avpnv=%016lx, hash=%016lx, f=%x, psize: %d ... ",
- want_v, slot, flags, psize);
+ pr_debug(" update: avpnv=%016lx, hash=%016lx, f=%lx, psize: %d ...",
+ want_v, slot, flags, psize);
lpar_rc = plpar_pte_protect(flags, slot, want_v);
if (lpar_rc == H_NOT_FOUND) {
- DBG_LOW("not found !\n");
+ pr_debug("not found !\n");
return -1;
}
- DBG_LOW("ok\n");
+ pr_debug("ok\n");
BUG_ON(lpar_rc != H_SUCCESS);
@@ -507,8 +503,8 @@ static void pSeries_lpar_hpte_invalidate(unsigned long slot, unsigned long va,
unsigned long lpar_rc;
unsigned long dummy1, dummy2;
- DBG_LOW(" inval : slot=%lx, va=%016lx, psize: %d, local: %d",
- slot, va, psize, local);
+ pr_debug(" inval : slot=%lx, va=%016lx, psize: %d, local: %d\n",
+ slot, va, psize, local);
want_v = hpte_encode_avpn(va, psize, ssize);
lpar_rc = plpar_pte_remove(H_AVPN, slot, want_v, &dummy1, &dummy2);
diff --git a/arch/powerpc/platforms/pseries/rtasd.c b/arch/powerpc/platforms/pseries/rtasd.c
index e3078ce..befadd4 100644
--- a/arch/powerpc/platforms/pseries/rtasd.c
+++ b/arch/powerpc/platforms/pseries/rtasd.c
@@ -29,11 +29,6 @@
#include <asm/atomic.h>
#include <asm/machdep.h>
-#if 0
-#define DEBUG(A...) printk(KERN_ERR A)
-#else
-#define DEBUG(A...)
-#endif
static DEFINE_SPINLOCK(rtasd_log_lock);
@@ -198,7 +193,7 @@ void pSeries_log_error(char *buf, unsigned int err_type, int fatal)
unsigned long s;
int len = 0;
- DEBUG("logging event\n");
+ pr_debug("rtasd: logging event\n");
if (buf == NULL)
return;
@@ -409,7 +404,8 @@ static int rtasd(void *unused)
daemonize("rtasd");
printk(KERN_DEBUG "RTAS daemon started\n");
- DEBUG("will sleep for %d milliseconds\n", (30000/rtas_event_scan_rate));
+ pr_debug("rtasd: will sleep for %d milliseconds\n",
+ (30000 / rtas_event_scan_rate));
/* See if we have any error stored in NVRAM */
memset(logdata, 0, rtas_error_log_max);
@@ -428,9 +424,9 @@ static int rtasd(void *unused)
do_event_scan_all_cpus(1000);
if (surveillance_timeout != -1) {
- DEBUG("enabling surveillance\n");
+ pr_debug("rtasd: enabling surveillance\n");
enable_surveillance(surveillance_timeout);
- DEBUG("surveillance enabled\n");
+ pr_debug("rtasd: surveillance enabled\n");
}
/* Delay should be at least one second since some
diff --git a/arch/powerpc/platforms/pseries/scanlog.c b/arch/powerpc/platforms/pseries/scanlog.c
index e5b0ea8..bec3803 100644
--- a/arch/powerpc/platforms/pseries/scanlog.c
+++ b/arch/powerpc/platforms/pseries/scanlog.c
@@ -38,9 +38,7 @@
#define SCANLOG_HWERROR -1
#define SCANLOG_CONTINUE 1
-#define DEBUG(A...) do { if (scanlog_debug) printk(KERN_ERR "scanlog: " A); } while (0)
-static int scanlog_debug;
static unsigned int ibm_scan_log_dump; /* RTAS token */
static struct proc_dir_entry *proc_ppc64_scan_log_dump; /* The proc file */
@@ -86,14 +84,14 @@ static ssize_t scanlog_read(struct file *file, char __user *buf,
memcpy(data, rtas_data_buf, RTAS_DATA_BUF_SIZE);
spin_unlock(&rtas_data_buf_lock);
- DEBUG("status=%d, data[0]=%x, data[1]=%x, data[2]=%x\n",
- status, data[0], data[1], data[2]);
+ pr_debug("scanlog: status=%d, data[0]=%x, data[1]=%x, " \
+ "data[2]=%x\n", status, data[0], data[1], data[2]);
switch (status) {
case SCANLOG_COMPLETE:
- DEBUG("hit eof\n");
+ pr_debug("scanlog: hit eof\n");
return 0;
case SCANLOG_HWERROR:
- DEBUG("hardware error reading scan log data\n");
+ pr_debug("scanlog: hardware error reading data\n");
return -EIO;
case SCANLOG_CONTINUE:
/* We may or may not have data yet */
@@ -110,7 +108,8 @@ static ssize_t scanlog_read(struct file *file, char __user *buf,
/* Assume extended busy */
wait_time = rtas_busy_delay_time(status);
if (!wait_time) {
- printk(KERN_ERR "scanlog: unknown error from rtas: %d\n", status);
+ printk(KERN_ERR "scanlog: unknown error " \
+ "from rtas: %d\n", status);
return -EIO;
}
}
@@ -134,15 +133,9 @@ static ssize_t scanlog_write(struct file * file, const char __user * buf,
if (buf) {
if (strncmp(stkbuf, "reset", 5) == 0) {
- DEBUG("reset scanlog\n");
+ pr_debug("scanlog: reset scanlog\n");
status = rtas_call(ibm_scan_log_dump, 2, 1, NULL, 0, 0);
- DEBUG("rtas returns %d\n", status);
- } else if (strncmp(stkbuf, "debugon", 7) == 0) {
- printk(KERN_ERR "scanlog: debug on\n");
- scanlog_debug = 1;
- } else if (strncmp(stkbuf, "debugoff", 8) == 0) {
- printk(KERN_ERR "scanlog: debug off\n");
- scanlog_debug = 0;
+ pr_debug("scanlog: rtas returns %d\n", status);
}
}
return count;
diff --git a/arch/powerpc/platforms/pseries/setup.c b/arch/powerpc/platforms/pseries/setup.c
index f66aa9c..65e8795 100644
--- a/arch/powerpc/platforms/pseries/setup.c
+++ b/arch/powerpc/platforms/pseries/setup.c
@@ -70,11 +70,6 @@
#include "plpar_wrappers.h"
#include "pseries.h"
-#ifdef DEBUG
-#define DBG(fmt...) udbg_printf(fmt)
-#else
-#define DBG(fmt...)
-#endif
int fwnmi_active; /* TRUE if an FWNMI handler is present */
@@ -326,7 +321,7 @@ static int pseries_set_xdabr(unsigned long dabr)
*/
static void __init pSeries_init_early(void)
{
- DBG(" -> pSeries_init_early()\n");
+ pr_debug(" -> pSeries_init_early()\n");
if (firmware_has_feature(FW_FEATURE_LPAR))
find_udbg_vterm();
@@ -338,7 +333,7 @@ static void __init pSeries_init_early(void)
iommu_init_early_pSeries();
- DBG(" <- pSeries_init_early()\n");
+ pr_debug(" <- pSeries_init_early()\n");
}
/*
@@ -383,7 +378,7 @@ static int __init pSeries_probe(void)
of_flat_dt_is_compatible(root, "IBM,CBEA"))
return 0;
- DBG("pSeries detected, looking for LPAR capability...\n");
+ pr_debug("pSeries detected, looking for LPAR capability...\n");
/* Now try to figure out if we are running on LPAR */
of_scan_flat_dt(pSeries_probe_hypertas, NULL);
@@ -393,8 +388,8 @@ static int __init pSeries_probe(void)
else
hpte_init_native();
- DBG("Machine is%s LPAR !\n",
- (powerpc_firmware_features & FW_FEATURE_LPAR) ? "" : " not");
+ pr_debug("Machine is%s LPAR !\n",
+ (powerpc_firmware_features & FW_FEATURE_LPAR) ? "" : " not");
return 1;
}
diff --git a/arch/powerpc/platforms/pseries/smp.c b/arch/powerpc/platforms/pseries/smp.c
index ea4c659..e9bc2a5 100644
--- a/arch/powerpc/platforms/pseries/smp.c
+++ b/arch/powerpc/platforms/pseries/smp.c
@@ -51,12 +51,6 @@
#include "plpar_wrappers.h"
#include "pseries.h"
-#ifdef DEBUG
-#include <asm/udbg.h>
-#define DBG(fmt...) udbg_printf(fmt)
-#else
-#define DBG(fmt...)
-#endif
/*
* The primary thread of each non-boot processor is recorded here before
@@ -231,7 +225,7 @@ static void __init smp_init_pseries(void)
{
int i;
- DBG(" -> smp_init_pSeries()\n");
+ pr_debug(" -> smp_init_pSeries()\n");
/* Mark threads which are still spinning in hold loops. */
if (cpu_has_feature(CPU_FTR_SMT)) {
@@ -255,7 +249,7 @@ static void __init smp_init_pseries(void)
smp_ops->take_timebase = pSeries_take_timebase;
}
- DBG(" <- smp_init_pSeries()\n");
+ pr_debug(" <- smp_init_pSeries()\n");
}
#ifdef CONFIG_MPIC
--
1.5.5
^ permalink raw reply related
* [PATCH 5/5] Add CONFIG_PPC_PSERIES_DEBUG to enable debugging for platforms/pseries
From: Michael Ellerman @ 2008-04-24 5:13 UTC (permalink / raw)
To: linuxppc-dev
In-Reply-To: <c01702547f6296b2c18e5ff7504ad52cb0402664.1209013992.git.michael@ellerman.id.au>
Add a DEBUG config setting which turns on all (most) of the debugging
under platforms/pseries.
To have this take effect we need to remove all the #undef DEBUG's, in
various files. We leave the #undef DEBUG in platforms/pseries/lpar.c,
as this enables debugging printks from the low-level hash table routines,
and tends to make your system unusable. If you want those enabled you
still have to turn them on by hand.
Also some of the RAS code has a DEBUG block which causes a functional
change, so I've keyed this off a different (non-existant) debug #define.
This is only enabled if you have PPC_EARLY_DEBUG enabled also.
Signed-off-by: Michael Ellerman <michael@ellerman.id.au>
---
arch/powerpc/platforms/pseries/Kconfig | 5 +++++
arch/powerpc/platforms/pseries/Makefile | 4 ++++
arch/powerpc/platforms/pseries/eeh.c | 1 -
arch/powerpc/platforms/pseries/eeh_cache.c | 1 -
arch/powerpc/platforms/pseries/firmware.c | 1 -
arch/powerpc/platforms/pseries/ras.c | 4 +---
arch/powerpc/platforms/pseries/setup.c | 2 --
arch/powerpc/platforms/pseries/smp.c | 1 -
arch/powerpc/platforms/pseries/xics.c | 1 -
9 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/arch/powerpc/platforms/pseries/Kconfig b/arch/powerpc/platforms/pseries/Kconfig
index 306a9d0..07fe5b6 100644
--- a/arch/powerpc/platforms/pseries/Kconfig
+++ b/arch/powerpc/platforms/pseries/Kconfig
@@ -34,3 +34,8 @@ config LPARCFG
help
Provide system capacity information via human readable
<key word>=<value> pairs through a /proc/ppc64/lparcfg interface.
+
+config PPC_PSERIES_DEBUG
+ depends on PPC_PSERIES && PPC_EARLY_DEBUG
+ bool "Enable extra debug logging in platforms/pseries"
+ default y
diff --git a/arch/powerpc/platforms/pseries/Makefile b/arch/powerpc/platforms/pseries/Makefile
index bdae04b..bd2593e 100644
--- a/arch/powerpc/platforms/pseries/Makefile
+++ b/arch/powerpc/platforms/pseries/Makefile
@@ -2,6 +2,10 @@ ifeq ($(CONFIG_PPC64),y)
EXTRA_CFLAGS += -mno-minimal-toc
endif
+ifeq ($(CONFIG_PPC_PSERIES_DEBUG),y)
+EXTRA_CFLAGS += -DDEBUG
+endif
+
obj-y := lpar.o hvCall.o nvram.o reconfig.o \
setup.o iommu.o ras.o rtasd.o \
firmware.o power.o
diff --git a/arch/powerpc/platforms/pseries/eeh.c b/arch/powerpc/platforms/pseries/eeh.c
index 550b2f7..a3fd56b 100644
--- a/arch/powerpc/platforms/pseries/eeh.c
+++ b/arch/powerpc/platforms/pseries/eeh.c
@@ -39,7 +39,6 @@
#include <asm/ppc-pci.h>
#include <asm/rtas.h>
-#undef DEBUG
/** Overview:
* EEH, or "Extended Error Handling" is a PCI bridge technology for
diff --git a/arch/powerpc/platforms/pseries/eeh_cache.c b/arch/powerpc/platforms/pseries/eeh_cache.c
index 1e83fcd..ce37040 100644
--- a/arch/powerpc/platforms/pseries/eeh_cache.c
+++ b/arch/powerpc/platforms/pseries/eeh_cache.c
@@ -28,7 +28,6 @@
#include <asm/pci-bridge.h>
#include <asm/ppc-pci.h>
-#undef DEBUG
/**
* The pci address cache subsystem. This subsystem places
diff --git a/arch/powerpc/platforms/pseries/firmware.c b/arch/powerpc/platforms/pseries/firmware.c
index 743d494..9d3a40f 100644
--- a/arch/powerpc/platforms/pseries/firmware.c
+++ b/arch/powerpc/platforms/pseries/firmware.c
@@ -21,7 +21,6 @@
* 2 of the License, or (at your option) any later version.
*/
-#undef DEBUG
#include <asm/firmware.h>
#include <asm/prom.h>
diff --git a/arch/powerpc/platforms/pseries/ras.c b/arch/powerpc/platforms/pseries/ras.c
index a1ab25c..2b548af 100644
--- a/arch/powerpc/platforms/pseries/ras.c
+++ b/arch/powerpc/platforms/pseries/ras.c
@@ -67,8 +67,6 @@ static int ras_check_exception_token;
static irqreturn_t ras_epow_interrupt(int irq, void *dev_id);
static irqreturn_t ras_error_interrupt(int irq, void *dev_id);
-/* #define DEBUG */
-
static void request_ras_irqs(struct device_node *np,
irq_handler_t handler,
@@ -237,7 +235,7 @@ static irqreturn_t ras_error_interrupt(int irq, void *dev_id)
printk(KERN_EMERG "Error: Fatal hardware error <0x%lx 0x%x>\n",
*((unsigned long *)&ras_log_buf), status);
-#ifndef DEBUG
+#ifndef DEBUG_RTAS_POWER_OFF
/* Don't actually power off when debugging so we can test
* without actually failing while injecting errors.
* Error data will not be logged to syslog.
diff --git a/arch/powerpc/platforms/pseries/setup.c b/arch/powerpc/platforms/pseries/setup.c
index 65e8795..f5d29f5 100644
--- a/arch/powerpc/platforms/pseries/setup.c
+++ b/arch/powerpc/platforms/pseries/setup.c
@@ -16,8 +16,6 @@
* bootup setup stuff..
*/
-#undef DEBUG
-
#include <linux/cpu.h>
#include <linux/errno.h>
#include <linux/sched.h>
diff --git a/arch/powerpc/platforms/pseries/smp.c b/arch/powerpc/platforms/pseries/smp.c
index e9bc2a5..9d8f8c8 100644
--- a/arch/powerpc/platforms/pseries/smp.c
+++ b/arch/powerpc/platforms/pseries/smp.c
@@ -12,7 +12,6 @@
* 2 of the License, or (at your option) any later version.
*/
-#undef DEBUG
#include <linux/kernel.h>
#include <linux/module.h>
diff --git a/arch/powerpc/platforms/pseries/xics.c b/arch/powerpc/platforms/pseries/xics.c
index 43df53c..ebebc28 100644
--- a/arch/powerpc/platforms/pseries/xics.c
+++ b/arch/powerpc/platforms/pseries/xics.c
@@ -9,7 +9,6 @@
* 2 of the License, or (at your option) any later version.
*/
-#undef DEBUG
#include <linux/types.h>
#include <linux/threads.h>
--
1.5.5
^ permalink raw reply related
* [RFC][WIP][PATCH] Add IRQSTACKS to ppc32
From: Kumar Gala @ 2008-04-24 5:37 UTC (permalink / raw)
To: linuxppc-dev
Posting this to get any review and suggestions on the functionality of the
patch.
Questions/issues:
* what to do about the stack_ovf check in entry_32.S
* do we really have any constraints on ppc32 (beyond being in lowmem) on
the locations of the stacks [see irqstack_early_init()]
- k
diff --git a/arch/powerpc/Kconfig.debug b/arch/powerpc/Kconfig.debug
index a86d8d8..2cf72d2 100644
--- a/arch/powerpc/Kconfig.debug
+++ b/arch/powerpc/Kconfig.debug
@@ -118,7 +118,6 @@ config XMON_DISASSEMBLY
config IRQSTACKS
bool "Use separate kernel stacks when processing interrupts"
- depends on PPC64
help
If you say Y here the kernel will use separate kernel stacks
for handling hard and soft interrupts. This can help avoid
diff --git a/arch/powerpc/kernel/irq.c b/arch/powerpc/kernel/irq.c
index 425616f..ad40eb4 100644
--- a/arch/powerpc/kernel/irq.c
+++ b/arch/powerpc/kernel/irq.c
@@ -352,7 +352,7 @@ void __init init_IRQ(void)
{
if (ppc_md.init_IRQ)
ppc_md.init_IRQ();
-#ifdef CONFIG_PPC64
+#ifdef CONFIG_IRQSTACKS
irq_ctx_init();
#endif
}
diff --git a/arch/powerpc/kernel/misc_32.S b/arch/powerpc/kernel/misc_32.S
index 92ccc6f..89aaaa6 100644
--- a/arch/powerpc/kernel/misc_32.S
+++ b/arch/powerpc/kernel/misc_32.S
@@ -32,6 +32,31 @@
.text
+#ifdef CONFIG_IRQSTACKS
+_GLOBAL(call_do_softirq)
+ mflr r0
+ stw r0,4(r1)
+ stwu r1,THREAD_SIZE-STACK_FRAME_OVERHEAD(r3)
+ mr r1,r3
+ bl __do_softirq
+ lwz r1,0(r1)
+ lwz r0,4(r1)
+ mtlr r0
+ blr
+
+_GLOBAL(call_handle_irq)
+ mflr r0
+ stw r0,4(r1)
+ mtctr r6
+ stwu r1,THREAD_SIZE-STACK_FRAME_OVERHEAD(r5)
+ mr r1,r5
+ bctrl
+ lwz r1,0(r1)
+ lwz r0,4(r1)
+ mtlr r0
+ blr
+#endif /* CONFIG_IRQSTACKS */
+
/*
* This returns the high 64 bits of the product of two 64-bit numbers.
*/
diff --git a/arch/powerpc/kernel/setup_32.c b/arch/powerpc/kernel/setup_32.c
index 36f6779..ebd1b1d 100644
--- a/arch/powerpc/kernel/setup_32.c
+++ b/arch/powerpc/kernel/setup_32.c
@@ -16,6 +16,7 @@
#include <linux/root_dev.h>
#include <linux/cpu.h>
#include <linux/console.h>
+#include <linux/lmb.h>
#include <asm/io.h>
#include <asm/prom.h>
@@ -229,6 +230,28 @@ int __init ppc_init(void)
arch_initcall(ppc_init);
+#ifdef CONFIG_IRQSTACKS
+static void __init irqstack_early_init(void)
+{
+ unsigned int i;
+
+ /*
+ * interrupt stacks must be under 256MB, we cannot afford to take
+ * SLB misses on them.
+ */
+ for_each_possible_cpu(i) {
+ softirq_ctx[i] = (struct thread_info *)
+ __va(lmb_alloc_base(THREAD_SIZE,
+ THREAD_SIZE, 0x10000000));
+ hardirq_ctx[i] = (struct thread_info *)
+ __va(lmb_alloc_base(THREAD_SIZE,
+ THREAD_SIZE, 0x10000000));
+ }
+}
+#else
+#define irqstack_early_init()
+#endif
+
/* Warning, IO base is not yet inited */
void __init setup_arch(char **cmdline_p)
{
@@ -286,6 +309,8 @@ void __init setup_arch(char **cmdline_p)
init_mm.end_data = (unsigned long) _edata;
init_mm.brk = klimit;
+ irqstack_early_init();
+
/* set up the bootmem stuff with available memory */
do_init_bootmem();
if ( ppc_md.progress ) ppc_md.progress("setup_arch: bootmem", 0x3eab);
^ permalink raw reply related
* Re: [BUG] 2.6.25-rc2-git4 - Regression Kernel oops while running kernbench and tbench on powerpc
From: Kamalesh Babulal @ 2008-04-24 6:05 UTC (permalink / raw)
To: Paul Mackerras
Cc: kernel list, linuxppc-dev, linux-next, nacc, Andrew Morton,
Balbir Singh
In-Reply-To: <18446.61538.620549.715043@cargo.ozlabs.ibm.com>
Paul Mackerras wrote:
> Kamalesh Babulal writes:
>
>> After applying the patch above and the patch posted on
>> http://lkml.org/lkml/2008/4/8/42
>> the bug had the following information,
>
> Thanks. The patch below, against Linus' current git tree, fixes one
> bug that might be the cause of the problem, and also attempts to
> detect the erroneous situation earlier and fix it up, and also print
> some debug information. Please try to reproduce the problem with this
> patch applied, and if there are any console log messages starting with
> SLB: or FWNMI:, please send me the console log.
>
> Paul.
>
> diff --git a/arch/powerpc/kernel/entry_64.S b/arch/powerpc/kernel/entry_64.S
> index c0db5b7..f7f0962 100644
> --- a/arch/powerpc/kernel/entry_64.S
> +++ b/arch/powerpc/kernel/entry_64.S
> @@ -439,6 +439,19 @@ END_FTR_SECTION_IFSET(CPU_FTR_1T_SEGMENT)
> mr r1,r8 /* start using new stack pointer */
> std r7,PACAKSAVE(r13)
>
> + /* check that SLB entry 2 contains the right thing */
> + clrrdi r6,r1,28
> + clrldi. r0,r6,2
> + beq 3f
> + li r0,2
> + slbmfee r7,r0
> + oris r6,r6,SLB_ESID_V@h
> + cmpd r6,r7
> + beq 3f
> + bl bad_slb_switch
> + ld r3,PACACURRENT(r13)
> + addi r3,r3,THREAD
> +3:
> ld r6,_CCR(r1)
> mtcrf 0xFF,r6
>
> @@ -540,6 +553,19 @@ END_FW_FTR_SECTION_IFSET(FW_FEATURE_ISERIES)
> ld r4,_XER(r1)
> mtspr SPRN_XER,r4
>
> + /* check that SLB entry 2 contains the right thing */
> + clrrdi r6,r1,28 /* stack ESID */
> + clrldi. r0,r6,2
> + beq 57f
> + li r0,2
> + slbmfee r7,r0
> + oris r6,r6,SLB_ESID_V@h
> + cmpd r6,r7
> + beq 57f
> + addi r3,r1,STACK_FRAME_OVERHEAD
> + bl bad_slb_exc
> + ld r3,_MSR(r1)
> +57:
> REST_8GPRS(5, r1)
>
> andi. r0,r3,MSR_RI
> diff --git a/arch/powerpc/kernel/smp.c b/arch/powerpc/kernel/smp.c
> index be35ffa..c938134 100644
> --- a/arch/powerpc/kernel/smp.c
> +++ b/arch/powerpc/kernel/smp.c
> @@ -45,6 +45,7 @@
> #include <asm/system.h>
> #include <asm/mpic.h>
> #include <asm/vdso_datapage.h>
> +#include <asm/mmu.h>
> #ifdef CONFIG_PPC64
> #include <asm/paca.h>
> #endif
> @@ -580,6 +581,10 @@ int __devinit start_secondary(void *unused)
> atomic_inc(&init_mm.mm_count);
> current->active_mm = &init_mm;
>
> + /* Bolt in the entry for the kernel stack now */
> + if (cpu_has_feature(CPU_FTR_SLB))
> + slb_flush_and_rebolt();
> +
> smp_store_cpu_info(cpu);
> set_dec(tb_ticks_per_jiffy);
> preempt_disable();
> diff --git a/arch/powerpc/mm/slb.c b/arch/powerpc/mm/slb.c
> index 906daed..bb7765b 100644
> --- a/arch/powerpc/mm/slb.c
> +++ b/arch/powerpc/mm/slb.c
> @@ -309,3 +309,34 @@ void slb_initialize(void)
> * one. */
> asm volatile("isync":::"memory");
> }
> +
> +static void dump_slb(void)
> +{
> + long entry;
> + unsigned long esid, vsid;
> +
> + printk(KERN_EMERG "SLB contents now:\n");
> + for (entry = 0; entry < 64; ++entry) {
> + asm volatile("slbmfee %0,%1" : "=r" (esid) : "r" (entry));
> + if (esid == 0)
> + /* valid bit is clear along with everything else */
> + continue;
> + asm volatile("slbmfev %0,%1" : "=r" (vsid) : "r" (entry));
> + printk(KERN_EMERG "%d: %.16lx %.16lx\n", entry, esid, vsid);
> + }
> +}
> +
> +void bad_slb_exc(struct pt_regs *regs)
> +{
> + printk(KERN_EMERG "SLB: stack not bolted on exception return\n");
> + dump_slb();
> + slb_flush_and_rebolt();
> + show_regs(regs);
> +}
> +
> +void bad_slb_switch(void)
> +{
> + printk(KERN_EMERG "SLB: stack not bolted on context switch\n");
> + dump_slb();
> + slb_flush_and_rebolt();
> +}
> diff --git a/arch/powerpc/platforms/pseries/ras.c b/arch/powerpc/platforms/pseries/ras.c
> index a1ab25c..ed68083 100644
> --- a/arch/powerpc/platforms/pseries/ras.c
> +++ b/arch/powerpc/platforms/pseries/ras.c
> @@ -325,6 +325,8 @@ static int recover_mce(struct pt_regs *regs, struct rtas_error_log * err)
>
> if (err->disposition == RTAS_DISP_FULLY_RECOVERED) {
> /* Platform corrected itself */
> + printk(KERN_ALERT "FWNMI: platform corrected error %.16lx\n",
> + *(unsigned long *)err);
> nonfatal = 1;
> } else if ((regs->msr & MSR_RI) &&
> user_mode(regs) &&
Hi Paul,
Thanks, after applying the patch the oops is not reproducible on the machine. The console
log had no message starting with SLB: or FWNMI:. I have updated the bugzilla also.
Tested-by: Kamalesh Babulal <kamalesh@linux.vnet.ibm.com>
--
Thanks & Regards,
Kamalesh Babulal,
Linux Technology Center,
IBM, ISTL.
^ permalink raw reply
* LMB regression...
From: David Miller @ 2008-04-24 6:24 UTC (permalink / raw)
To: linuxppc-dev; +Cc: paulus
Paul, I finally got around to testing your changeset on sparc64, it
breaks things:
commit d9024df02ffe74d723d97d552f86de3b34beb8cc
Author: Paul Mackerras <paulus@samba.org>
Date: Sat Apr 12 15:20:59 2008 +1000
[LMB] Restructure allocation loops to avoid unsigned underflow
...
Specifically, you removed the aligning of the size argument given to
lmb_add_region() in the lmb allocators, and that is critical when
allocating many small chunks, we run out of LMB slots otherwise
and allocations start failing.
I added the alignment there as a bug fix earlier:
commit eea89e13a9c61d3928223d2f9bf2295e22e0efb6
Author: David S. Miller <davem@davemloft.net>
Date: Wed Feb 13 16:57:09 2008 -0800
[LMB]: Fix bug in __lmb_alloc_base().
We need to check lmb_add_region() for errors, it can run out
of regions etc.
Also, the size needs to be padded to the given alignment
or else the lmb.reserved regions don't get expanded and
instead we get tons of holes and eventually run out of
regions prematurely.
Signed-off-by: David S. Miller <davem@davemloft.net>
Please be more careful in the future :-(
I find it quite ironic that you spent so much time and effort fixing
an absolutely totally theoretical bug that nobody was triggering, and
in the process reintroduced a real one that triggers immediately on
real systems, and that had even been explicitly fixed previously.
^ permalink raw reply
* Re: [PATCH] powerpc TLF_RESTORE_SIGMASK
From: Paul Mackerras @ 2008-04-24 6:31 UTC (permalink / raw)
To: Roland McGrath; +Cc: linuxppc-dev, akpm, linux-kernel
In-Reply-To: <20080423063753.C2088270381@magilla.localdomain>
Roland McGrath writes:
> > This should be _TLF_RESTORE_SIGMASK (leading '_'), I think.
>
> Indeed so. Here's a replacement patch.
Thanks. That can't go in until some generic changes have gone in
first, right? So are you going to push the lot in one go via Andrew,
or should I wait until the generic part is upstream and then push the
powerpc bit?
Paul.
^ permalink raw reply
* Re: [PATCH] powerpc TLF_RESTORE_SIGMASK
From: Paul Mackerras @ 2008-04-24 6:34 UTC (permalink / raw)
To: Roland McGrath; +Cc: linuxppc-dev, akpm, linux-kernel
In-Reply-To: <20080423063753.C2088270381@magilla.localdomain>
Roland McGrath writes:
> Indeed so. Here's a replacement patch.
Oh, and could you please also fix the occurrence of
TIF_RESTORE_SIGMASK in arch/ppc/kernel/entry.S when this stuff goes
in?
Thanks,
Paul.
^ permalink raw reply
* Re: LMB regression...
From: Michael Ellerman @ 2008-04-24 6:35 UTC (permalink / raw)
To: David Miller; +Cc: linuxppc-dev, paulus
In-Reply-To: <20080423.232419.193712136.davem@davemloft.net>
[-- Attachment #1: Type: text/plain, Size: 1900 bytes --]
On Wed, 2008-04-23 at 23:24 -0700, David Miller wrote:
> Paul, I finally got around to testing your changeset on sparc64, it
> breaks things:
>
> commit d9024df02ffe74d723d97d552f86de3b34beb8cc
> Author: Paul Mackerras <paulus@samba.org>
> Date: Sat Apr 12 15:20:59 2008 +1000
>
> [LMB] Restructure allocation loops to avoid unsigned underflow
> ...
>
> Specifically, you removed the aligning of the size argument given to
> lmb_add_region() in the lmb allocators, and that is critical when
> allocating many small chunks, we run out of LMB slots otherwise
> and allocations start failing.
>
> I added the alignment there as a bug fix earlier:
>
> commit eea89e13a9c61d3928223d2f9bf2295e22e0efb6
> Author: David S. Miller <davem@davemloft.net>
> Date: Wed Feb 13 16:57:09 2008 -0800
>
> [LMB]: Fix bug in __lmb_alloc_base().
>
> We need to check lmb_add_region() for errors, it can run out
> of regions etc.
>
> Also, the size needs to be padded to the given alignment
> or else the lmb.reserved regions don't get expanded and
> instead we get tons of holes and eventually run out of
> regions prematurely.
>
> Signed-off-by: David S. Miller <davem@davemloft.net>
>
> Please be more careful in the future :-(
>
> I find it quite ironic that you spent so much time and effort fixing
> an absolutely totally theoretical bug that nobody was triggering, and
> in the process reintroduced a real one that triggers immediately on
> real systems, and that had even been explicitly fixed previously.
Sounds like we need a test suite :)
cheers
--
Michael Ellerman
OzLabs, IBM Australia Development Lab
wwweb: http://michael.ellerman.id.au
phone: +61 2 6212 1183 (tie line 70 21183)
We do not inherit the earth from our ancestors,
we borrow it from our children. - S.M.A.R.T Person
[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 189 bytes --]
^ permalink raw reply
* Re: LMB regression...
From: David Miller @ 2008-04-24 6:40 UTC (permalink / raw)
To: michael; +Cc: linuxppc-dev, paulus
In-Reply-To: <1209018933.22532.0.camel@concordia.ozlabs.ibm.com>
From: Michael Ellerman <michael@ellerman.id.au>
Date: Thu, 24 Apr 2008 16:35:33 +1000
> Sounds like we need a test suite :)
Maybe :-) Anyways, here is the bug fix I plan to push to
Linus with my sparc64 NUMA changes, unless someone has an
objection:
[LMB]: Fix lmb allocation regression.
Changeset d9024df02ffe74d723d97d552f86de3b34beb8cc ("[LMB] Restructure
allocation loops to avoid unsigned underflow") removed the alignment
of the 'size' argument to call lmb_add_region() done by __lmb_alloc_base().
In doing so it reintroduced the bug fixed by changeset
eea89e13a9c61d3928223d2f9bf2295e22e0efb6 ("[LMB]: Fix bug in
__lmb_alloc_base().").
This puts it back.
Signed-off-by: David S. Miller <davem@davemloft.net>
---
lib/lmb.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/lib/lmb.c b/lib/lmb.c
index 896e283..207147a 100644
--- a/lib/lmb.c
+++ b/lib/lmb.c
@@ -346,7 +346,7 @@ u64 __init __lmb_alloc_base(u64 size, u64 align, u64 max_addr)
if (j < 0) {
/* this area isn't reserved, take it */
if (lmb_add_region(&lmb.reserved, base,
- size) < 0)
+ lmb_align_up(size, align)) < 0)
return 0;
return base;
}
--
1.5.5.1.57.g5909c
^ permalink raw reply related
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox