forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-05-11 297b60346df8beafee954a0fd7c2d64f33f3b9bc
kernel/arch/x86/platform/uv/uv_time.c
....@@ -1,20 +1,8 @@
1
+// SPDX-License-Identifier: GPL-2.0-or-later
12 /*
23 * SGI RTC clock/timer routines.
34 *
4
- * This program is free software; you can redistribute it and/or modify
5
- * it under the terms of the GNU General Public License as published by
6
- * the Free Software Foundation; either version 2 of the License, or
7
- * (at your option) any later version.
8
- *
9
- * This program is distributed in the hope that it will be useful,
10
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
11
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
- * GNU General Public License for more details.
13
- *
14
- * You should have received a copy of the GNU General Public License
15
- * along with this program; if not, write to the Free Software
16
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
- *
5
+ * (C) Copyright 2020 Hewlett Packard Enterprise Development LP
186 * Copyright (c) 2009-2013 Silicon Graphics, Inc. All Rights Reserved.
197 * Copyright (c) Dimitri Sivanich
208 */
....@@ -65,7 +53,7 @@
6553 struct {
6654 int lcpu; /* systemwide logical cpu number */
6755 u64 expires; /* next timer expiration for this cpu */
68
- } cpu[1];
56
+ } cpu[];
6957 };
7058
7159 /*
....@@ -87,7 +75,6 @@
8775
8876 apicid = cpu_physical_id(cpu);
8977 pnode = uv_apicid_to_pnode(apicid);
90
- apicid |= uv_apicid_hibits;
9178 val = (1UL << UVH_IPI_INT_SEND_SHFT) |
9279 (apicid << UVH_IPI_INT_APIC_ID_SHFT) |
9380 (X86_PLATFORM_IPI_VECTOR << UVH_IPI_INT_VECTOR_SHFT);
....@@ -98,32 +85,23 @@
9885 /* Check for an RTC interrupt pending */
9986 static int uv_intr_pending(int pnode)
10087 {
101
- if (is_uv1_hub())
102
- return uv_read_global_mmr64(pnode, UVH_EVENT_OCCURRED0) &
103
- UV1H_EVENT_OCCURRED0_RTC1_MASK;
104
- else if (is_uvx_hub())
105
- return uv_read_global_mmr64(pnode, UVXH_EVENT_OCCURRED2) &
106
- UVXH_EVENT_OCCURRED2_RTC_1_MASK;
107
- return 0;
88
+ return uv_read_global_mmr64(pnode, UVH_EVENT_OCCURRED2) &
89
+ UVH_EVENT_OCCURRED2_RTC_1_MASK;
10890 }
10991
11092 /* Setup interrupt and return non-zero if early expiration occurred. */
11193 static int uv_setup_intr(int cpu, u64 expires)
11294 {
11395 u64 val;
114
- unsigned long apicid = cpu_physical_id(cpu) | uv_apicid_hibits;
96
+ unsigned long apicid = cpu_physical_id(cpu);
11597 int pnode = uv_cpu_to_pnode(cpu);
11698
11799 uv_write_global_mmr64(pnode, UVH_RTC1_INT_CONFIG,
118100 UVH_RTC1_INT_CONFIG_M_MASK);
119101 uv_write_global_mmr64(pnode, UVH_INT_CMPB, -1L);
120102
121
- if (is_uv1_hub())
122
- uv_write_global_mmr64(pnode, UVH_EVENT_OCCURRED0_ALIAS,
123
- UV1H_EVENT_OCCURRED0_RTC1_MASK);
124
- else
125
- uv_write_global_mmr64(pnode, UVXH_EVENT_OCCURRED2_ALIAS,
126
- UVXH_EVENT_OCCURRED2_RTC_1_MASK);
103
+ uv_write_global_mmr64(pnode, UVH_EVENT_OCCURRED2_ALIAS,
104
+ UVH_EVENT_OCCURRED2_RTC_1_MASK);
127105
128106 val = (X86_PLATFORM_IPI_VECTOR << UVH_RTC1_INT_CONFIG_VECTOR_SHFT) |
129107 ((u64)apicid << UVH_RTC1_INT_CONFIG_APIC_ID_SHFT);
....@@ -169,9 +147,8 @@
169147 struct uv_rtc_timer_head *head = blade_info[bid];
170148
171149 if (!head) {
172
- head = kmalloc_node(sizeof(struct uv_rtc_timer_head) +
173
- (uv_blade_nr_possible_cpus(bid) *
174
- 2 * sizeof(u64)),
150
+ head = kmalloc_node(struct_size(head, cpu,
151
+ uv_blade_nr_possible_cpus(bid)),
175152 GFP_KERNEL, nid);
176153 if (!head) {
177154 uv_rtc_deallocate_timers();