Welcome to Soft32 Linux Forums!
FAQFAQ    SearchSearch      ProfileProfile    Private MessagesPrivate Messages   Log inLog in

[PATCH 2.6.19-rc4 3/3] ehea: 64K page support fix

 
   Soft32 Home -> Linux -> Kernel RSS
Next:  [PATCH 2.6.19-rc4 1/3] ehea: Nullpointer derefere..  
Author Message
Thomas Klein

External


Since: Nov 03, 2006
Posts: 28



(Msg. 1) Posted: Fri Nov 03, 2006 12:00 pm
Post subject: [PATCH 2.6.19-rc4 3/3] ehea: 64K page support fix
Archived from groups: linux>kernel (more info?)

This patch fixes 64k page support by using PAGE_MASK and appropriate pagesize defines in several places.

Signed-off-by: Thomas Klein <tklein.RemoveThis@de.ibm.com>
----
drivers/net/ehea/ehea_ethtool.c | 2 +-
drivers/net/ehea/ehea_main.c | 26 +++++++++++++-------------
drivers/net/ehea/ehea_phyp.c | 2 +-
drivers/net/ehea/ehea_phyp.h | 6 ++++--
drivers/net/ehea/ehea_qmr.c | 13 +++++++------
5 files changed, 26 insertions(+), 23 deletions(-)

