> 
> John Keller (on Sat, 14 Jan 2006 11:37:47 -0600 (CST)) wrote:
> >First phase in introducing ACPI support to SN.
> 
> >Index: acpi_support/arch/ia64/sn/kernel/io_init.c
> >===================================================================
> >--- acpi_support.orig/arch/ia64/sn/kernel/io_init.c  2006-01-14 
> >09:26:29.761674100 -0600
> >+++ acpi_support/arch/ia64/sn/kernel/io_init.c       2006-01-14 
> >09:45:06.418505048 -0600
> 
> >+#define SN_ACPI_BASE_SUPPORT (acpi_gbl_DSDT->oem_revision >= 0x20101)
> 
> These mini tests are conventionally defined as pseudo functions, i.e.
> #define SN_ACPI_BASE_SUPPORT() ...

OK, I'll make that change.


> 
> >+static void __init sn_acpi_setup(void);
> 
> Forward declarations do not include __init/__exit etc.  I know that the
> kernel has several examples of this, but they are wrong.

OK.


> 
> > static struct list_head sn_sysdata_list;
> > 
> >@@ -157,26 +162,96 @@
> 
> Patches look nicer with function names in the '@@' line.
> export QUILT_DIFF_OPTS=-p in ~/.bashrc.

Shall do.


> 
> >+inline uint64_t
> >+sal_ioif_init(void)
> 
> Make that static with no inline, let gcc decide if it should be inlined
> or not.

OK.


> 
> >+    struct ia64_sal_retval ret_stuff;
> >+    ret_stuff.status = 0;
> >+    ret_stuff.v0 = 0;
> >+
> >+    SAL_CALL_NOLOCK(ret_stuff,
> >+                    (u64) SN_SAL_IOIF_INIT,
> >+                    0, 0, 0, 0, 0, 0, 0);
> 
> Is that really meant to be a NOLOCK call?  Can SAL cope with another
> SAL call being executed at the same time as SN_SAL_IOIF_INIT?

I'll check on this. 


> 
> +static void __init
> +sn_hubdev_init(struct hubdev_info *hubdev)
> +{
> +
> +     struct sn_flush_device_list *sn_flush_device_list;
> 
> sn_flush_device_list no longer exists.  Prarit Bhargava changed it in
> https://www.redhat.com/archives/fedora-devel-list/2006-January/msg00123.html
> and that patch is now in the IA64 git tree.

See below.


> 
> >+    if (!hubdev->hdi_flush_nasid_list.widget_p)
> >+            return;
> >+
> >+    hubdev->hdi_flush_nasid_list.widget_p =
> >+        kmalloc((HUB_WIDGET_ID_MAX + 1) *
> >+                sizeof(struct sn_flush_device_list *), GFP_KERNEL);
> 
> Overwriting hubdev->hdi_flush_nasid_list.widget_p only if it is already
> set does not look right.  Should the test be this?

I believe this is correct. It is checking if the PROM had setup
any flush list info, and if so will setup/alloc kernel space, and make a SAL 
call to get flush info.

Note that this code is not new, but has just been moved to a
common routine that the ACPI and non-ACPI code paths can use.
(sn_fixup_ionodes() and sn_hubdev_add())


> 
>       if (hubdev->hdi_flush_nasid_list.widget_p)
>               return;
> 
> >+    memset(hubdev->hdi_flush_nasid_list.widget_p, 0x0,
> >+           (HUB_WIDGET_ID_MAX + 1) *
> >+           sizeof(struct sn_flush_device_list *));
> 
> You memset hubdev->hdi_flush_nasid_list.widget_p without testing if
> kmalloc succeeded :(.

OK.


> 
> BTW, replace all occurrences of kmalloc + memset with kzalloc.
> 
> >+    for (widget = 0; widget <= HUB_WIDGET_ID_MAX; widget++) {
> >+            sn_flush_device_list = kmalloc(DEV_PER_WIDGET *
> >+                                           sizeof(struct
> >+                                                  sn_flush_device_list),
> >+                                           GFP_KERNEL);
> >+            memset(sn_flush_device_list, 0x0,
> >+                   DEV_PER_WIDGET *
> >+                   sizeof(struct sn_flush_device_list));
> 
> Missing test if kmalloc succeeded.
> 

OK.


> >+            status = sal_get_widget_dmaflush_list(hubdev->hdi_nasid, widget,
> >+                                             (uint64_t)
> >+                                             __pa (sn_flush_device_list));
> >+            if (status) {
> >+                    kfree(sn_flush_device_list);
> >+                    return;
> >+            }
> >+
> >+            spin_lock_init(&sn_flush_device_list->sfdl_flush_lock);
> 
> The spinlock was moved out of sn_flush_device_list to its own
> structure, so the prom is not exposed to changes in the size of kernel
> structures.  You need to (a) change sn_flush_device_list to
> sn_flush_device_common and (b) allocate the related
> sn_flush_device_kernel and format it.
> 
> At this point the patch does not make any sense.  It only applies over
> the top of Prarit's patch (i.e. against a recent ia64 git tree), but
> you are deleting all the sn_flush_device_kernel code that Prarit
> recently added and appear to be going back to the old
> sn_flush_device_list code that Prarit removed because it broke the
> prom.
> 


Yes. It appears that I mistakenly sent out the pre-merge version
of my patch. I have no intention of changing any of Prarit's code.
Odds are I copied the patch and sent it out before I did a 'refresh'.
:-(
I'll re-post the patch shortly.

John
----
-
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to