diff -Nurp git.linux-2.6.base/drivers/net/ehea/ehea_ethtool.c git.linux-2.6/drivers/net/ehea/ehea_ethtool.c
--- git.linux-2.6.base/drivers/net/ehea/ehea_ethtool.c 2006-11-03 16:41:36.000000000 +0100
+++ git.linux-2.6/drivers/net/ehea/ehea_ethtool.c 2006-11-03 12:43:16.000000000 +0100
@@ -238,7 +238,7 @@ static void ehea_get_ethtool_stats(struc
data[i++] = port->port_res[0].swqe_refill_th;
data[i++] = port->resets;

- cb6 = kzalloc(H_CB_ALIGNMENT, GFP_KERNEL);
+ cb6 = kzalloc(PAGE_SIZE, GFP_KERNEL);
if (!cb6) {
ehea_error("no mem for cb6");
return;
diff -Nurp git.linux-2.6.base/drivers/net/ehea/ehea_main.c git.linux-2.6/drivers/net/ehea/ehea_main.c
--- git.linux-2.6.base/drivers/net/ehea/ehea_main.c 2006-11-03 16:41:36.000000000 +0100
+++ git.linux-2.6/drivers/net/ehea/ehea_main.c 2006-11-03 12:43:16.000000000 +0100
@@ -92,7 +92,7 @@ static struct net_device_stats *ehea_get

memset(stats, 0, sizeof(*stats));

- cb2 = kzalloc(H_CB_ALIGNMENT, GFP_KERNEL);
+ cb2 = kzalloc(PAGE_SIZE, GFP_KERNEL);
if (!cb2) {
ehea_error("no mem for cb2");
goto out;
@@ -586,8 +586,8 @@ int ehea_sense_port_attr(struct ehea_por
u64 hret;
struct hcp_ehea_port_cb0 *cb0;

- cb0 = kzalloc(H_CB_ALIGNMENT, GFP_ATOMIC); /* May be called via */
- if (!cb0) { /* ehea_neq_tasklet() */
+ cb0 = kzalloc(PAGE_SIZE, GFP_ATOMIC); /* May be called via */
+ if (!cb0) { /* ehea_neq_tasklet() */
ehea_error("no mem for cb0");
ret = -ENOMEM;
goto out;
@@ -670,7 +670,7 @@ int ehea_set_portspeed(struct ehea_port
u64 hret;
int ret = 0;

- cb4 = kzalloc(H_CB_ALIGNMENT, GFP_KERNEL);
+ cb4 = kzalloc(PAGE_SIZE, GFP_KERNEL);
if (!cb4) {
ehea_error("no mem for cb4");
ret = -ENOMEM;
@@ -985,7 +985,7 @@ static int ehea_configure_port(struct eh
struct hcp_ehea_port_cb0 *cb0;

ret = -ENOMEM;
- cb0 = kzalloc(H_CB_ALIGNMENT, GFP_KERNEL);
+ cb0 = kzalloc(PAGE_SIZE, GFP_KERNEL);
if (!cb0)
goto out;

@@ -1443,7 +1443,7 @@ static int ehea_set_mac_addr(struct net_
goto out;
}

- cb0 = kzalloc(H_CB_ALIGNMENT, GFP_KERNEL);
+ cb0 = kzalloc(PAGE_SIZE, GFP_KERNEL);
if (!cb0) {
ehea_error("no mem for cb0");
ret = -ENOMEM;
@@ -1501,7 +1501,7 @@ static void ehea_promiscuous(struct net_
if ((enable && port->promisc) || (!enable && !port->promisc))
return;

- cb7 = kzalloc(H_CB_ALIGNMENT, GFP_ATOMIC);
+ cb7 = kzalloc(PAGE_SIZE, GFP_ATOMIC);
if (!cb7) {
ehea_error("no mem for cb7");
goto out;
@@ -1870,7 +1870,7 @@ static void ehea_vlan_rx_register(struct

port->vgrp = grp;

- cb1 = kzalloc(H_CB_ALIGNMENT, GFP_KERNEL);
+ cb1 = kzalloc(PAGE_SIZE, GFP_KERNEL);
if (!cb1) {
ehea_error("no mem for cb1");
goto out;
@@ -1899,7 +1899,7 @@ static void ehea_vlan_rx_add_vid(struct
int index;
u64 hret;

- cb1 = kzalloc(H_CB_ALIGNMENT, GFP_KERNEL);
+ cb1 = kzalloc(PAGE_SIZE, GFP_KERNEL);
if (!cb1) {
ehea_error("no mem for cb1");
goto out;
@@ -1935,7 +1935,7 @@ static void ehea_vlan_rx_kill_vid(struct
if (port->vgrp)
port->vgrp->vlan_devices[vid] = NULL;

- cb1 = kzalloc(H_CB_ALIGNMENT, GFP_KERNEL);
+ cb1 = kzalloc(PAGE_SIZE, GFP_KERNEL);
if (!cb1) {
ehea_error("no mem for cb1");
goto out;
@@ -1968,7 +1968,7 @@ int ehea_activate_qp(struct ehea_adapter
u64 dummy64 = 0;
struct hcp_modify_qp_cb0* cb0;

- cb0 = kzalloc(H_CB_ALIGNMENT, GFP_KERNEL);
+ cb0 = kzalloc(PAGE_SIZE, GFP_KERNEL);
if (!cb0) {
ret = -ENOMEM;
goto out;
@@ -2269,7 +2269,7 @@ int ehea_sense_adapter_attr(struct ehea_
u64 hret;
int ret;

- cb = kzalloc(H_CB_ALIGNMENT, GFP_KERNEL);
+ cb = kzalloc(PAGE_SIZE, GFP_KERNEL);
if (!cb) {
ret = -ENOMEM;
goto out;
@@ -2340,7 +2340,7 @@ static int ehea_setup_single_port(struct
goto out;

/* Enable Jumbo frames */
- cb4 = kzalloc(H_CB_ALIGNMENT, GFP_KERNEL);
+ cb4 = kzalloc(PAGE_SIZE, GFP_KERNEL);
if (!cb4) {
ehea_error("no mem for cb4");
} else {
diff -Nurp git.linux-2.6.base/drivers/net/ehea/ehea_phyp.c git.linux-2.6/drivers/net/ehea/ehea_phyp.c
--- git.linux-2.6.base/drivers/net/ehea/ehea_phyp.c 2006-11-03 16:41:36.000000000 +0100
+++ git.linux-2.6/drivers/net/ehea/ehea_phyp.c 2006-11-03 12:43:16.000000000 +0100
@@ -506,7 +506,7 @@ u64 ehea_h_register_rpage_mr(const u64 a
const u8 pagesize, const u8 queue_type,
const u64 log_pageaddr, const u64 count)
{
- if ((count > 1) && (log_pageaddr & 0xfff)) {
+ if ((count > 1) && (log_pageaddr & ~PAGE_MASK)) {
ehea_error("not on pageboundary");
return H_PARAMETER;
}
diff -Nurp git.linux-2.6.base/drivers/net/ehea/ehea_phyp.h git.linux-2.6/drivers/net/ehea/ehea_phyp.h
--- git.linux-2.6.base/drivers/net/ehea/ehea_phyp.h 2006-11-03 16:41:36.000000000 +0100
+++ git.linux-2.6/drivers/net/ehea/ehea_phyp.h 2006-11-03 12:43:16.000000000 +0100
@@ -81,14 +81,16 @@ static inline u32 get_longbusy_msecs(int
static inline void hcp_epas_ctor(struct h_epas *epas, u64 paddr_kernel,
u64 paddr_user)
{
- epas->kernel.addr = ioremap(paddr_kernel, PAGE_SIZE);
+ /* To support 64k pages we must round to 64k page boundary */
+ epas->kernel.addr = ioremap((paddr_kernel & PAGE_MASK), PAGE_SIZE) +
+ (paddr_kernel & ~PAGE_MASK);
epas->user.addr = paddr_user;
}

static inline void hcp_epas_dtor(struct h_epas *epas)
{
if (epas->kernel.addr)
- iounmap(epas->kernel.addr);
+ iounmap((void __iomem*)((u64)epas->kernel.addr & PAGE_MASK));

epas->user.addr = 0;
epas->kernel.addr = 0;
diff -Nurp git.linux-2.6.base/drivers/net/ehea/ehea_qmr.c git.linux-2.6/drivers/net/ehea/ehea_qmr.c
--- git.linux-2.6.base/drivers/net/ehea/ehea_qmr.c 2006-11-03 17:04:11.000000000 +0100
+++ git.linux-2.6/drivers/net/ehea/ehea_qmr.c 2006-11-03 12:43:16.000000000 +0100
@@ -512,7 +512,7 @@ int ehea_reg_mr_adapter(struct ehea_adap

start = KERNELBASE;
end = (u64)high_memory;
- nr_pages = (end - start) / PAGE_SIZE;
+ nr_pages = (end - start) / EHEA_PAGESIZE;

pt = kzalloc(PAGE_SIZE, GFP_KERNEL);
if (!pt) {
@@ -538,9 +538,9 @@ int ehea_reg_mr_adapter(struct ehea_adap
if (nr_pages > 1) {
u64 num_pages = min(nr_pages, (u64)512);
for (i = 0; i < num_pages; i++)
- pt[i] = virt_to_abs((void*)(((u64)start)
- + ((k++) *
- PAGE_SIZE)));
+ pt[i] = virt_to_abs((void*)(((u64)start) +
+ ((k++) *
+ EHEA_PAGESIZE)));

hret = ehea_h_register_rpage_mr(adapter->handle,
adapter->mr.handle, 0,
@@ -548,8 +548,9 @@ int ehea_reg_mr_adapter(struct ehea_adap
num_pages);
nr_pages -= num_pages;
} else {
- u64 abs_adr = virt_to_abs((void*)(((u64)start)
- + (k * PAGE_SIZE)));
+ u64 abs_adr = virt_to_abs((void*)(((u64)start) +
+ (k * EHEA_PAGESIZE)));
+
hret = ehea_h_register_rpage_mr(adapter->handle,
adapter->mr.handle, 0,
0, abs_adr,1);
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo.RemoveThis@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Back to top
Login to vote
Display posts from previous:   
Related Topics:
[PATCH] eHEA: net_poll support - net_poll support for eHEA added Signed-off-by: Jan-Bernd Themann <themann@de.ibm.com> --- drivers/net/ehea/eh...

[PATCH 2/2] ehea: fix for dlpar support - Certain resources may only be allocated when first logical port is available, and must be removed when last logical por...

[PATCH] eHEA: Fix bonding support - The driver didn't allow an interface's MAC address to be modified if the respective interface wasn't setup - a failing....

[PATCH 3/4][RFC] ehea: LRO support - Added LRO support using the "SKB aggregate" interface Signed-off-by: Jan-Bernd Themann <themann@de.ibm.co...

[PATCH 0/2] ehea: dynamic port & SMP support - This patch set includes two patches against linux-2.6.21-rc1: - dynamic add / remove port: Interface has been..

[PATCH 0/2] ehea: dynamic port & SMP support - Hi, this version has the issues fixed which were mentioned by Patrick McHardy. The patch set includes two patches..
       Soft32 Home -> Linux -> Kernel All times are: Pacific Time (US & Canada) (change)
Page 1 of 1

 
You can post new topics in this forum
You can reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum

Categories:
 Windows
  Linux
 Mac
 PDA


[ Contact us | Terms of Service/Privacy Policy ]